当前位置:首页>Linux>Linux命令每日一清单047:iptables--防火墙规则命令速查表

Linux命令每日一清单047:iptables--防火墙规则命令速查表

  • 2026-10-11 08:29:44
Linux命令每日一清单047:iptables--防火墙规则命令速查表

iptables是Linux内核防火墙Netfilter的用户空间命令行工具,用于配置网络数据包过滤、网络地址转换(NAT)和数据包处理规则。作为传统Linux防火墙的标准工具,iptables功能强大、灵活性高,是网络安全的核心组件。

iptables通过链(chain)和表(table)组织规则。表(filter、nat、mangle、raw)决定了数据包处理类型,链(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING)定义了规则应用点。虽然较新的nftables正在逐步取代iptables,但iptables仍然是目前最广泛使用的Linux防火墙工具。掌握iptables是系统管理员保障服务器安全的基础技能。

1. 查看规则

命令说明
sudo iptables -L
列出所有规则(filter表)
sudo iptables -L -n
列出规则,不解析服务名/主机名
sudo iptables -L -v
详细输出(含数据包计数)
sudo iptables -L -n --line-numbers
显示规则编号
sudo iptables -S
以命令格式显示规则
sudo iptables -t nat -L -n -v
查看NAT表规则
sudo iptables -t mangle -L
查看mangle表规则

2. 默认策略

命令说明
sudo iptables -P INPUT DROP
默认丢弃入站流量
sudo iptables -P FORWARD DROP
默认丢弃转发流量
sudo iptables -P OUTPUT ACCEPT
默认允许出站流量
sudo iptables -P INPUT ACCEPT
默认允许入站流量

策略说明: 默认策略适用于没有匹配规则的数据包,DROP直接丢弃,ACCEPT允许通过。

3. 允许流量

命令说明
sudo iptables -A INPUT -i lo -j ACCEPT
允许环回接口流量
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
允许已建立连接
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
允许SSH(端口22)
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
允许HTTP(端口80)
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
允许HTTPS(端口443)
sudo iptables -A INPUT -p icmp -j ACCEPT
允许ICMP(ping)
sudo iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT
允许特定子网
sudo iptables -A INPUT -s 192.168.1.100 -j ACCEPT
允许单个IP

4. 阻止流量

命令说明
sudo iptables -A INPUT -s 203.0.113.10 -j DROP
丢弃指定IP的流量
sudo iptables -A INPUT -s 203.0.113.0/24 -j DROP
丢弃指定子网
sudo iptables -A INPUT -p tcp --dport 23 -j DROP
阻止Telnet(端口23)
sudo iptables -A INPUT -p tcp --dport 25 -j REJECT
拒绝SMTP(返回拒绝消息)
sudo iptables -A INPUT -m mac --mac-source XX:XX:XX:XX:XX:XX -j DROP
阻止指定MAC地址
sudo iptables -A INPUT -p udp --dport 137:138 -j DROP
阻止端口范围

DROP vs REJECT:DROP静默丢弃(对方等待超时),REJECT回复拒绝消息(对方立即收到拒绝)。

5. 端口转发(DNAT)

命令说明
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10:80
转发端口到内网主机
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80
本地端口重定向
sudo iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 80 -j ACCEPT
允许转发流量
sudo iptables -A FORWARD -d 192.168.1.10 -j ACCEPT
允许转发到目标主机

6. NAT(源地址转换/伪装)

命令说明
sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
为出接口启用地址伪装
sudo iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j SNAT --to-source 203.0.113.1
静态源地址转换
sudo sysctl -w net.ipv4.ip_forward=1
启用IP转发(路由器功能)
sudo sysctl -p
加载sysctl配置

持久化IP转发: 编辑/etc/sysctl.conf,设置net.ipv4.ip_forward=1

7. 限速

命令说明
sudo iptables -A INPUT -p tcp --dport 22 -m limit --limit 3/min --limit-burst 3 -j ACCEPT
限制SSH尝试频率(每分钟3次)
sudo iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 50 -j DROP
限制单IP连接数超过50
sudo iptables -A INPUT -p icmp -m limit --limit 1/sec -j ACCEPT
限制ping频率
sudo iptables -A INPUT -p tcp --dport 80 -m limit --limit 5000/sec --limit-burst 10000 -j ACCEPT
HTTP限速
sudo iptables -A INPUT -p tcp --dport 22 -m recent --set --name SSH
使用recent模块追踪
sudo iptables -A INPUT -p tcp --dport 22 -m recent --update --seconds 60 --hitcount 4 --name SSH -j DROP
60秒内4次失败后封禁

8. 日志记录

