iptables(5)高级命令:

iptables的链接跟踪表最大容量为/proc/sys/net/ipv4/ip_conntrack_max,链接碰到各种状态的超时后就会从表中删除。所以解決方法一般有两个:

  1. 加大 ip_conntrack_max 值
vi /etc/sysctl.conf
net.ipv4.ip_conntrack_max = 393216
net.ipv4.netfilter.ip_conntrack_max = 393216
1. 降低 ip_conntrack timeout时间
vi /etc/sysctl.conf
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 300
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120
iptables -t nat -L –n
1. 限制本地主机的web服务器在周一不允许访问;新请求的速率不能超过100个每秒;web服务器包含了admin字符串的页面不允许访问;web服务器仅允许响应报文离开本机;
 # iptables -A INPUT -d 11.100.65.45 -p tcp –dport 80 -m state –state NEW -m time ! –weekdays Mon -m limit –limit 100/second -m string –algo bm –string ‘admin’ -j DROP2. 在工作时间,即周一到周五的8:30-18:00,开放本机的ftp服务给172.16.0.0网络中的主机访问;数据下载请求的次数每分钟不得超过5个;
# iptables -A INPUT -d 11.100.45.65 -p tcp –dport 21 -m time ! –weekdays Sat,Sun –timestart 8:30 –timestop 18:30 -m limit –limit 5/minute -s 172.16.0.0/24 -j ACCEPT
1. 开放本机的ssh服务给172.16.x.1-172.16.x.100中的主机,x为你的座位号,新请求建立的速率一分钟不得超过2个;仅允许响应报文通过其服务端口离开本机;
# iptables -A INPUT -d 11.100.45.65 -p tcp –dport 22 -m iprange –src-range 172.16.1.0-172.16.1.100 -m limit –limit 2/minute -j ACCEPT
1. 拒绝TCP标志位全部为1及全部为0的报文访问本机;
# iptables -A INPUT -p tcp –tcp-flags ALL ALL -j DROP
# iptables -A INPUT -p tcp –tcp-flags ALL NONE -j DROP
1. 允许本机ping别的主机;但不开放别的主机ping本机;
# iptables -A OUTPUT -p icmp –icmp-type 8 -s 11.100.45.65 -j ACCEPT
1. 拒绝广播ping,拒绝TCP标志位全部为1及全部为0的报文访问本机
# iptables -N clean_in
# iptables -A clean_in -d 255.255.255.255 -p icmp -j DROP
# iptables -A clean_in -d 172.16.255.255 -p icmp -j DROP
# iptables -A clean_in -p tcp ! –syn -m state –state NEW -j DROP
# iptables -A clean_in -p tcp –tcp-flags ALL ALL -j DROP
# iptables -A clean_in -p tcp –tcp-flags ALL NONE -j DROP
# iptables -A clean_in -d 172.16.100.7 -j RETURN
# iptables -A INPUT -d 172.16.100.7 -j clean_in
1. 运行换回地址
# iptables -A INPUT -i lo -j ACCEPT
# iptables -A OUTPUT -o lo -j ACCEPT
1. 显示禁止dns、samba
# iptables -A INPUT -i eth0 -m multiport -p tcp –dports 53,113,135,137,139,445 -j DROP
# iptables -A INPUT -i eth0 -m multiport -p udp –dports 53,113,135,137,139,445 -j DROP
# iptables -A INPUT -i eth0 -p udp –dport 1026 -j DROP
# iptables -A INPUT -i eth0 -m multiport -p tcp –dports 1433,4899 -j DROP
1. 限制每秒钟tcp连接10次
# iptables -A INPUT -p icmp -m limit –limit 10/second -j ACCEPT
1. 利用iptables的recent模块来抵御DOS攻击: 22,建立一个列表,保存有所有访问过指定的服务的客户端IP
ssh: 远程连接,
1. 限制连接大于3拒绝:.利用connlimit模块将单IP的并发设置为3;会误杀使用NAT上网的用户,可以根据实际情况增大该值;
# iptables -A INPUT -p tcp –dport 22 -m connlimit –connlimit-above 3 -j DROP
1. 利用recent和state模块限制单IP在300s内只能与本机建立2个新连接。被限制五分钟后即可恢复访问。
1. 声明NEW状态使用recent模块定义名字为SSH
# iptables -A INPUT -p tcp –dport 22 -m state –state NEW -m recent –set –name SSH
1. 记录访问tcp 22端口的新连接,记录名称为SSH,–set 记录数据包的来源IP,如果IP已经存在将更新已经存在的条目(记录来源更新日志配置)
# iptables -A INPUT -p tcp –dport 22 -m state –state NEW -m recent –update –seconds 300 –hitcount 3 –name SSH -j LOG –log-prefix “SSH Attach: ”
1. SSH记录中的IP,300s内发起超过3次连接则拒绝此IP的连接。
–update 是指每次建立连接都更新列表;
–seconds必须与–rcheck或者–update同时使用
–hitcount必须与–rcheck或者–update同时使用
# iptables -A INPUT -p tcp –dport 22 -m state –state NEW -m recent –update –seconds 300
–hitcount 3 –name SSH -j DROP
1. iptables的记录:/proc/net/xt_recent/SSH
也可以使用下面的这句记录日志:
iptables -A INPUT -p tcp –dport 22 -m state –state NEW -m recent –update –name SSH –second 300 –hitcount 3 -j LOG –log-prefix “SSH Attack”