Итак, приступим к созданию и конфигурации нашего первого файла-скрипта Firewalla.
Ниже приведен типичный пример файла скрипта firewallа, что бы его создать — можно просто скопировать и вставить себе 😉
puh# cat firewall.sh
#!/bin/sh
##MyFirewall##
#Объявляем переменную ipfw, в которой указываем путь и параметры запуска нашего ipfw
ipfw=’/sbin/ipfw -q’
#Описываем нашу сеть
LanOut=»xl0″ # внешний интерфейс
LanIn=»sis0″ # внутренний интерфейс
IpOut=»192.15.44.23″ # внешний IP адрес машины
IpIn=»192.168.0.254″ # внутренний IP машины
NetMask=»24″ # маска сети
NetIn=»192.168.0.0″ # Префикс для внутренней сети (для удобства)
#Теперь начинаем описывать правила нашего Firewallа
# Сбрасываем все правила:
${ipfw} flush
${ipfw} pipe flush
${ipfw} queue flush
# Проверяем — соответствует ли пакет динамическим правилам:
${ipfw} add check-state
# Разрешаем весь траффик по внутренней (петле) интерфейсу
${ipfw} add allow ip from any to any via lo0
# рубим попытки прорыва через lo0
${ipfw} add deny ip from any to 127.0.0.0/8
${ipfw} add deny ip from 127.0.0.0/8 to any
# Запрещаем все лишнее, что нам не нужно 🙂 и чего у нас нет
# Рубим частные сeти на внешке
${ipfw} add deny ip from any to 10.0.0.0/8 in via ${LanOut}
${ipfw} add deny ip from any to 172.16.0.0/12 in via ${LanOut}
${ipfw} add deny ip from any to 192.168.0.0/16 in via ${LanOut}
${ipfw} add deny ip from any to 0.0.0.0/8 in via ${LanOut}
# рубим автоконфигуреную частную сеть
${ipfw} add deny ip from any to 169.254.0.0/16 in via ${LanOut}
# рубаем мультикастовые рассылки
${ipfw} add deny ip from any to 240.0.0.0/4 in via ${LanOut}
# рубим фрагментированные icmp
${ipfw} add deny icmp from any to any frag
# рубим широковещательные icmp на внешнем интерфейсе
${ipfw} add deny log icmp from any to 255.255.255.255 in via ${LanOut}
${ipfw} add deny log icmp from any to 255.255.255.255 out via ${LanOut}
# Теперь, если у нас установлены на сервере прокси-сервера, значит заворачиваем всех на них
# Всех на frox (FTP-PROXY)
#${ipfw} add fwd ${IpIn},2121 tcp from ${NetIn}/${NetMask} to any 21 via ${LanOut}
# Всех на squid (прозрачный HTTP-PROXY)
#${ipfw} add fwd 127.0.0.1,3128 tcp from ${NetIn}/${NetMask} to any 80 via ${LanOut}
#Далее, если мы планируем выпускать наружу людей, кроме как через PROXY — нужно всех в NAT:
# Всех через трансляцию сетевых адресов (NAT)
${ipfw} add divert natd ip from ${NetIn}/${NetMask} to any out via ${LanOut}
${ipfw} add divert natd ip from any to ${IpOut} in via ${LanOut}
# Повторно рубим трафик к частным сетям через внешний интерфейс, обратите особое внимание!
# Эти правила отличаются от тех что были выше!
${ipfw} add deny ip from 10.0.0.0/8 to any out via ${LanOut}
${ipfw} add deny ip from 172.16.0.0/12 to any out via ${LanOut}
${ipfw} add deny ip from 192.168.0.0/16 to any out via ${LanOut}
${ipfw} add deny ip from 0.0.0.0/8 to any out via ${LanOut}
# рубим автоконфигуреную частную сеть
${ipfw} add deny ip from 169.254.0.0/16 to any out via ${LanOut}
# рубаем мультикастовые рассылки
${ipfw} add deny ip from 224.0.0.0/4 to any out via ${LanOut}
# рубаем мультикастовые рассылки
${ipfw} add deny ip from 240.0.0.0/4 to any out via ${LanOut}
# Далее мы будем разрешать нашему серверу общаться с миром, ему то можно 🙂
# разрешаем все ранее установленные соединения
${ipfw} add allow tcp from any to any established
# разрешаем весь исходящий трафик от сервера в интернет
${ipfw} add allow ip from ${IpOut} to any out xmit ${LanOut}
# разрешаем DNS снаружи
${ipfw} add allow udp from any 53 to any via ${LanOut}
# разрешаем DNS входящий снаружи, если на сервере работает named и держит какую-то зону.
${ipfw} add allow udp from any to any 53 via ${LanOut}
# разрешаем UDP (для синхронизации времени — 123 порт)
${ipfw} add allow udp from any to any 123 via ${LanOut}
# разрешаем ftp снаружи
${ipfw} add allow tcp from any to ${IpOut} 21 via ${LanOut}
${ipfw} add allow tcp from any to ${IpOut} 49152-65535 via ${LanOut}
# разрешаем ICMP трафик — эхо-запрос, эхо-ответ и время жизни пакета истекло
${ipfw} add allow icmp from any to any icmptypes 0,8,11
# открываем снаружи 80 порт — если у нас есть на машине WWW
${ipfw} add allow tcp from any to ${IpOut} 80 via ${LanOut}
# открываем снаружи 25 порт (SMTP) если на машине крутится почта
${ipfw} add allow tcp from any to ${IpOut} 25 via ${LanOut}
# открываем снаружи 22 порт — если нужно ходить на машину по ssh из миру
${ipfw} add allow tcp from any to ${IpOut} 22 via ${LanOut}
# открываем снаружи 143 порт(если надо смотреть почту снаружи по IMAP)
${ipfw} add allow tcp from any to ${IpOut} 143 via ${LanOut}
# открываем снаружи 110 порт(если надо смотреть почту снаружи по POP)
${ipfw} add allow tcp from any to ${IpOut} 110 via ${LanOut}
# следующие правила, для tcp, udp, icmp и gre — можно заменить одним правилом:
#${ipfw} add allow ip from any to any via ${LanIn}
# но для удобства наладки и контроля происходящего — лучше все по отдельности, итак:
# разрешаем весь tcp трафик внутри локалки (на внутреннем интерфейсе)
${ipfw} add allow tcp from any to any via ${LanIn}
# разрешаем весь udp трафик внутри локалки (на внутреннем интерфейсе)
${ipfw} add allow udp from any to any via ${LanIn}
# разрешаем весь icmp трафик внутри локалки (на внутреннем интерфейсе)
${ipfw} add allow icmp from any to any via ${LanIn}
# разрешаем весь gre трафик внутри локалки (на внутреннем интерфейсе)
# (gre протокол, обычно используется для всякого рода виртуальных вещей, например:
# VPN, Virtual Switch построенный на NetGraph и т.д.)
${ipfw} add allow gre from any to any via ${LanIn}
# И вот оно самое главное правило, о котором говорилось в первой части!
# запрещаем всё и всем.
${ipfw} add deny ip from any to any
В данном примере я описал типичный Firewall на домашнем роутере с полным доступом для пользователей сети в мир.
В последующих частях, я приведу примеры с других железок (сделанные для друзей, где нарезаны полосы пропускания и доступ в мир имеют, только те — кто вписан в Firewall), а так же постараюсь описать примеры из жизни (касаемо обрезания полосы пропускания и выставление пакетов приоритетов в очередь и многое другое).
Напоминаю всем копирующим мой контент о существовании закона "Об авторском праве".
В связи с этим, прошу во избежании конфликтов при копировании данного материала, ставить на него ссылку:
Также, вы можете отблагодарить меня переслав любую сумму на любой кошелек WebMoney, для поддержания данного ресурса. Или просто админу на пиво ;)
Кошельки для получения благодарности:
R386985788805
U234140473141
Z147712360455
На данной странице нет комментариев, возможно они закрыты. Если Вы хотите оставить свой комментарий, перейдите на специально созданный раздел