有朋友的青龙面板登录总是被别人惦记.就帮忙弄好了,顺便写个教程给小白普及一下

  • centos7环境

起因

登录接口(青龙登录验证接口)频繁被调用(所谓字典爆破),对于企业来说肯定用的是nginx或者openresty

本来想着写一个openresty(默认支持lua语言)然后写lu脚本,动态封锁频繁调用的ip放进redis里面.

考虑方便最后选用一个FastCGI(快速通用网关接口)是语言无关的协议来实现

安装以及配置fcgiwrap

yum install epel-release fcgiwrap -y
nohup sudo fcgiwrap -f -c 4 -s unix:/var/run/fcgiwrap.socket 2>&1 &
sudo chown nginx:nginx /var/run/fcgiwrap.socket
mkdir -p /home/www/public
## waf.cgi这个建议修改个名字如果大家都一样到时候还是会爆破这个名字记一下
curl -O https://ghproxy.fsou.cc/https://github.com/21ki/public/blob/main/qinglong/waf.cgi
sudo chown nginx:nginx /home/www/public -R

nginx安装

yum install -y nginx
systemctl enable nginx --now

nginx 配置

# 在nginx的默认配置添加
vi /etc/nginx/nginx.conf
http {
    geo $remote_addr $ip_whitelist {
        default 0;
        include ip_white.conf;
    }
}

touch /etc/nginx/ip_white.conf
touch /etc/nginx/ip_white.conf.default
sudo chown nginx:nginx /etc/nginx/ip_white.conf /etc/nginx/ip_white.conf.default

tee /etc/nginx/conf.d/ql.example.com.conf <<-'EOF'
server {
    listen       80;
    # 修改成自己的二级域名
    server_name  ql.example.com;
    large_client_header_buffers 4 16k;
    client_max_body_size 300m;
    client_body_buffer_size 128k;
    proxy_connect_timeout 600;
    proxy_read_timeout 600s;
    proxy_send_timeout 600s;
    proxy_buffer_size 64k;
    proxy_buffers   4 64k;
    proxy_busy_buffers_size 64k;
    proxy_temp_file_write_size 64k;

    # Load configuration files for the default server block.
    include /etc/nginx/default.d/*.conf;

    # 安装模块
    location ~* (\.cgi|\.py|\.sh|\.pl|\.lua)$ {
        root        /home/www/public;
        fastcgi_pass    unix:/var/run/fcgiwrap.socket;
        fastcgi_param   SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include         fastcgi_params;
    }


    location / {
          if ($ip_whitelist = 1) {
          # 修改自己的内网ip
          proxy_pass http://192.168.1.33:5700;
          break;
          }
          return 403;
    }
}
EOF

nginx -s reload

后记(https后续再不上)

有条件的话可以用https更安全

如果是云主机就去安全组把所有对外暴露的端口都禁止访问只留一个80,443和ssh(22)

如果是家庭公网就去设置iptables或者firewalld

访问方式http://ql.example.com/waf.cgi 会把当下的ip写入到nginx的白名单

然后再访问http://ql.example.com即可访问 直接访问的话是403

我看有人装了fail2ban说是能防止爆破,这里解释下fail2ban一般用于ssh爆破并不能有效防止接口调用ssh爆破还是建议修改默认22端口来处理

很早之前也是做攻防的,其实爆破都是拿代理池去频繁调用接口,用弱口令(一般用写好的字典) 所以如果我的ip足够多照样能爆破出您的接口权限,所以最好的方法还是白名单靠破一些