iptables 修改防火墙配置

1.Netfileter/iptables(以下简称iptables)防火墙简介3

2.iptables四表五链介绍3

2.1表、链、规则之间的关系 3

2.2iptables表的介绍 3

2.3规则链介绍 4

2.4规则链之间的优先顺序 5

3. 管理和设置iptables5

3.1IPTABLES基本语法格式 5

3.2IPTABLES管理命令的管理控制选项 6

3.3防火墙处理包的方式 6

3.4IPTABLES防火墙规则的保存与恢复 6

3.5匹配规则 7

4.实际操作7

4.1拒绝进入防火墙的所有ICMP数据包 7

4.2添加允许防火墙转发出icmp协议以外的所有数据包 7

4.3拒绝转发来自192.168.1.10主机信息,石材翻新13825404095允许转发来自192.168.0.0/24网段的数据 7

4.4丢弃从外网接口进入防火墙本机的源地址为私网地址的数据包 8

4.5封堵网段172.16.0.0/12 2分钟后候解封 8

4.6只允许管理员从172.16.0.0/12使用远程登陆防火墙主机 9

4.7允许本机开放的端口从TCP端口20-1024提供的应用服务 9

4.8允许转发来自172.16.0.0/12局域网段的DNS请求数据包 10

4.9禁止其他主机ping防火墙主机,但允许从防火墙上ping其他主机 10

4.10禁止转发来自MAC地址和主机的数据包 11

4.11允许防火墙对外开放TCP端口20、21、25、110以及被动模式FTP端口1250-1280 11

4.12禁止转发源IP地址为192.168.1.20-192.168.1.99的TCP数据包 11

4.13禁止转发与正常TCP连接无关的非--syn请求的数据包 12

4.14拒绝访问防火墙新数据包,但允许相应连接或已有连接相关数据包 12

4.15只开放本机WEB服务(80),FTP(20.21.20450-20480),放行外部主机主机发往服务器其他端口的应答数据包,将其他入站数据包均予以丢弃处理 13

5.错误记录13

5.1添加允许防火墙转发除icmp协议以外的所有数据包 13

1.Netfileter/iptables(以下简称iptables)防火墙简介

unix/linux自带的开源,且基于包过滤的防火墙工具

可对流入和流出服务器的数据包进行控制

可在低配的硬件上运行

是Linux2.4及2.6内核中集成的服务

在OSI七层的二、三、四层上工作

iptables是防火墙的管理工具,位于/sbin/iptables,真正实现功能的是netfilter,他是Linux内核中实现包过滤的内部结构

iptables包含四个表5个链,其中表是按照对应数据包的操作区分的,链是按照不同的HOOK点来区分的,表和链实际上是neifilter的两个维度

2.iptables四表五链介绍

2.1表、链、规则之间的关系

表(table)

iptables是表的容器,iptables包含的各个表

链(chains)

Iptables表是链的容器

INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING

规则(Policy)

链是规则的容器

2.2iptables表的介绍

1.filter表(是iptables默认使用的表)

作用:过滤流经主机的数据包

内核模块:Iptables_filter

规则链

INPUT

FORWARD

OUTPUT

2.nat表

作用:

负责网络地址转换,即来源与目的IP地址和port的转换;

和主机本身没有关系,一般用于局域网或者特殊的端口转换服务相关;

nat功能相当于网络的ACL控制,和网络交换机的ACL类似.

内核模块:iptables_nat

规则链:

OUTPUT

PREROUTING

POSTROUTING

3.Mangle表(基本用不倒)

作用:

修改数据包的服务类型、TTL;

可以配置路由实现QOS内核模块

内核模块:iptables_mangle

规则链:

PERROUTING

POSTROUTING

INPUT

OUTPUT

FORWARD

4.Raw表(RHEL4没有此表)

作用:决定数据包是否被状态处理机制处理

内核模块:iptables_raw

规则链:

OUTPUT

PREROUTING

注意:表的处理优先级:Raw>mangle>nat>filter

2.3规则链介绍

INPUT:用来过滤目标地址是主机地址的数据包

OUTPUT:处理源地址是本机地址的数据包

PREROUTING:数据包到达防火墙时进行路由判断之前执行的规则,作用是改变数据包的目的地址和目的端口等

POSTROUTING:在数据包离开防火墙时进行路由判断之后执行的规则,作用是改变数据包源地址,源端口,例如:我们现在的笔记本和虚拟机都是192.168.30.0/24,在出网的时候被我们的企业路由器把源地址改为了公网地址,主要应用在局域网共享上网

FORWARD:负责转发主机数据包,和NAT关系很大。LVS NAT模式,net.ipv4_forward=1

2.4规则链之间的优先顺序

2.4.1第一种情况

入站数据流向

从外界达到防火墙的数据包,先被PREROUTING规则链处理(是否修改数据包地址);

