iptables扩展模块

iprange模块

使用iprange模块可以指定一段连续的IP地址范围

--src-range
--dst-range

# example
iptables -t filter -I INPUT -m iprange --src-range 192.168.1.1-192.168.1.100 -j DROP

# 通过 ! 取反
iptables -t filter -I INPUT -m iprange ! --src-range 192.168.1.1-192.168.1.100 -j DROP
string模块

指定要匹配的字符串,如果报文中包含对应的字符串,则符合匹配条件

选项操作
–algo用于指定匹配算法,可选的算法有bm和kmp,此选项为必选项,必须指定一个
–string指定要匹配的字符串
iptables -t filter -I INPUT -m string --algo kmp --string "OOXX" -j REJET
time模块
# examples
iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --timestart 09:00:00 --timestop 18:00:00 -j REJECT
iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --weekdays 6,7 -j REJECT
iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --monthdays 22,23 -j REJECT
iptables -t filter -I OUTPUT -p tcp --dport 80 -m time --datestart 2017-12-24 --datestop 2017-12-27

# --monthdays --weekdays 可以用 ! 取反
connlimit模块

限制每个IP地址同时链接到server端的链接数量

iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT

# 限制某类网段
iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 2 --connlimit-mask 24 -j REJECT

在指定–connlimit-mask之后,就意味着可以针对“某类IP段内一定数量的IP”进行链接数量的限制

limit模块

limit模块是对“报文到达速率”进行限制的

iptables -t filter -I INPUT -p icmp -m limit --limit 10/minute -j ACCEPT
iptables -t filter -A INPUT -p icmp -j REJECT
  • 需要指定–limit-burst“空闲时可放行的包的数量”,否则在匹配到limit规则之前,不会受到速率限制
  • –limit-burst默认是5,基于令牌桶算法
iptables -t filter -I INPUT -p icmp -m limit --limit-burst 3 --limit 10/minute -j ACCEPT

# 3s 生成3个令牌
iptables -t filter -I INPUT -p icmp -m limit --limit-burst 3/second --limit 10/minute -j ACCEPT

可用的时间单位有:/second、/minute、/hour、/day

tcp模块

设置–tcp-flags标志位。匹配TCP三次握手时的标志位

# ALL可以表示“SYN,ACK,FIN,RST,URG,PSH”
iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --tcp-flags ALL SYN -j REJECT

# 使用--syn相当于使用--tcp-flags SYN,ACK,FIN,RST SYN
# 即匹配第一次握手的报文,tcp新建连接的请求报文
iptables -t filter -I INPUT -p tcp -m tcp --dport 22 --syn -j REJECT
udp模块

这个模块匹配条件比较少,只有–sport和–dport,即匹配报文的源端口和目标端口

iptables -t filter -I INPUT -p udp -m udp --dport 137 -j ACCEPT
iptables -t filter -I INPUT -p udp --dport 137:157 -j ACCEPT
icmp扩展
# 禁止icmp类型的报文进入本机
iptables -t filter -I INPUT -p icmp -j REJECT

# --icmp-type表示根据具体的type与code去匹配icmp报文
# ping请求类型的type=8,code=0,别人无法ping本机
# 本机ping的type=0,code=0,因此本机可以ping
iptables -f filter -I INPUT -p icmp -m icmp --icmp-type 8/0 -j REJECT

# 根据icmp报文的描述也可以匹配,效果同上
iptables -I INPUT -p icmp --icmp-type "echo-request" -j REJECT
state扩展

state扩展可以让iptables实现连接追踪机制
对于state而言,有以下状态:

  • NEW,连接中的第一个包,状态就是NEW,我们可以理解为新连接的第一个包的状态为NEW
  • ESTABLISHED,我们可以把NEW状态包后面的包的状态理解为ESTABLISHED,表示连接已建立
  • RELATED: 关联状态,例如FTP存在两个进程,一个命令进程,一个数据进程。
    • 命令进程负责服务端与客户端之间的命令传输
    • 数据进程负责服务端与客户端之间的数据传输
    • 具体传输哪些数据,是由命令去控制的,所以,"数据连接"中的报文与"命令连接"是有"关系"的
    • 因此,数据连接中的报文可能就是RELATED状态
  • INVALID,如果一个包没有办法被识别,或者这个包没有任何状态,那么这个包的状态就是INVALID,我们可以主动屏蔽状态为INVALID的报文
  • UNTRACKED,报文的状态为untracked时,表示报文未被追踪,当报文的状态为Untracked时通常表示无法找到相关的连接
# 放行ESTABLISHED和RELATED状态的包,其余全拒绝
iptables -t filter -I INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -t filter -A INPUT -j REJECT
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值