iptables命令详解
ssk-wh Lv4

iptables是Linux防火墙系统的重要组成部分,主要功能是实现对网络数据包进出设备及转发的控制。它能够添加、删除具体的过滤规则,并可对数据包所做的操作进行控制,例如允许或禁止数据包通过特定的端口或地址。iptables默认维护着4个表和5个链来控制网络数据包的流动,可以使用命令行工具进行配置和管理。

4表

说明
Filter Filter是iptables的默认表,也是最常用的表之一。它可以进行基于源IP地址、目标IP地址、端口号等多种条件的过滤,以允许或禁止数据包通过特定的端口或地址。
NAT NAT表用于网络地址转换(Network Address Translation),可以实现对源IP地址、目标IP地址、端口号等网络协议字段进行转换。NAT表包含3个内建链:PREROUTING链、POSTROUTING链和OUTPUT链。
Mangle Mangle表可以修改数据包的TTL(Time To Live)值,以及数据包的QoS(Quality of Service)信息。
Raw Raw表用于处理异常情况,例如某些不需要被过滤的包,或者需要使用ICMP错误报告的数据包。Raw表包含3个内建链:PREROUTING链、OUTPUT链和POSTROUTING链。

5链

阶段 说明
INPUT 到达本地主机 该链用于对进入本机的数据包进行过滤,可以设置允许或拒绝不同来源的数据包进入本机,例如,可以阻止某些IP地址或端口号的连接请求。
OUTPUT 从本地主机发送出去 该链用于对本机发出的数据包进行过滤,可以设置只允许通过特定端口或协议发送数据包,或者禁止向特定IP地址或端口号发送数据包等。
FORWARD 转发到另一个接口 该链用于对经过本机的数据包进行过滤,例如,可以设置将某些流量重定向到另一台服务器上,或者拒绝不符合条件的数据包从本机转发。
PREROUTING 在路由决策之前 该链是在数据包路由之前执行的,可以对进入本机的数据包进行修改或重定向,例如,可以设置端口映射规则将外部的请求转发至内网服务器。
POSTROUTING 在路由决策之后 该链是在数据包路由之后执行的,可以对经过本机的数据包进行修改或重定向,例如,可以设置NAT规则,将私有IP地址转换为公共IP地址以便访问互联网。

防火墙的数据流图如下表,不同的链处于不同的阶段。

image

堵通策略

iptables 的堵通策略可分为以下几种情况

分类 说明
基于IP地址 iptables可以根据源IP地址或目标IP地址来过滤流量。通过设置规则,可以允许或者拒绝特定IP地址或者IP地址段的数据流,从而实现基于IP地址的堵通策略。
基于端口号 iptables还可以根据源端口号或目标端口号来过滤数据流。通过设置规则,可以允许或者拒绝特定端口号或者端口号范围的数据流,从而实现基于端口号的堵通策略。
基于协议类型 iptables还可以根据传输层协议类型(如TCP、UDP等)来过滤数据流。通过设置规则,可以允许或者拒绝特定协议类型的数据流,从而实现基于协议类型的堵通策略。
基于数据包状态 iptables还可以根据数据包的状态(如已建立连接、未建立连接等)来过滤数据流。通过设置规则,可以允许或者拒绝特定状态的数据流,从而实现基于数据包状态的堵通策略。
基于应用程序 iptables还可以根据应用程序来过滤数据流。通过设置规则,可以允许或者拒绝特定应用程序的数据流,从而实现基于应用程序的堵通策略。

示例

拒绝所有传入和传出的数据包:这个策略可以通过设置默认策略为DROP来实现。这意味着除非有专门的规则来允许某些数据包通过,否则所有传入和传出的数据包都将被阻止。

允许某些IP地址或端口通过:可以使用iptables的规则来明确允许特定的IP地址或端口通过。例如,下面的命令将允许来自IP地址192.168.0.100的所有流量通过:

iptables -A INPUT -s 192.168.0.100 -j ACCEPT
屏蔽指定的IP地址或端口:可以使用iptables的规则来屏蔽特定的IP地址或端口。例如,下面的命令将拒绝来自IP地址192.168.0.100的所有流量:
iptables -A INPUT -s 192.168.0.100 -j DROP
过滤协议类型:可以使用iptables的规则来过滤不同的协议类型。例如,下面的命令将只允许HTTP和HTTPS流量通过:
iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
iptables -A INPUT -p udp -j DROP
防止DDoS攻击:可以使用iptables的规则来防止DDoS攻击。例如,下面的命令将限制每个IP地址在60秒内只能发送100个包:
iptables -A INPUT -p tcp -m limit --limit 100/s --limit-burst 150 -j ACCEPT
iptables -A INPUT -j DROP

语法格式

iptables命令的基本语法格式为:

