Linux

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > Linux > Linux之iptables命令

Linux之iptables命令的使用方式

作者:言之。

这篇文章主要介绍了Linux之iptables命令的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

iptables命令:作用与常用参数

1. iptables 的作用

iptables 是 Linux 系统上最常用的 防火墙工具,用于配置内核的 netfilter 包过滤框架,主要功能包括:

2. iptables 的 5 个关键链(Chains)

iptables 规则基于 表(Tables)链(Chains) 组织,默认有 5 个链:

链名作用
INPUT处理 进入本机 的数据包(如 SSH、HTTP 请求)。
OUTPUT处理 从本机发出 的数据包(如 ping、curl 请求)。
FORWARD处理 经过本机路由 的数据包(如网关服务器)。
PREROUTING在路由决策前修改数据包(DNAT、端口转发)。
POSTROUTING在数据包离开前修改源地址(SNAT、MASQUERADE)。

3. iptables 的 4 个核心表(Tables)

表名作用
filter默认表,用于包过滤(允许/拒绝流量)。
nat用于网络地址转换(NAT)。
mangle修改数据包内容(如 TTL、TOS)。
raw绕过连接跟踪(conntrack),用于高性能场景。

4. iptables 常用参数

(1)通用参数

参数作用
-t <表名>指定操作的表(如 -t nat、-t filter,默认 filter)。
-A <链名>追加 规则到链尾(如 -A INPUT)。
-I <链名> [规则号]插入 规则到链首或指定位置(如 -I INPUT 2)。
-D <链名> <规则号>删除 指定规则(如 -D INPUT 3)。
-L列出 规则(-L INPUT 查看特定链)。
-F清空 链中的所有规则(-F INPUT 清空 INPUT 链)。
-P <链名> <动作>设置链的默认策略(如 -P INPUT DROP)。
-v显示详细信息(如数据包计数 pkts 和字节 bytes)。
-n禁用 DNS 反向解析,加快输出速度。

(2)规则匹配参数

参数作用
-p <协议>匹配协议(如 -p tcp、-p udp、-p icmp)。
--dport <端口>匹配目标端口(需配合 -p tcp/udp,如 --dport 80)。
--sport <端口>匹配源端口(如 --sport 22)。
-s <IP>匹配源 IP(如 -s 192.168.1.100)。
-d <IP>匹配目标 IP(如 -d 10.0.0.1)。
-i <网卡>匹配输入网卡(如 -i eth0)。
-o <网卡>匹配输出网卡(如 -o wlan0)。
-m <模块>使用扩展模块(如 -m state --state ESTABLISHED)。

(3)动作(Target)参数

参数作用
-j ACCEPT允许数据包通过。
-j DROP丢弃数据包(无响应)。
-j REJECT拒绝数据包(返回 ICMP 拒绝消息)。
-j LOG记录日志(/var/log/messages)。
-j DNAT目标地址转换(如 -j DNAT --to-destination 192.168.1.2:80)。
-j SNAT源地址转换(如 -j SNAT --to-source 1.2.3.4)。
-j MASQUERADE动态 SNAT(适用于拨号或 DHCP 获取 IP)。

5. 常用示例

(1)查看规则

iptables -L -n -v          # 查看 filter 表规则(默认)
iptables -t nat -L -n -v   # 查看 nat 表规则
iptables -L INPUT -n -v    # 查看 INPUT 链规则

(2)允许/拒绝流量

iptables -A INPUT -p tcp --dport 22 -j ACCEPT   # 允许 SSH
iptables -A INPUT -p tcp --dport 80 -j DROP    # 拒绝 HTTP
iptables -A INPUT -s 192.168.1.0/24 -j ACCEPT  # 允许局域网访问

(3)NAT 与端口转发

# SNAT(内网机器通过网关访问外网)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# DNAT(将外网 80 端口转发到内网 192.168.1.2)
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to 192.168.1.2:80

(4)保存与恢复规则

iptables-save > /etc/iptables.rules   # 保存规则
iptables-restore < /etc/iptables.rules # 恢复规则

心得:

iptables 核心功能:包过滤、NAT、端口转发、流量统计。

关键表与链filternatmangleraw + INPUT/OUTPUT/FORWARD/PREROUTING/POSTROUTING

高频参数

进阶建议

iptables 频繁查询对系统性能的影响及优化建议

频繁执行该命令可能会对系统性能(尤其是 DNS 服务器)造成负面影响

1. iptables -t nat -nvL 的 CPU 开销

1.1 命令执行过程

iptables -t nat -nvL 是一个只读查询命令,主要功能是:

1.2 CPU 资源占用分析

规则遍历开销

原子计数器读取

1.3 对 DNS 服务器的影响

DNS 服务器(如 BIND、CoreDNS)通常是 CPU 密集型 服务,依赖快速处理 UDP 查询。如果 iptables -nvL 高频执行(如每秒多次),可能导致:

示例量化分析

2. iptables 的内核锁竞争问题

2.1 xtables 锁机制

iptables 通过内核的 xt_table 锁(互斥锁) 保护规则表的读写一致性:

2.2 锁竞争对 DNS 的影响

如果 DNS 服务器与 iptables 规则管理运行在同一台机器上,可能出现:

DNS 线程阻塞

极端情况:丢包或超时

如何检测锁竞争?

# 使用 perf 监控 xtables 锁等待(需内核支持)
perf probe -a 'xt_table_lock'
perf stat -e 'probe:xt_table_lock' -a sleep 10

3. 优化建议

3.1 降低查询频率

避免每秒多次查询,改为 每分钟 1 次仅在需要时执行

# 示例:Crontab 每分钟记录一次
* * * * * /sbin/iptables -t nat -nvL >> /var/log/iptables-nat.log

3.2 使用更高效的工具

改用 nftables(现代 Linux 默认防火墙,锁机制更高效):

nft list table ip nat  # 替代 iptables -t nat -nvL

使用 conntrack 监控连接状态(避免遍历规则):

conntrack -L -j  # 以 JSON 格式显示 NAT 会话

3.3 优化系统环境

减少 iptables 规则规模

分离关键服务

监控与告警

dstat -tc --top-cpu  # 查看 CPU 占用最高的进程

心得:

问题影响解决方案
CPU 占用高DNS 查询延迟增加,可能超时降低查询频率,改用 nftables
内核锁竞争DNS 线程阻塞,响应变慢或丢包减少规则规模,分离 DNS 与防火墙节点
I/O 压力日志写入冲突,可能耗尽磁盘限制日志大小,使用 logrotate

最终建议

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文