一、语法基础
1.1 语法格式
-
iptables [-t table] {-A|-C|-D} chain rule-specification
-
ip6tables [-t table] {-A|-C|-D} chain rule-specification
-
iptables [-t table] -I chain [rulenum] rule-specification
-
iptables [-t table] -R chain rulenum rule-specification
-
iptables [-t table] -D chain rulenum
-
iptables [-t table] -S [chain [rulenum]]
-
iptables [-t table] {-F|-L|-Z} [chain [rulenum]]
[options…] -
iptables [-t table] -N chain
-
iptables [-t table] -X [chain]
-
iptables [-t table] -P chain target
-
iptables [-t table] -E old-chain-name new-chain-name
-
rule-specification = [matches…] [target]
-
match = -m matchname [per-match-options]
-
target = -j targetname [per-target-options]
1.2 选项说明
- -t
- 指定规则要添加的表,若省略不写默认为filter表
- -m matchname [per-match-options]
- 该项为指定匹配条件。
- 匹配条件有两类:基本匹配和扩展匹配
- 基本匹配:
-s address[/mask][,...]
#匹配源地址-d address[/mask][,...]
#匹配目标地址-p tcp|udp|icmp|all
#匹配协议,这些协议是能在/etc/protocols
中找到的协议类型。-i interface_name
#匹配报文流入的网卡接口-o interface_name
#匹配报文流出的网卡接口
- 扩展匹配:
隐式扩展:
对某一种协议的扩展,不使用-m选项指明模块
- tcp
--sport PORT[:PORT]
#匹配tcp源端口--dport PORT[:PORT]
#匹配tcp目标端口--tcp-flags MASK COMP
#匹配tcp中的标志位SYN、ACK、FIN、RST、ALL、NONE--syn
#匹配tcp三次握手的第一次握手,等同于--tcp-flags SYN ACK FIN RST SYN
- udp
--sport PORT[:PORT]
#匹配UDP源端口--dport PORT[:PORT]
#匹配UDP目标端口
- icmp
- icmp-type {type[/code]|typename}
0/0 echo-reply #icmp应答
8/0 echo-request #icmp请求
显示扩展:更丰富的功能性扩展,需要使用-m选项指明扩展虚模块
- multiport
--sprots PORT[:PORT],PORT,...
#匹配多个源端口--dports PORT[:PORT],PORT,...
#匹配多个目标端口
- iprange
--src-range from[-to]
匹配连续的一组源ip--dst-range from[-to]
匹配连续的一组目标ip
- mac
--mac-source XX:XX:XX:XX:XX:XX
#匹配源MAC地址
- string
--slgo {bm|kmp}
#指定算法--string pattern
#给定匹配字符串的模式--hex-string pattern
#给定十六进制的匹配字符串的模式
time
--datestart YYY[-MM[-DD[Thh[:mm[:ss]]]]]
#开始日期
--datestop YYY[-MM[-DD[Thh[:mm[:ss]]]]]
#结束日期
--timestart hh:mm:[:ss]
#开始时间
--timestop hh:mm:[:ss]
#结束时间
--monthdays day[,day,...]
#每月中的第几天
--weekdays day[,day,...]
#每周中的第几天connlimit
--connlimit-upto n
:小于等于n匹配--connlimit-aboce n
:大于n匹配
- limit
--limit rate[/secnod|/miute|/hour|/day]
#频率
--limit-burst number
#从第几个开始
7.limit
--limit rate[/second|/minute|/hour|/day]
#频率
--limit-burst number
#从第几个开始8.state
--state state-options
,这里的五个状态是指数据包的状态,而非客户端或者服务器当时所处的状态。
- NEW #新建立连接,例如tcp三次捂手的第一次SYN数据包的状态就是NEW,由自己主动发送给对方的往往都是new,所以禁止NEW状态也就意味着不允许主动和对方建立连接,也不允许外界和本机建立连接。(常见于tcp/udp/icmp协议中,下同)
- ESTABLISHED #已建立的连接,只要数据包穿过了防火墙,接下来双方传输的数据包状态都是
ESTABLISHED
。- RELATED #与已建立的连接相关联的连接,完全是被动或临时建立的连接之间传输的数据包。例如在抓包的时候,由路由器返回的icmp包就是RELATED状态的数据包。只要数据包是因为本机先送出一个数据包而导致另一条连接的产生,那么这个新连接的所有数据包都手语RELATED状态的数据包。
- INVALID #无效的连接,恶意的数据包,对于这类包的规则都应该放在链中的第一条。以防止恶意的循环攻击。
- UNTRACKED #未跟踪的连接
- -j选项,该选项为匹配后处理的动作。
{-j targetname [per-target-options]}
- ACCEPT #允许通过
- DROP #丢弃匹配到的包
- REJECT #拒绝通过
- RETURN #返回调用的链
- REDIRECT #端口转发
- LOG #记录日志
- MARK #做防火墙标记
- DNAT #目标地址转换
- SNAT #源地址转换
- 例:
iptables -A INPUT -i lo -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
1.3 iptables中其他可用的选项。
- –append
- -A chain
- 从链尾部追加一条规则
- –delete
- -D chian
- 从链中删除能匹配到的规则
- –delete
- -D chain rulenum
- 从链中删除某条规则,从1开始计算
- –insert
- -I chain [rulenum]
- 向链中插入一条规则使其成为第rulenum条规则,从1开始计算
- –replace
- -R chain rulenum
- 替换链中的第rulenum条规则
- –list
- -L [chain [rulenum]]
- 列出某条链或所有链中的规则
- –list-rules
- -S [chain [rulenum]]
- 打印出链中或所有链中的规则
- –flush
- -F [chain]
- 删除指定链或所有链中的所有规则
- –zero
- -Z [chain [rulenum]]
- 置零指定链或所有链的规则计数器
- –new
- -N chain
- 创建一条用户自定义的链
- delete-chain
- -X [chian]
- 删除用户自定义的链
- –policy
- -P chain target
- 设置指定链的默认策略(policy)为指定的target
- –rename-chain
- -E old new
- 重命名链名称,从old到new
- –proto
- -p proto
- 指定要检查哪个协议的数据包:可以是
/etc/protocols
中的协议代码也或协议名称,若tcp,udp,icmp等。若缺省则默认拒绝所有协议的数据包(相当于all和代码0)。
- –soure
- -s address[/mask][…]
- 指定检查数据包的源地址,等价于–src
- –destination
- -d address[/mask][…]
- 指定检查数据包的目标地址,等价于–dst
- –in-interface
- -i input name[+]
- 指定数据包流入接口,若接口名后加"+",表示匹配该接口开头的所有接口
- –out-interface
- -o output name[+]
- 指定数据包流出接口,若接口名后加"+",表示匹配该接口开头的所有接口
- -jump
- -j target
- 为规则指定要做的target动作,例如数据包匹配上规则时将要如何处理。
- –goto
- -g chain
- 直接跳转到自定义链上
- –match
- -m match
- 指定扩展模块
- –numeric
- n
- 输出数值格式的ip地址和端口号。会尝试反解为主机名和端口号对应的服务名
- –table
- -t table
- 指定要操作的table,默认table为filter
- –verbose
- -v
- 输出更详细的信息
- –line-numbers
- 当list规则时,同时输出行号。
- –exact
- -x
- 使用此选项使用1024来统计流量。