iptables [-t 表名] 命令选项 [链名] [条件匹配] [-j 目标动作或跳转]

表名和链名: 用于指定iptables命令所操作的表和链。

命令选项: 用于指定管理iptables规则的方式,比如插入、增加、删除、查看等。

条件匹配: 用于指定对符合什么样条件的数据包进行处理。

目标动作或跳转: 用于决定经过这条规则后应该执行的动作。

iptables的规则执行顺序是从上至下依次匹配,如果匹配成功,则根据该规则的动作(如accept、reject、log等)来决定后续的处理方式。一般而言,iptables命令需要root权限才能操作。

表明

-t:指定操作的表名,可选值包括filter、nat、mangle、raw等。

命令选项

-A(append):在指定链的末尾添加一条规则。

-I(insert):在指定链的开头插入一条规则。

-D(delete):删除指定链中匹配条件的规则。

-L(list):列出指定链中的所有规则。

-P(policy):设置指定链的默认策略。

-s(source):指定源IP地址或网段。

-d(destination):指定目标IP地址或网段。

-p(protocol):指定要匹配的协议类型,比如TCP、UDP、ICMP等。

–sport(source port):指定源端口号。

–dport(destination port):指定目标端口号。

-j(jump):指定目标动作或跳转。常用的跳转目标包括ACCEPT、REJECT、DROP、LOG等。

-m(match):指定扩展模块,比如限速模块、状态模块等。

-i(in-interface):指定数据包进入的网络接口。

-o(out-interface):指定数据包输出的网络接口。

匹配参数

–source(或 -s):指定源IP地址或网段。

–destination(或 -d):指定目标IP地址或网段。

–protocol(或 -p):指定要匹配的协议类型,比如TCP、UDP、ICMP等。

–sport:指定源端口号。

–dport:指定目标端口号。

–state:指定连接状态,比如NEW、ESTABLISHED、RELATED等。

–icmp-type:指定ICMP报文类型。

–mac-source:指定源MAC地址。

–mac-destination:指定目标MAC地址。

触发动作

ACCEPT:接受数据包,允许其通过防火墙并到达目标主机。

DROP:丢弃数据包,不允许其通过防火墙并到达目标主机。

REJECT:拒绝数据包,向发送方发送一个错误信息,告知其无法到达目标主机。与DROP不同之处在于,DROP不向发送方发送任何信息。

LOG:记录日志信息,将匹配条件的数据包进行记录。

SNAT(Source Network Address Translation):源地址转换,将数据包的源IP地址更改为指定的地址。常用于实现负载均衡和高可用性等功能。

DNAT(Destination Network Address Translation):目标地址转换,将数据包的目标IP地址更改为指定的地址。常用于实现端口映射和虚拟主机等功能。

MASQUERADE:伪装,将数据包的源IP地址更改为防火墙的IP地址,常用于实现局域网访问外网等功能。

REDIRECT:将数据包重定向到本地主机上的另一个端口或者IP地址,常用于实现端口映射、网络转发等功能。

常用命令

  1. iptables -L:列出当前所有规则,包括INPUT、FORWARD和OUTPUT三个表的规则。
  2. iptables -A:向指定链(如INPUT、FORWARD或OUTPUT)添加新规则,-A表示追加到链的末尾。
  3. iptables -I:向指定链插入新规则,-I后面跟的数字表示插入规则的位置,例如-I INPUT 4表示在INPUT链的第4个位置插入新规则。
  4. iptables -D:删除指定链中的规则,-D后面接要删除的规则编号。
  5. iptables -P:设置指定链的默认策略,例如iptables -P FORWARD DROP表示将FORWARD链的默认策略设置为DROP。
  6. iptables -s:指定源IP地址或网段,例如iptables -A INPUT -s 192.168.0.0/24表示从192.168.0.0/24网段发来的数据包都要进入INPUT链进行处理。
  7. iptables -d:指定目标IP地址或网段,例如iptables -A OUTPUT -d 8.8.8.8表示将发送到8.8.8.8的数据包都从OUTPUT链出去。
  8. iptables -p:指定协议类型,例如iptables -A INPUT -p tcp表示只对TCP数据包进行处理。
  9. iptables -m:指定匹配模块,例如iptables -A INPUT -m state –state ESTABLISHED,RELATED表示对与已经建立的连接或者是由已建立连接所产生的包进行匹配。
  10. iptables -j:指定动作,例如iptables -A INPUT -s 192.168.0.0/24 -j DROP表示将来自192.168.0.0/24网段的数据包都丢弃掉。常用的动作有ACCEPT、DROP、REJECT等。

附录

iptables:超详细Iptables防火墙基础规则(四个规则表,5个种规则链)与编写Iptables防火墙规则

iptables中的默认规则

iptables之语法

iptables系列教程(二)| iptables语法规则

iptables规则链执行顺序

 Comments