#!/bin/sh # # file /etc/sysconfig/iptable_ppp.sh - Initial IP Firewall script for 2.4.x # # Author: Vladimir Kholmanov # use at your own risk # ########### # Конфигурационные параметры. # При необходимости - отредактируйте. # # Script не требует указания ни статического, ни "подхвата" # динамического IP адреса. # Правила фильтрации привязаны к интерфейсам. # # Проверьте правильность пути к iptables. # INET_IFACE="ppp0" LOCAL_IFACE="lo" IPTABLES="/usr/sbin/iptables" ######### # Проверка зависимостей в загружаемых IPTables modules # #sbin/depmod -a # ######### t # Устанавливаем default policies для INPUT, FORWARD и OUTPUT chains # $IPTABLES -P INPUT DROP $IPTABLES -P OUTPUT ACCEPT $IPTABLES -P FORWARD DROP ######### # Создаем дочерние chains для ICMP, TCP и UDP протоколов. # $IPTABLES -N icmp_in_ppp $IPTABLES -N tcp_in_ppp $IPTABLES -N udp_in_ppp ######## # Доверяем машинам 192.168.0.1, 192.168.0.18 iptables -A tcp_in_ppp -i eth0 -s 192.168.0.1 -j ACCEPT iptables -A tcp_in_ppp -i eth0 -s 192.168.0.18 -j ACCEPT iptables -A icmp_in_ppp -i eth0 -s 192.168.0.1 -j ACCEPT iptables -A icmp_in_ppp -i eth0 -s 192.168.0.18 -j ACCEPT # # Загружаем ICMP rules для входящих потоков # $IPTABLES -A icmp_in_ppp -p ICMP --icmp-type 3 -j ACCEPT $IPTABLES -A icmp_in_ppp -p ICMP --icmp-type 0 -j ACCEPT $IPTABLES -A icmp_in_ppp -p ICMP --icmp-type 11 -j ACCEPT $IPTABLES -A icmp_in_ppp -m limit --limit 6/minute --limit-burst 1 -p ICMP --icmp-type 8 -j ACCEPT $IPTABLES -A icmp_in_ppp -m limit --limit 2/minute --limit-burst 4 -j LOG --log-prefix "ICMP in ppp died: " $IPTABLES -A icmp_in_ppp -p ICMP -j DROP # # Загружаем TCP rules для входящих потоков # # $IPTABLES -A tcp_in_ppp -p TCP --syn --dport 22 -j ACCEPT # $IPTABLES -A tcp_in_ppp -p TCP --syn --dport 113 -j ACCEPT $IPTABLES -A tcp_in_ppp -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT $IPTABLES -A tcp_in_ppp -m limit --limit 2/minute --limit-burst 4 -j LOG --log-prefix "TCP in ppp died: " $IPTABLES -A tcp_in_ppp -p TCP -j DROP # # Загружаем UDP rules для входящих потоков # $IPTABLES -A udp_in_ppp -p UDP --source-port 53 -j ACCEPT $IPTABLES -A udp_in_ppp -p UDP --source-port 123 -j ACCEPT #$IPTABLES -A udp_in_ppp -p UDP --source-port 4000 -j ACCEPT $IPTABLES -A udp_in_ppp -m limit --limit 3/minute --limit-burst 6 -j LOG --log-prefix "UDP in ppp died: " $IPTABLES -A udp_in_ppp -p UDP -j DROP ########## # INPUT chain # # Регистрируем и удаляем "проблемные" TCP пакеты. # $IPTABLES -A INPUT -i $INET_IFACE -p tcp ! --syn -m state --state NEW -j LOG --log-prefix "New not syn:" $IPTABLES -A INPUT -i $INET_IFACE -p tcp ! --syn -m state --state NEW -j DROP # # "Направляющие" для локальных и "пере направляющие" для inet пакетов rules. # $IPTABLES -A INPUT -p TCP -i $LOCAL_IFACE -j ACCEPT $IPTABLES -A INPUT -p TCP -i $INET_IFACE -j tcp_in_ppp $IPTABLES -A INPUT -p UDP -i $LOCAL_IFACE -j ACCEPT $IPTABLES -A INPUT -p UDP -i $INET_IFACE -j udp_in_ppp $IPTABLES -A INPUT -p ICMP -i $LOCAL_IFACE -j ACCEPT $IPTABLES -A INPUT -p ICMP -i $INET_IFACE -j icmp_in_ppp # Итог правил для интерфейса eth0 $IPTABLES -A INPUT -p TCP -i eth0 -j tcp_in_ppp $IPTABLES -A INPUT -p icmp -i eth0 -j icmp_in_ppp # # "Регистрирующее rule для "неохваченных" пакетов. # $IPTABLES -A INPUT -m limit --limit 3/minute --limit-burst 6 -j LOG --log-prefix "IP INPUT packet died: "