Nginx разумеется, их обслуживает как честных клиентов, посылая в ответ им 400й код, тратя на это ресурсы. Для того, чтобы сэкономить и эти ресурсы, у Nginx есть специальный код ответа - 444, который делает следующее:
Nginx understands that if you want to send the client the 444 error code (only 400-417 and 500-505 are allowed by RFC) then Nginx should just close the connection to the client. Just dropping the connection and sending an empty TCP reset packet to the client will deny scanner information about the server and _may_ confuse them.
Иными словами, он просто закрывает сокет, никаким образом не затрудняясь на корректный ответ клиенту.
Вот этот сервер необходимо добавить в конфиг файл nginx.conf самым первым.
server {
listen 80;
server_name _; #default
# access_log /var/log/nginx/localhost.access.log;
return 444;
}
И после этого сделать reload Nginx у:
/etc/init.d/nginx reload
источник: https://calomel.org/nginx.html
Сударь, большое спасибо Вам! Раньше ддосерам 403 отдавал, а 444 выгоднее ))
ReplyDeleteВсегда пожалуйста ):
ReplyDeleteВообще этот конфиг не будет работать как надо.
ReplyDeleteС пустым или отсутствующим Host -- будет отдаваться 400, с любым другим 444.
Это не так, с чего Вы взяли? Скорее всего, у вас иная конфигурация, но у меня на ряде ддосо-подверженных серверов именно так и в логах точно видно, что всем, кому не надо выдается 444.
ReplyDeleteможет так лучше
ReplyDeleteserver {
listen *:80 default_server;
server_name localhost "";
return 444;
}
вернее так
ReplyDeleteserver {
listen *:80 default;
server_name _ "";
return 444;
}
у меня 0.7 версия
Вобще не пойму в server_name должно быть hostname ?
ReplyDeleteа на другие домены это будет распространятся?
server_name site.ru "";
В примерах конфигурации серверов, обрабатывающих все запросы, встречается странное имя “_”:
ReplyDeleteserver {
listen 80 default_server;
server_name _;
return 444;
}
Оно не является каким-то особенным, это просто одно из множества некорректных доменных имён, которые никогда не пересекутся ни с одним из реальных имён. С тем же успехом можно использовать имена типа “--” и “!@#”.
Что это значит? Что server_name _; не работает?
чего-то я вообще ничего не пойму...
ReplyDeleteнаписал php скрипт, там подменил header host на пустой и ошибка 400
получается не работает
прописал что-то левое. работает... даже просто тире в header host и то работает... и зачем вобще тогда это делать? я думаю написать ботов которые в header host генерят что-нить вобще не проблема
Естественно, это легко. Если хотите универсальные решения, то в ddos-protection.ru/qrator.net - прямая дорога.
Delete