iptables学习[07]: iptables扩展匹配条件--显式扩展

一、简介

  • 显示扩展即必须使用-m选项指明要调用的扩展模块名称,需要手动加载扩展模块。

二、常用扩展模块

multiport扩展

功能说明:以离散方式定义多端口匹配,最多指定15个端口。

  • [!] --source-ports,--sports port[,port|,port:port]...:指定多个源端口。
  • [!] --destination-ports,--dports port[,port|,port:port]...:指定多个目标端口。
  • [!] --ports port[,port|,port:port]...:多个源或目标端。

技巧:连续多个端口使用:相连;不连续的多个端口使用,相连。

范例:拒绝指定端口的流量。

# 拒绝192.168.0.0/16这个网段对192.168.10.13这台主机的20,21,22,80四个端口的访问。
iptables -AINPUT -s 192.168.1.0.0/16 -d 192.168.10.13 -p tcp -m multiport --dports 20:22,80 -j ACCEPT

iprange扩展

功能说明:指明连续的(但一般不是整个网络)ip地址范围。

  • [!] --src-range from[-to] 源IP地址范围。
  • [!] --dst-range from[-to] 目标IP地址范围。

范例:拒绝多个地址的访问。

# 在源地址范围内访问本地主机TCP协议80端口都被拒绝。
iptables -t filter -AINPUT -p tcp --dport 80 -m iprange --src-range 192.168.10.1-192.168.10.5 -j DROP

mac扩展

功能说明

1、mac 模块可以指明源MAC地址,,适用于:PREROUTING, FORWARD,INPUT 这些链。

2、在使用mac扩展是建议使用-s选项,MAC地址是可以手动改变的。

  • [!] --mac-source XX:XX:XX:XX:XX:XX

范例:在报文中匹配指定的MAC地址,拒绝含有此MAC地址的数据包。

iptables -t filter -AINPUT -m mac --mac-source 00:0c:29:ec:3f:ac -j DROP

string 扩展

功能说明:对报文中的应用层数据做字符串模式匹配检测。

  • --algo {bm|kmp} 字符串匹配检测算法
    • bm:Boyer-Moore
    • kmp:Knuth-Pratt-Morris
  • --from offset:开始偏移。
  • --to offset:结束偏移。
  • [!] --string pattern:要检测的字符串模式,普通字符串。
  • [!] --hex-string pattern:要检测字符串模式,16进制格式

范例:在报文中匹配指定字符串,拒绝含有指定字符串的数据包。

iptables -A OUTPUT -p tcp --sport 80 -m string --algo bm --from 62  --string "google" -j REJECT

time 扩展

功能说明:根据报文到达的时间与指定的时间范围进行匹配。

  • --datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 日期 时间。
  • --datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 日期 时间。
  • --timestart hh:mm[:ss] 日期 时间。
  • --timestop hh:mm[:ss] 日期 时间。
  • [!] --monthdays day[,day...] 每个月的几号。
  • [!] --weekdays day[,day...] 星期几 1-7分别表示星期一到星期日。
  • --kerneltz:内核时区(当地时间),不建议使用,CentOS 7 系统默认为 UTC。

范例:规定在指定时间范围内拒绝,报文中含有指定IP段的数据包。

iptables -A INPUT -s 192.168.10.10/16 -d 192.168.10.12 -p tcp --dport 80 -m time --timestart 14:30 --timestop 18:30 --weekdays Sat,Sun --kerneltz-j DROP

connlimit 扩展

功能说明:根据每客户端IP做并发连接数数量匹配,可防止Dos(Denial of Service,拒绝服务)攻击。

  • --connlimit-upto:连接的数量小于等于指定连接数量时匹配。
  • --connlimit-above:连接的数量大于指定连接数量时匹配。

范例:在连接数超过指定连接数时拒绝连接。

iptables -A INPUT -d 192.168.10.0/24 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT

limit扩展

功能说明:基于收发报文的速率做匹配,令牌桶过滤器。

  • --limit :[/second|/minute|/hour|/day]
  • --limit-burst number :前多少个包不限制。

范例:每分钟发10个包,前5个包不受限制。

iptables -AINPUT -s 192.168.10.10 -p icmp --icmp-type 8 -m limit --limit 10/minute --limit-burst 5 -j ACCEPT
iptables -AINPUT -p icmp  -j REJECT

state 扩展

功能说明:

1、state 扩展模块,可以根据”连接追踪机制“去检查连接的状态,较耗资源。

2、conntrack机制:追踪本机上的请求和响应之间的关系。

状态类型:

  • NEW:新发起的请求;连接追踪信息库中不存在此连接的相关信息条目,因此,将其识别为第一次发出的请求。
  • ESTABLISHED:NEW状态之后,连接追踪信息库中为其建立的条目失效之前期间内所进行的通信状态。
  • RELATED:新发起的但与已有连接相关联的连接,如:ftp协议中的数据连接与命令连接之间的关系。
  • INVALID:无效的连接,如: flag标记不正确 。
  • UNTRACKED:未进行追踪的连接,如:raw表中关闭追踪。

常用路径:

# 1、连接信息库。
/proc/net/nf_conntrack
# 2、调整连接追踪功能所能够容纳的最大连接数量。
/proc/sys/net/netfilter/nf_conntrack_max
/proc/sys/net/nf_conntrack_max
# 3、查看连接跟踪有多少条目。
/proc/sys/net/netfilter/nf_conntrack_count
# 4、不同的协议的连接追踪时长。
/proc/sys/net/netfilter/

说明:对常用路径中最大连接数说明:

  • 链接跟踪,需要加载模块: modprobe nf_conntrack_ipv4。

  • 当服务器练级数大于最大连接数时dmesg可以观察到:kernel:ip_conntrack:table full,dropping packet错误,并且建立TCP连接很慢。

  • 各种状态超时后,链接会从表中删除。

  • echo 1 > /proc/sys/net/netfilter/nf_conntrack_max
    tail /var/log/messages
    *********   kernel:ip_conntrack:table full,dropping packet
    
  • 链接过多的两种解决办法:

    • 1、加大nf_conntrack_max值。

      vi /etc/sysctl.conf
      net.nf_conntrack_max = 393216
      net.netfilter.nf_conntrack_max = 393216
      
    • 2、降低 nf_conntrack timeout时间(调整内核参数)。

      vim /etc/sysctl.conf
      net.netfilter.nf_conntrack_tcp_timeout_established = 300
      net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
      net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
      net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
      

范例一:添加规则使已登录的用户可以连接,没有登录的用户不可以连接。

iptables -AINPUT -m state --state ESTABLISHED -j ACCEPT
iptables -AINPUT -m state --state NEW -j REJECT
上一篇:linux防火墙


下一篇:iptables学习[05]:iptables使用方法--基本匹配条件