iptables 笔记
- -
不允许接受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
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
- 上一篇: Java四种线程池的使用
- 下一篇: Java线程池原理及四种线程池的使用