#!/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
|