linux访问控制(三)iptables命令书写规则

一、语法基础

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 选项说明
  1. -t
  • 指定规则要添加的表,若省略不写默认为filter表
  1. -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选项指明模块

  1. 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
  1. udp
  • --sport PORT[:PORT]#匹配UDP源端口
  • --dport PORT[:PORT]#匹配UDP目标端口
  1. icmp
  • icmp-type {type[/code]|typename}

0/0 echo-reply #icmp应答

8/0 echo-request #icmp请求

显示扩展:更丰富的功能性扩展,需要使用-m选项指明扩展虚模块
  1. multiport
  • --sprots PORT[:PORT],PORT,... #匹配多个源端口
  • --dports PORT[:PORT],PORT,... #匹配多个目标端口
  1. iprange
  • --src-range from[-to] 匹配连续的一组源ip
  • --dst-range from[-to] 匹配连续的一组目标ip
  1. mac
  • --mac-source XX:XX:XX:XX:XX:XX#匹配源MAC地址
  1. string
  • --slgo {bm|kmp}#指定算法
  • --string pattern#给定匹配字符串的模式
  • --hex-string pattern#给定十六进制的匹配字符串的模式
  1. 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,...]#每周中的第几天

  2. connlimit

  • --connlimit-upto n:小于等于n匹配
  • --connlimit-aboce n:大于n匹配
  1. 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 #未跟踪的连接
  1. -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中其他可用的选项。
  1. –append
  • -A chain
  • 从链尾部追加一条规则
  1. –delete
  • -D chian
  • 从链中删除能匹配到的规则
  1. –delete
  • -D chain rulenum
  • 从链中删除某条规则,从1开始计算
  1. –insert
  • -I chain [rulenum]
  • 向链中插入一条规则使其成为第rulenum条规则,从1开始计算
  1. –replace
  • -R chain rulenum
  • 替换链中的第rulenum条规则
  1. –list
  • -L [chain [rulenum]]
  • 列出某条链或所有链中的规则
  1. –list-rules
  • -S [chain [rulenum]]
  • 打印出链中或所有链中的规则
  1. –flush
  • -F [chain]
  • 删除指定链或所有链中的所有规则
  1. –zero
  • -Z [chain [rulenum]]
  • 置零指定链或所有链的规则计数器
  1. –new
  • -N chain
  • 创建一条用户自定义的链
  1. delete-chain
  • -X [chian]
  • 删除用户自定义的链
  1. –policy
  • -P chain target
  • 设置指定链的默认策略(policy)为指定的target
  1. –rename-chain
  • -E old new
  • 重命名链名称,从old到new
  1. –proto
  • -p proto
  • 指定要检查哪个协议的数据包:可以是/etc/protocols中的协议代码也或协议名称,若tcp,udp,icmp等。若缺省则默认拒绝所有协议的数据包(相当于all和代码0)。
  1. –soure
  • -s address[/mask][…]
  • 指定检查数据包的源地址,等价于–src
  1. –destination
  • -d address[/mask][…]
  • 指定检查数据包的目标地址,等价于–dst
  1. –in-interface
  • -i input name[+]
  • 指定数据包流入接口,若接口名后加"+",表示匹配该接口开头的所有接口
  1. –out-interface
  • -o output name[+]
  • 指定数据包流出接口,若接口名后加"+",表示匹配该接口开头的所有接口
  1. -jump
  • -j target
  • 为规则指定要做的target动作,例如数据包匹配上规则时将要如何处理。
  1. –goto
  • -g chain
  • 直接跳转到自定义链上
  1. –match
  • -m match
  • 指定扩展模块
  1. –numeric
  • n
  • 输出数值格式的ip地址和端口号。会尝试反解为主机名和端口号对应的服务名
  1. –table
  • -t table
  • 指定要操作的table,默认table为filter
  1. –verbose
  • -v
  • 输出更详细的信息
  1. –line-numbers
  • 当list规则时,同时输出行号。
  1. –exact
  • -x
  • 使用此选项使用1024来统计流量。

你可能感兴趣的:(linux基础)