Простая установка nat во Freebsd

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

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

options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=10
options IPDIVERT
options TCP_DROP_SYNFIN
options ICMP_BANDLIM

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

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

gateway_enable="YES"
#
# natd
natd_enable="YES"
natd_flags="-a 84.52.91.91"

#
# Firewall
firewall_enable="YES"
firewall_script="/etc/rc.firewall"
firewall_type="/etc/fw.filters"
firewall_quiet="NO"
firewall_logging="YES"
firewall_flags=""

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

add 100 divert natd all from 10.1.1.0/24 to any out recv rl0 xmit fxp0
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