前言

在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. 四表(功能划分)

  1. filter表

    :数据过滤(最常用) 链:INPUT、FORWARD、OUTPUT

  2. NAT表

    :地址转换、端口映射 链:PREROUTING、INPUT、OUTPUT、POSTROUTING

  3. mangle表

    :数据标记、修改包 链:PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING

  4. 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

八、核心要点总结

  1. iptables 是netfilter的管理工具,基于五元组过滤流量。

  2. 最常用:filter表(过滤)、nat表(转发)

  3. 规则从上到下匹配,允许必须写在拒绝前面。

  4. 必须放行 lo 回环接口和 ESTABLISHED状态。

  5. SNAT 用于上网,DNAT 用于发布服务

  6. 配置完成必须保存,否则重启失效。

  7. FTP 等被动模式需要加载 nf_conntrack_ftp模块。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