命令说明
sudo iptables -A INPUT -j LOG --log-prefix "IPT-DROP: "
记录被丢弃的数据包
sudo iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH: " --log-level 4
记录SSH访问
sudo iptables -A INPUT -m limit --limit 5/min -j LOG
限速记录(避免日志泛滥)
sudo iptables -A INPUT -s 203.0.113.10 -j LOG --log-prefix "BLOCKED: "
记录特定IP

查看iptables日志:

sudo grep "IPT-DROP" /var/log/kern.log
sudo dmesg | grep "IPT-DROP"

9. 删除和插入规则

命令说明
sudo iptables -D INPUT 3
删除INPUT链的第3条规则
sudo iptables -D INPUT -p tcp --dport 80 -j ACCEPT
按规则内容删除
sudo iptables -I INPUT 1 -p tcp --dport 22 -j ACCEPT
在顶部插入规则
sudo iptables -R INPUT 3 -p tcp --dport 443 -j ACCEPT
替换第3条规则
sudo iptables -F
清空所有规则链
sudo iptables -F INPUT
仅清空INPUT链
sudo iptables -X
删除自定义链
sudo iptables -Z
清零数据包计数器

10. 保存和恢复规则

命令说明
sudo iptables-save > /etc/iptables/rules.v4
保存IPv4规则
sudo iptables-restore < /etc/iptables/rules.v4
恢复IPv4规则
sudo ip6tables-save > /etc/iptables/rules.v6
保存IPv6规则
sudo apt install iptables-persistent
Debian/Ubuntu持久化
sudo service iptables save
RHEL/CentOS保存
sudo netfilter-persistent save
新版Debian/Ubuntu保存
sudo netfilter-persistent reload
重新加载规则

11. 实用组合模式

命令说明
sudo iptables -A INPUT -p tcp --dport 22 -m state --state NEW -m limit --limit 3/min -j ACCEPT
控制SSH新连接速率
sudo iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
开放多个端口
sudo iptables -A INPUT -p tcp --dport 3306 -s 192.168.1.0/24 -j ACCEPT
仅允许内网访问MySQL
sudo iptables -A INPUT -m state --state INVALID -j DROP
丢弃无效数据包
sudo iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
丢弃NULL扫描包
sudo iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
丢弃XMAS扫描包
sudo iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
允许接口间转发

12. 常用表与链说明

表用途
filter
默认表,用于数据包过滤(INPUT、OUTPUT、FORWARD)
nat
网络地址转换(PREROUTING、POSTROUTING、OUTPUT)
mangle
数据包修改(TTL、TOS等)
raw
状态跟踪免除(PREROUTING、OUTPUT)

链处理顺序:

入站: PREROUTING (raw/mangle/nat) → INPUT (filter)
转发: PREROUTING → FORWARD → POSTROUTING
出站: OUTPUT → POSTROUTING

13. 常用选项速查

选项说明
-A
--append
-I
--insert
-D
--delete
-R
--replace
-F
--flush
-L
--list
-S
--list-rules
-P
--policy
-p
--protocol
-s
--source
-d
--destination
--sport
-
--dport
-
-i
--in-interface
-o
--out-interface
-j
--jump
-t
--table
-m
--match
-v
--verbose
-n
--numeric

14. 故障排查

问题解决方法
SSH连接断开/无法连接
检查INPUT链策略;确保SSH端口规则在DROP之前;准备控制台或预留备用连接
端口转发不生效
确认IP转发已启用;检查FORWARD链允许转发;确认DNAT规则正确
NAT不工作
检查POSTROUTING MASQUERADE规则;确认IP转发已启用
规则保存后重启丢失
检查持久化配置;确认保存脚本/服务已正确配置
限速规则无效
确认limit模块已加载;检查规则顺序(应放在ACCEPT之前)
iptables: No chain/target/match by that name
需要加载对应内核模块;使用modprobe ipt_MASQUERADE等
规则数量太多难以管理
使用-S查看;限制规则数量;考虑使用Firewalld或nftables
临时调试需求
使用-I插入临时规则,测试完删除;使用iptables-save备份

温馨提示: iptables是强大的防火墙工具,但配置复杂且容易出错。建议遵循以下原则:1)始终先设置默认策略为ACCEPT,逐步添加DROP规则,避免把自己锁在系统外;2)SSH规则务必放在INPUT链顶部;3)使用iptables-save备份规则,修改前先备份;4)批量操作时使用iptables-restore提高效率;5)在生产环境变更前先测试规则。对于复杂策略,建议使用脚本管理规则,便于版本控制和回滚。在云环境中,通常结合云防火墙(安全组)使用,形成多层防护。由于nftables正逐步取代iptables,新项目可考虑学习nftables,但iptables仍是当前最广泛使用的防火墙工具。

本文PDF格式下载:

  关注公众号(haopython),请回复: LTIPTABLES

最新文章

随机文章