Linux 防火墙配置教程:Iptables 完全使用手册

Linux Iptables 使用教程

一、简介

iptables 是 Linux 内核的一个防火墙工具,用于设置、维护和检查网络流量的规则。通过 iptables,你可以过滤进出系统的数据包,从而控制流量、增强系统的安全性、以及执行 NAT(网络地址转换)等任务。

iptables 的基本工作原理是通过规则链(Chains)和规则(Rules)来进行数据包的过滤和操作。它包含了三种默认的规则链:

  • INPUT:处理所有进入本地机器的流量。
  • OUTPUT:处理从本地机器发出的流量。
  • FORWARD:处理经过本地机器转发的流量(通常用于路由器配置)。

每个链包含一组规则,当数据包进入链时,它会按顺序检查每一条规则,直到找到匹配的规则或者直到所有规则都被检查完毕。

二、安装和基本配置

在大多数 Linux 系统中,iptables 默认已经安装。可以通过以下命令来检查 iptables 是否已安装:

bash
sudo iptables --version

如果未安装,通常可以通过包管理工具来安装:

  • 在基于 Debian 的系统上(如 Ubuntu):

bash
sudo apt update
sudo apt install iptables

  • 在基于 Red Hat 的系统上(如 CentOS、Fedora):

bash
sudo yum install iptables

三、基本概念和命令

1. 查看当前规则

使用 iptables -L 命令查看当前配置的规则。默认情况下,它会列出所有链的规则:

bash
sudo iptables -L

2. 查看规则链的详细信息

为了查看详细的计数信息和规则详细内容,可以使用 -v 参数:

bash
sudo iptables -L -v

3. 查看规则链及其内容的数字格式

有时你可能需要查看数字格式的输出,例如 IP 地址和端口号而非名称,使用 -n 参数:

bash
sudo iptables -L -n

4. 删除所有规则

如果想清除所有的规则,可以使用以下命令:

bash
sudo iptables -F

这会删除所有链中的所有规则。

5. 查看 NAT 表的规则

iptables 还可以处理 NAT(网络地址转换)。要查看 NAT 表中的规则,可以使用:

bash
sudo iptables -t nat -L

四、配置规则

1. 设置默认策略

iptables 中,默认策略决定了如果数据包没有匹配任何规则时的处理方式。可以使用以下命令设置默认策略:

  • 设置默认策略为 ACCEPT(接受所有数据包):

bash
sudo iptables -P INPUT ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -P FORWARD ACCEPT

  • 设置默认策略为 DROP(丢弃所有数据包):

bash
sudo iptables -P INPUT DROP
sudo iptables -P OUTPUT DROP
sudo iptables -P FORWARD DROP

2. 添加新规则

使用 iptables -A 命令向某个链(如 INPUT)中添加规则。例如,添加一个允许通过 SSH 端口(默认端口 22)的规则:

bash
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT

这条规则表示:
- -A INPUT:添加规则到 INPUT 链。
- -p tcp:过滤 TCP 协议。
- --dport 22:目标端口为 22(即 SSH)。
- -j ACCEPT:如果数据包匹配规则,则接受它。

3. 删除规则

要删除规则,可以使用 iptables -D 命令。例如,删除刚才添加的 SSH 规则:

bash
sudo iptables -D INPUT -p tcp --dport 22 -j ACCEPT

4. 保存规则

默认情况下,iptables 的规则在系统重启后会丢失。为了使规则在重启后仍然有效,可以将规则保存到配置文件中:

  • 在 Ubuntu/Debian 系统中,可以使用 iptables-persistent 工具:

bash
sudo apt install iptables-persistent
sudo netfilter-persistent save

  • 在 Red Hat 系统中,可以使用 service iptables save

bash
sudo service iptables save

5. 临时禁用和启用防火墙

如果你需要暂时禁用防火墙,可以使用以下命令:

  • 禁用 iptables

bash
sudo systemctl stop iptables

  • 启用 iptables

bash
sudo systemctl start iptables

五、常见操作示例

1. 允许某个 IP 地址访问

假设你希望允许 IP 地址 192.168.1.100 访问本地服务器的所有端口,可以使用以下命令:

bash
sudo iptables -A INPUT -s 192.168.1.100 -j ACCEPT

2. 阻止某个 IP 地址访问

如果你希望阻止某个 IP 地址(如 192.168.1.100)访问本地服务器的所有端口,可以使用以下命令:

bash
sudo iptables -A INPUT -s 192.168.1.100 -j DROP

3. 限制端口访问频率

可以通过 iptables 实现对特定端口的访问频率限制。例如,限制每分钟最多允许 5 次对 SSH(端口 22)的访问:

bash
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 5/minute -j ACCEPT

4. 转发流量(NAT)

在多网络环境中,常需要设置 NAT 转发规则。例如,设置一个简单的端口转发,将外部访问 8080 端口的请求转发到本地 80 端口:

bash
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.10:80
sudo iptables -A FORWARD -p tcp --dport 80 -d 192.168.1.10 -j ACCEPT

这两条规则表示:
1. 第一个规则通过 NAT 转发流量。
2. 第二个规则允许将数据包从 FORWARD 链传递到指定 IP 地址。

5. 设置状态追踪

iptables 支持基于数据包状态(如 NEW, ESTABLISHED 等)来进行过滤。例如,允许已经建立的连接继续通信:

bash
sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

六、总结

通过 iptables,你可以灵活地配置和管理 Linux 系统的防火墙。掌握基本的命令和规则设置方法,可以帮助你实现精细的流量控制、增强安全性、以及满足复杂的网络需求。常见的操作包括添加、删除、修改规则,保存规则以及设置默认策略等。

需要注意的是,iptables 配置需要谨慎操作,错误的规则可能导致网络中断或安全隐患。在实际生产环境中,建议定期备份配置,并进行充分测试。

THE END