*Drive*- Здесь рулят padonki

*Drive* - Counter Strike Source
Текущее время: 29 мар 2024, 00:45

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
 Заголовок сообщения: Защита от DDoS атак
СообщениеДобавлено: 11 апр 2010, 18:10 
Не в сети
padonki
Аватар пользователя

Зарегистрирован: 14 авг 2006, 20:43
Сообщений: 3750
Благодарил (а): 9 раз.
Поблагодарили: 96 раз.
Итак , ВАШ сервер подвергся очередной DDoS атаке:

В логах обнаружились повторяющиеся записи вида

Mar 28 22:07:05 daemon kernel: ip_conntrack: table full, dropping packet.

Mar 28 22:07:10 daemon kernel: printk: 224 messages suppressed.

Mar 28 22:07:10 daemon kernel: ip_conntrack: table full, dropping packet.

Mar 28 22:07:15 daemon kernel: printk: 244 messages suppressed.

Mar 28 22:07:15 daemon kernel: ip_conntrack: table full, dropping packet.

Mar 28 22:07:20 daemon kernel: printk: 217 messages suppressed.



Что означает переполнение таблицы соединений.

Проверим, что в действительности имеем

[root@daemon]# cat /proc/net/ip_conntrack | wc -l
65535

Факт на лицо - гигантское количество соединений.

Что у нас с параметрами tcp

[root@daemon]# sysctl -a | grep tcp_keepalive_time
net.ipv4.tcp_keepalive_time = 7200

Держать tcp соединение открытым в течение 2-х часов. Перебор !!!

Что можно предпринять для защиты от DDoS (не панацея, но жизнь облегчит)

1. Корректируем параметры tcp

Ищем файл /etc/sysctl.conf. В него вписываем следующее

# Controls IP packet forwarding
net.ipv4.ip_forward = 0

# Controls source route verification
net.ipv4.conf.default.rp_filter = 1

# Do not accept source routing
net.ipv4.conf.default.accept_source_route = 0

# Controls the System Request debugging functionality of the kernel
kernel.sysrq = 0

# Controls whether core dumps will append the PID to the core filename
# Useful for debugging multi-threaded applications
kernel.core_uses_pid = 1

# Controls the use of TCP syncookies
net.ipv4.tcp_syncookies = 1

# Controls the maximum size of a message, in bytes
kernel.msgmnb = 65536

# Controls the default maxmimum size of a mesage queue
kernel.msgmax = 65536

# Controls the maximum shared segment size, in bytes
kernel.shmmax = 4294967295

# Controls the maximum number of shared memory segments, in pages
kernel.shmall = 268435456

# через 60 секунд с момента наступления тишины в канале сервером выполняется проба. Если клиент жив, то серверу высылается ответный пакет
net.ipv4.tcp_keepalive_time = 60

# если ответа на проверку нет, то с интервалом в 10 секунд повторить
net.ipv4.tcp_keepalive_intvl = 10

# Сколько раз повторить проверку после чего закрыть соединение
net.ipv4.tcp_keepalive_probes = 5

net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_window_scaling = 0
net.ipv4.tcp_sack = 0
net.ipv4.tcp_timestamps = 0

net.ipv4.netfilter.ip_conntrack_max = 65536
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close = 30
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 30
net.ipv4.netfilter.ip_conntrack_tcp_timeout_last_ack = 120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 30
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 30
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_recv = 30
net.ipv4.netfilter.ip_conntrack_tcp_timeout_syn_sent = 30

Сохраняем файл и обновляем системные переменные

[root@daemon]# sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 4294967295
kernel.shmall = 268435456
net.ipv4.ip_conntrack_max = 65536
net.ipv4.tcp_keepalive_time = 60
net.ipv4.tcp_keepalive_intvl = 10
net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_window_scaling = 0
net.ipv4.tcp_sack = 0
net.ipv4.tcp_timestamps = 0

После этого необходимо перезагрузиться, иначе надо ждать два часа, чтобы отвалились открытые соединения. Минут через 5 после перезагрузки посмотрим что получилось



[root@daemon]# cat /proc/net/ip_conntrack | wc -l
3506
[root@daemon]# cat /proc/net/ip_conntrack | wc -l
3494



Отбились.

2. Теперь iptables.

Опять же недавно был HTTP DDoS. С разных IP шли запросы

210.18.136.151 - - [29/Mar/2010:00:09:25 +0300] "GET /setting.xls HTTP/1.1" 404 221 "-" "-" AU
59.92.97.151 - - [29/Mar/2010:00:09:46 +0300] "GET /setting.doc HTTP/1.1" 404 221 "-" "-" -
59.92.97.151 - - [29/Mar/2010:00:09:47 +0300] "GET /setting.xls HTTP/1.1" 404 221 "-" "-" -
59.92.97.151 - - [29/Mar/2010:00:09:49 +0300] "GET /setting.doc HTTP/1.1" 404 221 "-" "-" -
59.92.97.151 - - [29/Mar/2010:00:09:50 +0300] "GET /setting.xls HTTP/1.1" 404 221 "-" "-" -
59.92.97.151 - - [29/Mar/2010:00:09:51 +0300] "GET /setting.doc HTTP/1.1" 404 221 "-" "-" -
59.92.97.151 - - [29/Mar/2010:00:09:52 +0300] "GET /setting.xls HTTP/1.1" 404 221 "-" "-" -

Побороли это просто (должен быть загружен модуль iptables string, iptables должен быть не ниже версии 1.3.5, а ядро – не ниже 2.6.18, собранным с опцией CONFIG_NETFILTER_XT_MATCH_STRING=m)

/sbin/iptables -A INPUT -p tcp --dport 80 -m string --string "GET /setting." --algo kmp -j DROP


Далее можно поставить ограничение по количеству одновременных соединений

# Лимит на 20 запросов в секунду для интерфейса eth0
/sbin/iptables --new-chain lim1
/sbin/iptables --insert OUTPUT 1 -p tcp --destination-port 80 -o eth0 --jump lim1
/sbin/iptables --append lim1-m limit --limit 20/sec --jump RETURN
/sbin/iptables --append lim1--jump DROP

# Максимум 10 одновременных соединений с одного IP
/sbin/iptables -A INPUT-p tcp --dport 80 -m iplimit --iplimit-above 10 -j REJECT

# Блокировка более 10 SYN
/sbin/iptables -I INPUT -p tcp --syn --dport 80 -j DROP -m iplimit --iplimit-above 10

# 20 соединений на сеть класса С
/sbin/iptables -p tcp --dport 80 -m iplimit --iplimit-above 20 --iplimit-mask 24 -j REJECT

_________________
Моя характеристика с детского сада: Хорошо кушает, спит, гуляет! Прошло много лет, ничего не изменилось.
Изображение


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 23


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти: