设为首页 收藏本站
查看: 1449|回复: 0

[经验分享] Apache 防DDOS***

[复制链接]

尚未签到

发表于 2018-11-21 08:23:05 | 显示全部楼层 |阅读模式
1  使用mod_rpaf模块解决代理后端的Apache获取到互联网真实的IP(默认Apache获取的是代理服务器的IP)
1.1  mod_rpaf介绍
  mod_rpaf模块可以让躲在代理服务器后面的Apache服务器获取到代理外面的互联网真实访问IP地址(默认Apache获得的是来自代理服务器的IP),然后再利用mod_evasive模块自动判断连接频率,把可疑ip阻挡掉,或配合ipables将判断的ip地址添加到黑名单。
  官网下载:http://www.stderr.net/apache/rpaf/
1.2  mod_rpaf安装
  官网地址:http://www.stderr.net/apache/rpaf/
  当前最新版本是:mod_rpaf-0.6.tar.gz
  1.       安装模块

  •   下载
  wget http://stderr.net/apache/rpaf/download/mod_rpaf-0.6.tar.gz
  tar xvfz mod_rpaf-0.6.tar.gz
  cd mod_rpaf-0.6

  •   apache2.0版本下安装
  $APACHE_ROOT/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c

  •   apache2.4版本下安装
      如果执行$APACHE_ROOT/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c,则出现下列错误:
mod_rpaf-2.0.c: In function 'rpaf_cleanup':  mod_rpaf-2.0.c:150: error: 'conn_rec' has no member named 'remote_ip'mod_rpaf-2.0.c:151: error: 'conn_rec' has no member named 'remote_addr'mod_rpaf-2.0.c:151: warning: implicit declaration of function 'inet_addr'mod_rpaf-2.0.c:151: error: 'conn_rec' has no member named 'remote_ip'mod_rpaf-2.0.c: In function 'change_remote_ip':
  mod_rpaf-2.0.c:164: error: 'conn_rec' has no member named 'remote_ip'mod_rpaf-2.0.c:183: error: 'conn_rec' has no member named 'remote_ip'mod_rpaf-2.0.c:186: error: 'conn_rec' has no member named 'remote_ip'mod_rpaf-2.0.c:187: error: 'conn_rec' has no member named 'remote_addr'mod_rpaf-2.0.c:187: error: 'conn_rec' has no member named 'remote_ip'apxs:Error: Command failed with rc=65536
  解决办法:
#git clone git://gist.github.com/2716030.git  
#patch < 2716030/mod_rpaf-2.0.c.patch
  
#$APACHE_ROOT/bin/apxs -i -c -n mod_rpaf-2.0.so mod_rpaf-2.0.c
  2.       配置apache
#Include conf/extra/mod_rpaf.conf  

  
RPAFenable On
  
RPAFproxy_ips 183.136.133.* 183.60.211.* 220.181.55.* 101.226.4.* 180.153.235.* 122.143.15.* 27.221.20.* 202.102.85.* 61.160.224.* 112.25.60.* 182.140.227.*
  
RPAFsethostname On
  
RPAFheader X-Forwarded-For
  

  注意:RPAFproxy_ips 指填写代理服务器的ip地址,不是Apache服务自身的地址。网段可以写成类似183.136.133.*这种格式。与mod_evasive模块的网段写法类似。
  # 修改apache的日志输出格式,如下
  LogFormat "\"%{X-Forwarded-For}i\" %h %l %u %t \"%r\" %>s %b %{deviceId}i \"%{Referer}i\" \"%{User-Agent}i\" " combined
  3.       重启apache使之生效
2  使用mod_evasive模块自动阻止DDOS***
2.1  mod_evasive介绍:
  mod_evasive 是Apache(httpd)服务器防DDOS***的一个模块。对于WEB服务器来说,是目前比较好的一个防护DDOS***的扩展模块。虽然并不能完全防御 DDOS***,但在一定条件下,还是起到缓服Apache(httpd)服务器的***压力,可以配合iptables命令实现自动判断***ip,自动添加到iptables阻止列表中。实践证明效果明显有效。
  官方网站:http://www.zdziarski.com
