本文目录导读:

我来详细介绍iptables配置Linux防火墙规则的方法。
iptables基础概念
表(Tables)
- filter表:默认表,用于过滤数据包
- nat表:用于网络地址转换
- mangle表:用于修改数据包
- raw表:用于配置连接跟踪
链(Chains)
- INPUT:处理进入本机的数据包
- OUTPUT:处理本机发出的数据包
- FORWARD:处理转发的数据包
- PREROUTING:数据包进入路由前
- POSTROUTING:数据包离开路由后
基本命令格式
iptables [-t 表名] 命令 链名 匹配条件 -j 动作
常用配置示例
1 查看规则
# 查看filter表规则 iptables -L -n -v # 查看NAT表规则 iptables -t nat -L -n -v # 显示规则编号 iptables -L --line-numbers
2 基本策略设置
# 设置默认策略 iptables -P INPUT DROP # 默认拒绝入站 iptables -P FORWARD DROP # 默认拒绝转发 iptables -P OUTPUT ACCEPT # 默认允许出站
3 常用规则配置
# 允许本地回环 iptables -A INPUT -i lo -j ACCEPT iptables -A OUTPUT -o lo -j ACCEPT # 允许已建立的连接 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT # 开放SSH端口(22) iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 开放Web端口 iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp --dport 443 -j ACCEPT # 开放特定IP访问 iptables -A INPUT -s 192.168.1.100 -j ACCEPT # 限制特定端口访问来源 iptables -A INPUT -p tcp --dport 3306 -s 192.168.1.0/24 -j ACCEPT # 阻止特定IP iptables -A INPUT -s 10.0.0.5 -j DROP # 限制ICMP(Ping) iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
高级配置
1 端口转发
# 开启IP转发 echo 1 > /proc/sys/net/ipv4/ip_forward # 端口转发(将80端口转发到8080) iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
2 限制连接数
# 限制SSH连接频率 iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --set iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m recent --update --seconds 60 --hitcount 5 -j DROP # 限制并发连接数 iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT
3 日志记录
# 记录被拒绝的包 iptables -A INPUT -j LOG --log-prefix "IPTABLES-DROP: " --log-level 4 # 记录特定端口的访问 iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH-ACCESS: "
规则管理和持久化
1 管理规则
# 删除规则(按编号) iptables -D INPUT 3 # 删除规则(按匹配) iptables -D INPUT -p tcp --dport 80 -j ACCEPT # 插入规则到指定位置 iptables -I INPUT 2 -s 192.168.1.0/24 -j ACCEPT # 替换规则 iptables -R INPUT 5 -s 192.168.1.0/24 -j DROP # 清除所有规则 iptables -F iptables -t nat -F iptables -X
2 持久化规则
# CentOS/RHEL service iptables save # 或 iptables-save > /etc/sysconfig/iptables # Ubuntu/Debian apt-get install iptables-persistent netfilter-persistent save # 通用方法 iptables-save > /etc/iptables.rules # 恢复规则 iptables-restore < /etc/iptables.rules
完整配置示例
#!/bin/bash # 清除所有规则 iptables -F iptables -X iptables -t nat -F iptables -t mangle -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 # 允许Ping(可选) iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT # 允许SSH iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 允许HTTP和HTTPS iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT # 允许内部网络 iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT # 记录并丢弃其他所有 iptables -A INPUT -j LOG --log-prefix "Dropped: " --log-level 4 iptables -A INPUT -j DROP # 保存规则 iptables-save > /etc/iptables.rules
安全注意事项
-
配置前备份现有规则:
iptables-save > /root/iptables.backup
-
远程配置时设置定时任务回滚:
# 设置10分钟后自动恢复 (sleep 600; iptables-restore < /root/iptables.backup) &
-
逐步测试规则:每次添加规则后测试连接
-
按顺序重要:规则从上到下匹配,将常用规则放在前面
-
考虑iptables的替代品:对于简单场景,可以考虑使用
ufw或firewalld
标签: iptables 配置 Linux 防火墙
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。