关于aws上RHEL-7.5_HVM部署自封iptables脚本+openresty及waf模块部署

一、开启ami,使用putty登录,登录名默认ec2-user
1、根据官网提供的方法登录连接到EC2服务器(官网推荐windows用户使用PUTTY连接)
2、 创建root的密码,输入如下命令:
sudo passwd root
3、然后会提示你输入new password。输入一个你要设置的root的密码,需要你再输入一遍进行验证。
4、接下来,切换到root身份,输入如下命令:
su root
二、安装openresty配置waf防火墙,不需要编译nginx
①安装依赖包和创建nginx运行的普通用户

[root@linux-node1 ~]# yum install -y readline-devel pcre-devel openssl-devel
[root@linux-node1 src]# useradd -s /sbin/nologin -M www
②下载当前最新的luajit,并编译
[root@linux-node1 ~]# cd /usr/local/src/
[root@linux-node1 src]# wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz(win本地下载,后scp工具上传)
[root@linux-node1 src]# tar -xzf LuaJIT-2.0.5.tar.gz
[root@linux-node1 src]# cd LuaJIT-2.0.5
[root@linux-node1 LuaJIT-2.0.5]# make (yum install -y gcc 之后的安装需要gcc包)&& make install
[root@linux-node1 LuaJIT-2.0.5]# export LUAJIT_LIB=/usr/local/lib
[root@linux-node1 LuaJIT-2.0.5]# export LUAJIT_INC=/usr/local/include/luajit-2.0
[root@linux-node1 ~]# ln -s /usr/local/lib/libluajit-5.1.so.2 /lib64/libluajit-5.1.so.2
#一定创建此软连接,否则会报错
如果不创建符号链接,可能出现以下异常: error while loading shared libraries: libluajit-5.1.so.2: cannot open shared object file: No such file or directory
③下载并编译安装openresty

[root@linux-node1 ~]#cd /usr/local/src
[root@linux-node1 src]# wget https://openresty.org/download/openresty-1.11.2.2.tar.gz

[root@linux-node1 src]#tar -zxf openresty-1.11.2.2.tar.gz
[root@linux-node1 src]#cd ngx_openresty-1.11.2.2
yum install perl
yum install -y readline-devel pcre-devel openssl-devel gcc gcc-c++ perl.x86_64
./configure --prefix=/usr/local/openresty --with-luajit --with-http_v2_module --with-http_stub_status_module --with-http_ssl_module --with-http_gzip_static_module --with-ipv6 --with-http_sub_module --with-pcre --with-pcre-jit --with-file-aio --with-http_dav_module

————————————————
版权声明:本文为CSDN博主「ccx_jy」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chuanxincui/article/details/86089763
[root@linux-node1 ngx_openresty-1.11.2.2]#gmake && gmake install
⑤测试并启动nginx

[root@linux-node1 ~]#/usr/local/openresty/nginx/sbin/nginx -t
[root@linux-node1 ~]#/usr/local/openresty/nginx/sbin/nginx

三、WAF部署
①本地下载好waf文件,scp传到ec2-user
[root@linux-node1 ~]# cp -r /home/ec2-user/waf/ /usr/local/openresty/nginx/conf/

②修改Nginx的配置文件,加入(http字段)以下配置。注意路径,同时WAF日志默认存放在/tmp/日期_waf.log

[root@linux-node1 ~]# cd /usr/local/openresty/nginx/conf
[root@linux-node1 conf]# vi nginx.conf
http {
include mime.types;
default_type application/octet-stream;
lua_shared_dict limit 50m; #防cc使用字典,大小50M
lua_package_path “/usr/local/openresty/nginx/conf/waf/?.lua”;
init_by_lua_file “/usr/local/openresty/nginx/conf/waf/init.lua”;
access_by_lua_file “/usr/local/openresty/nginx/conf/waf/access.lua”;
#log_format main '$remote_addr - r e m o t e u s e r [ remote_user [ remoteuser[time_local] “$request” ’
测试地址/.sql
显示拦截,说明成功
四、自封ip脚本
#!/bin/bash
#Author:ZhangGe
#Desc:Auto Deny Black_IP Script.
#Date:2014-11-05
#取得参数$1为并发阈值,若留空则默认允许单IP最大50并发(实际测试发现,2M带宽,十来个并发服务器就已经无法访问了!)
if [[ -z $1 ]];then
num=50
else
num=$1
fi

#巧妙的进入到脚本工作目录
cd $(cd $(dirname $BASH_SOURCE) && pwd)

#请求检查、判断及拉黑主功能函数
function check(){
iplist=netstat -an |grep ^tcp.*:80|egrep -v 'LISTEN|127.0.0.1'|awk -F"[ ]+|[:]" '{print $6}'|sort|uniq -c|sort -rn|awk -v str=$num '{if ($1>str){print $2}}'
if [[ ! -z $iplist ]];
then
>./black_ip.txt
for black_ip in $iplist
do
#白名单过滤中已取消IP段的判断功能,可根据需要自行修改以下代码(请参考前天写的脚本)
#exclude_ip=echo $black_ip | awk -F"." '{print $1"."$2"."$3}'
#grep -q $exclude_ip ./white_ip.txt
grep -q $black_ip ./white_ip.txt
if [[ ? − e q 0 ] ] ; t h e n e c h o " ? -eq 0 ]];then echo " ?eq0]];thenecho"black_ip (white_ip)" >>./black_ip.txt
else
echo $black_ip >>./black_ip.txt
iptables -nL | grep $black_ip ||(iptables -I INPUT -s KaTeX parse error: Expected 'EOF', got '&' at position 18: …ack_ip -j DROP &̲ echo "black_ip date +%Y-%m-%H:%M:%S">>./deny.log & echo 1 >./sendmail)
fi
done

    fi

}

#间隔10s无限循环检查函数
while true
do
check
#每隔10s检查一次,时间可根据需要自定义
sleep 10
done
二、执行脚本

将以上代码保存为 deny_blackip.sh 之后,进入到脚本文件所在目录,然后使用如下命令后台执行脚本(后面的 50 表示并发数,可自行调整):
kill -s -9 id
pkill -s -9 id

三、附加说明

①、脚本发邮件需要安装 sendmail,若未安装请执行 yum -y install sendmail 安装并启动即可;
②、若要停止后台运行的脚本,只要使用 ps aux 命令找到该脚本的 pid 线程号,然后执行 kill -9 pid 号即可结束;
③、关于脚本的单 IP 并发限制,我实际测试同时打开博客多个页面并持续刷新,顶多也就产生十来个并发,所以单 IP 超过 50 个并发就已经有很大的问题了!当然,文章的阈值设为 50 也只是建议值,你可以根据需求自行调整(如果网站静态文件未托管到 CDN,那么一个页面可能存在 10 多个并发);
④、写这个脚本,主要是为了弥补用 crontab 执行时间间隔最低只能是 1 分钟的不足,可以让 CC 防护更严密,甚至每隔 1S 执行一次!虽说脚本不怎么占用资源,不过还是建议 10s 执行一次为佳,不用太过极端是吧?
⑤、对于白名单过滤,只要将白名单 IP 保存到脚本同一目录下的 white_ip.txt 文件中即可,若发现攻击 IP 在白名单中,脚本不会直接拉黑,而是发一封邮件给你,让你自己判断这个白名单攻击你是为毛?如果白名单需要支持 IP 段,请参考我前天写的脚本即可。

参考:
https://zhangge.net/4649.html

https://blog.csdn.net/m0_37886429/article/details/73178889

后记:waf之前用的modsecurity+CRS 但是效果不明显,估计是crs不熟悉。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值