Как-то проснувшись утром наблюдаю на почте такую картину: login failures: Jun 2 07:07:55 4dle sshd[45556]: Failed password for invalid user webadmin from 163.21.230.20 port 35758 ssh2 Jun 2 07:07:58 4dle sshd[45560]: Failed password for invalid user ftp from 163.21.230.20 port 35844 ssh2 Jun 2 07:08:01 4dle sshd[45569]: Failed password for invalid user test from 163.21.230.20 port 35933 ssh2 Jun 2 07:08:07 4dle sshd[45620]: Failed password for invalid user admin from 163.21.230.20 port 36102 ssh2 Jun 2 07:08:10 4dle sshd[45625]: Failed password for invalid user guest from 163.21.230.20 port 36183 ssh2 Jun 2 07:08:13 4dle sshd[45630]: Failed password for invalid user master from 163.21.230.20 port 36273 ssh2 Jun 2 07:08:16 4dle sshd[45652]: Failed password for invalid user apache from 163.21.230.20 port 36360 ssh2 Явно подбирают логин\пароль к ssh. Бороться с данным видом атак вручную, явно бесполезное занятие, наличие IP адреса атакующего ничего не дает, так как, в подавляющем большинстве случаев, являются "левыми" и периодически меняются. Было решено поставить програмку sshguard. Принцип работы программы программы следующий: sshguard парсит лог файл регистраций в системе, если обнаруживает аномальное количество неудачных подключений с определенного IP, помечает адрес как нарушителя и добавляет в IPFW блокирующее правило на определенный промежуток времени, по умолчанию, время блокировки, 7 минут. Если в дальнейшем, данный IP вновь обратит на себя внимание sshguard своим неадекватным поведением, снова будет создано блокирующее правило в IPFW, но срок будет 2*7. Схема расчета времени блокировки следующая: 7 минут, 2*7 минут, 2*2*7 минут ..... 2^(n-1)*7 минут. В дальнейшем, после определенного количества рецидивов, указанного в опции -b, IP может будет помещен с черный список на постоянной основе.
От чего будем защищатся? От подобных запросов: 78.24.217.120 - - [02/Jun/2010:08:06:00 +0400] "GET / HTTP/1.1" 200 1036 "-" "-" 78.24.217.120 - - [02/Jun/2010:08:06:00 +0400] "GET /index.php HTTP/1.1" 200 1036 "-" "-" Продолжение под катом...
Настройка nginxИтак приступим! Открываем /usr/local/etc/nginx/nginx.conf http {
include mime.typs; default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] $request ' '"$status" $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
sendfile on; keepalive_timeout 65; gzip on; gzip_min_length 1100; gzip_buffers 64 8k; gzip_comp_level 3; gzip_http_version 1.1; gzip_proxied any; gzip_types text/plain application/xml application/x-javascript text/css;
server_tokens off; reset_timedout_connection on; limit_req_zone $binary_remote_addr zone=one:10m rate=2r/s;
server { listen 80; server_name site.ru www.site.ru;
rewrite ^(/manager/.*)$ https://$host$1 permanent; location ~* ^/(webstat/|awstats|webmail/|myadmin/|manimg/) { proxy_pass http://127.0.0.1:8080; proxy_redirect http://127.0.0.1:8080/ /; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; }
location / { proxy_pass http://127.0.0.1:8080; proxy_redirect http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; limit_req zone=one burst=4; } location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|cur)$ { root /home/nickon/data/www/site.ru; expires 1y; access_log /home/httpd-logs/site.ru.access.log; error_page 404 = @fallback; } location @fallback { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Real-IP $remote_addr; }
} }
|
|