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

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

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

Debian 系统 iptables 防火墙配置指南

iptables 是 Linux 系统上功能强大的防火墙工具。本指南将详细介绍在 Debian 系统上安装、配置和持久化 iptables 规则的完整流程。

第一步:检查与安装 iptables

首先,确认您的系统是否已安装 iptables。打开终端,执行以下命令:

whereis iptables

如果已安装,您将看到类似以下的输出,其中包含 iptables 二进制文件和手册页的路径:

iptables: /sbin/iptables /usr/share/iptables /usr/share/man/man8/iptables.8.gz

如果没有任何输出或提示未找到,则表示尚未安装。请使用以下命令安装:

sudo apt update
sudo apt install iptables

注意:本文所有命令均在具有 sudo 权限的普通用户账户下执行。出于安全考虑,不建议直接使用 root 用户。

第二步:查看当前 iptables 规则

安装后,可以使用以下命令查看当前的防火墙规则:

sudo iptables -L -n -v

参数 -n 禁止域名解析(显示 IP),-v 显示详细信息,这有助于获得更清晰的视图。

对于全新安装的 iptables,您可能会看到类似以下的默认规则,它允许所有流量,相当于没有启用防火墙:

Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

第三步:配置 iptables 规则

建议先将规则写入一个配置文件,测试无误后再应用。这可以避免因规则错误导致自己被锁在服务器外(特别是通过 SSH 连接时)。

1. 创建一个规则测试文件:

sudo vim /etc/iptables.test.rules

2. 将以下基础规则集复制到文件中。此规则集基于 Debian 官方示例,提供了常见服务(如 HTTP、HTTPS、SSH)的访问控制,并设置了默认拒绝策略,安全性较高。

*filter

# 允许所有环回接口流量,拒绝非环回接口访问127.0.0.0/8
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT

# 接受所有已建立的及相关连接
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 允许所有出站流量(可根据需要限制)
-A OUTPUT -j ACCEPT

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

# 允许 SSH (22) 新连接
# 注意:强烈建议将 --dport 22 改为您自定义的 SSH 端口,并考虑限制源 IP
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT

# 允许 Ping (ICMP Echo Request)
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

# 记录被拒绝的连接(可通过 `dmesg` 或 `journalctl` 查看)
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

# 设置默认策略:拒绝所有其他入站和转发流量
-A INPUT -j REJECT
-A FORWARD -j REJECT

COMMIT

重要安全提示:上述规则中 SSH 端口(22)对所有 IP 开放。在生产环境中,您应该:

  • 修改 SSH 配置文件(/etc/ssh/sshd_config)中的端口号。
  • 在 iptables 规则中,将 --dport 22 改为您自定义的端口。
  • 更安全的方法是,使用 -s 参数限制允许访问 SSH 的源 IP 地址范围。

3. 加载测试规则并验证:

# 从文件加载规则
sudo iptables-restore < /etc/iptables.test.rules
# 再次查看规则,确认已生效
sudo iptables -L -n -v

请务必在加载新规则后,保持当前 SSH 会话不要断开,并开启一个新的终端窗口尝试连接,以测试规则是否正确,避免因配置错误导致无法远程登录。

第四步:保存规则并设置开机自动加载

测试无误后,需要将当前生效的规则保存,并配置系统在启动时自动加载。

1. 保存当前内存中的规则到文件:

sudo iptables-save > /etc/iptables.up.rules

2. 配置网络接口启动前自动加载规则。创建脚本文件:

sudo vim /etc/network/if-pre-up.d/iptables

3. 在文件中添加以下内容:

#!/bin/sh
/sbin/iptables-restore < /etc/iptables.up.rules

4. 赋予脚本可执行权限:

sudo chmod +x /etc/network/if-pre-up.d/iptables

现在,当系统重启或网络接口启动时,会自动从 /etc/iptables.up.rules 文件恢复防火墙规则。

第五步:高级配置与维护

  • 允许特定 IP 段:若需允许一个 IP 段(如 192.168.1.1-192.168.1.199)访问所有服务,可以在规则文件中 INPUT 链的适当位置(通常在允许 SSH 的规则之后,默认拒绝规则之前)添加:
    -A INPUT -m iprange --src-range 192.168.1.1-192.168.1.199 -j ACCEPT

    然后重新加载规则。

  • 规则修改流程:建议始终在 /etc/iptables.test.rules 文件中修改和测试规则,确认无误后,使用 iptables-restore 加载,最后用 iptables-save 保存到 iptables.up.rules
  • 查看日志:被拒绝的连接日志(如果启用了 LOG 规则)可以通过 sudo dmesg | grep "iptables denied"sudo journalctl -k | grep "iptables denied" 查看。

通过以上步骤,您可以在 Debian 系统上成功配置并持久化一个基础的 iptables 防火墙。请根据您的实际网络服务需求,仔细调整和细化规则。

发表评论

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