Ubuntu 22.04 使用 IPTables 配置防火墙
IPTables
是 Linux 系统上配置防火墙的常用工具,它通过定义规则来控制进出系统的数据流量。尽管 Ubuntu 默认使用 ufw
作为防火墙管理工具,但 IPTables
提供了更底层且灵活的防火墙规则配置方式。本文将详细介绍如何在 Ubuntu 22.04 上使用 IPTables
配置防火墙。
一、IPTables 基本概念
IPTables
通过定义一系列的规则链来控制网络数据包的处理。这些链按照顺序检查数据包,并根据规则进行操作,如允许、拒绝或转发。
常见的链有:
- INPUT:处理进入系统的数据包。
- OUTPUT:处理从系统发出的数据包。
- FORWARD:处理被转发的数据包(主要用于路由情况)。
每个链可以包含多个规则,规则按顺序匹配,当一个数据包匹配某个规则时,就会执行该规则指定的操作,如 ACCEPT
(允许)、DROP
(丢弃)等。
二、安装 IPTables
通常,IPTables
已经预装在 Ubuntu 中。你可以通过以下命令检查是否安装了 IPTables
:
sudo iptables -V
如果没有安装,可以使用以下命令进行安装:
sudo apt update
sudo apt install iptables
三、基本规则配置
以下是一些常用的 IPTables
配置规则示例:
1. 允许所有本地环回接口流量
本地环回接口(lo
接口)用于本地应用之间的通信。通常需要允许所有环回流量:
sudo iptables -A INPUT -i lo -j ACCEPT
解释:
-A INPUT
:添加规则到INPUT
链。-i lo
:指定规则适用于lo
接口。-j ACCEPT
:匹配时执行ACCEPT
操作,允许流量。
2. 允许特定端口的入站流量
如果你希望允许特定端口的入站流量,例如允许 HTTP(80 端口)和 HTTPS(443 端口)流量,可以使用以下命令:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
解释:
-p tcp
:指定协议为 TCP。--dport 80
:匹配目标端口为 80。-j ACCEPT
:允许匹配的流量。
3. 拒绝所有其他入站流量
为了增强安全性,通常需要拒绝所有未明确允许的入站流量。可以在允许的规则之后添加以下命令:
sudo iptables -A INPUT -j DROP
解释:此规则将丢弃所有未匹配之前规则的入站流量。
4. 允许 SSH 访问
为了远程管理服务器,通常需要允许 SSH 连接(默认端口 22):
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
建议在拒绝所有入站流量之前配置此规则,以免锁定自己。
5. 配置状态性规则
状态性规则通过检查数据包的状态来管理流量,例如允许已经建立的连接继续通信:
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
解释:
-m conntrack
:加载 conntrack 模块,允许状态匹配。--ctstate ESTABLISHED,RELATED
:允许已建立的或相关联的连接。-j ACCEPT
:允许流量。
四、保存和恢复 IPTables 规则
IPTables
的配置默认不会在重启后持久保存。为了持久保存规则,需要将其保存到文件并在系统启动时恢复。
1. 保存规则
可以使用 iptables-save
命令将当前规则保存到文件中:
sudo iptables-save > /etc/iptables/rules.v4
解释:该命令会将当前的 IPTables
规则保存到 /etc/iptables/rules.v4
文件中。
2. 恢复规则
在系统启动时,可以通过 iptables-restore
命令从保存的文件中恢复规则:
sudo iptables-restore < /etc/iptables/rules.v4
3. 自动恢复规则
为了在每次系统启动时自动恢复 IPTables
规则,可以使用 iptables-persistent
工具:
sudo apt install iptables-persistent
安装过程中会提示你是否保存当前的规则,选择“是”即可。安装完成后,系统会在启动时自动加载保存的规则。
五、查看和管理 IPTables 规则
1. 查看当前规则
可以使用以下命令查看当前的 IPTables
规则:
sudo iptables -L -v
解释:
-L
:列出所有规则。-v
:显示详细信息,包括流量统计信息。
2. 删除规则
可以使用 -D
选项删除特定的 IPTables
规则。例如,删除允许 80 端口流量的规则:
sudo iptables -D INPUT -p tcp --dport 80 -j ACCEPT
3. 清空所有规则
如果需要清空所有 IPTables
规则,可以使用以下命令:
sudo iptables -F
解释:-F
选项将会清空所有链中的规则。
六、常见防火墙规则配置示例
以下是一个常见的防火墙配置示例,用于保护 Ubuntu 服务器。
#!/bin/sh
# 清空所有现有规则
sudo iptables -F
# 允许本地回环接口通信
sudo iptables -A INPUT -i lo -j ACCEPT
# 允许已建立的连接
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# 允许 SSH(22 端口)通信
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# 允许 HTTP 和 HTTPS 通信
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# 拒绝所有其他入站流量
sudo iptables -A INPUT -j DROP
# 保存规则
sudo iptables-save > /etc/iptables/rules.v4
七、总结
通过本文的介绍,您可以了解如何在 Ubuntu 22.04 上使用 IPTables
配置防火墙。IPTables
提供了强大的规则配置能力,可以根据实际需求灵活定制防火墙策略。无论是保护服务器免受外部攻击,还是控制内部网络流量,IPTables
都是一个值得信赖的工具。
操作 | 命令示例 |
---|---|
允许本地环回接口通信 | sudo iptables -A INPUT -i lo -j ACCEPT |
允许特定端口入站流量 | sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT |
拒绝所有其他入站流量 | sudo iptables -A INPUT -j DROP |
保存规则 | sudo iptables-save > /etc/iptables/rules.v4 |
恢复规则 | sudo iptables-restore < /etc/iptables/rules.v4 |
查看当前规则 | sudo iptables -L -v |
清空所有规则 | sudo iptables -F |