iptables相关
四表:
fileter,net,mangle,raw
五链
PREROUTING(路由前) INPUT FOREARD OUTPUT POSTROUTING(路由后)
表和链的对应关系
filer:INPUT,FORWARD.OUTPUT
nat:PREROUTING OUTPUT POSTROUTING
magle:PREROUTING FORWARD POSTROUTING INPUT OUTPUT
规则:检查条件,处理机制,
通:白名单,默认为堵,只对能识别的进行放行
堵:黑名单,默认为通,只对能识别的进行阻截
检查条件:
IP:SIP,DIP
TCP:SPORT,DPORT,FLags
UDP:SPORT,DPORT
ICMP:ICMP-TYPE
扩展机制:
time string state(connection-tracking)
处理机制:
DROP(丢弃),
REJECT(拒绝,并返回)
ACCEPT(允许)
SNAT (原地址转换)
DNAT (目的地址转换)
RETURN(返回调用链)
REDIRECT(端口重定向)
LOG(记录日志)
MARK(做防火墙标记)
MASQUERADE: 地址伪装
-p tcp --tcp-flags LIST1 LIST2 : 检查LIST1所指明的所有标志位,LIST2所表示出的标志位必须为1, 其余的必须为0, 没有LIST1中指明的,不做检查
SYN ACK FIN RET PSH URG
--tcp-flags SYN,ACK,FIN,RET SYN 第一次握手
或者使用--sync
-p icmp
--icmp-type 可用数字类型:
0: echo-reply 回送应答
8: echo-request 请求
可以ping通外面,不能回应。
iptables -I OUTPUT -s 192.168.20.12 -p icmp --icmp-type 8 -j ACCEPT
可以回应
iptables -I INPUT -d 192.168.20.12 -p icmp --icmp-type 0 -j ACCEPT
扩展
1. -m multiport --dports/--sports
2. -m iprange --src-range/--dst-range
iptable -I INPUT -d 192.168.20.12 -p tcp -m multiport --dport 22:25,80 -m iprange --src-rang 192.168.20.1-192.168.20.19 -j ACCEPT
3.string扩展: 检查报文中出现的字符串。
--algo {bm|kmp}
[!] --string pattern
[!] --hex-string pattern
iptables -A INPUT/OUTPUT -p tcp --dport 80 -m string --algo bm --string 'baidu' -j DROP
iptables -p udp --dport 53 -m string --algo bm --from 40 --to 57 --hex-string '|03|www|09|netfilter|03|org|00|'
4.time
5.connlimit 连接限制
--connlimit-above 超过的连接数,后面加拒绝
--connlimit-mask prefix_length,指定掩码
--connlimit-saddr 源地址
--connlimit-daddr 目的组
iptables -A INPUT -p tcp --syn --dport 23 -m connlimit --connlimit-above 2 -j REJECT
同一个主机放过来的请求不能大于2,如果大于将拒绝。
6. limit 基于收发报文的速率做检查:
--limit rate[/second|/minute|/hour|/day]
--limit-burst number
7.state扩展 根据连接追踪机制,检查连接的状态。
调整连接追踪功能所能够容纳的最大连接数据
调整连接追踪功能所能容纳的最大链接数量
[root@python ~]# cat /proc/sys/net/nf_conntrack_max
已经追踪并记录下的连接
[root@python ~]# cat /proc/net/nf_conntrack
可追踪的连接状态:
NEW: 新发出的请求: 连接追踪模版中不存在此连接的相关信息条目。
ESTABLISHED: NEW状态之后,连接追踪模版中为其建立的条目失效之前期间内所进行的通信状态。
RELATED: 相关的连接:如ftp协议的命令连接与数据连接之间的关系
INVALIED: 无法识别的连接
在INPUT链 放行NEW,ESTABLISHED
iptables -I INPUT -d 192.168.20.144 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
在OUTPUT链 放行ESTABLISHED
iptables -I INPUT -s 192.168.20.144 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT