iptables防火墙从入门到精通:四表五链+规则配置+NAT转发实战
前言
在Linux服务器安全体系中,防火墙是最基础、最核心的安全屏障。iptables作为Linux内核netfilter框架的用户态管理工具,凭借灵活、强大、稳定的特性,依然是大量生产环境的首选防火墙方案。它可以基于五元组实现精细的流量控制,同时支持SNAT/DNAT实现地址转换与服务发布。
本文从原理到实战,系统讲解iptables四表五链、规则编写、模块使用、NAT转发,所有命令均为企业真实环境常用指令,看完即可直接落地配置。
一、防火墙基础介绍
1. 防火墙类型
-
硬件防火墙:独立设备,性能强、成本高
-
软件防火墙:系统层面实现
-
netfilter:Linux内核防火墙模块
-
firewalld:CentOS 7+ 默认服务(firewall-cmd)
-
iptables:传统经典防火墙命令
-
2. iptables 核心作用
数据过滤,根据网络五元组匹配策略:
-
源IP、目的IP
-
协议(TCP/UDP/ICMP)
-
源端口、目的端口
二、四表五链(核心原理)
1. 四表(功能划分)
- filter表
:数据过滤(最常用) 链:INPUT、FORWARD、OUTPUT
- NAT表
:地址转换、端口映射 链:PREROUTING、INPUT、OUTPUT、POSTROUTING
- mangle表
:数据标记、修改包 链:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING
- raw表
:关闭连接追踪 链:PREROUTING、OUTPUT
2. 五链(流量流经点)
- PREROUTING
:路由前
- INPUT
:入站
- FORWARD
:转发
- OUTPUT
:出站
- POSTROUTING
:路由后
3. 规则编写原则
-
自上而下,依次匹配
-
允许规则要放在拒绝规则上方
-
高频访问服务尽量放前面
-
注意链的默认策略
三、iptables 基础操作
0. 关闭 firewalld(使用iptables必备)
systemctl stop firewalld
systemctl disable firewalld
systemctl mask firewalld
1. 查看规则
# 查看filter表(默认)
iptables -nL
# 查看指定表
iptables -t nat -nL
iptables -t mangle -nL
# 显示行号
iptables -nL --line-numbers
# 显示详细信息
iptables -nL -v
2. 删除规则
# 删除单条规则
iptables -D INPUT 6
# 清空所有规则
iptables -F
3. 添加规则(最常用)
语法:
iptables {-A|-I} 链名 匹配条件 -j 行为
- -A
:追加在末尾
- -I
:插入到开头(或指定行)
- 行为
:ACCEPT 允许 | DROP 丢弃 | REJECT 拒绝
常用匹配条件:
-s源IP
-d目的IP
-i流入网卡
-o流出网卡
-p协议(tcp/udp/icmp)
--sport源端口
--dport目的端口
四、常用规则示例(直接复制可用)
示例1:允许SSH访问
iptables -I INPUT -s 192.168.140.1 -d 192.168.140.10 -p tcp --dport 22 -j ACCEPT
示例2:允许HTTP(80)
iptables -I INPUT -d 192.168.140.10 -p tcp --dport 80 -j ACCEPT
示例3:允许MySQL(3306)
iptables -I INPUT -s 192.168.140.11 -d 192.168.140.10 -p tcp --dport 3306 -j ACCEPT
示例4:允许Ping
iptables -I INPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -I INPUT -p icmp --icmp-type 0 -j ACCEPT
示例5:放行本地回环 lo(必须放!)
iptables -I INPUT -i lo -j ACCEPT
示例6:放行HTTP/HTTPS/DNS
iptables -I INPUT -p tcp -m multiport --sports 80,443,53 -j ACCEPT
iptables -I INPUT -p udp --sport 53 -j ACCEPT
五、高级模块
1. multiport 多端口
iptables -I INPUT -p tcp -m multiport --dports 22,80,3306 -j ACCEPT
2. iprange IP段
iptables -I INPUT -m iprange --src-range 192.168.140.11-192.168.140.21 --dport 22 -j ACCEPT
3. state 连接状态(非常重要)
- NEW
:新建连接
- ESTABLISHED
:已建立连接
- RELATED
:关联连接(如FTP)
iptables -I INPUT -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -I OUTPUT -m state --state ESTABLISHED -j ACCEPT
4. FTP 放行示例
modprobe ip_nat_ftp
modprobe ip_conntrack_ftp
iptables -I INPUT -p tcp --dport 20:21 -j ACCEPT
iptables -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
六、保存与恢复规则
# 保存
iptables-save > /opt/iptables.rules
# 恢复
iptables-restore < /opt/iptables.rules
七、NAT 地址转换(企业必备)
1. SNAT 源地址转换(内网访问外网)
iptables -t nat -A POSTROUTING -s 172.16.100.0/24 -j MASQUERADE
或指定公网IP:
iptables -t nat -A POSTROUTING -s 172.16.100.0/24 -j SNAT --to-source 20.20.20.254
2. DNAT 目的地址转换(发布内网服务)
# 发布80端口
iptables -t nat -A PREROUTING -d 20.20.20.254 -p tcp --dport 80 -j DNAT --to-destination 172.16.100.10:80
# 远程桌面/SSH映射
iptables -t nat -A PREROUTING -d 20.20.20.254 -p tcp --dport 7777 -j DNAT --to-destination 172.16.100.10:22
八、核心要点总结
-
iptables 是netfilter的管理工具,基于五元组过滤流量。
-
最常用:filter表(过滤)、nat表(转发)。
-
规则从上到下匹配,允许必须写在拒绝前面。
-
必须放行 lo 回环接口和 ESTABLISHED状态。
-
SNAT 用于上网,DNAT 用于发布服务。
-
配置完成必须保存,否则重启失效。
-
FTP 等被动模式需要加载 nf_conntrack_ftp模块。
更多推荐
所有评论(0)