У нас сервер под управлением FreeBSD(пробовал на 5 и 6 версиях) с двумя сетевыми картами. Одна карта обслуживает внутреннюю подсеть, и имеет адрес – 10.1.1.1 /24.
Ко второй карте подключен кабель от провайдера и имеет адрес – 84.52.91.91.

Для начала нам нужно добавить в ядро несколько опций:

options IPFIREWALL (включаем поддержку самого firewall’a)
options IPFIREWALL_VERBOSE (это нужно, что бы наш firewall смог записывать логи)
options IPFIREWALL_VERBOSE_LIMIT=10 (данная опция ограничивает попадающие в firewall логи, это крайне полезная опция, она не даст сгенерироваться большому числу пакетов которое может привести к переполнению жесткого диска, и вам самим можно будет более точно оценивать, что происходит, не копаясь в больших логах)
options IPDIVERT (обязательна для работы NAT)
options TCP_DROP_SYNFIN (эта опция нам не нужна, но ее включение будет гарантировать полное отбрасывание таких не хороших TCP пакетов с одновременно установленными флагами начала и завершения соединения, из собственной практики я зная, что такие пакеты очень часто любят использовать хакеры)
options ICMP_BANDLIM (сильно снижает число генерируемых машиной сообщений об ошибках TCP/IP, крайне полезная опция в отбивания DOS атак)

Далее компилим у устанавливаем новое ядро(более подробно по компиляции и установки смотри /usr/src/Makefile). Теперь когда наше новое ядро собрано и установлено с поддержкой ipfw(ipfirewall).

Далее добавляем в /etc/rc.conf:

natd_enable=”YES” (включаем NAT)
natd_flags=”-a 84.52.91.91″ (говорим демону natd, что все пакеты заворачиваются на адрес который нам выдал наш провайдер)
firewall_enable=”YES” (включаем firewall)
firewall_type=”/etc/firewall.conf” (говорим firewall’у где будет лежать конфиг с правилами фильтрации)

Создаем файл /etc/firewall.conf и добавляем туда правила:

add 100 divert natd all from 10.1.1.0/24 to any out recv rl0 xmit fxp0 (данная опция будет маскировать все пакеты из внутренний сети 10.10.1.0/24 на внешний адрес 81.222.156.16)
add 200 divert natd all from not 10.1.1.0/24 to 84.52.91.91 recv fxp0 (это правило будет делать в точности на оборот, что делает первое).
add 65534 allow ip from any to any

Далее перегружаем сетевые настройки скриптом /etc/netstart/ или просто ребутим сервер и получаем сервер который nat’ит внутреннюю подсеть во внешний адрес.

Также можно создать правило и для одиного адреса:

add 100 divert natd all from 10.10.1.6 to any out recv rl0 xmit fxp0
add 200 divert natd all from not 10.10.1.6 to 81.222.156.16 recv fxp0

Идея взята с opennet.ru

Leave a Reply

You must be logged in to post a comment.