Администрирование
November 20, 2021
Настройка iptables
После долгих мучений подобрал оптимальные для себя настройки iptables для вебсервера под ubuntu(httpd+mail+dns+ftp+ssh). Конечно, такая защита спасет только от примитивного ddos'а и сканирования, но все-таки лучше чем ничего. Разрешаем трафик только на определенные порты, ограничиваем количество запросов в секунду, ставим защиту от сканирования портов и флуда. Все остальные пакеты будут дропаться.
Сами настройки iptables с комментариями под катом.
#!/bin/sh MODPROBE=/sbin/modprobe # Очищаем правила iptables -F iptables -X # Разрешаем SSH iptables -A INPUT -i eth0 -p tcp --dport 1443 -j ACCEPT # Назначение глобальных политик iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD DROP iptables -F INPUT iptables -F OUTPUT iptables -F FORWARD # Загружаем модули, погнали: # Модуль для отслеживания состояния соединений $MODPROBE nf_conntrack # Модуль для отслеживания по ipv4, ipv6 пока не используем $MODPROBE nf_conntrack_ipv4 # Изменение параметров SYSCTL # Увеличение размера очередей echo 32000000 > /proc/sys/net/ipv4/netfilter/ip_conntrack_max # Время ожидания до закрытия соединения echo 14400 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established # Время ожидания до посылки FIN пакета echo 60 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_fin_wait # Время ожидания до посылки FIN пакета echo 10 > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_syn_sent # Для защиты от syn флуда echo 1 > /proc/sys/net/ipv4/tcp_syncookies # Увеличиваем размер backlog очереди echo 1280 > /proc/sys/net/ipv4/tcp_max_syn_backlog # Число начальных SYN и SYNACK пересылок для TCP соединения echo 4 > /proc/sys/net/ipv4/tcp_synack_retries echo 4 > /proc/sys/net/ipv4/tcp_syn_retries #Сколько секунд ожидать приема FIN до полного закрытия сокета echo 10 > /proc/sys/net/ipv4/tcp_fin_timeout # Как часто посылать сообщение о поддержании keep alive соединения echo 1800 > /proc/sys/net/ipv4/tcp_keepalive_time # Сколько пакетов проверки keepalive посылать, прежде чем соединение будет закрыто. echo 2 > /proc/sys/net/ipv4/tcp_keepalive_probes # Зaпрещаем TCP window scaling echo 0 > /proc/sys/net/ipv4/tcp_window_scaling # Запрещаем selective acknowledgements, RFC2018 echo 0 > /proc/sys/net/ipv4/tcp_sack # Запрещаем TCP timestamps, RFC1323 echo 0 > /proc/sys/net/ipv4/tcp_timestamps # Уличиваем размер буфера для приема и отправки данных через сокеты. echo 1048576 > /proc/sys/net/core/rmem_max echo 1048576 > /proc/sys/net/core/rmem_default echo 1048576 > /proc/sys/net/core/wmem_max echo 1048576 > /proc/sys/net/core/wmem_default # Через какое время убивать соединеие закрытое на нашей стороне echo 1 > /proc/sys/net/ipv4/tcp_orphan_retries # Защита от скана # # Silently Drop Stealth Scans # All of the bits are cleared iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP # SYN and FIN are both set iptables -A INPUT -p tcp --tcp-flags SYN,FIN SYN,FIN -j DROP # SYN and RST are both set iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP # FIN and RST are both set iptables -A INPUT -p tcp --tcp-flags FIN,RST FIN,RST -j DROP # FIN is the only bit set, without the expected accompanying ACK iptables -A INPUT -p tcp --tcp-flags ACK,FIN FIN -j DROP # PSH is the only bit set, without the expected accompanying ACK iptables -A INPUT -p tcp --tcp-flags ACK,PSH PSH -j DROP # URG is the only bit set, without the expected accompanying ACK iptables -A INPUT -p tcp --tcp-flags ACK,URG URG -j DROP # Уже установленные соединения и соединения, порожденные установленными принимаем iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # Блокируем людей, которые постучались на левые порты iptables -N scan iptables -A scan -m recent --rcheck --name badscan --seconds 86400 -j DROP iptables -A scan -m recent --name badscan --remove iptables -A scan -p tcp -m multiport --dport 139,445 -m recent --name badscan --set -j DROP iptables -A INPUT -i eth0 -j scan iptables -A OUTPUT -p icmp --icmp-type timestamp-reply -j DROP # Разрешаем петлю iptables -A INPUT -i lo -j ACCEPT # Открываем порты # FTP iptables -A INPUT -i eth0 -p tcp --dport 21 -j ACCEPT # SMTP iptables -A INPUT -i eth0 -p tcp --dport 25 -j ACCEPT # DNS iptables -A INPUT -i eth0 -p udp --sport 53 -j ACCEPT iptables -A INPUT -i eth0 -p tcp --sport 53 -j ACCEPT iptables -A INPUT -i eth0 -p udp --dport 53 -j ACCEPT iptables -A INPUT -i eth0 -p tcp --dport 53 -j ACCEPT # HTTP и защита от множественных запросов. iptables -A INPUT -m conntrack --ctstate NEW -p tcp --dport 80 -m limit --limit 100/sec --limit-burst 100 -j ACCEPT # POP iptables -A INPUT -i eth0 -p tcp --dport 110 -j ACCEPT # IMAP iptables -A INPUT -i eth0 -p tcp --dport 143 -j ACCEPT # SSH iptables -A INPUT -i eth0 -p tcp --dport 1443 -j ACCEPT iptables -A INPUT -i eth0 -p udp --dport 1443 -j ACCEPT # Proftpd (порты для пассивного режима) iptables -A INPUT -i eth0 -p tcp --dport 49152 -j ACCEPT iptables -A INPUT -i eth0 -p tcp --dport 49153 -j ACCEPT # ICMP iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT iptables -A OUTPUT -p icmp --icmp-type 8 -j ACCEPT iptables -A INPUT -p icmp --icmp-type 6 -j ACCEPT iptables -A OUTPUT -p icmp --icmp-type 6 -j ACCEPT
November 20, 2021, 08:08
0 views
0 reactions