iptables 并不是真正意义上的防火墙,我们可以理解为一个客户端工具,用户通过ipatbles这个客户端,将用户的安全设定执行到对应的"安全框架"中,这个"安全框架"才是真正的防火墙,这个框架的名字叫netfilter。 哦,也就是给门上面安装密码、指纹、人脸识别之类的,你符合我的要求,才能进去!!!
netfilter才是防火墙真正的安全框架,netfilter位于内核空间。
iptables是一个命令行工具,位于用户空间,通过这个命令行工具来操作netfilter。

根据上图,我们能够想象出某些常用场景中,报文的流向:
到本机某进程的报文:PREROUTING --> INPUT
由本机转发的报文:PREROUTING --> FORWARD --> POSTROUTING
由本机的某进程发出报文(通常为响应报文):OUTPUT --> POSTROUTING
I. IPTABLES 表和链
IPTables 有以下 4 个内置表。
| 表 | 说明 |
| filter表 | 负责过滤功能,防火墙;内核模块:iptables_filter |
| nat表 | network address translation,网络地址转换功能;内核模块:iptable_nat |
| mangle表 | 拆解报文,做出修改,并重新封装 的功能;iptable_mangle |
| raw表 | 关闭nat表上启用的连接追踪机制;iptable_raw |
iptables为我们定义了4张"表",当他们处于同一条"链"时,执行的优先级如下。
优先级次序(由高而低):raw --> mangle --> nat --> filter
1.过滤表
过滤器是 iptables 的默认表。所以,如果你没有定义你自己的表,你将使用过滤表。iptables 的过滤表有以下内置链。
- INPUT 链 – 传入防火墙。用于到达本地服务器的数据包。
- OUTPUT 链 – 从防火墙传出。用于本地生成并离开本地服务器的数据包。
- FORWARD 链 – 本地服务器上另一个 NIC 的数据包。对于通过本地服务器路由的数据包。
2. NAT表
iptable 的 NAT 表具有以下内置链。
- PREROUTING 链 – 在路由之前更改数据包。即在数据包到达系统之后(并且在路由之前)立即发生数据包转换。这有助于将数据包的目标 IP 地址转换为与本地服务器上的路由匹配的内容。这用于 DNAT(目标 NAT)。
- POSTROUTING 链 – 在路由后更改数据包。即当数据包离开系统时发生数据包转换。这有助于将数据包的源 IP 地址转换为可能与目标服务器上的路由匹配的内容。这用于 SNAT(源 NAT)。
- OUTPUT 链 – 防火墙上本地生成的数据包的 NAT。
3. Mangle 表
iptables 的 Mangle 表用于专门的数据包更改。这会改变 TCP 报头中的 QOS 位。Mangle 表具有以下内置链。
- 预路由链
- 输出链
- 正向链
- 输入链
- POSTROUTING 链
4. 原始表
Iptable 的 Raw 表用于配置例外。原始表具有以下内置链。
- 预路由链
- 输出链
链和表的关系:
| 链(钩子) | 表(功能) |
| PREROUTING | 可以存在于:raw表,mangle表,nat表 |
| INPUT | 可以存在于:mangle表,filter表,(centos7中还有nat表,centos6中没有) |
| FORWARD | 可以存在于:mangle表,filter表 |
| OUTPUT | 可以存在于:raw表mangle表,nat表,filter表 |
| POSTROUTING | mangle表,nat表 |
但是,我们在实际的使用过程中,往往是通过"表"作为操作入口,对规则进行定义的,之所以按照上述过程介绍iptables,是因为从"关卡"的角度更容易从入门的角度理解,但是为了以便在实际使用的时候,更加顺畅的理解它们,此处我们还要将各"表"与"链"的关系罗列出来:
表和链的关系:
| 表(功能) | 链(钩子) |
| raw | REROUTING,OUTPUT |
| mangle | REROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING |
| nat | REROUTING,OUTPUT,POSTROUTING(centos7中还有INPUT,centos6中没有) |
| filter | INPUT,FORWARD,OUTPUT |
结合上述所有的描述,我们可以将数据包通过防火墙的流程总结为下图:

二、IPTABLES 规则
以下是 iptables 规则要记住的要点。
- 规则包含一个标准和一个目标。
- 如果条件匹配,则转到目标中指定的规则(或)执行目标中提到的特殊值。
- 如果条件不匹配,则继续执行下一条规则。
目标值
以下是您可以在目标中指定的可能的特殊值(处置动作)。
| 动作 | 含义 |
| ACCEPT | 允许数据包通过 |
| DROP | 直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。 |
| REJECT | 拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息 |
| SNAT | 源地址转换,解决内网用户用同一个公网地址上网的问题 |
| MASQUERADE | 是SNAT的一种特殊形式,适用于动态的、临时会变的ip上 |
| DNAT | 目标地址转换 |
| REDIRECT | 在本机做端口映射 |
| LOG | 在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作,仍然让下一条规则去匹配 |
如果您执行 iptables –list (或) service iptables status,您将看到系统上所有可用的防火墙规则。以下 iptable 示例显示此系统上没有定义防火墙规则。如您所见,它显示默认输入表,带有默认输入链、前向链和输出链。
# iptables -t filter --list
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination执行以下操作以查看 mangle 表。
# iptables -t mangle --list执行以下操作以查看 nat 表。
# iptables -t nat --list执行以下操作以查看原始表。
# iptables -t raw --list注意:如果不指定 -t 选项,它将显示默认过滤器表。因此,以下两个命令是相同的。
# iptables -t filter --list
(or)
# iptables --list下面的 iptable 示例显示了在过滤表的输入、转发和输出链中定义了一些规则。
# iptables --list
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 RH-Firewall-1-INPUT all -- 0.0.0.0/0 0.0.0.0/0
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
Chain RH-Firewall-1-INPUT (2 references)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0 icmp type 255
3 ACCEPT esp -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT ah -- 0.0.0.0/0 0.0.0.0/0
5 ACCEPT udp -- 0.0.0.0/0 224.0.0.251 udp dpt:5353
6 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpt:631
7 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:631
8 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
9 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
10 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibitediptables –list 命令输出中的规则包含以下字段:
- num - 特定链中的规则编号
- target – 我们上面讨论的特殊目标变量
- prot - 协议。tcp、udp、icmp等,
- opt – 该特定规则的特殊选项。
- source – 数据包的源 IP 地址
- destinaton - 数据包的目的地 IP 地址
二、iptables命令详解
常用命令:
| 常用选项 | 说明 |
| -A | 在指定链尾部添加规则 |
| -D | 删除匹配的规则 |
| -R | 替换匹配的规则 |
| -I | 在指定位置插入规则(例:iptables -I INPUT 1 --dport 80 -j ACCEPT(将规则插入到filter表INPUT链中的第一位上) |
| -L/S | 列出指定链或所有链的规则 |
| -F | 删除指定链或所有链的规则 |
| -N | 创建用户自定义链[例:iptables -N allowed] |
| -X | 删除指定的用户自定义链 |
| -P | 为指定链设置默认规则策略,对自定义链不起作用 |
| -Z | 将指定链或所有链的计数器清零 |
| -E | 更改自定义链的名称[例:iptables -E allowed disallowed] |
| -n | ip地址和端口号以数字方式显示[例:iptables -nL] |
常见设置参数介绍:
| 参数 | 作用 |
| –dport | 指定目标TCP/IP端口 如 –dport 80 |
| –sport | 指定源TCP/IP端口 如 –sport 80 |
| -p | tcp 指定协议为tcp icmp 指定协议为ICMP udp 指定协议为UDP |
| -j | DROP 拒绝 ACCEPT 允许 REJECT 拒绝并向发出消息的计算机发一个消息 LOG 在/var/log/messages中登记分组匹配的记录 |
| -m | mac –mac 绑定MAC地址 limit –limit 1/s 1/m 设置时间策列 |
| -s | 192.168.1.153或192.168.1.0/24 指定源地址或地址段 ! 192.168.1.0 指定源地址以外的 |
| -d | 192.168.1.153或192.168.1.0/24 指定目标地址或地址段 |
实例:
- 配置允许特定源ip ssh 22 端口连接
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT设置默认的规则
iptables -P INPUT DROP # 配置默认的不让进
iptables -P FORWARD DROP # 默认的不允许转发
iptables -P OUTPUT ACCEPT # 默认的可以出去允许本地回环地址可以正常使用
iptables -A INPUT -i lo -j ACCEPT
#本地圆环地址就是那个127.0.0.1,是本机上使用的,它进与出都设置为允许
iptables -A OUTPUT -o lo -j ACCEPT配置白名单
iptables -A INPUT -p all -s 192.168.1.0/24 -j ACCEPT # 允许机房内网机器可以访问
iptables -A INPUT -p all -s 192.168.140.0/24 -j ACCEPT # 允许机房内网机器可以访问
iptables -A INPUT -p tcp -s 183.121.3.7 --dport 3380 -j ACCEPT # 允许183.121.3.7访问本机的3380端口启动网络转发规则公网
210.14.67.7让内网192.168.188.0/24上网
iptables -t nat -A POSTROUTING -s 192.168.188.0/24 -j SNAT --to-source 210.14.67.127端口映射本机的 2222 端口映射到内网 虚拟机的22 端口
iptables -t nat -A PREROUTING -d 210.14.67.127 -p tcp --dport 2222 -j DNAT --to-dest 192.168.188.115:22- 阻止Windows蠕虫的攻击
iptables -I INPUT -j DROP -p tcp -s 0.0.0.0/0 -m string --algo kmp --string "cmd.exe"
- 防止SYN洪水攻击
iptables -A INPUT -p tcp --syn -m limit --limit 5/second -j ACCEPT参考资料:
转载:iptables详解:图文并茂理解iptables_weixin_33749242的博客-CSDN博客
https://wangchujiang.com/linux-command/c/iptables.html#%E9%85%8D%E7%BD%AE%E7%99%BD%E5%90%8D%E5%8D%95