主要工作在网络层,针对IP数据包,体现在对包内的IP地址、端口、协议(主要针对tcp协议)等信息的处理。
iptables由四个表table和五个链chain以及一些规则组成(SELinux也是一个表,但它是独立的,不在我们讨论的范围内)
四表:raw、mangle、nat、filter
优先级由高到低的顺序为:
security -->raw-->mangle-->nat-->filter
五链:
FORWARD:处理数据包转发到其他主机的规则。
表里面有链,链里面有规则,规则就是我们自定义的对于包的控制命令
根据表的优先级匹配,在表中从上到下 进行检查,找到匹配规则立即停止,不再继续查找,如破i配不到,按照链的默认规则处理
iptable [-t表名](不指定表名,默认就是filter表) 管理选项[链名] [匹配条件] [-j 控制类型]
管理选项 | 用法 |
---|---|
-A | 在指定链末尾追加一条 |
-I | 在指定链中插入一条新的,可以指定序号,-I后跟数字表示序号 |
-P | 修改链的默认策略 |
-D | 删除 |
--line-numbers | 规则带编号 |
-R | 修改、替换某一条规则(修改一般不用) |
-L | 查看链中规则 |
-F | 清空链中所有规则(!!!慎用) |
-n | 所有字段以数字形式显示 |
-v | 查看时显示更详细信息,常跟-L一起使用 (查看) |
-X | 清空自定义链的规则,不影响其他链 |
-Z | 清空链的计数器(匹配到的数据包的大小和总和) |
-S | 看链的所有规则或者某个链的规则/某个具体规则后面跟编号 |
匹配的条件 | 作用 |
---|---|
-p | 指定要匹配的数据包的协议类型 |
-s | 指定要匹配的数据包的源IP地址(指定多个ip用“ ,”隔开,加在协议前) |
-d | 指定要匹配的数据包的目的IP地 |
-i | 指定数据包进入本机的网络接口 |
-o | 指定数据包离开本机做使用的网络接口 |
--sport | 指定源端口号(指定多个端口用” :”隔开,加在协议后,注意小端口号在前) |
--dport | 指定目的端口号 |
类型 | 作用 |
---|---|
ACCEPT | 允许数据包通过 |
DROP | 直接丢弃数据包,不给出任何回应信息 |
REJECT | 拒绝数据包通过,必要时会给数据发送端一个响应信息 |
SNAT | 修改数据包的源IP地址 |
DNAT | 修改数据包的目的IP地址 |
CentOS7默认使用firewalld防火墙,没有安装iptables,若想使用iptables防火墙。必须先关闭firewalld防火墙,再安装启用iptables
iptables -vnL --line-number
##不指定表,默认就是filter
##--line-numbers 规则带编号
在生产工作中,iptables所有链默认规则都是DROP(相当与设置了白名单)
格式:iptables -P INPUT DROP
1.-F 仅仅是清空链中的规则,并不影响 -P 设置的规则,默认规则需要手动进行修改
2.-P 设置了DROP后,使用 -F 一定要小心!
#防止把允许远程连接的相关规则清除后导致无法远程连接主机,此情况如果没有保存规则可重启主机解决
此时的解决方案有三种:
第一种:我的防火墙设置只是临时设置,并为保存,重启服务器即可
第二种:操作服务器,重启iptables服务
第三种:进入机房操作该服务器(将设置恢复,重新修改规则)炸!
在生产中都是默认DROP
iptables -t filter -A INPUT -p icmp -j REJECT
#不允许其他主机ping本机,给响应信息REJECT,ping所使用的协议为icmp
iptables -vnL --line-number
#使用数字形式(fliter)表所有链,编号显示
换另一台主机测试:立即生效
iptables -I INPUT 1 -p icmp -j ACCEPT
换另一台主机测试
查看规则:
iptables -D INPUT 2
#删除第二行规则
iptables -D INPUT -p icmp -j DROP
#将含有icmp协议使用DROP类型的规则删除
可直接使用,不依赖于其他条件或扩展,包括网络协议、IP地址、网络接口等条件。
iptables -A INPUT -s 192.168.247.0/24 -p tcp --dport 80 -j REJECT
#禁止整个网段访问80端口的服务
iptables在使用-p 指定协议时,若指明特定协议后就无须再使用-m指明扩展模块的扩展机制。
例1:
[root@localhost ~]# iptables -A INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j REJECT
#多端口匹配,一次性禁止多个tcp网络协议的端口匹配规则
例2:
[root@localhost ~]# iptables -A INPUT -p udp -m multiport --dport 53,54,55 -j ACCEP
#多端口匹配,一次性放通多个udp网络协议的端口匹配规则
[root@localhost ~]# iptables -A INPUT -p icmp -m iprange --src-range 192.168.233.20-192.168.233.30 -j REJECT
#禁止网段内的ip地址ping主机
该方式范围过于有限,且操作不方便,用的不多,了解即可
[root@localhost ~]# iptables -A INPUT -m mac --mac-source 00:0c:29:f7:24:38 -j DROP