日常建站过程中难免会遇到cc攻击,导致你的网站无法正常访问,甚至受到经济损失。所以我们不得不自己配置防火墙来规避损失。
如果会使用kangle,也可以用kangle来防cc,这里我使用的是nginx+lua的方式,这里我就直接用openresty了。
首先安装春哥的openresty:
安装依赖:
yum -y install wget vim screen make gcc gcc-c++
yum -y install readline-devel pcre pcre-devel openssl-devel gcc
创建id为508的www用户和组:
groupadd -g 508 www
useradd -g www -u 508 -s /sbin/nologin -M www
下载openresty编译并安装:
wget https://openresty.org/download/openresty-1.13.6.2.tar.gz
tar xf openresty-1.13.6.2.tar.gz
cd openresty-1.13.6.2
./configure
make && make install
/usr/local/openresty/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/openresty/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/openresty/nginx/conf/nginx.conf test is successful
建立软链接并启动:
ln -s /usr/local/openresty/nginx/sbin/nginx /usr/bin/nginx
/usr/local/openresty/nginx/sbin/nginx
切换到配置文件目录,下载博主提供的anti-cc.tar.gz并解压:
cd /usr/local/openresty/nginx/conf/
tar zxvf anti-cc.tar.gz
解压后的目录名字是waf:
[root@ns1 waf]# pwd
/usr/local/openresty/nginx/conf/waf
[root@ns1 waf]# ll
total 328
drwxr-xr-x 2 www www 266240 Aug 20 18:06 captcha
-rw-r--r-- 1 www www 7290 Oct 5 23:09 config.lua
-rw-r--r-- 1 www www 31357 Aug 20 19:29 guard.lua
drwxr-xr-x 2 www www 4096 Jul 17 19:07 html
-rw-r--r-- 1 www www 5794 Jun 20 2017 init.lua
drwxr-xr-x 2 www www 4096 Oct 5 23:10 logs
-rw-r--r-- 1 www www 100 Jun 20 2017 README.md
-rw-r--r-- 1 www www 2692 Jun 20 2017 runtime.lua
drwxr-xr-x 2 www www 4096 Oct 5 23:07 url-protect
回到上级目录,新建一个配置文件ccwaf.conf,内容如下,
[root@ns1 conf]# pwd
/usr/local/openresty/nginx/conf
[root@ns1 conf]# cat ccwaf.conf
lua_package_path "/usr/local/openresty/nginx/conf/waf/?.lua";
lua_shared_dict guard_dict 100m;
lua_shared_dict dict_captcha 70m;
init_by_lua_file '/usr/local/openresty/nginx/conf/waf/init.lua';
access_by_lua_file '/usr/local/openresty/nginx/conf/waf/runtime.lua';
lua_max_running_timers 1;
然后在nginx主配置文件http段中引用此文件:
http {
...
include ccwaf.conf;
...
include vhost/*.conf;
}
下面给www用户设置一个密码(cc255),用于www用户提升权限控制iptables实现异常ip阻断:
[root@ns1 conf]# passwd www
Changing password for user www.
New password:
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.
该密码需在/usr/local/openresty/nginx/conf/waf/config.lua中配置,其他配置也需要在这里修改。
-- anti-cc实际安装目录。
baseDir = '/usr/local/openresty/nginx/conf/waf/'
-- nginx运行用户的sudo密码,blockAction值为iptables需要设置。
sudoPass = 'cc255',
支持根据请求频率,js人机验证,人工验证码等,根据需要在config中开启即可。
目录说明:
- 验证码生成目录,默认已生成,如需再次生成可执行php getImg.php:
/usr/local/openresty/nginx/conf/waf/captcha - 指定了需要开启策略的url类型,默认为保护php类型,可以自行增加/api/等:
/usr/local/openresty/nginx/conf/waf/url-protect - 验证码页面前端,可自行修改:
/usr/local/openresty/nginx/conf/waf/html - 拦截日志:
/usr/local/openresty/nginx/conf/waf/logs
调整openresty目录权限,递归更改属主为www,否则可能会出现500错误。
chown -R www:www /usr/local/openresty/nginx/
添加sudo授权,我这里直接写成了命令方便大家使用,执行添加即可。
#提升www用户权限,用于阻断cc攻击者ip,防止服务器负载上升
sed -i '/group to run networking/i\www ALL=(root) /sbin/iptables -I INPUT -p tcp -m multiport -s [0-9.]* --dport 80\\,443 -j DROP' /etc/sudoers
我们开启js验证,并在访问频率超过限制后要求输入验证码,如果在验证码页面,十次之内未能通过验证则使用iptables禁止访问服务器,
测试效果:
直接curl请求测试。可以看到并未直接返回网站内容,而是需要js验证。
[root@vultr ~]# curl www.xxx.com/index.php
<script>window.location.href='/index.php?keyjs=16edc723f0&expirejs=1538755850';</script>
[root@vultr ~]#
然后换客户端浏览器访问www.xxx.com查看,网站正常浏览。
狂刷页面,出现验证码:
然后错误输入十次,可以看到已经访问不了:
然后查看服务器防火墙,可以看到恶意ip已经被iptables阻断了。
cc防火墙就配置好了。使用中规则要按自己实际情况调整,我就不再多介绍了。
下载链接掉了
已更新失效链接。
又失效了?
连接失效了
下载链接失效了 求补