Layer 7 debugging output #升级内核 make make modules make modules_install make install #修改默认以新的内核启动。 vi /boot/grub/grub.conf default=0 #将新的内核配置文件复制到/boot目录。 cp /usr/src/linux-2.6.28.10/.config /boot/config-2.8.10 #重启完成后确认内核版本是否正确。 reboot uname –r 2.6.28 #5.给iptables打补丁并升级 #卸载系统中的旧版本iptables。 rpm -qa |grep iptables rpm -e --nodeps iptables-1.3.5-4.el5 rpm -e --nodeps iptables-ipv6-1.3.5-4.el5 #合并补丁,并编译安装新的iptables工具 cd /opt tar jxvf iptables-1.4.3.tar.bz2 -C /opt/ cd /opt/iptables-1.4.3/ cp /opt/netfilter-layer7-v2.22/iptables-1.4.3forward-for-kernel-2.6.20forward/libxt_layer7.* extensions/ ./configure --prefix=/ --with-ksource=/usr/src/linux-2.6.28.10 make;make install iptables -V iptables v1.4.3 确认iptables版本是否正确。 #6.安装l7-protocol cd /opt tar xzvf l7-protocols-2009-05-28.tar.gz cd l7-protocols-2008-11-23 make install 其实就是把响应的目录copy到 /etc/l7-protocols/ 真正调用的是/etc/l7-protocols/protocols/下面的文件 可以打开下面具体的文件,里面是一些L7程序特征码的正则表达式形式 这样自己也可以按照这样的样子,写自己的特征码。 该特征码软件包一直在不停的更新,其后面的日期就是更新的日期,推荐定期选择最新的包进行更新。 #安装IPP2P cd /opt/ipp2p-0.99.16 make make install cp ipt_ipp2p.ko /lib/modules/2.6.28.10/kernel/net/ipv4/netfilter/ cp libipt_ipp2p.so /lib/iptables/ #加载模块 modprobe ipt_connlimit modprobe ipt_time modprobe ipt_ipp2p modprobe ipt_layer7 lsmod |grep x_tables 7.测试 $IPT -I FORWARD -p udp --dport 53 -m string --string "tencent" --algo bm -j DROP $IPT -I FORWARD -p tcp -m multiport --dport 80,443 -m layer7 --l7proto qq -j DROP $IPT -I FORWARD -p udp --dport 8000 -j DROP $IPT -I FORWARD -p tcp -m layer7 --l7proto socks -j DROP $IPT -I FORWARD -p udp --dport 53 -m string --string "messenger" --algo bm -j DROP $IPT -I FORWARD -p tcp -m multiport --dport 80,443 -m layer7 --l7proto msnmessenger -j DROP $IPT -I FORWARD -p udp --dport 1863 -j DROP $IPT -t mangle -A PREROUTING -m layer7 --l7proto qq -j DROP $IPT -t mangle -A PREROUTING -m layer7 --l7proto msnmessenger -j DROP #======================================= layer7,time,ip2p2 ================================== #测试layer7,time,ip2p2,可通过上面的策略表达式测试是否成功禁止掉qq、msn、ipp2p、xunlei #$IPT -A FORWARD -m layer7 --l7proto qq -m time --timestart 8:00 --timestop 17:30 --days Mon,Tue,Wed,Thu,Fri -m iprange --src-range 192.168.1.5-192.168.1.239 -m ipp2p --ipp2p -m ipp2p --xunlei -j DROP #$IPT -A FORWARD -p tcp -m multiport --dport 80,443 -m layer7 --l7proto qq -j DROP #======================================= connlimit ============================================ # 允许单个 IP 的最大连接数为 30 #$IPT -A FORWARD -p tcp --dport 80 -m connlimit --connlimit-above 30 -j REJECT #控制单个 IP 在一定的时间(比如60秒)内允许新建立的连接数 #$IPT -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --update --seconds 60 --hitcount 30 -j REJECT #$IPT -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --set -j ACCEPT #限制连往本机的web服务,1个C段的IP的并发连接不超过100个,超过的被拒绝 $IPT -A INPUT -i $INTERNET -p tcp -m multiport --dports 80,443 -m connlimit --connlimit-above 500 --connlimit-mask 24 -j REJECT #过滤syn包 $IPT -A INPUT -i $INTERNET -p tcp --tcp-flags SYN,ACK,FIN,RST SYN -m limit --limit 100/s --limit-burst 150 -m multiport --dports 80,443 -j DROP $IPT -A INPUT -i $INTERNET -p tcp --syn -m multiport -dports 80,443 -m connlimit --connlimit-above 100 --connlimit -mask 32 -j DROP #======================================= limit ============================================= #可达到每秒只接受一个 echo-request 封包 $IPT -N pinglimit $IPT -A pinglimit -m limit –limit 1/s –limit-burst 1 -j ACCEPT $IPT -A pinglimit -j DROP $IPT -A INPUT -p icmp –icmp-type echo-request -j pinglimit #限制每秒只接受一个 icmp echo-request 封包 $IPT -A INPUT -p icmp –icmp-type echo-request -m limit –limit 1/s –limit-burst 1 -j ACCEPT $IPT -A INPUT -p icmp –icmp-type echo-request -j DROP #防治 SYN-Flood 碎片攻击(每秒只接受100个syn封包,) #–limit 1/s 表示每秒一次; 1/m 则为每分钟一次; 1/h 则为每小时一次 #–limit-burst 表示允许触发 limit 限制的最大次数 (预设 5) $IPT -N syn-flood $IPT -A syn-flood -m limit –limit 100/s –limit-burst 150 -j RETURN $IPT -A syn-flood -j DROP $IPT -I INPUT -j syn-flood #===================================== string ================================================ #每个词都用baidu和google识别出来gbk编码和utf-8编码的字串,全封住。 /usr/sbin/iptables -A FORWARD -m string --algo bm --string "股市" -j DROP /usr/sbin/iptables -A FORWARD -m string --algo bm --string "%E8%82%A1%E5%B8%82" -j DROP /usr/sbin/iptables -A FORWARD -m string --algo bm --string "%B9%C9%CA%D0" -j DROP /usr/sbin/iptables -A FORWARD -m string --algo bm --string "基金" -j DROP /usr/sbin/iptables -A FORWARD -m string --algo bm --string "%E5%9F%BA%E9%87%91" -j DROP /usr/sbin/iptables -A FORWARD -m string --algo bm --string "%BB%F9%BD%F0" -j DROP /usr/sbin/iptables -A FORWARD -m string --algo bm --string "股票" -j DROP /usr/sbin/iptables -A FORWARD -m string --algo bm --string "%E8%82%A1%E7%A5%A8" -j DROP /usr/sbin/iptables -A FORWARD -m string --algo bm --string "%B9%C9%C6%B1" -j DROP /usr/sbin/iptables -A FORWARD -m string --algo bm --string "证券" -j DROP /usr/sbin/iptables -A FORWARD -m string --algo bm --string "%E8%AF%81%E5%88%B8" -j DROP /usr/sbin/iptables -A FORWARD -m string --algo bm --string "%D6%A4%C8%AF" -j DROP #下面是些纯英文的词,做起来简洁多了 /usr/sbin/iptables -A FORWARD -m string --algo bm --string "fund" -j DROP /usr/sbin/iptables -A FORWARD -m string --algo bm --string "finance" -j DROP /usr/sbin/iptables -A FORWARD -m string --algo bm --string "business" -j DROP /usr/sbin/iptables -A FORWARD -m string --algo bm --string "money" -j DROP /usr/sbin/iptables -A FORWARD -m string --algo bm --string "stock" -j DROP |