博客 / Linux/ Debian/Ubuntu 系统 iptables 防火墙配置与持久化指南

Debian/Ubuntu 系统 iptables 防火墙配置与持久化指南

Debian/Ubuntu 系统 iptables 防火墙配置与持久化指南

Debian 系统 iptables 防火墙安装与配置

Debian 系统默认可能未安装 iptables。如需安装,请使用以下命令:

apt-get update
apt-get install iptables

配置 iptables 规则

1. 清除已有规则

在开始配置前,建议先清除所有现有规则、用户自定义链并重置计数器。

iptables -F
iptables -X
iptables -Z

2. 设置默认策略与基础规则

一个安全的起点是设置默认策略为 DROP,然后按需开放端口。以下是一个常见的基础规则集示例:

# 设置默认策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# 允许本地回环接口
iptables -A INPUT -i lo -j ACCEPT

# 允许已建立的或相关的连接通行(确保对外发起的连接能收到回复)
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 允许所有本机向外的访问(已在OUTPUT默认策略中允许)
# iptables -A OUTPUT -j ACCEPT

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

# 允许HTTP (80端口) 和 HTTPS (443端口)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# 允许本地访问MySQL (3306端口),禁止外部访问
iptables -A INPUT -p tcp -s 127.0.0.1 --dport 3306 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j DROP

# 允许ICMP (ping)
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

# 注意:以上规则执行后,未明确允许的INPUT和FORWARD流量将被默认的DROP策略拒绝。

3. 规则管理操作

查看规则:

# 查看所有规则
iptables -L -n
# 带序号查看规则,便于管理
iptables -L -n --line-numbers

删除规则: 例如,删除 INPUT 链中序号为 3 的规则。

iptables -D INPUT 3

屏蔽IP地址:

# 屏蔽单个IP
iptables -I INPUT -s 123.45.6.7 -j DROP
# 屏蔽一个C段 (例如 123.45.6.0/24)
iptables -I INPUT -s 123.45.6.0/24 -j DROP
# 屏蔽一个B段 (例如 123.45.0.0/16)
iptables -I INPUT -s 123.45.0.0/16 -j DROP

iptables 规则持久化保存

通过命令行配置的 iptables 规则在系统重启后会丢失。为了使其永久生效,需要进行持久化保存。

方案一:使用 iptables-persistent 工具(推荐)

这是 Debian/Ubuntu 系统上最简便的方法。

安装工具:

apt-get install iptables-persistent

在安装过程中,系统会询问是否保存当前规则,可以选择“是”。

手动保存与重载规则:

# 保存当前规则
netfilter-persistent save
# 或使用(旧版系统)
# /etc/init.d/iptables-persistent save

# 重新载入已保存的规则
netfilter-persistent reload
# 或使用(旧版系统)
# /etc/init.d/iptables-persistent reload

规则文件位置: 保存的规则会自动存储到以下文件,系统启动时会自动加载。

/etc/iptables/rules.v4  # IPv4规则
/etc/iptables/rules.v6  # IPv6规则

方案二:手动保存与恢复

你也可以不使用工具,而通过命令手动操作。

保存当前规则到文件:

iptables-save > /etc/iptables/rules.v4
ip6tables-save > /etc/iptables/rules.v6

在系统启动时恢复规则:
可以创建一个 systemd 服务单元或将其命令添加到 /etc/rc.local 文件中(如果使用 systemd,需确保 rc-local 服务已启用)。

# 恢复IPv4规则
iptables-restore < /etc/iptables/rules.v4
# 恢复IPv6规则
ip6tables-restore < /etc/iptables/rules.v6

重要提示

  • 谨慎操作: 在远程服务器上配置防火墙时,务必先允许 SSH(22端口)流量,并在最后设置默认 DROP 策略,以防将自己锁在服务器外。建议在操作前先写好还原脚本。
  • 规则顺序: iptables 规则按顺序匹配。使用 -I(插入)和 -A(追加)命令时需注意位置。
  • 现代替代方案: 对于较新的 Debian 版本(如 Debian 10 Buster 及以上),可以考虑使用 nftables 作为 iptables 的后继者,它提供了更强大的功能和统一的框架。

发表评论

您的邮箱不会公开。必填项已用 * 标注。