当前位置:   article > 正文

iptables 笔记_iptables -a input -m conntrack --ctstate related,e

iptables -a input -m conntrack --ctstate related,established -j accept

- -

不允许接受icmp数据包到本地
iptables -A INPUT -p icmp --icmp-type 8 -j DROP

不允许发送未知数据包到本地
iptables -A INPUT -p all -m state --state INVALID -j DROP

允许已经允许过的连接和被动请求数据包发送到本地
iptables -A INPUT all -m state --state ESTABLISHED,RELATED -j ACCEPT

检查该连接中第一个数据包,并检查该数据包是否包含syn标记,符合两项条件才允许进入。
iptables -A INPUT -p tcp --syn --dport 22 -m state --state NEW -j ACCEPT

使用Multiport模块一次添加多个端口
iptables -A INPUT -p tcp --syn -m state --state NEW -m multiport --dport 21,22,23,24,25 -j ACCEPT

检查所有 TCP-Flags,但只有syn及fin两个标记同时为1时,数据包才会被筛选出来
iptables -A INPUT -p tcp --tcp-flags ALL SYN,FIN -j DROP

检查所有 TCP-Flags中syn及fin两个标记同时为1时,数据包才会被筛选出来
iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP

数据批量添加
cat /root/mac_list.txt | while read MAC
do
     MAC=$( echo $MAC | awk '{print $1}' )

     iptables -t filter -A FORWARD -i eth1 -o eth0 -m mac --mac-source $MAC -j ACCEPT
done


mangle表用法 MRAK模块匹配(单数据包)
iptables -t mangle -A PREROUTING -p tcp --dport 80 -j MARK --set-mark 80
iptables -A FORWARD -p all -m mark --mark 80 -j DROP

管理用户或组模块
iptables -A OUTPUT -p tcp -m owner --uid--owner tom --dport 80 -j ACCEPT
iptables -A OUTPUT -p udp -m owner --uid--owner tom --dport 53 -j ACCEPT
iptables -A OUTPUT -p all -m owner --uid--owner tom -j DROP

使用iprange模块添加ip范围
iptables -A INPUT -m iprange --src-range 192.168.0.2-192.168.0.61 -j DROP
iptables -A INPUT -m iprange --dst-range 192.168.0.2-192.168.0.61 -j DROP

ttl值匹配模块
iptables -A INPUT -m ttl --ttl-eq 64 -j REJECT
--ttl-eq 等于
--ttl-lt 小于
--ttl-gt 大于

数据包状态 发送 接受 
TCP        NEW  ESTABLISHED
UDP        NEW ESTABLISHED
ICMP       NEW  RELATED

IPSEC SPI 值控制模块
iptables -A FORWARD -p ah -m ah --ahspi 300 -j ACCEPT
iptables -A FORWARD -p esp -m esp --espspi 200 -j ACCEPT

pkttype模块
unicast:数据包发送的对象时特定的,如主机A传输给主机B即为unicast类型
broadcast:数据包传送的对象为广播地址,如192.168.0.255
multicast:通常应用于网络的“音频”或“视频”广播,而Multicast数据包的特点是,其Source IP一定介于224.0.0.0/24之间。
iptables -A FORWARD -i eth0 -p icmp -m pkttype --pky-type broadcast -j DROP

length模块
MTU=(IP包+ICMP包+DATA)
iptables -A INPUT -p icmp --icmp -type 8 -m length --length 92 -j ACCEPT
iptables -A INPUT -p icmp --icmp -type 8 -j DROP

--length 50 匹配MTU值刚好为50字节的数据包
--length :100 匹配MTU值小于100个字节的数据包
--length 50:100 匹配MTU值介于50-100个字节的数据包

limit数据包重复率匹配
一分钟进入10个数据包以上,就会限制一分钟进入6个数据包,直到6*10s内没有收到数据包,将会解除
iptables -A INPUT -p icmp --icmp-type 8 -m limit --limit 6/m --limit-burst 10 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j DROP

recent模块
--name 设置跟踪数据库的文件名
[!]--set将符合条件的来源数据添加到数据库中,但如果来源端数据已经存在,则更新数据库中的记录信息
[!]--rcheck只进行数据库中信息的匹配,并不会对已存在的数据做任何变更操作
[!]--update如果来源端的数据已存在,则将其更新;若不存在,则不做任何处理
[!]--remove如果来源端数据已存在,则将其删除,若不存在,则不做任何处理
[!]--seconds seconds当事件发生时,只会匹配数据库中前“几秒”内的记录,--seconds必须与--rcheck或--update参数共用
[!]--hitcount hits匹配重复发生次数,必须与--rcheck或--update参数共用
iptables -A INPUT -p icmp --icmp-type 8 -m recent --name icmp_db --rcheck --second 60 --hitcount 6 -j DROP
iptables -A INPUT -p icmp --icmp-type 8 -m recent --set --name icmp_db
cat /proc/net/xt_recent/icmp_db
modprobe xt_recent ip_list_tot=1024 ip_pkt_list_tot=50
ip_list_tot设置ip上限条数,默认100
ip_pkt_list_tot设置数据存储空间,默认20

string模块 匹配字符串
--algo 字符串匹配算法的选择,string模块提供了两种不同的算法,分别是bm(Boyer-Moore)及kmp(Knuth-Pratt-Morris),其中bm算法平均速度会比kmp快,不过,你也不必太在意,因为我们匹配的对象不会太大,因此用哪种都差不多
--from、--to设置匹配字符串的范围,我们可以使用--from来设置匹配的起点,并以--to来设置匹配的终点,其单位为字节,如--from 10意为从第10个字符串开始匹配,如果没有设置这个参数,那么匹配的范围将是整个数据包
[!]--string匹配条件,如--string "system32"是指要匹配的字符串为system32
[!]--hex-string匹配条件,但不同于--string参数的地方在于--hex-string是以16进制的方式进行匹配,特别适合用于非ascii字符串的匹配,其匹配条件的表示方法为--hex-string "|2e2f303132333435|",请注意实际匹配条件为2e2f303132333435,但其左右要使用"|"符号
iptables -A FORWARD -i eth0 -o eth1 -p tcp -d $WEB_SERVER --dport 80 -m string --algo bm --string "system32" -j DROP


connlimit模块 匹配连接数
iptables -A FORWARD -i eth0 -o eth1 -p tcp --syn -d $Web_Server --dport 80 -m connlimit --connlimit-above 30 --connlimit-mask 32 -j DROP
[!]--connlimit-above 指定最大连接数量
--connlimit-mask 此参数为子网络掩码,用于匹配范围,例如 8A 16B 24C 25 1/2个c 32代表单一个IP

connbytes模块限制每个连接中所能传输的数据量
iptables -A FORWARD -p tcp -d $Web_Server --dport 80 -m connbytes --connbytes-dir reply --connbytes-mode bytes --connbytes 20971520: -j DROP
[!]--connbytes-dir original来源方向 reply应答方向 both双向
--connbytes-mode packets以数据包的数量来计算 bytes以数据量来计算
--connbytes 10:匹配10个以上的单位量 :50匹配50个一下的单位量 10:50匹配10个-50个之间的单位量

quota模块 匹配每个ip限制流量(不会清除纪录,要刷新纪录)
iptables -A FORWARD -i eth0 -o eth1 -p tcp --sport 80 -m quota --quota 524288000 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -p tcp --sport 80 -j DROP

time模块 设置规则生效时间
iptables -A FORWARD -o eth1 -d $SRV_FARM -m time --weekdays Mon,Tue,Wed,Thu,Fri --timestart 09:00 --timestop 21:00 -j ACCEPT
iptables -A FORWARD -o eth1 -d $SRV_FARM -j DROP

--datestart:YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--datestop
--timestart:hh:mm[:ss]
--timestop
[!]--monthdays:day[,day]...1,2,3,4,5,6,7,8,9,10,31
[!]--weekdays:day[,day]...Mon,Tue,Wed,Thu,Fri,Sat,Sun

connmark模块匹配mark值(整条连接)
iptables -A INPUT -m connmark --mark 1 -j DROP

conntrack模块匹配数据包状态,是state模块的加强版
[!]--ctstate:匹配数据包的状态,状态列表分别为NEW,ESTABLISHED,RELATED,INVALID,DNAT,SNAT
[!]--ctproto:用于匹配OSI七层中第四层的通信层,其功能与用法就如同iptables中的-p参数,如-p tcp,-p udp,-p 47等。
[!]--ctorigsrc匹配连接发起方向的来源端IP
[!]--ctorigdst匹配连接发起方向的目的端IP
[!]--ctreplsrc匹配数据包应答方向的来源端IP
[!]--ctrepldst匹配数据包应答方向的目的端IP
[!]--ctorigsrcport
[!]--ctorigdstport
[!]--ctreplsrcport
[!]--ctrepldstport
[!]--ctexpire连接在Netfilter Conntrack数据库(/porc/net/nf_conntrack)的存活时间,使用方法如下:
匹配特定的存活时间--ctexpire time
匹配特定区间的存活时间--ctexpire time:time
--ctdir设置要匹配那个方向的数据包,使用方法如下:
只匹配连接发起方向的数据包--ctdir ORIGINAL
只匹配数据包应答方向的数据包--ctdir REPLY
若没有设置这个参数,默认会匹配双向的所有数据包
#!/bin/bash
iptables -F
modprobe nf_conntrack_ftp
iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 21 -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j DROP

#!/bin/bash
iptables -F
modprobe nf_conntrack_ftp
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m conntrack --ctproto tcp --ctorigsrc 192.168.1.0/24 --ctorigdstport 21 --ctstate NEW -j ACCEPT
iptables -A INTPU -p tcp --dport 21 -j DROP

statistic模块进行比例匹配
以随机方式丢弃50%的数据包
iptables -A INPUT -p icmp -m statistic --mode random --probability 0.5 -j DROP
按一定规律在每10个icmp包中丢弃1个icmp包
iptables -A INPUT -p icmp -m statistic --mode nth --every 10 -j DROP
--mode:random以随机方式丢弃数据包,nth按一定规律丢弃数据包
--probability:此参数需结合random模式使用,例如--probability 0.4 即代表丢弃40%的数据,其中的数值为0-1
--every此参数需结合nth模式使用,例如--every 10代表在每10个数据包中要丢弃1个数据包
--packet此参数需要在nth模式与--every参数结合使用,例如--every 10 --packet5


声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/211058
推荐阅读
相关标签
  

闽ICP备14008679号