Примеры скриптов настройки маскарадинга

Ядро 2.0, ipfwadm


#!/bin/sh 
#04/04/1999 
#Пример скрипта rc.firewall для ядер версий 2.0, использующих ipfwadm 
#Я не могу полностью поручиться за этот скрипт. Я нашел его
#несколько лет назад и немножко подправил. 
#Вопросы и предложения посылайте по адресу acj@home.com. 

#--------------------------------------------------------------------- 
#Переменные 
#--------------------------------------------------------------------- 

#локальный ethernet-интерфейс
localip= 
localif=eth0 

#статический ethernet-интерфейс 
staticip= 
staticif=eth1 

PATH="/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin" 

#--------------------------------------------------------------------- 
#Политика Firewall для входящего потока
#--------------------------------------------------------------------- 
#удаляем все правила для входящего потока
/sbin/ipfwadm -I -f 

#устанавливаем запрет всех пакетов для входящего потока
/sbin/ipfwadm -I -p deny 

#--------------------------------------------------------------------- 

#разрешено посылать пакеты, куда угодно, с локального интерфейса с локальных машин
/sbin/ipfwadm -I -a accept -V $localip -S $localip/24 -D 0.0.0.0/0 
#запрещаем все пакеты, идущие из статического интерфейса, "от локальных машин" (spoofing)
#записываем это в журнал
/sbin/ipfwadm -I -a deny -V $staticip -S $localip/24 -D 0.0.0.0/0 -o 
#разрешаем все пакеты, идущие, откуда угодно, на статический интерфейс
/sbin/ipfwadm -I -a accept -V $staticip -S 0.0.0.0/0 -D $staticip/32 
#разрешаем все пакеты, идущие через интерфейс обратной петли
/sbin/ipfwadm -I -a accept -V 127.0.0.1 -S 0.0.0.0/0 -D 0.0.0.0/0 
#запрещаем все остальные входящие пакеты - записываем это в журнал 
/sbin/ipfwadm -I -a deny -S 0.0.0.0/0 -D 0.0.0.0/0 -o 

#--------------------------------------------------------------------- 
#Политика Firewall для исходящего потока
#--------------------------------------------------------------------- 

#удаляем все правила для исходящего потока
/sbin/ipfwadm -O -f 

#устанавливаем запрет всего для исходящего потока
/sbin/ipfwadm -O -p deny 

#--------------------------------------------------------------------- 

#разрешены пакеты, откуда угодно, на локальном интерфейса для локальных машин
/sbin/ipfwadm -O -a accept -V $localip -S 0.0.0.0/0 -D $localip/24 
#запрещены исходящие через статический интерфейс пакеты для локальной сети (ошибка маршрутизации)
/sbin/ipfwadm -O -a deny -V $staticip -S 0.0.0.0/0 -D $localip/24 -o 
#запрещены исходящие через статический интерфейс пакеты из локальной сети (ошибка маскарадинга)
/sbin/ipfwadm -O -a deny -V $staticip -S $localip/24 -D 0.0.0.0/0 -o 
#запрещены исходящие через статический интерфейс пакеты для локальной сети (ошибка маскарадинга)
/sbin/ipfwadm -O -a deny -V $staticip -S 0.0.0.0/0 -D $localip/24 -o 
#разрешено все остальное от статического интерфейса
/sbin/ipfwadm -O -a accept -V $staticip -S $staticip/32 -D 0.0.0.0/0 
#разрешаем все пакеты, идущие через интерфейс обратной петли
/sbin/ipfwadm -O -a accept -V 127.0.0.1 -S 0.0.0.0/0 -D 0.0.0.0/0 
#все остальное запрещено
/sbin/ipfwadm -O -a deny -S 0.0.0.0/0 -D 0.0.0.0/0 -o 

#-------------------------------------------------------------------------- 
#Политика Firewall для проходящего потока
#-------------------------------------------------------------------------- 

#удаляем все правила для проходящего потока
/sbin/ipfwadm -F -f 

#устанавливаем запрет всего для проходящего потока
/sbin/ipfwadm -F -p deny 

#маскарадинг для всего, идущего из локальной сети через статический интерфейс
/sbin/ipfwadm -F -a masquerade -W $staticif -S $localip/24 -D 0.0.0.0/0 
#другая маршрутизация запрещена
/sbin/ipfwadm -F -a deny -S 0.0.0.0/0 -D 0.0.0.0/0 

exit 0 

Ядро 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