Здравствуйте! У меня на сервере на 8080 порту установлен apache, а на 80 nginx. Иногда мой сайт подвергается http-флуд атакам, что влечёт за собой множество
соединений с одного IP. Соответственно мне нужно средствами nginx ограничивать количество соединений с одного IP и блокировать доступ к сайту
для некоторых IP адресов. В документации по nginx я нашёл решение обоих вопросов. Вырезка из nginx.conf:
# NGINX Server configuration
worker_processes 3;
error_log /home/myhost/logs/error.log;
pid /home/myhost/logs/nginx.pid;
events { worker_connections 1024; }
http {
include /usr/local/etc/nginx/mime.types; default_type application/octet-stream; server_names_hash_bucket_size 64;
allow all; deny 92.113.238.129; ..................... Где 1.2.3.4 - IP моего сервера. С данным конфигом я запускаю nginx. После этого смотрю в netstat и вижу такую картину:
[myhost@web48 ~]$ netstat -an|grep ESTABLISH|more netstat: kvm not available tcp4 0 0 1.2.3.4.80 62.182.93.42.55050 ESTABLISHED tcp4 0 330 1.2.3.4.80 92.113.238.129.20928 ESTABLISHED
tcp4 0 330 1.2.3.4.80 92.124.46.214.3788 ESTABLISHED tcp4 0 330 1.2.3.4.80 92.113.238.129.19614 ESTABLISHED tcp4 0 0 1.2.3.4.80 62.182.93.42.56534 ESTABLISHED
tcp4 0 330 1.2.3.4.80 62.182.93.42.64848 ESTABLISHED tcp4 0 330 1.2.3.4.80 92.113.238.129.19580 ESTABLISHED tcp4 0 330 1.2.3.4.80 92.113.238.129.20842 ESTABLISHED
tcp4 0 330 1.2.3.4.80 95.79.9.220.3079 ESTABLISHED tcp4 0 690 1.2.3.4.80 92.126.158.158.49561 ESTABLISHED tcp4 0 690 1.2.3.4.80 92.126.158.158.49560 ESTABLISHED
tcp4 0 330 1.2.3.4.80 92.113.238.129.20807 ESTABLISHED tcp4 0 330 1.2.3.4.80 92.113.238.129.20795 ESTABLISHED tcp4 0 330 1.2.3.4.80 92.113.238.129.19495 ESTABLISHED
tcp4 0 330 1.2.3.4.80 92.113.238.129.20776 ESTABLISHED tcp4 0 330 1.2.3.4.80 95.79.9.220.3078 ESTABLISHED tcp4 0 330 1.2.3.4.80 92.113.238.129.20775 ESTABLISHED
tcp4 0 330 1.2.3.4.80 92.113.238.129.20774 ESTABLISHED tcp4 0 330 1.2.3.4.80 89.250.149.46.61099 ESTABLISHED tcp4 0 330 1.2.3.4.80 92.113.238.129.20760 ESTABLISHED
tcp4 0 690 1.2.3.4.80 92.243.181.212.17171 ESTABLISHED tcp4 0 330 1.2.3.4.80 92.124.46.214.3784 ESTABLISHED tcp4 0 330 1.2.3.4.80 92.113.238.129.20735 ESTABLISHED
tcp4 0 330 1.2.3.4.80 92.113.238.129.20738 ESTABLISHED tcp4 0 330 1.2.3.4.80 92.113.238.129.20718 ESTABLISHED tcp4 0 330 1.2.3.4.80 92.113.238.129.20708 ESTABLISHED
tcp4 0 330 1.2.3.4.80 92.113.238.129.20699 ESTABLISHED tcp4 0 330 1.2.3.4.80 92.113.238.129.20669 ESTABLISHED tcp4 0 330 1.2.3.4.80 92.113.238.129.20666 ESTABLISHED
tcp4 0 330 1.2.3.4.80 92.113.238.129.19411 ESTABLISHED tcp4 0 330 1.2.3.4.80 92.113.238.129.20657 ESTABLISHED tcp4 0 330 1.2.3.4.80 92.113.238.129.20633 ESTABLISHED
tcp4 0 330 1.2.3.4.80 92.113.238.129.19377 ESTABLISHED tcp4 0 330 1.2.3.4.80 92.113.238.129.19400 ESTABLISHED tcp4 0 330 1.2.3.4.80 92.124.46.214.3780 ESTABLISHED
tcp4 0 330 1.2.3.4.80 92.113.238.129.20599 ESTABLISHED tcp4 0 330 1.2.3.4.80 92.113.238.129.20598 ESTABLISHED tcp4 0 330 1.2.3.4.80 92.113.238.129.20587 ESTABLISHED
[myhost@web48 ~]$ ps aux|grep nginx myhost 89909 0.0 0.0 12224 1220 ?? Ss 12:47PM 0:00.00 nginx: master process /usr/local/sbin/nginx -c /home/myhost/nginx/nginx.conf
(nginx) myhost 89910 0.0 0.1 12684 1692 ?? S 12:47PM 0:06.15 nginx: worker process (nginx)
myhost 89911 0.0 0.0 12500 1508 ?? S 12:47PM 0:08.07 nginx: worker process (nginx) myhost 89912 0.0 0.0 12500 1508 ?? S 12:47PM 0:08.19 nginx: worker process (nginx) myhost 94547 0.0 0.0 1592 836 p5 S+ 1:13PM 0:00.00 grep nginx
[myhost@web48 ~]$
92.113.238.129 - данный IP не только успешно соединяется с nginx (не смотря на "deny"), но и делает это параллельно бесконечное множество раз
(не смотря на limit_zone/limit_conn). Скажите пожалуйста, что я делаю не так? Почему nginx игнорирует соответствующие директивы в конфигах?