cat /etc/init.d/firewall #!/bin/sh # /etc/init.d/iptables IPTABLES=/sbin/iptables case "$1" in start) echo "Starting iptables" # Обнуляем правила $IPTABLES -F $IPTABLES -X $IPTABLES -F -t nat $IPTABLES -X -t nat # Политика по умолчанию # Все запрещено # Установка политик по умолчанию $IPTABLES -P INPUT DROP $IPTABLES -P FORWARD ACCEPT $IPTABLES -P OUTPUT ACCEPT #$IPTABLES -A INPUT -i eth0 -p icmp -j ACCEPT $IPTABLES -A OUTPUT -o eth0 -p icmp -j ACCEPT # запрещаем icmp флуд $IPTABLES -A INPUT -p icmp --icmp-type 8 -m limit --limit 2/s -j ACCEPT $IPTABLES -A INPUT -p icmp --icmp-type 8 -j LOG --log-prefix "ICMP/in/8 Excessive: " $IPTABLES -A INPUT -p icmp --icmp-type 8 -j DROP # Разрешаем локальный интерфейс $IPTABLES -A INPUT -i lo -j ACCEPT # Ограничение скорости отдачи $IPTABLES -A OUTPUT -o eth0 -p udp -m hashlimit --hashlimit-name udpn --hashlimit-upto 100/sec --hashlimit-burst 200 --hashlimit-mode dstip -j ACCEPT $IPTABLES -A OUTPUT -o eth0 -p tcp -m hashlimit --hashlimit-name tcpn --hashlimit-upto 1000/sec --hashlimit-burst 2000 --hashlimit-mode dstip -j ACCEPT # 16 соединений на сеть класса С $IPTABLES -A INPUT -i eth0 -p tcp --dport 80 -m connlimit --connlimit-above 16 --connlimit-mask 24 -j REJECT # Защита от спуфинга $IPTABLES -A INPUT -i eth0 -m conntrack --ctstate NEW,INVALID -p tcp --tcp-flags SYN,ACK SYN,ACK -j REJECT --reject-with tcp-reset # Защита от попытки открыть входящее соединение TCP не через SYN $IPTABLES -A INPUT -i eth0 -m conntrack --ctstate NEW -p tcp ! --syn -j DROP # REL, ESTB allow пакеты $IPTABLES -A INPUT -i eth0 -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT # Разрешаем рабочие порты #$IPTABLES -A INPUT -p tcp --dport 21 -j ACCEPT #$IPTABLES -A INPUT -p tcp --dport 25 -j ACCEPT $IPTABLES -A INPUT -p udp --sport 53 -j ACCEPT $IPTABLES -A INPUT -p tcp --dport 88 -j ACCEPT $IPTABLES -A INPUT -p tcp --dport 443 -j ACCEPT $IPTABLES -A INPUT -p tcp --dport 667 -j ACCEPT $IPTABLES -A INPUT -p tcp --dport 7777 -j ACCEPT $IPTABLES -A INPUT -p tcp --dport 8000 -j ACCEPT $IPTABLES -A INPUT -p tcp --dport 8001 -j ACCEPT # Защита сервера SSH от брутфорса $IPTABLES -A INPUT -p tcp --syn --dport 22 -m recent --name antibrut --set $IPTABLES -A INPUT -p tcp --syn --dport 22 -m recent --name antibrut --update --seconds 60 --hitcount 3 -j DROP $IPTABLES -A INPUT -p tcp --dport 22 -j ACCEPT # sys net tuning #echo "2048" > /proc/sys/net/ipv4/tcp_max_syn_backlog #echo "1" > /proc/sys/net/ipv4/tcp_synack_retries #echo "30" > /proc/sys/net/ipv4/tcp_fin_timeout #echo "5" > /proc/sys/net/ipv4/tcp_keepalive_probes #echo "15" > /proc/sys/net/ipv4/tcp_keepalive_intvl #echo "2048" > /proc/sys/net/core/netdev_max_backlog #echo "2048" > /proc/sys/net/core/somaxconn #sysctl net.ipv4.ip_forward=0 #sysctl net.ipv4.tcp_syncookies=1 #sysctl net.ipv4.tcp_fin_timeout=60 #sysctl net.ipv4.icmp_echo_ignore_broadcasts=1 #sysctl net.ipv4.tcp_window_scaling=1 #sysctl net.ipv4.tcp_timestamps=1 #sysctl net.ipv4.tcp_sack=1 #sysctl net.core.rmem_max=16777216 #sysctl net.core.wmem_max=16777216 ;; stop) echo "Stopping iptables" # Обнуляем правила $IPTABLES -F $IPTABLES -X $IPTABLES -F -t nat $IPTABLES -X -t nat # Политика по умолчанию # Все разрешено $IPTABLES -P INPUT ACCEPT $IPTABLES -P OUTPUT ACCEPT $IPTABLES -P FORWARD ACCEPT ;; *) echo "Usage: /etc/init.d/$IPTABLES {start|stop}" exit 1 ;; esac exit 0