之后进行路由选择(判断数据包应该发往何处),如果数据包的目标主机是防火墙本机(例如Internet用户访问防火墙主机中的web服务器的数据包),那么内核将其转给INPUT链进行处理(决定那个是否能够通过);

通过以后再交给系统上层的应用程序(例如Apache服务器)进行响应

2.4.2第二种情况

转发数据流向

来自外界的数据包到达防火墙之后,先被PREROUTING规则连处理;

之后进行路由选择,如果数据包的目标地址是其他外部地址(比如局域网用户通过网关访问QQ站点的数据包),则内核将其传递给FORWARD链进行处理,(是否转发或拦截);

然后再交给POSTROUTING规则链(是否修改数据包的地址)进行处理

2.4.3第三种情况

出站数据流向

防火墙本机想外部地址发送数据包(比如说在防火墙本机中测试公网DNS服务器时),首先被OUTPUT规格链处理;

之后进行路由选择,然后在传递给POSTROUTING规则连(是否修改数据包源地址等)进行处理

管理和设置iptables

3.1IPTABLES基本语法格式

Iptables[-t 表名] 命令选项 [链名]  [条件匹配] [ -j 目标动作和跳转]

说明:

表名,链名用于指定iptables命令所操作的表和链

命令选项:用于指定管理iptables规则的方式(如:插入、增加、删除、查看)

目标动作和跳转:用于指定数据包的处理方式(如:通过、拒绝、丢弃、跳转给其他的链处理)

3.2IPTABLES管理命令的管理控制选项

-A(append):在指定的链的末尾添加一条新的规则

-D(delete):指定链中的某一条规则,可以按规则序号和内容删除

-I(insert):在指定链中插入一条新的规则,默认在第一行添加

-R(replace):修改、替换指定链中的某一条规则,可以按照序号和内容进行替换

-L(list):指定链中所有的规则进行查看

-F(flush):清空所有的规则

-N(new-chain):一条用户自己定义的规则链

-X(delete-chain):删除指定表中用户自定义的规则链

-P(policy):设置指定链的默认策略

-N(numeric):使用数字显示输出结果

-V(version):查看版本

-h(help):获取帮助

3.3防火墙处理包的方式

ACCEPT:允许数据包通过

DROP:直接丢弃数据包,不给任何回应消息

REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息

LOG在/var/log/message文件中记录日志信息,然后将数据包传递给下条规则

3.4IPTABLES防火墙规则的保存与恢复

3.4.1原理:

Iptables-save把规则保存到文件中,再由目录rc.d下的脚本(/etc/rc.d/init.d/iptables)自动装载

3.4.2保存规则的方法

第一种

使用Iptables-save来保存

Iptables-save > /etc/sysconfig/iptables   //来生成保存规则的文件

第二种:

使用service iptables save  //他能把规则自动保存在/etc/sysconfig/iptables中

当计算机启动时,rc.d下的脚本将用命令iptables-restore调用这个文件,从而就自动恢复了规则

3.5匹配规则

a)规则从上往下匹配,只要匹配到就不往下匹配,如果没有匹配上就走默认规则

b)防火墙是层层过滤的,实际上是按照配置规则的顺序从上到下,从前到后进行匹配的

c)如果匹配上规则,则明确表明是阻止还是通过,数据包就不在匹配新的规则

d)如果所有规则中没有明确表明是阻止还是通过,也就是没有匹配规则,向下进行匹配,直到匹配默认得到明确的阻止还是通过

e)防火墙默认规则是对应链的所有规则执行完成后才会执行的

4.实际操作

4.1拒绝进入防火墙的所有ICMP数据包

命令:[root@localhost sysconfig]# iptables -I INPUT -p icmp -j REJECT

4.2添加允许防火墙转发出icmp协议以外的所有数据包

[root@localhost sysconfig]# iptables -A FORWARD  ! -p icmp -j ACCEPT

4.3拒绝转发来自192.168.1.10主机信息,允许转发来自192.168.0.0/24网段的数据

-s:指定源地址

命令:[root@localhost sysconfig]# iptables -I FORWARD -s 192.168.1.10 -j REJECT

命令:[root@localhost ~]# iptables -A FORWARD -s 192.168.0.0/24 -j ACCEPT

4.4丢弃从外网接口进入防火墙本机的源地址为私网地址的数据包

-i:指定网卡

命令:

[root@localhost ~]# iptables -A INPUT -i eth0 -s 192.168.0.0/16 -j DROP

[root@localhost ~]# iptables -A INPUT -i eth0 -s 10.0.0.0/8 -j DROP

[root@localhost ~]# iptables -A INPUT -i eht0 -s 172.16.0.0/12 -j DROP

4.5封堵网段172.16.0.0/12 2分钟后候解封

命令:

