Сложный NAT на pfsense

02/08/2019

pfsense image

Есть прекрасные коммерческие межсетевые экраны, такие как CheckPoint или Cisco ASA. Однако, среди Open Source решений есть такой отличный продукт, как pfSense, который составляет им серьезную конкуренцию. Он решает большинство аналогичных задач в области информационной безопасности по защите периметра сети. Для pfsense заявлена поддержка пропускной способности до 10 Гб/с. Для получения еще больших скоростей вендором предлагается приобретать платную версию данного фаервола. Но не в этом суть, и не об этом хотелось написать заметку. Упомяну для общей информации, что pfsense работает на базе FreeBSD. В последние годы, большинство разработчиков выбирает для своих продуктов Linux. Девелоперы pfsense тут являются одним из редких исключений. Данный опен сорсный фаервол по сути включает в себя ряд других общедоступных разработок. Но скомпилировано это очень грамотно и элегантно. И все вместе позволяет защищать свою сеть на высоком уровне без лишних платежей производителям.

Практически все современные фаерволы делают хорошо несколько вещей — производят фильтрацию пакетов с учетом состояния сессии, NAT, VPN, IPS, контроль за приложениями. pfsense может предоставить своим пользователям возможности в каждом из этих направлений. Писать об этом можно долго и много. В этой заметке затронем небольшой хак по настройке правил трансляции сетевых адресов — NAT. pfSense может прятать адреса внутренней сети организации за общим публичным ip адресом. Также умеет прокидывать определенные порты с непубличные серверов в Интернет. Но порой бывает необходимо обеспечить редирект портов с внутренних серверов таким образом, чтобы в локальной сети также подменялся и внешний ip адрес клиента, обращающегося к этому серверу. Как это сделать читаем дальше.

Настройка

Прямого описания в документации pfSense по настройке сложного NAT нет. Как бы есть по умолчанию в pfSense несколько возможностей по настройке трансляции адресов. Это «Port Forward», «1:1», «Outbound» и «NPt». Последний из них относится строго к IPv6 адресам и позволяет менять маску подсети. В данном случае он нам не интересен. Нам нужны будут возможности редиректа портов и Outbound NAT. Применив их сообща мы сможем получить желаемый результат.

Итак, представим задачу. Нам необходимо, чтобы доступ по HTTPS на внутренний сервер с ip адресом 192.168.1.100 в локальной сети был доступен из мира по внешнему адресу нашего фаервола. При этом при прохождении пакетов по нашей локальной сети, адрес клиента из Интернета, должен маскироваться под локальный адрес нашей внутренней сети. Такие задачи периодически возникают в процессе работы системного администратора.

В первую очередь нам нужно создать правила по редиректу портов с внешнего интерфейса на внутренний ip адрес локального сервера. Это делается в GUI межсетевого экрана через Firewall -> NAT -> Port Forward. Тут мы создаем новое правило для редиректа с данными как на скриншоте ниже.

После этого создаем дополнительное правило в разделе Firewall -> NAT -> Outbound. С помощью этого правила мы будем подменять внешний ip адрес клиента на внутренний сетевой адрес фаервола.

После проведения этих настроек мы получим желаемый результат.

Заключение

Рассмотрели небольшой технический трюк по настройке сложных правил трансляции IP адресов на межсетевом экране pfSense. Такие тонкие настройки в комплексе позволяют использовать это решение для самых сложных задач, которые возникают в процессе эксплуатации межсетевых экранов.

Сложный NAT на pfsense: 6 комментариев

  1. После добавления outbound правила необходимо переключить Outbound NAT Mode в Hybrid из Automatic

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

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