Роутер на FreeBSD. Проброс портов

Эта статья — продолжение предыдущей. В ней описано, как с помощью роутера, развёрнутого на ОС FreeBSD 12.2, пробросить порты по IP-адресам в локальной сети.

Задача такая:

В нашей локальной сети имеется несколько серверов, выполняющих различные функции, к которым также должен быть доступ через Интернет. Например:

  • SSH, который будет использоваться для администрирования самого файрволла
  • СУБД PostgreSQL с веб-сервером Apache для phpPgAdmin
  • СУБД MySQL или MariaDB
  • FTP-сервер
  • доступ по протоколу RDP к Windows Server (терминальное соединение)
  • защищённый веб-сервер (к примеру — с облачным хранилищем OwnCloud или NextCloud на борту)
  • и т.д., может быть всё, что угодно…

Для удалённой работы (удалённые офисы, командировки, отпуск, больничный, карантин или неблагополучная эпидемиологическая ситуация) необходимо настроить файрволл так, чтобы все эти машины можно было использовать из дома или любой точки, где есть доступ в Интернет.

В первую очередь разворачиваем роутер, как это описано в предыдущей статье.

После этого открываем файл с правилами /etc/ipfw.conf

# vi /etc/ipfw.conf

находим строчку:

$cmd nat 1 config log if $exface reset same_ports deny_in

в конце строки ставим пробел и обратный слэш:

$cmd nat 1 config log if $exface reset same_ports deny_in \

Сразу после неё прописываем правила проброса портов:

для SSH — IP-адрес 192.168.50.1 (сам роутер)

redirect_port tcp 192.168.50.1:22 22 \

для сервера с СУБД PostgreSQL и phpPgAdmin — IP-адрес 192.168.50.10

redirect_port tcp 192.168.50.10:5432 5432 \
redirect_port tcp 192.168.50.10:80 80 \
redirect_port tcp 192.168.50.10:443 443 \

для FTP-сервера — IP-адрес 192.168.50.11

redirect_port tcp 192.168.50.11:21 21 \

для Windows-терминала RDP — IP-адрес 192.168.50.12

redirect_port tcp 192.168.50.12:3389 3389 \

для защищённого веб-сервера — IP-адрес 192.168.50.13

redirect_port tcp 192.168.50.12:8443 8443

После последнего правила обратный слэш ставить не нужно!!!

Полный конфиг со всеми вышеперечисленными правилами должен выглядеть вот так:

exface="em0"
inface="em1"
in_ip="192.168.50.1"
cmd="ipfw -q"

$cmd -f flush
$cmd add 100 allow ip from any to any via lo0
$cmd add 200 deny ip from any to 127.0.0.1/8
$cmd add 300 deny ip from 127.0.0.1/8 to any
$cmd add 400 allow all from any to any via $inface
$cmd nat 1 config log if $exface reset same_ports deny_in \
redirect_port tcp 192.168.50.1:22 22 \
redirect_port tcp 192.168.50.10:5432 5432 \
redirect_port tcp 192.168.50.10:80 80 \
redirect_port tcp 192.168.50.10:443 443 \
redirect_port tcp 192.168.50.11:21 21 \
redirect_port tcp 192.168.50.12:3389 3389 \
redirect_port tcp 192.168.50.12:8443 8443
$cmd add 1030 nat 1 ip from any to any via $exface

Перезапускаем службу ipfw

# service ipfw restart

В консоли должно появиться примерно такое сообщение:

Firewall rules loaded.
Starting natd.

Это значит, что все прописанные правила ipfw вступили в силу. При обращении ко всем этим сервисам достаточно подключиться по внешнему IP-адресу и порту, который указан в правилах.

Некоторые полезные команды для работы с ipfw:

отключение файрволла

# service ipfw stop

включение файрволла

# service ipfw start

проверка работы (вывод правил из файла /etc/ipfw.conf)

# ipfw list

проверка работы NAT

# ipfw nat show config

вывод лога работы NAT в консоль

# ipfw nat show log

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *