iptables 基本使用格式:
iptables [-t TABLE] COMMAND CHAIN [ num ] 匹配标准 -j 处理动作
其中,TABLE为表名,COMMAND为命令,CHAIN 为链名,num为链号, -t TABLE 是可以省略的,默认表是Filter。
从上面的基本使用格式中,可以看到规则是由 匹配标准 和 处理动作 组成,要编写规则,就要了解熟悉各个选项。
一、COMMAND命令:
管理规则的命令
-A:附加一条规则,添加在链的尾部
-I CHAIN [num]: 插入一条规则,插入为对应CHAIN上的第num条;
-D CHAIN [num]: 删除指定链中的第num条规则;
-R CHAIN [num]: 替换指定的规则;
管理链的命令:
-F [CHAIN]:flush,清空指定规则链,如果省略CHAIN,则可以实现删除对应表中的所有链
-P (大写policy)CHAIN: 设定指定链的默认策略;
-N:自定义一个新的空链
-X: 删除一个自定义的空链
-Z:置零指定链中所有规则的计数器;
-E: 重命名自定义的链;
查看类命令:
-L: 显示指定表中的规则;(默认会将主机IP地址反解为主机名,将端口号反解为服务名(会很慢))
-n: 以数字格式显示主机地址和端口号;
-v: 显示链及规则的详细信息
-vv:
-x: 显示计数器的精确值
--line-numbers: 显示规则号码
二、匹配标准(条件):匹配标准又分为通用标准和扩展标准
通用匹配
-s, --src: 指定源地址 IP(指定地址), NET(指定网络)
-d, --dst:指定目标地址
-p (小写){tcp|udp|icmp}:指定协议
-i INTERFACE: 指定数据报文流入的接口
可用于定义标准的链:PREROUTING,INPUT,FORWARD
-o INTERFACE: 指定数据报文流出的接口
可用于标准定义的链:OUTPUT,POSTROUTING,FORWARD
扩展匹配:
隐含扩展:
-p tcp
--sport PORT[-PORT]: 源端口
--dport PORT[-PORT]: 目标端口
--tcp-flags mask comp: 只检查mask指定的标志位,是逗号分隔的标志位列表;comp:此列表中出现的标记位必须为1,comp中没出现,而mask中出现的,必须为0;
--syn = --tcp-flags SYN,FIN,ACK,RST SYN (表示TCP三次握手的第一次)
-p icmp
--icmp-type
0: echo-reply响应报文(本机ping进来的)
8: echo-request请求报文(本机ping出去的)
-p udp
--sport --dport
显式扩展: 使用额外的匹配机制
-m EXTESTION --spe-opt (-m指定扩展名称,而后指定这个扩展自己独有的选项)
-m state:状态扩展 结合ip_conntrack追踪会话的状态(不是TCP的状态)
--state NEW: 新连接请求
ESTABLISHED:已建立的连接
INVALID:非法连接(例如SYN=1,FIN=1)
RELATED:相关联的(例如由命令连接激活的其他连接)设计ftp规则
例如:-m state --state NEW,ESTABLISHED -j ACCEPT
-m multiport: 离散的多端口匹配扩展
--source-ports
--destination-ports --ports
-m iprange 指定一段范围内的IP地址
--src-range ip-ip
--dst-range ip-ip
-m connlimit: 连接数限制(限制特定IP地址的连接数)用于限定同一个客户端地址最多发起多少个请求
! --connlimit-above n 连接数的上限(该选项一般取反,用于表示允许通过低于上限标准的报文)
-m limit
--limit RATE 限制响应速度
--limit-burst 一批请求的最高峰值 (当一批请求进来时,前limit-burst个会被迅速响应)
-m string 限定用户所访问内容中的字符串,屏蔽特殊的字符串
--algo {bm|kmp} 选择匹配算法
--string "STRING" 支持正则表达式
注意:以上所有的条件都可以取反:! 例如 -s ! 172.16.100.6
三、动作(target)【-j 指定】:
ACCEPT:放行(允许报文通过)
DROP:丢弃
REJECT:拒绝
DNAT:目标地址转换
SNAT:源地址转换
REDIRECT:端口重定向
MASQUERADE:地址伪装(主要用于NAT表的POSTROUTING链上实现源地址转换)
LOG:日志
MARK:给报文打标记
NOTRACK:用于raw表,对指定的报文不做任何追踪
LOG与其他的动作一起用时,一定放在其他动作的前面(避免报文被其他动作先行处理,而得不到记录)
--log-prefix “string” 在记录日志时加上标志前缀信息
最后,如果对任何选项有疑问,都可以在linux下man iptables 查看帮助。(当然,前提是已经安装了iptables)