Код: Выделить всё
natd_enable="YES"
natd_flags="-f /etc/natd.conf"
Код: Выделить всё
interface vr0
same_ports yes
use_sockets yes
unregistered_only yes
redirect_port tcp 172.16.0.251:3389 193.109.xxx.xxx:3389
Код: Выделить всё
[Mm][Yy])
# ==============================================================
# This is my ruleset for ipfw(8). 16 February 2009
# ==============================================================
FwCMD="/sbin/ipfw" # собственно где лежит бинарник ipfw
LanOut="vr0" # внешний интерфейс
LanIn="re0" # внутренний интерфейс
IpOut="193.109.xxx.xxx" # внешний IP адрес машины
IpIn="172.16.0.254" # внутренний IP машины
NetMask="12" # маска сети (если она разная для внешней
# и внутренней сети - придётся вводить ещё
# одну переменную, но самое забавное, что
# можно и забить - оставить 24 - всё будет
# работать, по крайней мере я пробовал -
# работаало на 4-х машинах, в разных сетях,
# с разными масками - настоящими разными! но -
# это неправильно.)
NetIn="172.16.0.0" # Внутренняя сеть
TranspIP="172.16.0.252" # IP для транспорта через прокси
vpn="172.16.1.248"
# Разрешаем весь траффик по внутреннему интерфейсу (петле)
# Вообще я во многих местах читал что без него может ничё не заработать вообще
# и прочие страшилки. Работает - почта, апач, .... А вот squid - не работает :)
# так что без него и правда - никуда.
${FwCMD} add 100 pass all from any to any via lo0
# рубим попытки lo0 куда-то лезть и откуда-то лезть на lo0 (вот честно - ни
# одного пакета по этим правилам не зарубилось за всё время... Может в этом
# моё счастье? :))
${FwCMD} add 200 deny all from any to 127.0.0.0/8
${FwCMD} add 300 deny ip from 127.0.0.0/8 to any
# Проверяем - соответствует ли пакет динамическим правилам:
${FwCMD} add 900 check-state
# Вводим запреты:
# режем частные сети на внешнем интерфейсе - по легенде он у нас
# смотрит в интернет, а значит пакетам этим браться неоткуда на нём.
# рубим частные сeти
${FwCMD} add 993 allow all from any to any 3389
${FwCMD} add 1000 deny log ip from any to 10.0.0.0/8 in via ${LanOut}
# ${FwCMD} add 1100 deny log ip from any to 172.16.0.0/12 in via ${LanOut}
${FwCMD} add 1200 deny log ip from any to 192.168.0.0/16 in via ${LanOut}
${FwCMD} add 1300 deny log ip from any to 0.0.0.0/8 in via ${LanOut}
# рубим автоконфигуреную частную сеть
${FwCMD} add 1400 deny log ip from any to 169.254.0.0/16 in via ${LanOut}
## рубаем мультикастовые рассылки
${FwCMD} add 1500 deny log ip from any to 240.0.0.0/4 in via ${LanOut}
# рубим фрагментированные icmp
${FwCMD} add 1600 deny log icmp from any to any frag
# рубим широковещательные icmp на внешнем интерфейсе
${FwCMD} add 1700 deny log icmp from any to 255.255.255.255 in via ${LanOut}
${FwCMD} add 1800 deny log icmp from any to 255.255.255.255 out via ${LanOut}
# а тут собственно файрволл и начался:
# отправляем на squid (в данном случае - прокси прозрачный)
${FwCMD} add 2100 fwd 127.0.0.1,3128 tcp from ${TranspIP} to any 80 via ${LanOut}
# пропускаем траффик через трансляцию сетевых адресов (NAT)
${FwCMD} add 10000 divert natd all from ${NetIn}/${NetMask} to any 5190 via ${LanOut} # Открытый порт аськи для всех
${FwCMD} add 10100 divert natd all from 172.16.0.250 to any via ${LanOut} # Server
${FwCMD} add 10200 divert natd all from 172.16.0.251 to any via ${LanOut} # Netfire
${FwCMD} add 10300 divert natd all from 172.16.0.252 to any via ${LanOut} # Virtual mashine
${FwCMD} add 10350 divert natd all from 172.16.0.253 to any via ${LanOut} # New Server
${FwCMD} add 10400 divert natd all from 172.16.0.5 to any via ${LanOut} # Michail Ivanovich
${FwCMD} add 10500 divert natd all from 172.16.1.5 to any via ${LanOut} # Sasha Sergeev
${FwCMD} add 10600 divert natd all from ${vpn}/29 to any via ${LanOut} # VPN NAT
# ============================================
# Begin users config for NAT 10700-10800 rules
# ============================================
${FwCMD} add 10700 divert natd all from 172.16.41.5 to any via ${LanOut}
${FwCMD} add 10701 divert natd all from 172.16.108.1 to any via ${LanOut} # Server on buh
# ============================================
# End users config for NAT
# ============================================
${FwCMD} add 20000 divert natd ip from any to any in via ${LanOut} # Входящий трафик для NAT
# рубим траффик к частным сетям через внешний интерфейс
# заметтьте - эти правила отличаются от тех что были выше!
${FwCMD} add 20100 deny log ip from 10.0.0.0/8 to any out via ${LanOut}
# ${FwCMD} add 20200 deny log ip from 172.16.0.0/12 to any out via ${LanOut}
${FwCMD} add 20300 deny log ip from 192.168.0.0/16 to any out via ${LanOut}
${FwCMD} add 20400 deny log ip from 0.0.0.0/8 to any out via ${LanOut}
# рубим автоконфигуреную частную сеть
${FwCMD} add 20500 deny log ip from 169.254.0.0/16 to any out via ${LanOut}
# рубаем мультикастовые рассылки
${FwCMD} add 20600 deny log ip from 224.0.0.0/4 to any out via ${LanOut}
# рубаем мультикастовые рассылки
${FwCMD} add 20700 deny log ip from 240.0.0.0/4 to any out via ${LanOut}
# разрешаем все установленные соединения (если они установились -
# значит по каким-то правилам они проходили.)
${FwCMD} add 21000 allow tcp from any to any established
# разрешаем весь исходящий траффик (серверу-то в инет можно? :))
${FwCMD} add 21100 allow ip from ${IpOut} to any out xmit ${LanOut}
# Разрешаем весь трафик на порт 3389 для RDP
${FwCMD} add 21101 allow all from any to any 3389
# VPN-LAN - выпускаем подсеть VPN и внутрь локалки а на внешние адреса
# без прописанного адреса в секции NAT достучимся только до внешнего интерфейса
${FwCMD} add 21110 allow all from ${vpn}/29 to any
${FwCMD} add 21120 allow all from any to ${vpn}/29
# разрешаем DNS снаружи (нам же надо узнавать IP по именам машин?)
${FwCMD} add 22230 allow tcp from any to ${IpOut} 10100 via ${LanOut}
# VPN-connect - это порт для даемона MPD, на него поступают запросы на авторизацию
${FwCMD} add 22300 allow tcp from any to any 1723 keep-state
# GRE for MPD5 - в этот протокол инкапсулируются все пакеты
# установившегося соединения VPN
${FwCMD} add 22400 allow gre from any to any
# по поводу следующих трёх правил, для tcp, udp и icmp - их можно
# заменить одним правилом:
#${FwCMD} add allow ip from any to any via ${LanIn}
# но для удобства наладки и контроля происходящего я предпочитаю три отдельных
# правила, хотя могут быть грабли - например протокол gre не пройдёт -
# придётся стругать отдельное правило для него, типа
#${FwCMD} add allow gre from any to any via ${LanIn}
# итак:
# разрешаем весь tcp траффик внутри локалки (на внутреннем интерфейсе)
${FwCMD} add 22500 allow tcp from any to any via ${LanIn}
# разрешаем весь udp траффик внутри локалки (на внутреннем интерфейсе)
${FwCMD} add 22600 allow udp from any to any via ${LanIn}
# разрешаем весь icmp траффик внутри локалки (на внутреннем интерфейсе)
${FwCMD} add 22700 allow icmp from any to any via ${LanIn}
# запрещаем всё и всем. Если тип файрволла не open то это правило добавится
# автоматически, но всё-же ну его. Лучше сам. Надёжней.
########################################################
# That's all, folks deny and log everything ############
########################################################
# Reject & log all other udp connections
${FwCMD} add 64000 set 5 deny log udp from any to any
# Reject & log everything else
${FwCMD} add 64100 set 5 deny log all from any to any
${FwCMD} add 65000 deny log ip from any to any
;;