[root@localhost Desktop]# iptables -A INPUT -s 172.16.0.0/12 -j DROP

[root@localhost Desktop]# at now +2 minutes

at> iptables -D INPUT 1

at> <EOT>

job 5 at 2018-10-03 12:58

4.6只允许管理员从172.16.0.0/12使用远程登陆防火墙主机

命令:

[root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -s 172.16.0.0/12 -j ACCEPT  //只允许源172.16.0.0/12的地址的22端口的tcp协议进入

[root@localhost ~]# iptables -A INPUT -p tcp --dport 22 -j DROP                 //丢弃端口22的TCP协议

4.7允许本机开放的端口从TCP端口20-1024提供的应用服务

命令:

[root@localhost ~]# iptables -A INPUT -p tcp --dport 20:1024 -j ACCEPT      //在入站链中添加本机允许TCP20-1024端口进入的

[root@localhost ~]# iptables -A OUTPUT -p tcp --sport 20:1024 -j ACCEPT    //在出站链中添加的本机允许TCP20-1024端口出去

!!!此处特别注意:

对于INPUT链dsport指的是本地的端口

对于OUTPUT链sport指的是本地的端口

4.8允许转发来自172.16.0.0/12局域网段的DNS请求数据包

命令:

[root@localhost ~]# iptables -A FORWARD -s 172.16.1.20 -p udp --sport 53 -j ACCEPT

[root@localhost ~]# iptables -A FORWARD -d 172.16.1.20 -p udp --dport 53 -j ACCEPT

4.9禁止其他主机ping防火墙主机,但允许从防火墙上ping其他主机

命令:

[root@localhost ~]# iptables -I INPUT -p icmp --icmp-type Echo-Request -j DROP

[root@localhost ~]# iptables -I INPUT -p icmp --icmp-type Echo-Reply -j ACCEPT

[root@localhost ~]# iptables -I INPUT -p icmp --icmp-type destination-Unreachable -j ACCEPT

4.10禁止转发来自MAC地址和主机的数据包

命令:

[root@localhost ~]# iptables -I INPUT -m mac --mac-source 80:18:44:DF:F6:81 -j DROP

说明:iptables中使用‘-m 模块关键字’的形式调用显示匹配。咱们这里用‘-m mac -mac-source’来表示数据包的源MAC地址

4.11允许防火墙对外开放TCP端口20、21、25、110以及被动模式FTP端口1250-1280

命令:

[root@localhost ~]# iptables -A INPUT -p tcp -m multiport --dport 20,21,25,110,1250:1280 -j ACCEPT

说明:这里使用‘ -m multiport --dport ’来指定目的端口及范围

4.12禁止转发源IP地址为192.168.1.20-192.168.1.99的TCP数据包

命令:

[root@localhost ~]# iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP

说明:此处用‘ -m iprange --src-range’来指定IP地址的范围

4.13禁止转发与正常TCP连接无关的非--syn请求的数据包

命令:

[root@localhost ~]# iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP

说明:‘-m state’表明数据包的连接状态,‘NEW’表示与任何连接无关的

4.14拒绝访问防火墙新数据包,但允许相应连接或已有连接相关数据包

命令:

[root@localhost ~]# iptables -A INPUT -p tcp -m state --state NEW -j DROP //丢弃新建的TCP连接

[root@localhost ~]# iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT //接受已经建立的连接

说明:

‘ ESTABLISHED’表示已经响应或者已经建立连接的数据包,‘RELATED’表示与建立连接有相关性的连接

4.15只开放本机WEB服务(80),FTP(20.21.20450-20480),放行外部主机主机发往服务器其他端口的应答数据包,将其他入站数据包均予以丢弃处理

命令:

[root@localhost ~]# iptables -I INPUT -p tcp -m multiport --dport 20,21,80 -j ACCEPT //允许接受20.21.80端口

[root@localhost ~]# iptables -I INPUT -p tcp --dport 20450:20480 -j ACCEPT //允许接受20450到20480端口

[root@localhost ~]# iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT //接受已响应连接和已建立连接

[root@localhost ~]# iptables -P INPUT DROP //为INPUT链建立默认规则,入站数据包全部丢弃

5.错误记录

5.1添加允许防火墙转发除icmp协议以外的所有数据包

解决:虽然会报错但是添加规则的命令还是会被执行,报错信息显示”Using intrapositioned negation is deprecated (` --option ! this`)”使用内部缺陷,属于BUG问题,”in favor of extrapositioned (` ! --option this`)”表是支持的方式为 ! --option this 这样就可以解决此报错问题

Using intrapositioned negation (`--option ! this`) is deprecated in favor of extrapositioned (`! --option this`).

Intrapositioned 内陷的

Negation      否定

Deprecated    贬低

Extrapositioned  外置 外部转换

2025-08-19 19:14 点击量:7