菜鸟科技网

Linux iptables命令如何正确配置规则?

Linux iptables 是 Linux 系统中功能强大的防火墙工具,它位于网络协议栈的内核层,通过规则包过滤机制实现对网络流量的控制,iptables 基于链(chain)和表(table)的结构管理规则,其中表分为 filter、nat、mangle 和 raw 四种,filter 表是默认的表,用于处理数据包的过滤,而 nat 表则用于网络地址转换,常用于路由器和网关场景,理解 iptables 的工作原理对于网络安全管理至关重要,下面将详细介绍其命令结构、常用操作及高级配置。

Linux iptables命令如何正确配置规则?-图1
(图片来源网络,侵删)

iptables 的基本结构

iptables 的规则存储在不同的表中,每个表包含多个链,链是规则的集合,数据包经过时会依次匹配链中的规则,常见的链包括 INPUT(进入本机的数据包)、OUTPUT(从本机发出的数据包)、FORWARD(转发数据包)等,以 filter 表为例,其默认包含 INPUT、OUTPUT 和 FORWARD 三条链,而 nat 表则包含 PREROUTING(路由前处理)、POSTROUTING(路由后处理)和 OUTPUT(本地输出)链,规则匹配遵循顺序原则,一旦找到匹配项即执行对应动作(如 ACCEPT、DROP、REJECT 等),否则执行链的默认策略。

iptables 命令的基本语法

iptables 命令的基本语法为 iptables [-t 表名] [命令选项] [链名] [规则匹配条件] [动作],其中表名默认为 filter,命令选项包括 -A(追加规则)、-I(插入规则)、-D(删除规则)、-L(列出规则)、-F(清空规则)等,规则匹配条件可分为通用条件(如 -p 指定协议、-s 指定源地址、-d 指定目标地址)和扩展条件(如 --sport 指定源端口、--dport 指定目标端口、-m state 匹连接状态等),允许来自 192.168.1.0/24 网段的 ICMP 协议数据包通过,可执行命令 iptables -A INPUT -s 192.168.1.0/24 -p icmp -j ACCEPT

常用操作示例

  1. 查看规则:使用 iptables -L -n -v 命令可列出 filter 表中所有规则,-n 表示以数字形式显示地址和端口,-v 显示详细信息(如数据包数量、字节大小),若需查看特定链的规则,可添加链名参数,如 iptables -L INPUT -n

  2. 添加规则-A 用于在链末尾追加规则,-I 可在指定位置插入规则(默认插入到链首),允许本地回环接口的流量:iptables -A INPUT -i lo -j ACCEPT;限制 SSH 连接仅允许 192.168.1.100 访问:iptables -A INPUT -p tcp --dport 22 -s 192.168.1.100 -j ACCEPT

    Linux iptables命令如何正确配置规则?-图2
    (图片来源网络,侵删)
  3. 删除规则:可通过规则序号删除,如 iptables -D INPUT 1 删除 INPUT 链的第一条规则;或通过精确匹配删除,如 iptables -D INPUT -p tcp --dport 80 -j DROP

  4. 设置默认策略:默认策略决定当数据包不匹配任何规则时的处理方式,如 iptables -P INPUT DROP 表示丢弃所有进入本机的数据包(需谨慎设置,可能导致无法远程连接)。

NAT 配置示例

nat 表常用于实现内网共享上网或端口映射,假设内网网段为 192.168.100.0/24,外网接口为 eth0,启用 SNAT(源地址转换)的命令为:iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o eth0 -j MASQUERADE,该命令将内网数据包的源地址转换为 eth0 的 IP,若需将内网服务器的 80 端口映射到外网服务器的 8080 端口,可使用 DNAT(目标地址转换):iptables -t nat -A PREROUTING -p tcp --dport 8080 -i eth0 -j DNAT --to-destination 192.168.100.10:80

高级规则匹配

iptables 支持扩展模块实现复杂匹配,如 conntrack 模块可匹配连接状态(ESTABLISHED、RELATED、NEW、INVALID),例如允许已建立的连接返回:iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPTlimit 模块可限制流量速率,如限制 ICMP 请求数量不超过每秒 1 次:iptables -A INPUT -p icmp -m limit --limit 1/s -j ACCEPT,还可通过 multiport 模块匹配多个端口,如 iptables -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT

Linux iptables命令如何正确配置规则?-图3
(图片来源网络,侵删)

规则的保存与恢复

不同 Linux 发行版的规则保存方式不同,在 CentOS/RHEL 中可使用 service iptables save 将规则保存到 /etc/sysconfig/iptables 文件,Ubuntu 中则通过 iptables-save > /etc/iptables/rules.v4 保存,恢复时使用 iptables-restore < /etc/iptables/rules.v4,建议在修改规则前先备份,避免误操作导致网络中断。

常见问题与注意事项

  1. 规则顺序的重要性:iptables 按顺序匹配规则,错误的规则顺序可能导致预期外的结果,若先设置 ACCEPT 宽泛规则,后设置 DROP 严格规则,则严格规则可能无法生效。
  2. 回环接口的处理:本地进程通信通过回环接口(lo),需确保允许 lo 接口的流量,否则可能导致本地服务异常。
  3. 规则的持久化:重启后 iptables 规则会丢失,需配置自动加载规则的服务,或在启动脚本中手动加载。

相关问答FAQs

问题1:如何临时阻止某个 IP 地址访问服务器?
解答:使用 iptables 的 -I-A 命令添加拒绝规则,iptables -I INPUT -s 192.168.1.100 -j DROP 可立即阻止该 IP 的所有访问,若需解除限制,执行 iptables -D INPUT -s 192.168.1.100 -j DROP,注意,此方法为临时措施,重启后需重新添加规则。

问题2:为什么设置了 iptables 规则后,本地服务无法访问?
解答:通常是因为规则未正确处理本地流量或回环接口,检查以下几点:1. 确认允许 lo 接口流量,如 iptables -A INPUT -i lo -j ACCEPT;2. 检查 INPUT 链的默认策略是否为 DROP,若是需添加允许本地服务的规则(如 -A INPUT -p tcp --dport 80 -j ACCEPT);3. 使用 iptables -L -n -v 查看规则匹配情况,确认未被误拦截。

分享:
扫描分享到社交APP
上一篇
下一篇