На просторах интернета нашел конфиг:
Код: Выделить всё
#!/bin/sh -
fwcmd=/sbin/ipfw
# Данные по внешней сети
LanOut="rl0"
IPOut="195.195.95.5"
NetOut="24"
MaskOut="255.255.255.0"
# Данные по локальной сети
LanIn="rl1"
IPIn="192.168.10.1"
NetInIP="192.168.10.0"
NetInMask="24"
MaskIn="255.255.255.0"
# Привелигированные адрес (доступ избранным)
# Смотри примечание
MyIP1="192.168.10.97"
MyIP2="192.168.10.98"
MyIP3="192.168.10.99"
# Первый ДНС адрес наш. Ниже он ни где не используется, но можно указать фильтрацию UDP 53 если вы хотите, чтобы
# доступ к вашей зоне имел только ограниченный круг серверов. Лучший выход из положения использовать для службы DNS
# окружение chroot - jail - sandbox - называйте как хотите :)
dns1="192.168.10.1"
dns2="195.195.95.50"
dns3="195.190.90.9"
# Сбросить все правила которые устанавливались ранее
${fwcmd} -f flush
# Пропускать все пакеты сгенерированные сервером (кажется что lo0 настолько понятно, что не знаешь как еще обьяснить :))
# Без этого вообще ничего работать не будет :)
${fwcmd} add pass all from any to any via lo0
# Stop private networks (RFC1918) from entering the outside interface.
# Как видим из названия - это адреса, которым не место во внешней сети и появление их из Интернета на интерфейс,
# смотрящий в Инет - недопустимо - смело отбрасываем :)
${fwcmd} add deny ip from 192.168.0.0/16 to any in via ${LanOut}
${fwcmd} add deny ip from 172.16.0.0/12 to any in via ${LanOut}
${fwcmd} add deny ip from 10.0.0.0/8 to any in via ${LanOut}
# Принудительно заворачивать всех внутренних пользователей обращающихся к любым адресам по протоколам http,https,ftp
# на squid (смотри примечание 1 и 2)
# Правило fwd должно быть выше правила divert иначе оно не будет работать
${fwcmd} add fwd 127.0.0.1,3128 tcp from ${NetInIP}/${NetInMask} to any http,https,ftp via ${LanIn}
# Отправляем пакеты из внутренней сети наружу и с наружи для внутренней сети на обработку NAT
${fwcmd} add divert natd ip from ${NetInIP}/${NetInMask} to any out via ${LanOut}
${fwcmd} add divert natd ip from any to ${IPOut} in via ${LanOut}
# Это и следующее правила значительно облегчают жизнь файрволу :)
# Пропускаем все соединения с установленным битом RST или ACK
# По другому - пропускаем установленные соединения соединение
${fwcmd} add pass tcp from any to any established
# Разрешаем все пакеты выходящие из внешнего интерфейса с внешнего IP
${fwcmd} add pass ip from ${IPOut} to any out xmit ${LanOut}
# Избранным беспрепятственный доступ (все открывать неразумно)
${fwcmd} add pass tcp from ${MyIP1} to any 20,21,22,23,80,443,4000
${fwcmd} add pass tcp from any 20,21,22,23,80,443,4000 to ${MyIP1}
${fwcmd} add pass tcp from ${MyIP2} to any 20,21,22,23,80,443,4000
${fwcmd} add pass tcp from any 20,21,22,23,80,443,4000 to ${MyIP2}
${fwcmd} add pass tcp from ${MyIP3} to any 20,21,22,23,80,443,4000
${fwcmd} add pass tcp from any 20,21,22,23,80,443,4000 to ${MyIP3}
# Запрещаем - FTP, терминал, Squid - снаружи
${fwcmd} add deny tcp from any to any 20,21,22,23,3128 in via ${LanOut}
# Запрещаем - www, FTP, терминал - изнутри
${fwcmd} add deny tcp from any to any 20,21,22,23,80,443 in via ${LanIn}
${fwcmd} add deny tcp from any to any 8000-8104 in via ${LanIn}
# Разрешаем почту, DNS
${fwcmd} add pass tcp from any to any 25,110 via ${LanOut}
${fwcmd} add pass tcp from any 25,110 to any via ${LanOut}
${fwcmd} add pass udp from any to any 53 via ${LanOut}
${fwcmd} add pass udp from any 53 to any via ${LanOut}
${fwcmd} add pass all from any to any via ${LanIn}
# Доступен сервер www из внешнего мира
${fwcmd} add pass tcp from ${IPOut} 80 to any via ${LanOut}
${fwcmd} add pass tcp from any to ${IPOut} 80 via ${LanOut}
#ICMP
${fwcmd} add allow icmp from any to ${IPOut} in via ${LanOut} icmptype 0,3,4,11,12
${fwcmd} add allow icmp from any to ${NetInIP}/${NetInMask} in via ${LanOut} icmptype 0,3,4,11,12
${fwcmd} add allow icmp from ${IPOut} to any out via ${LanOut} icmptype 3,8,12
${fwcmd} add allow icmp from ${IPOut} to any out via ${LanOut} frag
${fwcmd} add deny log all from any to any via ${LanOut}
${fwcmd} add deny log ip from any to any