Modsecurity를 사용하여 LieBaoFast, MQQBrowser 및 Mb2345Browser 차단
Nginx에는 모듈 modsecurity가 있으며 차단 목록 사용자 에이전트에 LieBaoFast, MQQBrowser 및 Mb2345Browser를 추가하려고합니다.
그런 다음 다음과 같이 테스트합니다.
curl -A "Mozilla/5.0 (Linux; Android 7.0; FRD-AL00 Build/HUAWEIFRD-AL00; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/53.0.2785.49 Mobile MQQBrowser/6.2 TBS/043602 Safari/537.36 MicroMessenger/6.5.16.1120 NetType/WIFI Language/zh_CN" -I "https://serverdiary.com"
결과는 다음과 같습니다.
HTTP/2 403
server: nginx
date: Fri, 24 Jan 2020 13:21:18 GMT
content-type: text/html
content-length: 548
vary: Accept-Encoding
그러나 Nginx 액세스 로그를 확인하면 여전히 액세스 할 수 있으며 여전히 200을 얻을 수 있습니다. Google 애널리틱스에 요청이 여전히 실시간으로 존재합니다.
결과가 403 또는 금지되어 있어도 modsecurity를 전달할 수 있는 이유를 알 수 없습니다.
Nginx 구성을 사용하여 LieBaoFast, MQQBrowser 및 Mb2345Browser 차단
두 번째 옵션은 Nginx 구성을 사용하여 해당 사용자 에이전트를 차단하는 것입니다.
Nginx if is Evil, Nginx 웹 사이트에서 If를 사용하지 않는 것이 좋습니다.
그러나 사용하고 싶다면 아래는 사용자 에이전트 LieBaoFast, MQQBrowser 및 Mb2345Browser를 차단하는 Nginx 구성입니다. 이것을 서버 블록에 넣으십시오.
if ($http_user_agent ~* (liebaofast|mqqbrowser|mb2345browser|zh-cn|zh_cn|micromessenger) ) {
return 403;
}
또는 Nginx 맵을 사용하여 나쁜 봇을 차단할 수 있습니다
## Write your bad User agents want to block
map $http_user_agent $bad_bots {
default 0;
~*scrapyproject 1;
~*nmap 1;
~*sqlmap 1;
~*slowhttptest 1;
~*nikto 1;
~*magpie-crawler 1;
~*python-requests 1;
~*redback 1;
~*liebaofast 1;
~*mqqbrowser 1;
~*micromessenger 1;
~*zh-cn 1;
~*zh_cn 1;
}
if ($bad_bots) {
return 403;
}
위의 Nginx 구성은 최적이 아닙니다. 우리의 Nginx는 여전히 DDOS 요청을 받고 있으며, 이를 처리하고 요청을 거부하며, Nginx if가 권장되지 않는다는 것을 잊지 마십시오.
Fail2ban을 사용하여 LieBaoFast, MQQBrowser 및 Mb2345Browser 차단
최선의 선택은 File2ban을 사용하는 것입니다. 우리 nginx는이 중국 나쁜 봇으로부터 요청을받지 못했습니다.
# yum install epel-release
# yum install fail2ban fail2ban-systemd
/etc/fail2ban/filter.d/nginx-badbots.conf를 만들고 다음 구성을 붙여넣습니다.
[Definition]
mybadbots = Mb2345Browser|LieBaoFast|MQQBrowser|micromessenger|zh_CN|zh-CN|SeznamBot|trendictionbot|magpie-crawler
failregex = ^<HOST> .*(GET|POST|HEAD).*(%(mybadbots)s).*$
ignoreregex =
datepattern = ^[^\[]*\[({DATE})
{^LN-BEG}
/etc/fail2ban/jail.conf를 /etc/fail2ban/jail.local에 복사합니다.
# cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
이 코드를 /etc/fail2ban/jail.local의 맨 아래에 추가하십시오.
#CUSTOM
#[DEFAULT]
# Ban hosts for one hour:
bantime = 3600
# Override /etc/fail2ban/jail.d/00-firewalld.conf:
banaction = iptables-multiport
[nginx-badbots]
enabled = true
port = http,https
filter = nginx-badbots
logpath = /var/log/nginx/*.access.log
findtime = 43200
maxretry = 1
bantime = 86400
action = iptables-multiport[name=BadBots, port="http,https"]
자동 시작 Fail2ban 활성화 및 서비스 시작
# systemctl enable fail2ban
# systemctl start fail2ban
로그온 /var/log/fail2ban.log 확인
# tail -f /var/log/fail2ban.log
Example output
2020-01-24 15:07:10,869 fail2ban.actions [11121]: NOTICE [nginx-badbots] Ban 27.209.165.186
2020-01-24 15:07:10,936 fail2ban.actions [11121]: NOTICE [nginx-badbots] Ban 60.168.87.136
2020-01-24 15:07:11,002 fail2ban.actions [11121]: NOTICE [nginx-badbots] Ban 27.38.49.133
2020-01-24 15:07:11,213 fail2ban.filter [11121]: INFO [nginx-badbots] Found 122.232.219.148 - 2020-01-24 15:07:11
2020-01-24 15:07:11,250 fail2ban.filter [11121]: INFO [nginx-badbots] Found 223.98.64.36 - 2020-01-24 15:07:11
2020-01-24 15:07:11,264 fail2ban.actions [11121]: NOTICE [nginx-badbots] Ban 122.232.219.148
2020-01-24 15:07:11,327 fail2ban.actions [11121]: NOTICE [nginx-badbots] Ban 223.98.64.36
다음 명령을 사용하여 Fail2ban에 의해 차단된 IP를 확인합니다.
# fail2ban-client status nginx-badbots
example output
Status for the jail: nginx-badbots
|- Filter
| |- Currently failed: 0
| |- Total failed: 28146