Проблема с блокировкой IP адресов, а также с limit_conn

Доронин Сергей nophear at yandex.ru
Sun Jan 25 13:38:32 MSK 2009


Здравствуйте!
У меня на сервере на 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;

    access_log  /home/myhost/logs/access.log combined;
        
    sendfile        on;

    keepalive_timeout  20;


    limit_zone   one  $binary_remote_addr  10m;

    server {
        listen       1.2.3.4:80;
        server_name  myhost.nichost.ru www.myhost.nichost.ru;

        limit_conn   one  3;

        allow all;
        deny 92.113.238.129;
.....................
Где 1.2.3.4 - IP моего сервера.
С данным конфигом я запускаю nginx. После этого смотрю в netstat и вижу такую картину:

[myhost at 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 at 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 at web48 ~]$ 

92.113.238.129 - данный IP не только успешно соединяется с nginx (не смотря на "deny"), но и делает это параллельно бесконечное множество раз 

(не смотря на limit_zone/limit_conn). Скажите пожалуйста, что я делаю не так? Почему nginx игнорирует соответствующие директивы в конфигах?

Заранее, спасибо!





More information about the nginx-ru mailing list