iptables
是 Linux 系统中最常用的防火墙工具,它基于 Netfilter 框架,用于管理网络数据包的过滤、网络地址转换(NAT)等。以下是 iptables
的常用命令及其详解:
一、基本概念
1. 表(Tables)
-
filter 表:默认表,用于数据包过滤。
-
nat 表:用于网络地址转换(如端口转发、IP 伪装)。
-
mangle 表:用于修改数据包(如 TTL、TOS)。
-
raw 表:用于连接跟踪豁免。
2. 链(Chains)
-
INPUT:处理进入本机的数据包。
-
OUTPUT:处理从本机发出的数据包。
-
FORWARD:处理经过本机转发的数据包。
-
PREROUTING(nat/mangle):数据包进入时立即处理。
-
POSTROUTING(nat/mangle):数据包发出前处理。
二、常用命令详解
1. 查看规则
iptables -L # 列出所有规则 iptables -L -n # 以数字形式显示(不解析域名) iptables -L -v # 显示详细信息(包/字节计数) iptables -L -t nat # 查看指定表(如 nat 表) iptables -S # 以 iptables-save 格式显示规则
2. 清空规则
iptables -F # 清空所有规则 iptables -F INPUT # 清空指定链(如 INPUT) iptables -t nat -F # 清空指定表的规则 iptables -X # 删除用户自定义链 iptables -Z # 重置包/字节计数器
3. 设置默认策略
iptables -P INPUT DROP # 设置 INPUT 链默认策略为 DROP iptables -P FORWARD ACCEPT # 设置 FORWARD 链默认策略为 ACCEPT iptables -P OUTPUT ACCEPT # 设置 OUTPUT 链默认策略为 ACCEPT
4. 添加规则
# 允许特定端口(如 80) iptables -A INPUT -p tcp --dport 80 -j ACCEPT # 允许特定 IP 访问 iptables -A INPUT -s 192.168.1.100 -j ACCEPT # 允许特定网段 iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT # 允许回环接口(localhost) iptables -A INPUT -i lo -j ACCEPT # 允许已建立的连接和相关的数据包 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
5. 插入与删除规则
iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT # 在 INPUT 链第 1 条插入规则 iptables -D INPUT 2 # 删除 INPUT 链第 2 条规则 iptables -D INPUT -p tcp --dport 80 -j ACCEPT # 删除匹配的规则
6. 网络地址转换(NAT)
# 源地址转换(SNAT)用于共享上网 iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE # 目的地址转换(DNAT)用于端口转发 iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:8080 # 本地端口转发(重定向) iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 8080
7. 限制连接数
# 限制每 IP 对 SSH 的连接数(每分钟 3 个) iptables -A INPUT -p tcp --dport 22 -m limit --limit 3/min -j ACCEPT
8. 记录日志
iptables -A INPUT -p tcp --dport 80 -j LOG --log-prefix "HTTP-ACCESS: "
三、常用参数说明
参数 | 说明 |
---|---|
-A |
在链末尾添加规则 |
-I |
在指定位置插入规则 |
-D |
删除规则 |
-P |
设置链的默认策略 |
-s |
源 IP 地址 |
-d |
目标 IP 地址 |
-p |
协议(tcp/udp/icmp) |
--dport |
目标端口 |
--sport |
源端口 |
-i |
输入网卡(如 eth0) |
-o |
输出网卡 |
-j |
动作(ACCEPT/DROP/REJECT/LOG) |
-m |
加载扩展模块(state/limit/multiport) |
四、实用示例
1. 基本防火墙配置
# 清空现有规则 iptables -F # 设置默认策略 iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT # 允许本地回环 iptables -A INPUT -i lo -j ACCEPT # 允许已建立的连接 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 允许 SSH(22 端口) iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许 HTTP 和 HTTPS iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT # 允许 Ping iptables -A INPUT -p icmp -j ACCEPT
2. 保存与恢复规则
# 保存规则(CentOS/RHEL) service iptables save # 或 iptables-save > /etc/sysconfig/iptables # 恢复规则 iptables-restore < /etc/sysconfig/iptables # 保存规则(Ubuntu/Debian) iptables-save > /etc/iptables/rules.v4
五、注意事项
-
谨慎操作:错误的规则可能导致无法远程连接服务器。
-
测试规则:建议在本地测试后再应用到生产环境。
-
保存规则:iptables 规则默认重启后失效,需手动保存。
-
使用脚本:复杂的防火墙配置建议使用脚本管理。
以上是 iptables
的常用命令及详解,掌握这些基础命令可以满足大部分防火墙配置需求。对于更复杂的需求,可以进一步学习 iptables
的扩展模块和高级功能。