iptables命令

1 iptables 基本语法格式

用法:

说明:

  • 表名:指定iptables命令所操作的表,如fiter、nat、mangle、raw,如果不指定,默认为filter。
  • 链名:用于指定iptables命令所操作的链,如PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING;
  • 命令选项:用于指定管理iptables规则的方式,如:插入、增加、删除、查看等;
  • 条件匹配:用于指定对符合什么样条件的数据包进行处理;
  • 目标动作或跳转:用于指定数据包的处理方式,比如允许通过、拒绝、丢弃、跳转(Jump)给其它链处理。

2 iptables的命令选项

3 其他选项

(注:选项前可选的符号 ! 表示取反,如 ! -p tcp,即表示除tcp 协议之外)

4 -j, –jump target 选项

-j 选项用来指定对数据包要进行的动作,常用动作包括:ACCEPT、REJECT、DROP、REDIRECT等,分别说明如下:

  • ACCEPT:将数据包放行,执行完该动作后,数据包不再匹配其他规则,直接跳到下一个钩子点;
  • REJECT:拦阻该数据包,并发包通知对方。可以发送的通知包包括:ICMP port-unreachable、ICMP echo-reply、tcp-reset(通知对方关闭连接),之后数据包不再匹配其他规则,直接中断过滤程序。
  • DROP:将数据包丢弃。执行完该动作后,不再匹配其他规则。
  • REDIRECT:将数据包重定向到另一个端口,执行完该操作后,会继续匹配其他规则。这个功能可以用来实现透明代理,或用来保护WEB服务器。例如,将所有访问80端口的数据包重定向到8080端口:
  • MASQUERADE:改写数据包的源IP为防火墙的某个网口的IP,可以指定port对应的范围,执行完该操作后,直接跳到下一个钩子点(POSTROUTING上的mangle表)。
  • LOG:将数据包的相关信息发送给syslog,记录在log文件中,文件的详细位置在/etc/syslog.conf文件中配置。执行完该操作后,继续匹配其他的规则。
  • SNAT:修改数据包的源IP为指定IP或IP范围,也可以指定port的对应范围。执行完该操作后,将直接跳到一下个规则(POSTROUTING的mangle表)。
  • DNAT:修改数据包的目的IP地址为指定或IP范围,也可以指定port的对应范围。执行完该操作后,直接跳到下一个规则(INPUT的filter,或FORWARD的filter)。
  • MIRROR:反射该数据包,即把数据的源IP与目的IP对调后,将数据包发送回去。执行完该操作后,停止后续的匹配。
  • QUEUE:中断过滤,将数据包放入队列,交给其他程序处理。通过自行开发的处理程序,可以进行其他的处理。
  • RETURN:结束当前的过滤,返回到主规则链继续过滤。如果把自定义的规则链看成是一个子程序,那么这个动作就相当于提前结束子程序,并返回到主程序中。
  • MARK:将数据包打上某个标记,以便作为后续过滤的条件判断依据。执行完处理动作后,会继续匹配后续的规则。例如:

5 -p 选项

-p选项用来指定协议类型,例如:

该使用用来匹配tcp协议类型。在命令中也可以使用 ! 符号进行反向匹配,例如

表示不匹配tcp协议的数据。
-p 选项通常与其他辅助选项一起使用。

5.1 tcp

5.1.1 –sport 与 –dport

例:

表示匹配进入到本机的源端口为22的数据包。指定的端口可以是单一的端口,也可以是一个范围:

表示从22端口到80端口的所有端口均符合条件。
如果要匹配不连续的多个端口,则必须使用–multiport 参数,后文介绍。
匹配端口号时,也可以使用 ! 符号进行反向匹配。
其中–sport 也可以修改为–dport,表示匹配目的端口。用法与sport参数一致。

5.1.2 –tcp-flags

例:

匹配 tcp 数据包的状态标志,参数分为两部分列表(每个列表内部用逗号为分隔符,两个列表之间用空格分开),第一部分列举出想匹配的标志,第二部分指出前面列举出的标志有哪些被设置,未被列举的标志必须是空的。
TCP状态包含以下几个标志:SYN、ACK、FIN、RST、PSH、ECE、CWR、ALL、NONE等。
在匹配标志时,也可以使用 ! 符号进行反向匹配。

5.1.3 –syn

例:

用来表示TCP通信协议中,SYN位被打开,而ACK与FIN位关闭的数据包,即TCP的初始连接,

的作用完全相同。
如果使用 ! 符号,可用来匹配非要求连接的数据包。

关于-p tcp 协议的更多参数,可以通过 iptables -p tcp –help 来查看。

5.2 udp

例:

匹配源端口为123的udp数据包。
–sport 也可以替换为–dport,表示匹配指定的目的端口。用法与 tcp 的–sport/–dport 相同。

6 -m, –match 选项

-m匹配选项通常与其他选项结合使用。

6.1 mark

例:

用来匹配数据包是否被标识某个号码,如果匹配成功,可以通过MARK处理动作,将该数据包标识一个号码,号码最大不可以超过4294967296 (1 << 24)。

6.2 owner

例:

用来匹配来从本机发出的数据包,是否为特定某个用户产生的,以避免服务器使用root或其他身份将敏感数据发出去,可以降低系统被攻击的概率。不过这个功能无法匹配从其他主机发出的数据包。

用来匹配从本机发出的数据包,是否为特定某个组的用户产生的。功能同上。

用来匹配从本机发出的数据包,是否为特定某个进程发出的。功能同上。

用来匹配从本机发出的数据包,是否为特定某个会话ID(session id)的响应数据包。功能同上。

6.3 state

例:

用来匹配链接状态,连接状态共有四种:INVALID、ESTABLISHED、NEW 和 RELATED。
INVALID 表示该数据包的会话编号(session id)无法识别或编号不正确。
ESTABLISHED 表示该数据包属于某个已经建立的连接。
NEW 表示该数据包想要发起一个连接(重设连接或者将连接重定向)。
RELATED 表示该数据包属于某个已经建立的连接所建立的新连接或子连接,例如ftp协议的数据传输连接,必定由其对应的ftp命令连接所创建。

6.4 mac

例:

用来匹配发往本机的源MAC地址为12:34:56:78:12:34的数据包。
这个匹配不能用在OUTPUT和POSTROUTING链上,因为数据包要到达网卡后,才能由网卡驱动程序通过ARP通讯协议查出目的MAC,所以iptables在对数据包进行匹配时,并不知道该数据包会被送到哪个网口去。

6.5 multiport

例:

用来匹配不连续的多个源端口,一次最多可以匹配15个端口。也可以使用 ! 符号来表示反向匹配。
其中–source-port 可以替换为 –destination-port,表示匹配多个目的端口,

–port 这个参数比较特殊,用来匹配源端口和目的端口相同的封包,其他用法同上。

6.6 limit

例:

用来匹配某段时间内的平均流量,上例中表示每小时平均是否超过一次3个数据包。
除了按每小时平均以外,也可以按每秒、每分钟或每天平均,参数为 /second、/minute、/day。
默认值为每小时平均一次。
除了对数据包数量进行匹配之外,设定该参数也会在条件达成时,暂停数据包的匹配动作,以避免因网络洪水攻击导致服务被阻断。

用来匹配瞬间大量的数据包的数量,如上例中表示一次同时涌入的数据包的数量是5(默认值也 5),超过此上限的数据包将被直接丢弃。

6.7 set

该模块用来匹配由ipset 定义的ip集合。
例:

表示匹配源ip地址在testlist列表中的ip,src也可以被替换为dst,表示目的IP。

参考

————————————————————

原创文章,转载请注明: 转载自孙希栋的博客

本文链接地址: 《iptables命令》

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Scroll Up