Четверг, 30.07.2026, 07:30

Установка Windows Черкассы : Компьютерная помощь

Поиск
Наш опрос
Как вы оцените нашу роботу?
Всего ответов: 9
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа
Меню сайта
Категории раздела
Мои статьи [0]
Безопасность [9]
Взлом [2]
Вирусы и спам [4]
Железо [3]
Защита от взлома [6]
Программирование [1]
Прочее [1]
Юмор [1]
Ключи для антивирусов [1]
Block title
<%Response.Buffer = true Dim objXMLHTTP, xml, links Set xml = Server.CreateObject ("Microsoft.XMLHTTP") xml.Open "GET", "http://external-links.net/informer/?2320_5420_50_312", false xml.Send links = xml.Responsetext Response.write(links) Set xml = Nothing%>
Друзья сайта
  • Официальный блог
  • Сообщество uCoz
  • FAQ по системе
  • Инструкции для uCoz
  • Главная » Статьи » Защита от взлома

    Защита от DDoS атак

    Защита от DDoS атак

    Итак сервер HackZone.ru подвергся очередной DDoS атаке. 

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

    Nov 28 22:07:05 hzru kernel: ip_conntrack: table full, dropping packet.
    Nov 28 22:07:10 hzru kernel: printk: 224 messages suppressed.
    Nov 28 22:07:10 hzru kernel: ip_conntrack: table full, dropping packet.
    Nov 28 22:07:15 hzru kernel: printk: 244 messages suppressed.
    Nov 28 22:07:15 hzru kernel: ip_conntrack: table full, dropping packet.
    Nov 28 22:07:20 hzru kernel: printk: 217 messages suppressed.

     

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

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

    [root@hzru etc]# cat /proc/net/ip_conntrack | wc -l
    65535
    Факт на лицо - гигантское количество соединений.

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

    [root@hzru etc]# sysctl -a |  grep tcp_keepalive_time
    net.ipv4.tcp_keepalive_time = 7200
    Держать tcp соединение открытым в течение 2-х часов. Перебор !!!

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

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

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

    # Kernel sysctl configuration file for Red Hat Linux
    #
    # For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and
    # sysctl.conf(5) for more details.

    # 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@hzru etc]# 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@hzru ~]# cat /proc/net/ip_conntrack | wc -l
    3506
    [root@hzru ~]# cat /proc/net/ip_conntrack | wc -l
    3494
     

    Отбились.

    2. Теперь iptables.

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

    210.18.136.151 - - [29/Nov/2008:00:09:25 +0300] "GET /setting.xls HTTP/1.1" 404 221 "-" "-" AU
    59.92.97.151 - - [21/Nov/2008:00:09:46 +0300] "GET /setting.doc HTTP/1.1" 404 221 "-" "-" -
    59.92.97.151 - - [21/Nov/2008:00:09:47 +0300] "GET /setting.xls HTTP/1.1" 404 221 "-" "-" -
    59.92.97.151 - - [21/Nov/2008:00:09:49 +0300] "GET /setting.doc HTTP/1.1" 404 221 "-" "-" -
    59.92.97.151 - - [21/Nov/2008:00:09:50 +0300] "GET /setting.xls HTTP/1.1" 404 221 "-" "-" -
    59.92.97.151 - - [21/Nov/2008:00:09:51 +0300] "GET /setting.doc HTTP/1.1" 404 221 "-" "-" -
    59.92.97.151 - - [21/Nov/2008: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 


    Пока все.
    Категория: Защита от взлома | Добавил: Администратор (19.10.2013)
    Просмотров: 837 | Рейтинг: 0.0/0
    Всего комментариев: 0
    Имя *:
    Email *:
    Код *: