赞
踩
监控每个数据包并判断是否有相应的匹配策略规则,直到匹配到其中一条策略规则或执行默认策略为止,防火墙策略可以基于来源地址、请求动作或协议等信息来定制,最终仅让合法的用户请求流入到内网中,其余的均被丢弃
CentOS/redhat7已经默认使用firewalld作为防火墙,默认是开启的,基于iptables的防火墙默认不启用,但是可以继续使用
CentOS7/redhat7中有集中防火墙共存:firewalld、iptables、ebtablesd,默认使用发是firewalld作为防火墙,管理工具是firewalld
firewalld默认规则都是拒绝的,而iptables默认规则是允许,意味着firewalld需要在每个服务器上设置了才能放行,iptables不用开启,写入的防火墙策略规则也是生效的,只是下次重启服务器规则会失效。不重启服务器下执行service iptables save或iptables-save > /etc/sysconfig/iptables(防火墙规则永久生效),但前提是不重启服务器。在关闭iptables防火墙的前提下配置的iptables防火墙策略,不重启服务器,即使开启iptables防火墙服务配置也会生效。
在关闭iptables防火墙的前提下配置的iptables防火墙策略并保存即执行service iptables save或iptables-save > /etc/sysconfig/iptables后,写完防火墙策略后记得一定要保存,这时再开启iptables防火墙前面配置的iptables防火墙策略也是存在的,但是开启了iptables防火墙然后再关闭iptables防火墙,前面配置的iptables策略才会失效(丢失)或者是重启了服务器防火墙策略也会失效。
如果在关闭iptables防火墙的前提下配置的iptables防火墙策略,没有执行保存iptables防火墙策略命令即执行service iptables save或iptables-save > /etc/sysconfig/iptables,那么再开启iptables防火墙服务,前面配置的iptables防火墙策略将会部分丢失,关闭iptables防火墙,前面配置的策略将会全部失效(丢失)。
- 开启iptables防火墙命令
- systemctl start iptables
-
- 配置iptables防火墙开机自启
- systemctl enable iptables
-
- 关闭iptables防火墙命令
- systemctl stop iptables
-
- 配置iptables防火墙关闭开机自启
- systemctl disable iptables
-
-
- 查看防火墙状态
- systemctl status iptables
但是要注意写入的防火墙规则插入的地方,否则可能会出错,因为iptables防火墙的默认规则中,在INPUT链跟FORWARD链中,会有默认拒绝的规则,只不过是放在默认规则的最后面,如下
这时要注意当写防火墙规则的时候,如果添加允许的规则要使用-I(大写i)将规则添加到头部,而不是使用-A将规则放在尾部(即默认拒绝规则的后面),这时添加到尾部,允许的规则将不能生效,因为匹配到了前面那条默认拒绝的策略,给拒绝掉了,所以要将允许规则使用-I(大写i)参数放到规则的前面或者使用-l(小写l),插入到适当位置。
写入规则的时候还要注意看每个规则链是默认允许规则还是默认拒绝规则(可能改过默认规则),如果是默认拒绝,那就要写入允许的规则。如果是默认允许,就要写拒绝的规则。如下:INPUT链跟FORWARD链默认都是允许的
OUTPUT链默认是允许的,拒绝了1915个包(icmp拒绝(DROP)的包)
iptables默认规则是允许的规则,当写入防火墙规则的时候,可以使用-A参数(在所选择的链末添加一条或更多规则,链末尾新添加的防火墙规则会取代上一条链末尾插入的防火墙规则,以此类推)。但前提是原来的防火墙链末规则中没有那条拒绝所有的防火墙规则即iptables -A INPUT -p tcp -j DROP和没有你想写入的允许的那条规则的拒绝规则在原来的防火墙规则中,如果有可以先删除。然后要先写入或执行允许的规则,再写入或执行拒绝的规则(注意具体拒绝规则的先后顺序,牢记防火墙规则是自上而下进行匹配执行的)。
如下:
- iptables -A INPUT -s 10.3.45.127 -p tcp --dport 5888 -j ACCEPT
- iptables -A INPUT -s 127.0.0.1 -p tcp --dport 5888 -j ACCEPT
- iptables -A INPUT -s 10.3.45.128 -p tcp --dport 5888 -j DROP
- iptables -A INPUT -p TCP --dport 5888 -j REJECT或DROP
- service iptables save #保存防火墙规则使起永久生效,重启服务器防火墙规则还会生效
iptables默认规则是允许的规则,如果需要写入的都是拒绝的防火墙策略 ,也可以使用-A参数(在所选择的链末添加一条或更多规则,注意拒绝规则的先后顺序,牢记防火墙规则是自上而下进行匹配执行的)
iptables默认规则是允许的规则,如果使用-A参数(在所选择的链末添加一条或更多规则)怕整错,也可以将允许规则使用-I(大写i)参数放到规则的前面,然后使用-A参数将拒绝的规则放到所选择链的末尾,这样就不会出错,当然拒绝的规则也可以用-I(大写i)来写,但是得注意你防火墙规则的顺序(牢记防火墙规则是自上而下进行匹配执行的)。
如下:
- iptables -A INPUT -p ICMP --icmp-type timestamp-request -j DROP
- iptables -A INPUT -p ICMP --icmp-type timestamp-reply -j DROP
- iptables -A INPUT -p ICMP --icmp-type time-exceeded -j DROP
- iptables -A OUTPUT -p ICMP --icmp-type time-exceeded -j DROP
- 或
- iptables -I INPUT -p ICMP --icmp-type timestamp-request -j DROP
- iptables -I INPUT -p ICMP --icmp-type timestamp-reply -j DROP
- iptables -I INPUT -p ICMP --icmp-type time-exceeded -j DROP
- iptables -I OUTPUT -p ICMP --icmp-type time-exceeded -j DROP
iptables是一个软件,是用户用来传递参数的,它只是用户端的程序,实现给内核传递参数,真正起到防火墙作用的并不是iptables这个软件,而是内核中的netfilter模块。也就是说,防火墙中的包过滤机制是netfilter模块(内核态),管理工具是iptables(用户态)
iptables和netfilter具体存放位置
- cd /lib/modules/3.10.0-957.el7.x86_64/kernel/net/netfilter/ #内核的具体位置
-
- vi /sbin/iptables #iptables的具体位置
规则表具有某一类似用途的防火墙规则,按照不同处理时机区分到不同的规则链以后,被归置到不同的表中,规则表是规则链的集合
默认的4个规则表
raw表:控制nat表中连接追踪机制的启用状况,可控制的链路有(PREROUTING、OUTPUT)
mangle:为数据包设置标记(可控制的链路有INPUT、OUTPUT、FORWARD、POSTROUTING、PREROUTING)
nat:控制数据包中地址转换,修改数据包中的源、目标IP地址或端口 (可控制的链路有PREROUTING、OUTPUT、POSTROUTING)
filter:控制数据包是否允许进出及转发,确定是否放行该数据包(过滤)(可控制的链路有:INPUT、OUTPUT、FORWARD)
注意!!!iptables默认的表就是filter表,如果要指定其他表则需要使用命令单独指定。即-t 指操作的表,filter、nat、mangle、raw,不指定默认使用的是filter表
如果记不住规则表跟规则链的关系,可以通过命令查看
- iptables -t raw -L
- iptables -t mangle -L
- iptables -t nat -L
- iptables -t filter -L
1.防火墙是由上而下读取策略规则,匹配到合适的会立即执行并结束后面的规则匹配
2.防火墙规则一是通,二是赌,当防火墙设置的默认策略是拒绝时,则就要先设置允许规则,否则谁都进不来,当默认规则是允许,则要设置拒绝规则,否则谁都能进来
3.规则链分类:
路由选择前处理数据包即修改到来的包(PREROUTING),处理流入的数据包即处理进入的包(INPUT),处理流出的数据包即处理本地生成的包(OUTPUT),处理转发的数据包即处理通 过的包(FORWARD),进行路由选择后的数据即修改路由之前本地的包(POSTROUTING)
规则链间的匹配顺序:
入站数据:PREROUTING、INPUT
出战数据:OUTPUT、POSTROUTING
转发数据:PREROUTING、FORWARD、POSTROUTING
规则链内的匹配顺序:
按顺序依次进行检查,找到相匹配的规则即停止(LOG策略会有例外),若在该链内找不到相匹配的规则,则按该链的默认策略处理
一般我们是在INPUT链和PREROUTING链中设置规则,如果防火墙范围较广,在PREROUTING前面拦住,如果范围较小就在INPUT前面
4.防火墙规则匹配动作:
允许(ACCEPT)允许流量通过,登记(LOG)记录日志信息,拒绝(REJECT)拒绝流量通过,不理他(DROP)拒绝流量通过
拒绝(REJECT)拒绝流量通过:会回复对方一条"您的信息我已收到,但被我扔掉了",对方可清晰看到数据被拒绝的响应
不理他(DROP)拒绝流量通过:直接把数据包丢弃不响应。对方看到本机响应超时提醒,无法判断流量被拒绝还是主机不在线
iptables命令可以根据数据流量的源地址、目的地址、传输协议、服务类型等信息项进行匹配,一旦数据包与策略匹配上,iptables会根据策略所预设的动作处理这些数据流量包
注意!!1防火墙策略匹配规则是从上至下,一定要把严格,优先级较高的策略放到靠前的位置
当设置默认防火墙规则是拒绝时只能使用DROP而不能使用REJIECT
参数 | 作用 |
-P | 设置默认策略:iptables -P INPUT (DROP|ACCEPT) |
-F | 清空规则链 |
-L | 查看规则链 |
-A | 在规则链末尾加入新规则、或指定链名 |
-l | 在规则链中间添加新规则(iptables -I chain [rulenum] firewall-rule)将firewall-rule添加为chain中的第rulenum条规则,原先的第rulenum条及以后各条的需要顺次+1,默认为1,即,如果没有指定rulenum则将该chain中第一条规则替换掉 |
-I num | 在规则链的头部加入新规则 |
-D num | 删除某一条规则 |
-s | 匹配来源地址IP/MASK,加叹号“!”表示除这个IP外 |
-d | 匹配目标地址 |
-i网卡名称 | 匹配这块网卡流入的数据 |
-o网卡名称 | 匹配这块网卡流出的数据 |
-p | 匹配协议,如tcp,udp,icmp |
--dport num | 匹配目标端口 |
--sport num | 匹配来源端口 |
-t | 指操作的表,filter、nat、mangle、raw,不指定默认使用的是filter表 |
- iptables [-t table] COMMAND [chain] CRETIRIA -j ACTION #iptables语法格式
- 即
- iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 目标动作或跳转]
-
- iptables -t nat -A POSTROUTING -s 173.22.90.0/24 ! -d 173.22.90.0/24 -j SNAT --to-source 192.168.1.107
-
-
- -t table #是指操作的表,filter、nat、mangle或raw, 默认使用filter
- COMMAND #指命令,定义对规则的管理
- chain #指明链路
- CRETIRAI #匹配的条件或准则
- ACTION #操作动作
-
- 不知道表名时,默认为filter表
- 不指定链名时,默认为表内所有链
- 除非设置规则链的缺省策略,否则需要指定匹配策略
1.icmp:使用到ping命令检查主机是否在线,向防火墙INPUT链中添加一条允许icmp协议数据包流入的策略就是默认允许了这种ping命令检查行为
iptables -I INPUT -p icmp -j ACCEPT
2.删除INPUT链中的那条策略,并把默认策略还原为允许
- iptables -nL INPUT --line-number #查看INPUT链的防火墙规则,并输出规则编号
- 或
- iptables -nvL INPUT --line-number #查看INPUT链的防火墙规则,并输出规则编号
-
- iptables -D INPUT 防火墙规则编号 #输入INPUT链的防火墙规则编号,然后进行删除
-
- iptables -D INPUT 2-16 #如果需要批量删除,可以使用 -D 和数字区间
-
- iptables -P INPUT ACCEPT #把默认策略还原为允许
-
- iptables -L #查看防火墙规则
3.设置INPUT链只允许指定网段访问本机的22端口,拒绝其他所有主机数据请求流量,一定要记得把允许的动作放到拒绝动作的上面,否则所有流量会先拒绝掉。如下先设置指定IP允许访问本机22端口,再设置其他IP拒绝访问本机22端口。
- iptables -I INPUT -s 192.168.0.0/24 -p tcp --dport 22 -j ACCEPT #设置指定IP访问本机22端口
- 或
- iptables -A INPUT -s 192.168.0.0/24 -p tcp --dport 22 -j ACCEPT #设置指定IP访问本机22端口
-
- iptables -A INPUT -p tcp --dport 22 -j ACCEPT #再设置其他IP拒绝访问本机22端口
-
- iptables -L #查看itables规则
4.向INPUT链中添加拒绝所有人访问本机12345端口的防火墙策略,编写的策略要放到规则链的头部,防止头部之前写的有允许某个网段可以访问本机12345端口,所以把拒绝所有IP访问本12345端口策略放在头部,这样就可以拒绝所有IP
- iptables -I INPUT -p tcp --dport 12345 -j DROP
- iptables -I INPUT -p udp --dport 12345 -j DROP
5.向INPUT链中添加拒绝来自于指定192.168.124.3主机访问本机80端口(web服务)的防火墙策略
- iptables -I INPUT -s 192.168.124.5 -p tcp --dport 80 -j DROP
-
- iptables -L
6.向INPUT链中添加拒绝所有主机不能访问1000-1050端口的防火墙策略,这个规则可以添加到规则链末尾,因为可能前面有写允许某个IP或者网段允许访问1000-1050这个区间的端口,如果放到规则链头部可能会出问题。如果就是想要所有的ip都不能访问1000-1050的端口,可以放在头部
- iptables -A INPUT -p tcp --dport 1000:1050 -j DROP
- iptables -A INPUT -p udp --dport 1000:1050 -j DROP
注意!!!iptables命令配置防火墙规则默认会在下一次重启时失效,想要让配置防火墙策略永久生效,可以执行如下命令
- service iptables save
- 或
- iptables-save > /etc/sysconfig/iptables
必须用-m option选项指定扩展匹配类型,常见的有一下几种
下面这个显示的是指定扩展匹配类型为tcp协议
- iptables -t filter -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
- iptables -t filter -A OUTPUT -p tcp -m tcp --sport 22 -j ACCEPT
1.multiport
以离散或连续的方式定义多个端口匹配条件,最多15个
- --source-ports,--sports port,port,port...... #指定多个不连续源端口
-
- --source-ports,--sports port:port #指定多个连续源端口
-
-
- --destination-ports,--dports port,port,port...... #指定多个不连续目标端口
- --destination-ports,--dports port:port #指定多个连续目标端口
-
-
- iptables -I INPUT -d 172.16.0.7 -p tcp -m multiport --dports 22,80,139,445,3306 -j ACCEPT #在INPUT链中,所有源IP都能访问172.16.0.7目的IP的22,80,139,445,3306端口
2.iprange
以连续地址块方式指明IP地址匹配条件
- --src-range from[-to]
-
- --dst-range from[-to]
-
- iptables -I INPUT -d 172.16.0.7 -p tcp -m multiport --dports 22,80,139,445,3306 -m iprange --src-range 172.16.0.61-172.16.0.70 -j REJECT #拒绝源地址172.16.0.61-172.16.0.70访问目的地址172.16.0.7的22,80,139,455,3306端口
-
- iptables -A INPUT -m iprange --src-range 服务器IP范围 -j ACCEPT
- iptables -A INPUT -p tcp --dport 22 -j DROP
iptables防火墙规则示例:
- iptables -I INPUT -s 本机地址 -p tcp --dport 22 -j ACCEPT ##允许本机访问sshd服务
-
- iptables -I INPUT -m iprange --src-range 192.168.2.12-192.168.2.100 -p tcp --dport 8080 -j ACCEPT ##允许ip地址段访问本机8080端口
-
- iptables -I INPUT -s 192.168.2.13 -p tcp --dport 3306 -j ACCEPT #允许访问指定两台机器访问mysql服务
- iptables -I INPUT -s 192.168.2.14 -p tcp --dport 3306 -j ACCEPT #允许访问指定两台机器访问mysql服务
-
- iptables -I INPUT -p tcp --dport 80 -j ACCEPT #80端口允许所有人访问
-
- iptables -I INPUT -p icmp --icmp-type 8 -j ACCEPT #允许所有人ping服务器
-
- iptables -I INPUT -p icmp --icmp-type 8 -j LOG #将ping本机的信息记录到日志文件
-
- iptables -P INPUT DROP #设置默认规则为DROP
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。