Ядро 2.1/2.2, ipchains
#!/bin/sh #04/04/1999 #Пример скрипта rc.firewall для новых ядер версий 2.1/2.2, использующих ipchains, #определяющий пользовательские потоки для каждого интерфейса. Здесь есть также #правила, защищающие от spoofing-а, которые может быть и не очень нужны - #подобная защита уже встроена в ядро. #Вопросы и предложения посылайте по адресу acj@home.com. #--------------------------------------------------------------------- #Переменные #--------------------------------------------------------------------- #локальный ethernet-интерфейс localip= localif=eth0 #статический ethernet-интерфейс staticip= staticif=eth1 #интерфейс обратной петли loopback=lo PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin" #--------------------------------------------------------------------- #Удаляем все правила для входящего, исходящего и проходящего потоков #По умолчанию отбрасываем все пакеты #--------------------------------------------------------------------- #устанавливаем запрет всего для входящего потока ipchains -P input DENY #удаляем все правила для входящего потока ipchains -F input #--------------------------------------------------------------------- #устанавливаем запрет всего для исходящего потока ipchains -P output DENY #удаляем все правила для исходящего потока ipchains -F output #--------------------------------------------------------------------- #устанавливаем запрет всего для проходящего потока ipchains -P forward DENY #удаляем все правила для проходящего потока ipchains -F forward #--------------------------------------------------------------------- #удаляем все правила вообще (в том числе и пользовательские) #ipchains -F #удаляем все пользовательские потоки - вам это может понадобиться #ipchains -X #--------------------------------------------------------------------- #Политика Firewall для входящего потока #--------------------------------------------------------------------- #создаем пользовательский входящий поток для статического интерфейса ipchains -N $staticif"-i" # в этом потоке удаляем все правила (на всякий случай) ipchains -F $staticif"-i" #блокируем все входящие SYN-пакеты на всех портах на статическом интерфейсе #это может показаться грубым, но это правильно #ipchains -A $staticif"-i" -j DENY -p tcp -y -i $staticif -s 0/0 \ #-d $staticip : -l #запрещаем все пакеты, идущие из статического интерфейса, "от локальных машин" (spoofing) #записываем это в журнал ipchains -A $staticif"-i" -j DENY -i $staticif -s $localip/16 -d 0/0 -l #разрешаем все пакеты, идущие, откуда угодно, на статический интерфейс ipchains -A $staticif"-i" -j ACCEPT -i $staticif -s 0/0 -d $staticip/32 #запрещаем все остальные входящие пакеты - записываем это в журнал ipchains -A $staticif"-i" -j DENY -s 0/0 -d 0/0 -l #--------------------------------------------------------------------- #создаем пользовательский входящий поток для интерфейса локальной сети ipchains -N $localif"-i" #в этом потоке удаляем все правила (на всякий случай) ipchains -F $localif"-i" #разрешено посылать пакеты, куда угодно, с локального интерфейса с локальных машин ipchains -A $localif"-i" -j ACCEPT -i $localif -s $localip/24 -d 0/0 #запрещаем все остальные входящие пакеты - записываем это в журнал ipchains -A $localif"-i" -j DENY -s 0/0 -d 0/0 -l #--------------------------------------------------------------------- #создаем пользовательский входящий поток для интерфейса обратной петли ipchains -N $loopback"-i" #в этом потоке удаляем все правила (на всякий случай) ipchains -F $loopback"-i" #разрешено все, идущее на интерфейс обратной петли ipchains -A $loopback"-i" -j ACCEPT -i $loopback -s 0/0 -d 0/0 #запрещаем все остальные входящие пакеты - записываем это в журнал ipchains -A $loopback"-i" -j DENY -s 0/0 -d 0/0 -l #-------------------------------------------------------------------------- #Политика Firewall для проходящего потока #-------------------------------------------------------------------------- # создаем пользовательский проходящий поток для статического интерфейса ipchains -N $staticif"-f" #в этом потоке удаляем все правила (на всякий случай) ipchains -F $staticif"-f" #маскарадинг для всего, что идет из локальной сети, куда угодно ipchains -A $staticif"-f" -j MASQ -i $staticif -s $localip/24 -d 0/0 #запрещаем все остальные проходящие пакеты - записываем это в журнал ipchains -A $staticif"-f" -j DENY -s 0/0 -d 0/0 -l #--------------------------------------------------------------------- #создаем пользовательский проходящий поток для интерфейса локальной сети ipchains -N $localif"-f" #в этом потоке удаляем все правила (на всякий случай) ipchains -F $localif"-f" #запрещаем все остальные проходящие пакеты - записываем это в журнал ipchains -A $localif"-f" -j DENY -s 0/0 -d 0/0 -l #--------------------------------------------------------------------- #создаем пользовательский проходящий поток для интерфейса обратной петли ipchains -N $loopback"-f" #в этом потоке удаляем все правила (на всякий случай) ipchains -F $loopback"-f" #запрещаем все остальные проходящие пакеты - записываем это в журнал ipchains -A $loopback"-f" -j DENY -s 0/0 -d 0/0 -l #--------------------------------------------------------------------- #Политика Firewall для исходящего потока #--------------------------------------------------------------------- #создаем пользовательский исходящий поток для статического интерфейса ipchains -N $staticif"-o" #в этом потоке удаляем все правила (на всякий случай) ipchains -F $staticif"-o" #запрещены исходящие через статический интерфейс пакеты для локальной сети (ошибка маршрутизации) ipchains -A $staticif"-o" -j DENY -i $staticif -s 0/0 -d $localip/24 -l #запрещены исходящие через статический интерфейс пакеты из локальной сети (ошибка маскарадинга) ipchains -A $staticif"-o" -j DENY -i $staticif -s $localip/24 -d 0/0 -l # разрешено все остальное от статического интерфейса ipchains -A $staticif"-o" -j ACCEPT -i $staticif -s $staticip/32 -d 0/0 #запрещаем все остальные исходящие пакеты - записываем это в журнал ipchains -A $staticif"-o" -j DENY -s 0/0 -d 0/0 -l #--------------------------------------------------------------------- #создаем пользовательский исходящий поток для интерфейса локальной сети ipchains -N $localif"-o" #в этом потоке удаляем все правила (на всякий случай) ipchains -F $localif"-o" #разрешены пакеты, откуда угодно, на локальном интерфейса для локальных машин ipchains -A $localif"-o" -j ACCEPT -i $localif -s 0/0 -d $localip/24 #запрещаем все остальные исходящие пакеты - записываем это в журнал ipchains -A $localif"-o" -j DENY -s 0/0 -d 0/0 -l #--------------------------------------------------------------------- #создаем пользовательский исходящий поток для интерфейса обратной петли ipchains -N $loopback"-o" #в этом потоке удаляем все правила (на всякий случай) ipchains -F $loopback"-o" #разрешено все, идущее из интерфейса обратной петли ipchains -A $loopback"-o" -j ACCEPT -i $loopback -s 0/0 -d 0/0 #запрещаем все остальные исходящие пакеты - записываем это в журнал ipchains -A $loopback"-o" -j DENY -s 0/0 -d 0/0 -l #-------------------------------------------------------------------------- #Для большей уверенности разрешаем ядру переадресацию пакетов #-------------------------------------------------------------------------- /bin/echo 1 > /proc/sys/net/ipv4/ip_forward #-------------------------------------------------------------------------- #добавляем в стандартные потоки правила со ссылками на пользовательские потоки #-------------------------------------------------------------------------- #входящий поток на интерфейсе локальной сети ipchains -A input -i $localif -j $localif"-i" #входящий поток на статическом интерфейсе ipchains -A input -i $staticif -j $staticif"-i" # входящий поток на интерфейсе обратной петли ipchains -A input -i $loopback -j $loopback"-i" #------------------------------------------------------------------------- #исходящий поток на интерфейсе локальной сети ipchains -A output -i $localif -j $localif"-o" #исходящий поток на статическом интерфейсе ipchains -A output -i $staticif -j $staticif"-o" #исходящий поток на интерфейсе обратной петли ipchains -A output -i $loopback -j $loopback"-o" #------------------------------------------------------------------------- #проходящий поток на интерфейсе локальной сети ipchains -A forward -i $localif -j $localif"-f" #проходящий поток на статическом интерфейсе ipchains -A forward -i $staticif -j $staticif"-f" #проходящий поток на интерфейсе обратной петли ipchains -A forward -i $loopback -j $loopback"-f" #--------------------------------------------------------------------- #Проверка Сверх-Параноика --- несмотря на отказ всем пакетам по умолчанию, #блокируем все пакеты на всех интерфейсах #--------------------------------------------------------------------- #запрещаем все остальные входящие пакеты - записываем это в журнал ipchains -A input -j DENY -s 0/0 -d 0/0 -l #запрещаем все остальные исходящие пакеты - записываем это в журнал ipchains -A output -j DENY -s 0/0 -d 0/0 -l #запрещаем все остальные проходящие пакеты - записываем это в журнал ipchains -A forward -j DENY -s 0/0 -d 0/0 -l exit 0 |