Linux系统iptables防火墙配置

iptables 是 Linux 系统中常用的防火墙工具,基于 netfilter 框架工作,通过配置规则对网络数据包进行过滤、转发或修改。以下是 iptables 的核心配置知识和常见操作:

一、基本概念

  1. 表(Table):iptables 通过不同的表管理规则,常用表包括:
    • filter:默认表,用于数据包过滤(最常用)
    • nat:用于网络地址转换(如端口转发)
    • mangle:用于修改数据包标记(较少用)
  2. 链(Chain):表中包含预设的规则链,按数据包流向分类:
    • INPUT:处理进入本机的数据包
    • OUTPUT:处理本机发出的数据包
    • FORWARD:处理经过本机转发的数据包

二、查看规则

所有 iptables 操作需 root 权限(加sudo):
# 查看filter表的所有规则(默认表)
sudo iptables -L

# 查看详细规则(包含端口、协议、统计等)
sudo iptables -L -v

# 查看指定表(如nat表)的规则
sudo iptables -t nat -L

# 查看规则时显示端口号(而非服务名)
sudo iptables -L -n

三、规则基本操作

1. 添加规则

语法:iptables [-t 表名] -A/-I 链名 匹配条件 -j 动作
  • -A:在链的末尾添加规则
  • -I:在链的开头插入规则(可指定位置,如-I INPUT 1插入到第 1 位)
  • 动作:ACCEPT(允许通过)、DROP(直接丢弃,不回应)、REJECT(拒绝并回应)

2. 常见匹配条件

  • -p 协议:指定协议(tcp/udp/icmp,如-p tcp
  • --dport 端口:目标端口(如--dport 22
  • --sport 端口:源端口(较少用)
  • -s IP:源 IP 地址(如-s 192.168.1.100
  • -d IP:目标 IP 地址
  • -i 网卡:入站网卡(如-i eth0
  • -o 网卡:出站网卡

3. 示例:添加常用规则

# 允许本机回环接口(lo)的所有通信(必需,否则本地服务可能异常)
sudo iptables -A INPUT -i lo -j ACCEPT

# 允许已建立的连接和相关连接(避免阻断SSH等已连接的会话)
sudo iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

# 允许SSH连接(22端口)
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

# 允许HTTP(80)和HTTPS(443)连接
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 拒绝来自192.168.1.200的所有连接
sudo iptables -A INPUT -s 192.168.1.200 -j DROP

# 设置INPUT链默认策略为DROP(未匹配规则的数据包全部拒绝)
sudo iptables -P INPUT DROP

四、删除与清空规则

# 删除指定规则(需知道规则所在链和序号,先通过iptables -L --line-numbers查看序号)
sudo iptables -D INPUT 3  # 删除INPUT链中第3条规则

# 清空指定链的规则(如INPUT链)
sudo iptables -F INPUT

# 清空所有链的规则
sudo iptables -F

# 重置规则计数器(数据包统计清零)
sudo iptables -Z

五、保存规则(防止重启丢失)

iptables 规则默认保存在内存中,重启后会失效,需手动保存:
  1. Debian/Ubuntu 系统
    # 安装持久化工具
    sudo apt-get install iptables-persistent
    # 保存规则(会保存到/etc/iptables/rules.v4)
    sudo netfilter-persistent save
    
  2. CentOS/RHEL 系统
    # 保存规则到/etc/sysconfig/iptables
    sudo service iptables save
    
  3. 通用方法
    # 导出规则到文件
    sudo iptables-save > /etc/iptables.rules
    # 重启后导入规则
    sudo iptables-restore < /etc/iptables.rules
    

六、高级应用:端口转发(nat 表)

需开启内核转发(临时生效):
sudo echo 1 > /proc/sys/net/ipv4/ip_forward
示例:将本机 80 端口转发到 192.168.1.100 的 8080 端口
# 在nat表的PREROUTING链添加转发规则
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:8080

# 允许转发的数据包通过(filter表FORWARD链)
sudo iptables -A FORWARD -p tcp -d 192.168.1.100 --dport 8080 -j ACCEPT

注意事项

  1. 规则匹配顺序:按规则在链中的顺序匹配,第一条匹配的规则生效,建议将重要规则(如允许 SSH)放在前面。
  2. 配置时建议保持一个 SSH 会话连接,防止误操作导致无法连接服务器。
  3. 对规则不熟悉时,可先将默认策略设为ACCEPT,测试无误后再改为DROP
通过上述操作,可实现对 Linux 系统的网络访问控制,根据实际需求灵活配置规则即可。
阅读剩余
THE END