Шлюз на FreeBSD

Всем привет!
Небольшая заметка о настройке шлюза на FreeBSD с NAT.
Более 10 лет использую FreeBSD в различных инсталляциях, как правило в 90% случая использую FreeBSD как шлюз, начиная с версии 4.11.
В данный момент для себя решил, что проще и возможно дешевле использовать шлюзом готовые решения такие как MikroTik.
В таком решение есть как плюсы, так и минусы.
Но это все не по теме:)Итак, дано:

  1. FreeBSD 11.2-RELEASE-p3
  2. Сетевой интерфейс em0 IP 4.4.4.4 — смотрит в мир (WAN)
  3. Сетевой интерфейс em1 IP 192.168.33.1 — смотрит в локальную сеть (LAN)

Если вы имеете реальную сеть смаршрутизировунную провайдером на вашем WAN интерфейсе, то сделать шлюзом FreeBSD очень просто, достаточно добавить в /etc/rc.conf запись об этом:

gateway_enable="YES"

И перезагрузить сервер, либо применить настройки на лету с помощью sysctl

# sysctl net.inet.ip.forwarding=1

На клиентах указываем шлюзом наш LAN интерфейс (только он у нас будет не с адресом BOGON сети, а с реальным) и пакеты начинают идти.
Но в 90% мы имеем сеть с /29 (255.255.255.248) маской с доступными 5 адресами (откидываем бродкаст адрес и адрес шлюза), поэтому нам остается только NAT
Пишем:

# vi /boot/loader.conf
net.inet.ip.fw.default_to_accept=1

Для того, чтобы не потерять доступ к машине при конфигурировании IPFW (можно по другому, но в моем случае оно не работает, дальше увидите почему)

# vi /etc/rc.conf
gateway_enable="YES" #sysctl net.inet.ip.forwarding=1

firewall_enable="YES"
firewall_logging="YES"
firewall_script="/etc/fw.sh"

natd_enable="YES"
natd_interface="em0"

Добавляем скрипт с правилами FireWall (IPFW):

# vi /etc/fw.sh
#!/bin/sh
wan="em0"
lan="em1"
wan_int="4.4.4.4"
lan_int="192.168.33.1"
ipfw="/sbin/ipfw -q"

# Сбрасываем все правила:
${ipfw} -f flush
${ipfw} -f pipe flush
${ipfw} -f queue flush

${ipfw} add allow ip from any to any via lo0
${ipfw} add deny ip from any to 127.0.0.0/8
${ipfw} add deny ip from 127.0.0.0/8 to any

${ipfw} add divert natd ip from any to any via em0
${ipfw} add allow ip from any to any

Делаем его исполняемым:

# chmod +x /etc/fw.sh

Если есть физический доступ к консоли, то запускаем:

# /etc/netstart

Если сделаете так удаленно, то потеряете доступ к серверу, т.к. запрещающее default правило IPFW сработает самым первым и отрубит вам доступ, в реальном времени не получится сделать команду для изменения поведения IPFW с Deny all на Allow all:

# kenv net.inet.ip.fw.default_to_accept=1

Поэтому перезагружаем сервер должно все работать, команда ipfw show покажет вам счетчики правил.
P.S. это сырой пример, firewall открыт для всех и всего, перед эксплуатацией обязательно дополните конфиг (/etc/fw.sh) нужными вам правилами, последней строкой должна быть команда запрещающая все и всем deny log ip from any to any!

 

Рейтинг
( 1 оценка, среднее 5 из 5 )
Понравилась статья? Поделиться с друзьями:
Комментарии: 3
  1. Павел

    firewall_enable= «YES»
    firewall_type= «OPEN»
    firewall_nat_enable= «YES»
    firewall_nat_interface= «em0»

  2. Роман

    >>Если сделаете так удаленно, то потеряете доступ к серверу, т.к. запрещающее default правило IPFW сработает самым первым и отрубит вам доступ, <<<
    Добавляем в конфиг ipfw две строки и не отрубает. Прямо указываем разрешение на разрешение работы по 22 порту (SSH)
    # — блок открытия 22 порта для ssh.
    ${ipfw} add allow tcp from any to me 22
    ${ipfw} add allow tcp from me 22 to any

  3. Роман

    Так же, для того что бы IPFW не отрубил доступ по удаленке, можно его запустить отдельно командой.
    # kldload ipfw && ipfw add 65530 allow ip from any to any
    Это загрузит ядерный модуль ipfw сразу с указанием правила «все открыть».

Добавить комментарий

:) :D :( :o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen:
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.