Linux中iptables设置详细
封面图
•
2025-10-23
•
Linux
227
0
0
0
在Linux系统中,`iptables` 是一个用于配置内核的 **Netfilter** 防火墙规则的工具。它允许你设置网络数据包过滤、NAT(网络地址转换)和包处理等规则。以下是一个详细的 `iptables` 设置指南,包括基本命令、常见用法以及示例。 --- ## 一、iptables 基本概念 ### 1. 表(Tables) - **filter**: 默认表,用于过滤数据包(如防火墙)。 - **nat**: 用于网络地址转换(如端口转发、NAT)。 - **mangle**: 用于修改数据包的头部信息(如TOS字段)。 - **raw**: 用于配置数据包的跟踪(通常不常用)。 ### 2. 链(Chains) 每个表包含多个链,常见的链有: - **INPUT**: 处理进入本机的数据包。 - **OUTPUT**: 处理从本机发出的数据包。 - **FORWARD**: 处理经过本机转发的数据包(仅在启用路由时有效)。 - **PREROUTING**: 在路由决策前处理数据包(适用于 nat 表)。 - **POSTROUTING**: 在路由决策后处理数据包(适用于 nat 表)。 --- ## 二、iptables 常用命令 ### 1. 查看当前规则 ```bash sudo iptables -L -n -v ``` ### 2. 清空所有规则 ```bash sudo iptables -F sudo iptables -X sudo iptables -Z ``` ### 3. 设置默认策略(建议设置为 DROP) ```bash sudo iptables -P INPUT DROP sudo iptables -P OUTPUT ACCEPT sudo iptables -P FORWARD DROP ``` > ⚠️ 注意:设置默认策略为 DROP 后,要确保允许必要的流量,否则可能导致无法访问系统。 --- ## 三、常见规则示例 ### 1. 允许 SSH(端口 22) ```bash sudo iptables -A INPUT -p tcp --dport 22 -j 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 ``` ### 3. 允许来自特定 IP 的访问(例如 192.168.1.100) ```bash sudo iptables -A INPUT -s 192.168.1.100 -j ACCEPT ``` ### 4. 允许回环接口(本地通信) ```bash sudo iptables -A INPUT -i lo -j ACCEPT ``` ### 5. 允许已建立的连接(即响应流量) ```bash sudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ``` ### 6. 禁止访问某个 IP 或端口 ```bash sudo iptables -A INPUT -s 192.168.1.200 -j DROP sudo iptables -A INPUT -p tcp --dport 25 -j DROP ``` ### 7. 设置日志记录(可选) ```bash sudo iptables -A INPUT -j LOG --log-prefix "IPTABLES: " ``` --- ## 四、保存和恢复规则 ### 1. 保存规则(不同发行版方法不同) #### Debian/Ubuntu: ```bash sudo iptables-save > /etc/iptables/rules.v4 ``` #### CentOS/RHEL: ```bash sudo service iptables save ``` 或手动保存: ```bash sudo iptables-save > /etc/sysconfig/iptables ``` ### 2. 恢复规则 ```bash sudo iptables-restore < /etc/iptables/rules.v4 ``` --- ## 五、持久化配置(重启后生效) ### Ubuntu/Debian: 安装 `iptables-persistent` 包: ```bash sudo apt install iptables-persistent ``` 然后选择是否保存当前规则。 ### CentOS/RHEL: 安装 `iptables-services`: ```bash sudo yum install iptables-services ``` 并启动服务: ```bash sudo systemctl enable iptables sudo systemctl start iptables ``` --- ## 六、高级功能 ### 1. 端口转发(NAT) ```bash sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.100:80 ``` ### 2. 防御 DoS 攻击(限制每秒连接数) ```bash sudo iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 80 -j DROP ``` ### 3. 使用 `-m` 模块扩展功能 ```bash # 允许特定协议(如 ICMP) sudo iptables -A INPUT -p icmp -j ACCEPT # 允许特定 MAC 地址 sudo iptables -A INPUT -m mac --mac-source 00:11:22:33:44:55 -j ACCEPT ``` --- ## 七、注意事项 - **安全性优先**:尽量使用 `DROP` 作为默认策略,只开放必要的端口和服务。 - **测试规则**:在生产环境中应用规则前,建议先在测试环境验证。 - **备份规则**:每次修改规则后都应备份,防止误操作导致系统不可用。 --- ## 八、总结 | 功能 | 命令 | |------|------| | 查看规则 | `iptables -L -n -v` | | 清空规则 | `iptables -F` | | 设置默认策略 | `iptables -P INPUT DROP` | | 允许 SSH | `iptables -A INPUT -p tcp --dport 22 -j ACCEPT` | | 保存规则 | `iptables-save > /etc/iptables/rules.v4` | | 恢复规则 | `iptables-restore < /etc/iptables/rules.v4` | --- 如果你需要针对特定场景(如 Web 服务器、SSH 防护、NAT 转发等)的详细配置,可以告诉我,我可以为你定制规则。
上一篇:
Linux下的压缩解压缩命令详解
下一篇:
linux的/etc/sysconfig/下找不到iptables文件
标题录入,一次不能超过6条
留言
评论