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的后继者,它提供了更强大的功能和统一的框架。