Netfilter 扩展模块使用方法
时间:2005-11-08 来源:junglegq
翻译:http://www.netfilter.org/documentation/HOWTO//netfilter-extensions-HOWTO-3.html
Netfilter 扩展模块使用方法
翻译:http://www.netfilter.org/documentation/HOWTO//netfilter-extensions-HOWTO-3.html
常用的帮助信息:
# iptables -m the_match_you_want –help
1. ah-esp patch
匹配ah/esp 隧道
格式:--ahspi [!] spi[:spi]
举例:# iptables -A INPUT -p 50 -m esp --espspi 500 -j DROP
不要忘记添加适当的协议(-p 50 or –p 51)
2. Condition patch
格式:--condition [!] conditionfile
当指定的条件文件为“1”时,匹配成立。常用于临时性的过滤。匹配文件被放在`/proc/net/ipt_condition/` 目录下
举例:
# iptables -A FORWARD -p tcp -d 192.168.1.10 --dport http -m condition --condition webdown -j REJECT --reject-with tcp-reset
# echo 1 > /proc/net/ipt_condition/webdown
3. Conntrack patch
???
4. Fuzzy patch
格式:--upper-limit n --lower-limit n
动态调整性能,当低于lower-limit时,不作限速;当高于upper-limit时,100%限速
举例:
iptables -A INPUT -m fuzzy --lower-limit 100 --upper-limit 1000 -j REJECT
当包在100pps以上,开始限速,最高1000pps
5. iplimit patch
限制同一个ip或主机的并行连接tcp数
格式:
[!] --iplimit-above n
--iplimit-mask n
举例:
# iptables -A INPUT -p tcp --syn --dport http -m iplimit --iplimit-above 4 -j REJECT
6. Ipv4options patch
匹配ipv4的带“option”字段的数据包
举例:
# iptables -A INPUT -m ipv4options --rr -j DROP
# iptables -A INPUT -m ipv4options --tr -j DROP
7. Length patch
长度匹配
格式:[!] --length length[:length]
举例:
# iptables -A INPUT -p icmp --icmp-type echo-request -m length --length 86:0xffff -j DROP
(匹配超过85字节的包)
隐含的默认最小值为0,最大值为65535
8. Mport patch
多端口匹配
举例:
# iptables -A INPUT -p tcp -m mport --ports 20:23,80 -j DROP
9. Nth patch
匹配第n个包
举例:
# iptables -A INPUT -p icmp --icmp-type echo-request -m nth --every 2 -j DROP
可以进行负载平衡,具体配置如下:
# iptables -t nat -A POSTROUTING -o eth0 -m nth --counter 7 --every 3 --packet 0 -j SNAT --to-source 10.0.0.5
# iptables -t nat -A POSTROUTING -o eth0 -m nth --counter 7 --every 3 --packet 1 -j SNAT --to-source 10.0.0.6
# iptables -t nat -A POSTROUTING -o eth0 -m nth --counter 7 --every 3 --packet 2 -j SNAT --to-source 10.0.0.7
格式:
--every Nth
[--counter] num
[--start] num
[--packet] num
num范围:0-(nth-1)
???If `--packet' is used for a counter, then there must be Nth number of --packet rules, covering all values between 0 and (Nth-1) inclusively.
10.Pkttype patch
包类型匹配
举例:# iptables -A INPUT -m pkttype --pkt-type broadcast -j DROP
格式:--pkt-type [!] packettype
11.Pool patch
正在重写
12.Psd patch ???
发现端口扫描
举例:# iptables -A INPUT -m psd -j DROP
格式:
[--psd-weight-threshold threshold]
[--psd-delay-threshold delay]
[--psd-lo-ports-weight lo]
[--psd-hi-ports-weight hi]
13.Quota patch
限制收取的字节数
举例:# iptables -A INPUT -p tcp --dport 80 -m quota --quota 52428800 -j ACCEPT
(限制80端口的数据总数是5Mbyte)
14.Random patch
随机匹配(给定或然率)
举例:
# iptables -A INPUT -p icmp --icmp-type echo-request -m random --average 50 -j DROP
格式:[--average percent]
默认值:50% 取值范围:1-99%
15.Realm patch
匹配路由的realm值
举例:# iptables -A OUTPUT -m realm --realm 10 -j LOG
16.Recent patch
动态调整一个配置文件中的ip列表
格式:
--name <filename>
--set #添加源ip到文件中,如果源ip已存在,则更新条目,
--rcheck #仅查看条目
--update #查看条目,如果已存在该源ip,则更新条目,不会添加条目
--remove #查看条目,如果存在,则删除,返回“true”;不存在,则返回“false”
--seconds second #必须和“rcheck”或“update”连用。仅匹配在second秒内的条目
--hitcounts hits #必须和“rcheck”或“update”连用。匹配超过hits的连接数
--rttl #必须和“rcheck”或“update”连用。匹配—set选项设定的ttl值,防止DOS攻击
举例:
# iptables -A FORWARD -m recent --name badguy --rcheck --seconds 60 -j DROP
# iptables -A FORWARD -p tcp -i eth0 --dport 139 -m recent --name badguy --set -j DROP
17.Record-rpc patch
???
18.String patch
匹配ip包中的任意字符串
格式:--string [!] string
举例:
# iptables -A INPUT -m string --string 'cmd.exe' -j QUEUE
19.Time patch
匹配特定时间段
举例:
# iptables -A INPUT -m time --timestart 8:00 --timestop 18:00 --days Mon,Tue,Wed,Thu,Fri -j ACCEPT
20.Ttl patch
匹配ttl
格式:
--ttl-lt value
--ttl-eq value
--ttl-gt value
举例:
iptables -A INPUT -m ttl --ttl-lt 5 -j LOG
21.U32 patch
???