*Drive*- Здесь рулят padonki https://drivesource.ru/ |
|
Защита от DDoS атак https://drivesource.ru/viewtopic.php?f=15&t=1086 |
Страница 1 из 1 |
Автор: | Padonak [ 11 апр 2010, 18:10 ] |
Заголовок сообщения: | Защита от DDoS атак |
Итак , ВАШ сервер подвергся очередной 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 из 1 | Часовой пояс: UTC + 3 часа [ Летнее время ] |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |