Iptables защищаемся от ddos
Автор: admin Раздел: Безопасность
Несколько часов эксперементов, и в итоге получился такой конфиг для iptables:
[-hide-] #!/bin/bash OUT=»eth1″ # Наш сетевой интерфейс (интернет). OUTADDR=»1.1.1.1″ # интернет ip ANYWHERE=»0.0.0.0/0″ # Назначение, любое. MULTICAST=»224.0.0.0/4″ # Мультикаст пакеты, если у вас не используется оставьте как есть # Параметры запуска\остановки\статуса скрипта. лучше не трогать # Остановка скрипта case «$1″ in stop) echo «Shutting down firewall…» iptables –flush iptables –delete-chain iptables –table nat –flush iptables –table filter –flush iptables –table nat –delete-chain iptables –table filter –delete-chain iptables -t filter -P INPUT ACCEPT iptables -t filter -P OUTPUT ACCEPT iptables -t filter -P FORWARD ACCEPT echo «…done» ;; status) echo $»Table: filter» iptables –list echo $»Table: nat» iptables -t nat –list ;; restart|reload) $0 stop $0 start ;; # # Запуск скрипта start) echo «Starting Firewall…» echo «» # Очистка таблиц и цепочек iptables –flush iptables –delete-chain iptables –table nat –flush iptables –table filter –flush iptables –table nat –delete-chain iptables –table filter –delete-chain # Назначение глобальных политик фаервола iptables -P INPUT DROP iptables -P OUTPUT ACCEPT iptables -P FORWARD ACCEPT iptables -F INPUT iptables -F OUTPUT iptables -F FORWARD # Изменение параМБ 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 # Как часто посылать сообщение о поддержании 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 # Temporary eth0 completely disabled #iptables -A INPUT -i $OUT -j DROP # Admins – full control (even dagerous) for admin_ips in $ADMINS; do iptables -A INPUT -s $admin_ips -m state –state NEW -j ACCEPT done # Silently Drop Stealth Scans # All of the bits are cleared iptables -A INPUT -p icmp –icmp-type timestamp-request -j DROP 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 # Multicast – ignore iptables -A INPUT -s $MULTICAST -j DROP iptables -A INPUT -d $MULTICAST -j DROP # any established or related conns are welcome iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT # Loopback iptables -A INPUT -i lo -j ACCEPT # Statistics and auths for customers, ping tests for net_ips in $NETWORK; do iptables -A INPUT -p icmp -i $IN –icmp-type echo-request -j ACCEPT iptables -A INPUT -p icmp -i $OUT –icmp-type echo-request -j ACCEPT done # Открываем нужные нам порты. # FTP iptables -A INPUT -p tcp –dport 21 -m state –state NEW -j ACCEPT # PASSIVE FTP iptables -t filter -A INPUT -p tcp -m tcp –dport 50000:50500 -m state –state NEW -j ACCEPT iptables -t filter -A INPUT -p udp -m udp –dport 50000:50500 -m state –state NEW -j ACCEPT # APACHE iptables -A INPUT -p tcp –dport 80 -m state –state NEW -j ACCEPT # ssh iptables -A INPUT -p tcp –dport 666 -m state –state NEW -j ACCEPT # 110 iptables -A INPUT -p tcp –dport 110 -m state –state NEW -j ACCEPT # 25 iptables -A INPUT -p tcp –dport 25 -m state –state NEW -j ACCEPT ########### OUTPUT iptables -A OUTPUT -p icmp –icmp-type timestamp-reply -j DROP ##——————————–Фаервол закончился ![]() ;; *) echo «Usage: firewall (start|stop|restart|status) EXTIF INTIF» exit 1 esac exit 0[-hide-] |