热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

linuxiptables模块添加--七层过滤、防CC、DDOS

#!binbashIPTsbiniptables*当前系统版本centos5.3,内核版本2.6.18-128.el5,对现有系统内核进行升级、优化,并添加L7-filter模块,使iptables支持L7filter,对七层应用进行过滤*#下载安装包

#!/bin/bash
IPT=/sbin/iptables
/*
当前系统版本centos5.3,内核版本2.6.18-128.el5,对现有系统内核进行升级、优化,并添加L7-filter模块,使iptables支持L7filter,对七层应用进行过滤
*/
#============================ 下载安装包 ========================================
#kernel 2.6.28.10
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.28.10.tar.bz2
#iptables
#wget http://www.netfilter.org/projects/iptables/files/iptables-1.4.7.tar.bz2
wget ftp://ftp.netfilter.org/pub/iptables/iptables-1.4.0.tar.bz2
#l7-protocols
wget http://ncu.dl.sourceforge.net/project/l7-filter/Protocol%20definitions/2009-05-28/l7-protocols-2009-05-28.tar.gz
#netfilter-layer7
wget http://ncu.dl.sourceforge.net/project/l7-filter/l7-filter%20kernel%20version/2.21/netfilter-layer7-v2.21.tar.gz
#patch-o-matic-ng
wget ftp://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/patch-o-matic-ng-20100218.tar.bz2

#============================= 内核编译 ===========================================
cd /opt
tar jxvf iptables-1.4.3.tar.bz2
tar zxvf ipp2p-0.99.16.tar.gz
tar zxvf netfilter-layer7-v2.22.tar.gz
tar jxvf linux-2.6.28.10.tar.bz2
mv linux-2.6.28.10 /usr/src/

#
#给内核打L7-filter补丁,将以上各软件包都解压到 /usr/src 目录
cd /usr/src/linux-2.6.28.10
patch -p1 #检查有无不正确的.o文件和依赖关系,使用刚下载的完整的源程序包进行编译,所以本步可以省略。而如果你多次使用了这些源程序编译内核,那么最好要先运行一下这个命令
#make mrproper
#使用make oldconfig可以继承老的kernel的配置,为自己的配置省去很多麻烦
make oldconfig
#make menuconfig是文字界面下推荐一种方式,在这里可以选择你需要编译到核心的模块
make menuconfig
/*
空格键用于选择配置类型
对不同功能的配置选择
[ ]:空选时表示不需要在新内核中使用该功能
[ M ]:表示将此项功能编译为模块,以便在需要时加载 Module
[ * ]:将此项功能直接编入新内核,作为新内核的一部分需要配置哪些内核编译参数
*/
#Networking support --->
# Networking options --->
# Network packet filtering framework (Netfilter) --->
# iP:netfilter configuraton --->
IPv4 connection tracking support (required for NAT)
# Full NAT

#Networking support --->
# Networking options --->
# Network packet filtering framework (Netfilter) --->
# core netfilter configuration --->
Netfilter connection tracking support
# "connlimit" match support"
# "time" match support
# "string" match support
# "layer7" match support
#

  • 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

推荐阅读
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • Ubuntu 9.04中安装谷歌Chromium浏览器及使用体验[图文]
    nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 成功安装Sabayon Linux在thinkpad X60上的经验分享
    本文分享了作者在国庆期间在thinkpad X60上成功安装Sabayon Linux的经验。通过修改CHOST和执行emerge命令,作者顺利完成了安装过程。Sabayon Linux是一个基于Gentoo Linux的发行版,可以将电脑快速转变为一个功能强大的系统。除了作为一个live DVD使用外,Sabayon Linux还可以被安装在硬盘上,方便用户使用。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 本文介绍了在CentOS 7.x上进行端口映射配置的方法,通过修改内核和配置防火墙实现端口映射。作者分享了自己使用华为服务器进行端口映射的经验,发现网速比直连还快且稳定。详细的配置过程包括开启系统路由模式功能、设置IP地址伪装、设置端口映射等。同时,还介绍了如何监听本地端口的tcp请求,以及删除规则和开放的端口的方法。 ... [详细]
  • 在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的步骤和方法
    本文介绍了在CentOS/RHEL 7/6,Fedora 27/26/25上安装JAVA 9的详细步骤和方法。首先需要下载最新的Java SE Development Kit 9发行版,然后按照给出的Shell命令行方式进行安装。详细的步骤和方法请参考正文内容。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • 本文介绍了在CentOS上安装Python2.7.2的详细步骤,包括下载、解压、编译和安装等操作。同时提供了一些注意事项,以及测试安装是否成功的方法。 ... [详细]
  • 本文介绍了在Linux系统中设置文件ACL权限的方法和使用说明,包括在centos7.3和centos6.9中开启ACL权限的两种方法:在挂载时指定打开ACL权限和修改默认的属性信息。同时提供了对ACL权限的详细解释和应用场景。 ... [详细]
  • 本文介绍了在CentOS 6.4系统中更新源地址的方法,包括备份现有源文件、下载163源、修改文件名、更新列表和系统,并提供了相应的命令。 ... [详细]
  • Vagrant虚拟化工具的安装和使用教程
    本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ... [详细]
  • Linux下安装依赖包版本高解决方法
    本文介绍了在Linux系统下,当已安装的依赖包版本高于需要安装的依赖包版本时,解决方法包括欺骗安装程序和修改相关配置文件等操作。针对不同情况,提供了不同的解决方案。 ... [详细]
  • centos安装Mysql的方法及步骤详解
    本文介绍了centos安装Mysql的两种方式:rpm方式和绿色方式安装,详细介绍了安装所需的软件包以及安装过程中的注意事项,包括检查是否安装成功的方法。通过本文,读者可以了解到在centos系统上如何正确安装Mysql。 ... [详细]
author-avatar
hedongsheng
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有