Мелкий Ддос. Советы по защите.

B
На сайте с 03.01.2010
Offline
114
1755

Всем привет! Частенько сталкиваюсь с маленькими ддосами, но как побороть их, чтобы не трезвонить в поддержку не знаю.

Имеется 3 впс и 1 сервер.

2 впс на free bsd 8,9

1 впс на free bsd 9

1 сервер на centos 5.2

панель исп

Периодически сайты ддосят, причем сейчас много софта который ставится на комп, нажимается кнопка и пошло...

Собственно речь идет о таких вот атаках, где используется немного ип.

1. Как посмотреть с каких ип, сколько и куда идут запросы?

2. Как правильно забанить на время определенный ип, сеть, сделать черный список с промежутком по времени?

Гуглил, Яндексом пользовался, но конкретного рабочего примера не нашел, то команда в шеле не работает, то еще что то.

Благодарю за ответы.

С
На сайте с 14.04.2011
Offline
63
#1

В фаерволе и в nginx, нужно настраивать rate-limit.

Или вот есть такой скрипт.

#!/usr/bin/perl -w

use strict;
use warnings;
use POSIX qw(strftime);

my $pattern = "\"GET \/ HTTP\/"; # request index page pattern
my $httpd_log = "/var/log/httpd-access.log"; # log file
my $ok = "1000"; # allowed connections per ip for $check_period
my $check_period = 1; # check period in hours

my $date = strftime("%d/%b/%Y:%H", localtime(time-$check_period*3600)); # date minus $check_period hours
my (%ips, $ip, $start);

open (LOG, $httpd_log) or die $!;
while (<LOG>) {
next unless m/$date/ || $start; # skipping old records
$start=1;
if (/^(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}).*$pattern/go) { # getting ips
$ips{$1}++;
}
}
close LOG;

foreach $ip (keys %ips) {
if ($ips{$ip} >= $ok) { #
print "$ip = $ips{$ip}\n"; next; # comment out this line if you want to modify firewall rules and uncomment one of the following
#system("/sbin/pfctl -t bots -T add $ip"); # adding address to table <bots>
#system("/sbin/ipfw table 5 add $ip"); # adding address to table 5
#system("/sbin/iptables -A INPUT -s $ip -j REJECT"); # adding denying rule
}
}
zexis
На сайте с 09.08.2005
Offline
388
#2

Атакующие IP можно найти в

1. выдаче netstat. Делают слишком много коннектов.

2. логах access.log. Делают слишком много однообразных запросов.

Забанить их в фаерволе.

iptables –A ban –s 11.22.33.44 –j DROP

или через ipfw

Плюс для уменьшения нагрузки нужно поставить nginx и добавить ограничивающие лимиты.

limit_req_zone $binary_remote_addr zone=lphp:10m rate=1r/s;

limit_zone limz $binary_remote_addr 10m;

limit_conn limz 10;

Ставится в локейшен проксирующий на бэкенд

location /

limit_req zone=lphp burst=10 nodelay;

могу вам установить отлаженное решение основанное на вышеописанном методе.

В нем.

1. Имеется белый список подсетей поисковиков.

2. Лимиты для бана меняются автоматически, в зависимости от силы атаки. Когда атаки нет, некто не банится. Наличие атаки определяется по суммарному количеству коннектов и запросов.

3. Разработано несколько эффективных алгоритмов для поиска ботов в логах.

Моя аська 1699три8679

cdroller
На сайте с 26.07.2012
Offline
14
#3

fail2ban можно поставить, очень удобная штука ... это анализатор логов, и при нахождении регулярных выражений, правил в этих самых логах выполняет определенные заранее заданные действия, например оповещение на мыло шлет, или в фаерволл iptable добавляет ... сразу после установки будут доступны в конфигах примеры, которые при минимальной настройке можно использовать для защиты от подбра паролей к ssh, ftp, http-сервисам а также и просто частых обращений, ddos и прочее ...

оф. сайт fail2ban.org

Рожденные в СССР не ищут виноватых
P
На сайте с 16.03.2009
Offline
144
#4

От http флуда fail2ban+nginx.

В nginx:

limit_conn_zone $binary_remote_addr zone=name:10m;
limit_conn name 30;

Можно сделать кастомный лог для каждого виртуального хоста, тогда еще в конфиг + zone=name:10m; нужно прописывать свой для каждого нового вирт. хоста

error_log /var/www/host/logs/nginx_error.log;

Далее apt-get install fail2ban заходим в /etc/fail2ban/filter.d и создаем nginx-conn-limit.conf

# Fail2Ban configuration file
#
# supports: http_limit_zone module

[Definition]

failregex = limiting connections by zone.*client: <HOST>

# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =

Теперь включаем фильтр в /etc/fail2ban/jail.conf

[nginx-conn-limit]

enabled = true
filter = nginx-conn-limit
action = iptables-multiport[name=ConnLimit, port="http,https", protocol=tcp]
#logpath = /var/www/*/logs/nginx_error.log - пример если много логов
logpath = /var/log/nginx/error.log # если 1 лог
maxretry = 100 # макс кол-во штрафов

Далее /etc/init.d/fail2ban restart и проверяем. С другого хоста an -n 10000 -c 200 "http://site.ru"

Или если нет апача с ab то можно поставить siege - синтаксис такой же.

R
На сайте с 03.07.2006
Offline
223
#5

Увидеть IP досера можно командой

netstat -ntu | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

Смотрите записи от 50 обращений.

Проверить кто сидит под IP можно тут: http://2ip.ru/whois/

Если это честный бот Яндекса или Сапы, то его лучше не банить :)

При небольшом и даже среднем досе помогает DDOS DEFLATE http://deflate.medialayer.com/

запустил скрипт и он сам будет банить досеров добавляя их в конфиг iptables

Не забудьте добавить себя и другие трастовые IP в игнор лист

/usr/local/ddos/ignore.ip.list

Если используется всего несколько компьютеров для доса, скорее всего они используют уязвимости в коде и просто нагружают процессор, диск и оперативку до предела. В этом случае помогает только кеширование и оптимизация кода.

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий