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