в консоле из под рута Code: #Уменьшаем возможность DoS при уменьшении таймаутов echo 30 > /proc/sys/net/ipv4/tcp_fin_timeout echo 1800 > /proc/sys/net/ipv4/tcp_keepalive_time echo 1 > /proc/sys/net/ipv4/tcp_window_scaling echo 0 > /proc/sys/net/ipv4/tcp_sack echo 1280 > /proc/sys/net/ipv4/tcp_max_syn_backlog # Включаем SYN COOKIES echo 1 > /proc/sys/net/ipv4/tcp_syncookies echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts echo "65535" > /proc/sys/net/ipv4/ip_conntrack_max через iptables Code: ### Цепь для сброса (DROP) флуд пакетов SYN-s ###### /sbin/iptables -N syn-flood /sbin/iptables -A syn-flood -m limit --limit 100/second --limit-burst 150 -j RETURN /sbin/iptables -A syn-flood -j LOG --log-prefix "SYN flood: " /sbin/iptables -A syn-flood -j DROP
Заходим под рут: HTML: 1. cd /root/downloads или другая директория где вы храните файлы. 2. wget http://www.r-fx.ca/downloads/apf-current.tar.gz 3. tar -xvzf apf-current.tar.gz 4. cd apf-0.9.3_3/ или какая у вас там версия. 5. ./install.sh Получите сообщение .: APF installed Install path: /etc/apf Config path: /etc/apf/conf.apf Executable path: /usr/local/sbin/apf 6. Редактируем конфиг: vi /etc/apf/conf.apf Базовые настройки, читайте README для полных настроек Находим: DEVEL_MODE="1" Заменяем на: DEVEL_MODE="0" Удостоверяемся: SYSCTL_SYN ="1" SYSCTL_SYNCOOKIES="1" 7. Настраиваем порты Приблизительно: (Все это на ваше усмотрение) Common ingress (inbound) ports (Входящие порты) # Common ingress (inbound) TCP ports IG_TCP_CPORTS="21,22,25,53,80,110,143,443,6000_7000" # # Common ingress (inbound) UDP ports IG_UDP_CPORTS="53" Common egress (outbound) ports (исходящие порты) # Common egress (outbound) TCP ports EG_TCP_CPORTS="21,25,80,443,43" # # Common egress (outbound) UDP ports EG_UDP_CPORTS="20,21,53" 8. Запускаем /usr/local/sbin/apf -s Другием команды: usage /usr/local/sbin/apf [OPTION] -s|--start ............. загрузить правила файрвола -r|--restart ........... перезагрузить -f|--flush|--stop ...... остановить -l|--list .............. показать правила -st|--status ........... статус -a HOST|--allow HOST ... добавить host (IP/FQDN) в allow_hosts.rules -d HOST|--deny HOST .... добавить host (IP/FQDN) to deny_hosts.rules или : (iptables и apf должны быть установлены) Загружаем (D)DoS-Deflate HTML: wget http://www.inetbase.com/scripts/ddos/install.sh chmod 0700 install.sh ./install.sh
2 MAQUEEN вообщето тоже самое я описал выше, без использования apf. 2 TC tcpdump что показывает? ботнет большой?? мжет проще перекрыть подсть?
Вот мой фаер собственного сочинения. Долго мучался с защитой от флуда сырыми SYN пакетами, вроде как получилось. Не претендую на правильность, мой опыт в дебиане - 3 месяца. Буду рад если кто-то дополнит PHP: iptables -F #очищаем правила iptables -X syn-flood #удаляем цепочку если она есть iptables -A FORWARD -j DROP #запрещаем форвард пакетов, мы же не роутер iptables -A INPUT -i lo -j ACCEPT # разрешаем все внутренние коннекты iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #Сразу же принимаем все пакеты по установленным соединениям (не секурно, но для производительности гуд) iptables -N syn-flood # цепочка по обработке входящих соединений на 80 порт iptables -A INPUT -p tcp --syn --dport 80 -m state --state NEW -j syn-flood # Если установлен только флаг SYN (обычно такими пакетами и флудят, они же являются первыми при "трехразовом рукопожатии"). В обработку идут только новые соединения iptables -A syn-flood -p tcp -m connlimit --connlimit-above 10 -j DROP # запрещаем одновременный коннект с 1 айпи не более 10 раз iptables -A syn-flood -p tcp -m limit --limit 5/s --limit-burst 10 -j RETURN # если этот пакет приходит не чаще 5 раз за секунду, то проверка пройдена. iptables -A syn-flood -j DROP # иначе дропаем iptables -A INPUT -p tcp --dport 80 ! --syn -m state --state NEW -j DROP # если новый пакет пришел в обход рукопожатия, то дропаем его iptables -A INPUT -p tcp --dport 80 -j ACCEPT # теперь разрешаем вход на 80 порт iptables -A INPUT --source 123.45.67.89 -j ACCEPT # Разрешаем себе любые соединения (123.45.67.89 - свой айпи) например чтобы управлять по ssh iptables -A INPUT -j DROP # все остальные пакеты не проходят
PHP: iptables -F iptables -X syn-flood iptables -A FORWARD -j DROP iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -N syn-flood iptables -A INPUT -p tcp --syn --dport 80 -m state --state NEW -j syn-flood iptables -A syn-flood -p tcp -m limit --limit 3/second --limit-burst 10 -j RETURN iptables -A syn-flood -j DROP iptables -A INPUT -p tcp --dport 80 ! --syn -m state --state NEW -j DROP iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j DROP iptables -A INPUT -p tcp --dport 80 -j ACCEPT iptables -A INPUT --source айпи.админа.оло.ло -j ACCEPT iptables -A INPUT -j DROP p.s. вот эти правила правильнее. То есть, если идет более 10 SYN/секунду, то ограничиваемся 3 syn+ack от сервера, таким образом можно установить не более 10 соединений. Тестил, пашет. Жаль, в iptables не предусмотрено автобанилки