iptables

添加规则的两个常用选项:
-A,在末尾追加规则。
-I,在指定位置前插入规则。如果不指定,则在首行插入
添加新的防火墙规则时,使用管理选项“-A”、“-I”,前者用来追加规则,后者用来插入规则。
例如,若要在 filter 表 INPUT 链的末尾添加一条防火墙规则,可以执行以下操作(其中 “-p 协议名”作为匹配条件)。

[root@localhost ~]# iptables -F #清空规则
如果不写表名和链名,默认清空filter表中所有链里的所有规则

[root@localhost ~]# iptables -t filter -A INPUT -p icmp -j REJECT #禁止所有主机ping本机
[root@localhost ~]# iptables -t filter -A INPUT -p icmp -j ACCEPT #允许ping通,-A在前一条规则后添加
#匹配到了就不在匹配后面的规则
[root@localhost ~]# iptables -t filter -I INPUT 1 -p icmp -j ACCEPT #指定序号插入,插入到第一条
#即时生效
[root@localhost ~]# iptables -t filter -A INPUT -p tcp -j REJECT   #禁止任何主机tcp
[root@localhost ~]# iptables -I INPUT 1 -p udp -j ACCEPT        #允许任何主机udp
[root@localhost ~]# iptables  -nL  --line-number  #查看行规则的位置
#拒绝某一台主机,其他的可以:
[root@localhost ~]# iptables -t filter -A INPUT -s 192.168.233.22 -p icmp -j REJECT
#拒绝多台主机:
[root@localhost ~]# iptables -t filter -A INPUT -s 192.168.233.22,192.168.233.23 -p icmp -j REJECT


#不允许21的数据包出去,其他的就都ping不通了
[root@localhost ~]# iptables -t filter -A OUTPUT -s 192.168.233.21 -p icmp -j REJECT