2.2  mod_evasive安装
  阅读README文件,里面有安装和配置的方法,支持Apache 1.3 and 2.0
  1)  安装模块

  •   apache 2.0版本环境下编译:
  $APACHE_ROOT/bin/apxs -i -a -c mod_evasive20.c
  安装完成后,modules/mod_evasive20.so目录下将增加一个mod_evasive20.so的文件。
  注:apxs 命令用于编译模块工具;如果安装的apache不是默认的rpm包,apxs命令位于您安装的apache安装路径bin目录下。

  •   apache2.4版本环境下编译:
  如果直接执行$APACHE_ROOT/bin/apxs -i -a -c mod_evasive20.c,则出现下列错误:
mod_evasive20.c: In function 'access_checker':  
mod_evasive20.c:142: error: 'conn_rec' has no member named 'remote_ip'
  
mod_evasive20.c:146: error: 'conn_rec' has no member named 'remote_ip'
  
mod_evasive20.c:158: error: 'conn_rec' has no member named 'remote_ip'
  
mod_evasive20.c:165: error: 'conn_rec' has no member named 'remote_ip'
  
mod_evasive20.c:180: error: 'conn_rec' has no member named 'remote_ip'
  
mod_evasive20.c:187: error: 'conn_rec' has no member named 'remote_ip'
  
mod_evasive20.c:208: error: 'conn_rec' has no member named 'remote_ip'
  
mod_evasive20.c:212: warning: implicit declaration of function 'getpid'
  
mod_evasive20.c:215: error: 'conn_rec' has no member named 'remote_ip'
  
mod_evasive20.c:221: error: 'conn_rec' has no member named 'remote_ip'
  
mod_evasive20.c:222: error: 'conn_rec' has no member named 'remote_ip'
  
mod_evasive20.c:228: error: 'conn_rec' has no member named 'remote_ip'
  解决办法:
#cp mod_evasive{20,24}.c  
#sed s/remote_ip/client_ip/g -i mod_evasive24.c
  
#$APACHE_ROOT/bin/apxs -i -a -c mod_evasive24.c
  2)  配置httpd.conf文件

  •   apache 2.0版本环境下配置:
LoadModule evasive20_module modules/mod_evasive20.so  

  
    DOSHashTableSize    5120
  
    DOSPageCount        3
  
    DOSSiteCount        50
  
    DOSPageInterval     1
  
    DOSSiteInterval     1
  
    DOSBlockingPeriod   10
  
    DOSLogDir "/tmp"
  
    #DOSSystemCommand    "su - someuser -c '/sbin/... %s ...'"
  
    DOSSystemCommand    "sudo /sbin/iptables -A INPUT -s %s -p tcp --dport 80 -j DROP"
  
    DOSEmailNotify shenxiaoran@7500.com.cn
  
    DOSWhiteList 127.0.0.1
  
    DOSWhiteList 192.168.123.*
  

  说明:这里使用sudo 命令执行iptables实现自动把识别的***ip添加到防火墙内策略。

  •   apache2.4版本环境下配置:
LoadModule evasive24_module modules/mod_evasive24.so  

  
    DOSHashTableSize    5120
  
    DOSPageCount        3
  
    DOSSiteCount        50
  
    DOSPageInterval     1
  
    DOSSiteInterval     1
  
    DOSBlockingPeriod   10
  
    DOSLogDir "/tmp"
  
    #DOSSystemCommand    "su - someuser -c '/sbin/... %s ...'"
  
    DOSSystemCommand    "sudo /sbin/iptables -A INPUT -s %s -p tcp --dport 80 -j DROP"
  
    DOSEmailNotify shenxiaoran@7500.com.cn
  
    DOSWhiteList 127.0.0.1
  
    DOSWhiteList 192.168.123.*
  


  •   或者采用第三种配置:
      创建conf/mod_evasive.conf:
    DOSHashTableSize    5120  
    DOSPageCount        3
  
    DOSSiteCount        50
  
    DOSPageInterval     1
  
    DOSSiteInterval     1
  
    DOSBlockingPeriod   10
  
    DOSLogDir "/tmp"
  
    #DOSSystemCommand    "su - someuser -c '/sbin/... %s ...'"
  
    DOSSystemCommand    "sudo /sbin/iptables -A INPUT -s %s -p tcp --dport 80 -j DROP"
  
    DOSEmailNotify shenxiaoran@7500.com.cn
  
    DOSWhiteList 127.0.0.1
  
    DOSWhiteList 192.168.123.*
  Add the "Include conf/mod_evasive.conf" to $APACHE_ROOT/conf/httpd.conf
  3)  重启apache使模块生效
  参数说明:
