Итак, приступим к созданию и конфигурации нашего первого файла-скрипта 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), а так же постараюсь описать примеры из жизни (касаемо обрезания полосы пропускания и выставление пакетов приоритетов в очередь и многое другое).

Напоминаю всем копирующим мой контент о существовании закона "Об авторском праве".
В связи с этим, прошу во избежании конфликтов при копировании данного материала, ставить на него ссылку:

http://noted.org.ua/?p=100


Также, вы можете отблагодарить меня переслав любую сумму на любой кошелек WebMoney, для поддержания данного ресурса. Или просто админу на пиво ;)

Кошельки для получения благодарности:
R386985788805
U234140473141
Z147712360455

На данной странице нет комментариев, возможно они закрыты. Если Вы хотите оставить свой комментарий, перейдите на специально созданный раздел

Add your comment now

You must be logged in to post a comment.