У нас сервер под управлением 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
No Comments