iptables是管理linux防火墙模块netfilter的用户端接口程序,通过iptables可以方便的管理、设置内核的包过滤模块。
netfliter可以使用iptables管理也可以由firewalld管理,firewalld它是在 iptables 基础之上进行了一定的封装和抽象,提供了更加直观、易用的配置方式,比如使用区域(zone)的概念,不同的区域预定义了不同的网络访问策略。
iptables 的配置是直接作用于内核规则链,而 firewalld 是通过自身的配置逻辑(如区域配置、服务配置等)再去转化成内核规则。如果同时配置并启用二者,firewalld 后续更新配置生成新的内核规则时,可能会覆盖掉 iptables 手动精心配置的一些规则,使得 iptables 配置失效;反之亦然,iptables 手动添加的新规则也可能破坏 firewalld 按照区域等概念设定好的网络访问策略,导致 firewalld 配置出现紊乱,无法按照预期管控网络访问。
基于上述原因,在实际的 Linux 系统应用中,通常建议只选择使用 iptables 服务或者 firewalld 服务中的一种来进行系统的网络防火墙管理,避免二者同时启用带来的各种冲突问题。
iptabes依赖的软件有两个:iptables、iptables-services,一般系统会默认安装第一个包,第二个包是服务包,可以实现iptables规则的开机自动加载,关机自动保存等功能,结合一下配置内容实现。
iptables配置文件:/etc/sysconfig/iptables-config
IPTABLES_MODULES="nf_conntrack_ftp" //设置iptables启动时默认加载的模块
IPTABLES_SAVE_ON_STOP="yes" //设置停止时自动保存iptables规则
IPTABLES_SAVE_ON_RESTART="yes" //设置重启时自动保存iptables规则
IPTABLES_RESTORE_WAIT=0 //设置iptables开启后马上恢复原有规则
配置完成后重启iptables服务:systemctl enable iptables && systemctl restart iptables 即可生效。
默认iptables的规则自动保存在/etc/sysconfig/iptables中;可以使用 service iptables save 即刻保存规则。
iptables-save >/path/to/file 可以把防火墙规则保存到指定的路径。恢复指定的防火墙规则可以使用:iptables-restore </path/to/file
iptables的规则设置
在设置iptables规则前需要了解数据包在传输过程(如下图)
1、进入系统应用程序的数据包:
2、转发的数据包:

iptables中共有4张表
- filter: 过滤功能,确定是否放行该数据包,属于真正防火墙
- nat: 网络地址转换功能,修改数据包中的源、目标IP地址或端口
- mangle: 对数据包进行重新封装功能,为数据包设置标记
- raw: 确定是否对数据包进行跟踪
iptables中共有5条链
- INPUT:处理入站数据包
- OUTPUT:处理出站数据包
- FORWARD:处理转发数据包(主要是将数据包转发至本机其它网卡)当数据报文经过本机时,网卡接收数据报文至缓冲区,内核读取报文ip首部,发现报文不是送到本机时(目的ip不是本机),由内核直接送到forward链做匹配,匹配之后若符合forward的规则,再经由postrouting送往下一跳或目标主机
- PREROUTING:在进行路由选择前处理数据包,修改到达防火墙数据包的目的IP地址,用于判断目标主机
- POSTROUTING:在进行路由选择后处理数据包,修改要离开防火墙数据包的源IP地址,判断经由哪一接口送往下一跳
iptables中表链之间的关系,每个表里面包含有多个链,不同的表包含的链是不一样的
- filter表可以使用的链:INPUT,FORWARD,OUTPUT
- nat表中可以使用的链:PREROUTING,OUTPUT ,POSTROUTING,INPUT
- mangle 表中可以使用的链:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
- raw表中可以的链:PREROUTING,OUTPUT
iptables语法结构
iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 目标动作或跳转]
| table | command | chain | Parameter & Xmatch | target | |
| iptables | -t filter nat mangle raw | -A -I -P -D -R -F -L -Z -n -v | INPUT FORWARD OUPUT PREROUTING POSTROUTING | -p tcp/udp/icmp –sport –dport -s -d -m multiport –dports -m state | -j ACCEPT DROP REJECT DNAT SNAT MASQUERADE LOG |
配置样例:
#SNAT配置
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens34
-j SNAT --to-source 1.1.1.1
#或者
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens34
-j MASQUERADE
#DNAT配置
[root@localhost ~]# iptables -t nat -A PREROUTING -d 1.1.1.1 -p tcp --dport 80 -
j DNAT --to-destination 192.168.100.10
#基于状态过滤数据包
[root@localhost ~]# iptables -I INPUT -m state --state ESTABLISHED,RELATED -j
ACCEPT
#允许ping回应(echo-reply)
[root@localhost ~]# iptables -t filter -I INPUT -p icmp -m icmp --icmp-type
echo-reply -j ACCEPT
#multiport:多端口
[root@localhost ~]#iptables -I INPUT -d 192.168.2.10 -p tcp -m multiport --
dports 22,80 -j ACCEPT
#-m iprange
#iprange多ip地址(-src-range原地址范围,--dst-range目的地址范围)
i[root@localhost ~]#ptables -A INPUT -d 192.168.2.10 -p tcp --dport 23 -m
iprange --src-range 192.168.2.11-192.168.2.21 -j ACCEPT
#每周1-5的8:00-18:00
[root@localhost ~]#iptables -A INPUT -d 192.168.2.10 -p tcp --dport 80 -m time -
-weekdays Mon,Tus,Wed,Thu,Fri --timestart 08:00:00 --time-stop 18:00:00 -j
ACCEPT
#2020-1-10的18点到2022-1-10的18点
[root@localhost ~]#iptables -I INPUT -s 172.17.1.132 -d 192.168.1.119 -m time
--datestart 2020-1-10T18:00:0 --datestop 2022-1-10T18:00:00 -j ACCEPT
#-m comment 对规则进行备注说明(添加注释)
[root@localhost ~]#iptables -A INPUT -s 192.168.2.250 -m comment --comment "注释
内容" -j REJECT
Leave a Reply