DOSHashTableSize 3097  
#记录和存放黑名单表大小,如果服务器访问量很大,可以加大该值,增加这个值会消耗更多的内存空间
  

  
DOSPageCount 5
  
#同一个页面在同一时间内可以被同一个用户访问的次数,超过该数字就会被列为***,同一时间的数值可以在DosPageInterval参数中设置.
  

  
DOSSiteCount 100
  
#同一个用户在同一个网站内可以同时打开的访问数,同一个时间的数值在DOSSiteInterval中设置。
  

  
DOSPageInterval 1
  
#设置DOSPageCount中时间长度标准,默认值为1。
  

  
DOSSiteInterval 1
  
设置DOSSiteCount中时间长度标准,默认值为1。
  

  
DOSBlockingPeriod 10
  
#被封时间间隔秒,这中间会收到 403 (Forbidden) 的返回,默认10秒。
  

  
# 下面3项可选添加,主要用来邮件提醒;自定义shell命令;记录日志。
  
DOSEmailNotify victorman45@sohu.com
  
#设置受到***时接收***信息提示的邮箱地址。
  
DOSSystemCommand    "su - root -c '/opt/foundir/csmail/mta/bin/sendmail %s < /tmp/ddos_warnning.eml'"
  
#用来调用自定义shell脚本来执行发信报警或其它动作。%s是引用的地址变量
  
DOSLogDir "/var/log/mod_evasive"
  
#***日志存放目录,注意这个目录的权限,是运行apache程序的用户。
  

  
DOSWhitelist    127.0.0.*
  
DOSWhitelist    10.1.6.51
  
#添加白名单,加多个就添加多行,写一行不生效。
2.3  mod_evasive测试
  1. 查看 /tmp目录下,发现有dos-xxx.xxx.xxx.xxx文件说明模块生效了。
  -rw-r--r-- 1 daemon  daemon      6 Oct 24 11:55 dos-110.167.181.201
  -rw-r--r-- 1 daemon  daemon      6 Oct 24 13:51 dos-110.176.79.135
  -rw-r--r-- 1 daemon  daemon      6 Oct 24 13:31 dos-110.211.157.21
  -rw-r--r-- 1 daemon  daemon      6 Oct 24 12:12 dos-110.80.111.183
  -rw-r--r-- 1 daemon  daemon      6 Oct 24 13:26 dos-110.89.10.25
  -rw-r--r-- 1 daemon  daemon      6 Oct 24 13:27 dos-110.90.41.56
  -rw-r--r-- 1 daemon  daemon      6 Oct 24 14:32 dos-111.174.167.183
  -rw-r--r-- 1 daemon  daemon      6 Oct 24 11:52 dos-111.177.13.104
  -rw-r--r-- 1 daemon  daemon      6 Oct 24 11:36 dos-112.224.21.14
  同时查看iptables列表,观察是否成功添加了策略。
  # iptables –L
  2. 在mod_evasive_1.10.1.tar.gz解压目录下面有个测试脚本,test.pl是用perl写的,如果你看到下面的截图,就表示该模块安装成功。
DSC0000.png

  如果你使用了DOSLogDir "/var/log/mod_evasive"参数,该目录的属主要是nobody:nobody,发生***时,将生成一个dos-127.0.0.1文件。如果没指定日志,默认在/tmp目录下。
  还可以直接用浏览器测试:
  访问apache,不断刷新,达到一定的阀值就会出现下面提示:
  Forbidden
  You don't have permission to access / on this server.



运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-637554-1-1.html 上篇帖子: Apache和php的关系 下篇帖子: 2.7
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表