#指定端口:
[root@localhost ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j REJECT
#协议在前,指定端口号在后,否则识别不了端口,无法匹配就会报错!

[root@localhost ~]# iptables -t filter -A INPUT -s 192.168.233.22 -p tcp --dport 22 -j REJECT
#指定IP地址的服务端口拒绝

[root@localhost ~]# iptables -t filter -A INPUT --dport 22 -p tcp -j REJECT #错误的写法
iptables v1.4.21: unknown option "--dport"
Try `iptables -h' or 'iptables --help' for more information.


练习,写一个禁止192.168.233.22:80的端口入访问:
[root@localhost ~]# iptables -t filter -A INPUT -p tcp --dport 80 -j REJECT
[root@localhost ~]# iptables -t filter -A INPUT -s 192.168.233.22 -p tcp --dport 80 -j REJECT


删除规则 
D删除  :
1.根据序号删除内容
[root@localhost ~]# iptables -D INPUT 1 #删除指定的INPUT链中的第一条规则

2、内容匹配删除(有两个相同的则作用为去重) 如果有两个重复的规则,则删除序号较小的
[root@localhost ~]# iptables -D INPUT -p icmp  -j REJECT #删除序号小的
演示删除序号较小的
[root@localhost ~]# iptables -t filter -A INPUT -p icmp -j REJECT
[root@localhost ~]# iptables -t filter -A INPUT -p icmp -j ACCEPT
[root@localhost ~]# iptables -t filter -A INPUT -p icmp -j REJECT

[root@localhost ~]# iptables -nL INPUT --line-number
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    REJECT     icmp --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
[root@localhost ~]# iptables -D INPUT -p icmp  -j REJECT #第二次就时删除指定。
[root@localhost ~]# iptables -nL INPUT --line-numbers 
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0      

注意:按照内容匹配删除规则,只能每次删除内容相同序号较小的规则。
直到删除最后一条时,才能将该规则全部清除 。
一定要报保证该匹配的内容存在,且完全匹配规则才能删除,不然报错。


修改规则 (不推荐使用)
-R 直接修改。
为了保险起见,我们可以尝试着先添加一条新的规则,
确保新规则不会带来任何不利的影响再删除旧的规则(也能达到替换的效果)

[root@localhost ~]# iptables -t filter -A INPUT -p icmp -j ACCEPT

[root@localhost ~]# iptables -nL INPUT --line-number  #查看规则
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0    
       
[root@localhost ~]# iptables -R INPUT 1 -p icmp -j REJECT #替换
[root@localhost ~]# iptables -nL INPUT --line-number  #ACCEPT替换成了REJECT
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    REJECT     icmp --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

修改默认规则:
默认策略是指四表五链中链的默认策略,INPUT,FORWARD,OUTPUT,filter三条链的默认值为ACCEPT
就像是设定黑名单一样,默认其他的协议操作都是允许的,只有指定加入的且声明权限的为(DROP 或 REJECT)
是拒绝禁止的对象。

[root@localhost ~]#iptables -P INPUT DROP   
[root@localhost ~]# iptables -t filter -A INPUT -p ICMP -j ACCEPT #在主机配置一条允许的,
相当与设置了白名单

1.-F 仅仅是清空链中的规则,并不影响 -P 设置的规则,默认规则需要手动进行修改
2.-P 设置了DROP后,使用 -F 一定要小心!
#防止把允许远程连接的相关规则清除后导致无法远程连接主机,此情况如果没有保存规则可重启主机解决

此时的解决方案有三种:
第一种:我的防火墙设置只是临时设置,并为保存,重启服务器即可

第二种:操作服务器,重启iptables服务 

第三种:进入机房操作该服务器(将设置恢复,重新修改规则)炸!

在生产中都是默认DROP

通用匹配:
网络协议、IP地址、网络接口等条件。
协议匹配: -p协议名
地址匹配: -s 源地址、-d目的地址
#可以是IP、网段、域名、空(任何地址)
接口匹配: -i入站网卡、-o出站网卡  
感叹号”!”表示取反

网络协议:
[root@localhost ~]# iptables -A INPUT ! -p icmp -j ACCEPT  #除了icmp以外,所有的协议都可以进入
#这是假的取反。定义的默认策略还在执行ACCEPT,只有该变默认策略,才能生效
[root@localhost ~]#iptables -P INPUT DROP #这时候才能取反
#其他的服务不受影响,这个时候,把策略清空,所有的协议都将被DROP
[root@localhost ~]#iptables -F 
#只能进虚拟机重启

IP地址:
[root@localhost ~]# iptables -A INPUT -s 192.168.233.22 -j DROP   #禁止22的数据进入
网络接口:
[root@localhost ~]# iptables -I INPUT 1 -i ens33 -s 192.168.233.0/24 -j DROP #禁止指定的网络设备名称ens33的所有网段

#怎么使整个网段不能用指定的端口
[root@localhost ~]# iptables -t filter -A INPUT -s 192.168.233.0/24 -p tcp --dport 80 -j REJECT #禁止整个网段访问80端口

 
隐藏扩展模块
iptables在使用-p 指定协议时,若指明特定协议后就无须再使用-m指明扩展模块的扩展机制。
例如若已经指明是 -p tcp协议则使用--dport及--sport等tcp模块内容时即可省略-m tcp。

端口匹配:
[root@localhost ~]# iptables -A INPUT -p tcp --dport 22:80 -j REJECT #禁止整个网段访问22和80端口
#这里写发要注意,小的数字写在前面,大的写在后面

[root@localhost ~]# iptables -A INPUT -p tcp --dport 80:22 -j REJECT #大的在前,小的在后,报错
iptables v1.4.21: invalid portrange (min > max)
Try `iptables -h' or 'iptables --help' for more information.


ICMP模块
ICMP类型可以是字符串、数字代码:

ICMP类型                                      含义
Echo-Request (代码为8)                    表示请求
Echo--Reply (代码为0)                        表示回显 #回复信息显示
Dest ination-Unreachable (代码为3)        表示目标不可达

[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 8 -j REJECT   #拒绝请求 其他的主机都不能ping本机,本机还是可以ping其他主机

[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 0 -j REJECT   #拒绝回显,本机ping不了其他的主机,且没有任何显示
#其他的主机还是ping通本机,因为出入的数据并没有被屏蔽,只针对自己。

[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT   ##当本机ping 不通其它主机时提示目标不可达,需要其他主机设置REJECT
在23上设置拒绝,才能生效,了解即可
[root@localhost ~]# iptables -A INPUT -s 192.168.233.21 -p icmp -j REJECT

显示匹配:
1、多端口匹配
要求以“-m 扩展模块”的形式明确指出类型,包括多端口、MAC地址、IP范围、数据包状态等条件
-m multiport --sport 源端口列表
-m multiport --dport 目的端口列表
[root@localhost ~]# iptables -A INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j REJECT
多端口匹配,一次性禁止多个tcp网络协议的端口匹配规则

[root@localhost ~]# iptables -A INPUT -p udp -m multiport --dport 53,54,55 -j ACCEP
多端口匹配,一次性放通多个udp网络协议的端口匹配规则

2、IP范围匹配
-m iprange --src-range  源IP范围
-m iprange --dst-range  目的IP范围
[root@localhost ~]# iptables -A INPUT -p icmp -m iprange --src-range 192.168.233.20-192.168.233.30 -j REJECT
#禁止网段内的ip地址ping主机


3、MAC匹配
该方式范围过于有限,且操作不方便,用的不多,了解即可
-m mac --mac-source MAC地址
[root@localhost ~]# iptables -A INPUT -m mac --mac-source 00:0c:29:f7:24:38 -j DROP


备份与还原iptables规则设置

yum -y install iptables iptables-services
systemctl start iptables.service
systemctl enable iptables.service

我们对iptables命令行中的设置,都是临时设置,只要遇到服务器关机,或者服务重启时,
所有的设置都会清空且还原为原本的设置。
为此,我们可以对已经测试完毕符合我们需求的防火墙设置进行备份,在必要时,可以一键还原

备份iptables设置
格式:iptables-save >/指定的文件 
[root@localhost ~]# iptables-save >/opt/iptables.bak


一键导入,设置为当前防火墙设置 
[root@localhost ~]#iptables-restore </opt/iptables.bak 

修改iptables的默认设置 
iptables的默认配置文件存在于     cat /etc/sysconfig/iptables

直接把配置导入配置文件:cat /opt/iptables.bak >/etc/sysconfig/iptables
#立即生效了,实验环境下,了解就可以了。不要尝试

[root@localhost opt]# systemctl restart iptables #重启之后生效的就是配置文件中的内容,操作需谨慎,
注意拍快照,方便还原

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值