|
|
www.lissyara.su
—> статьи
—> OpenBSD
—> Настройка
—> Шлюз: Часть 2
Часть 2 - Более функциональная настройка pf(4)
Автор: BlackCat.
Оглавление
1. Полезные команды
2. Проброс портов
2.1. Простой проброс портов
2.2. Проброс с изменением порта назначения
3. Активный режим FTP через NAT
4. Ограничение максимального размера сегмента TCP (MSS)
5. Список литературы
Просто закрыться от внешнего мира и запустить NAT - это только начало. Часто от межсетевого экрана требуется дополнительный функционал. Самый простой пример - проброс портов (port forwarding) маршрутизатора во внутреннюю сеть. Хороший материал по конфигурационному файлу pf.conf(5) и его структуре на русском в [1]. Далее подразумевается, что модифицируется конфигурация приведенная в части первой (листинг 3.1).
1. Полезные команды
"Управление невозможно без контроля."
Народная управленческая мудрость.
Документация по pf.conf(5) и pfctl(8) достаточна проста и понятна, здесь приведу список моих top 7 команд.
Листинг 1.1. Проверка синтаксиса pf.conf(5)
Листинг 1.2. Загрузка нового конфигурационного файла
Листинг 1.3. Просмотр полного состояния
Листинг 1.4. Просмотр правил фильтрации
Листинг 1.5. Просмотр правил трансляции адресов
Листинг 1.6. Просмотр всего дерева якорей
Листинг 1.7. Просмотр правил фильтрации добавленных для определенного якоря
# pfctl -sr -a <anchor_path>
|
Где <anchor_path> - полный путь до якоря (подробнее в pfctl(8)).
2. Проброс портов
2.1. Простой проброс портов
В качестве примера рассмотрим проброс порта для работы Torrent клиента. В начале конфига добавим два макроса: порт для проброса и адрес узла в локальной сети на который будет осуществляться проброс. Назовем из t_port и t_host соответственно. Далее потребуется добавить правило переадресации и разрешить данный трафик на внешнем интерфейсе, т.к. весь входящий трафик по-умолчанию блокируется. В итоге получим конфигурационный файл следующего содержания.
Листинг 2.1.1. Усовершенствованый pf.conf(5) с пробросом портов
# cat /etc/pf.conf
############################################################
# Simple pf configuration
############################################################
#
# Macroses
#
# External interface
if_ext="pppoe0"
# Internal interface
if_int="rl1"
# Torrent client incoming connection support
t_port = "31337"
t_host = "192.168.0.3"
#
# Options
#
# Soft packet reject
set block-policy return
# Don't filter loopback traffic
set skip on lo
#
# Translations
#
# Translate network addresses on external interface
nat on $if_ext from !($if_ext) -> ($if_ext)
# Port forwarding
rdr on $if_ext proto tcp from any to any port $t_port -> $t_host
#
# Filtering
#
# Default - block all
block all
# Allow outgoing traffic
pass out keep state
# Allow all local traffic
pass quick on $if_int keep state
# Allow forwarded port incoming traffic
pass in on $if_ext proto tcp from any to any port $t_port keep state
|
2.2. Проброс с изменением порта назначения
В качестве примера рассмотрим случай, когда необходимо пробросить порт 8082 шлюза на 80 порт узла 192.168.0.3. Как и в предыдущем примере введем несколько макросов:
h_port_in - порт шлюза, на который придет пакет из внешней сети (8082);
h_port_out - порт, на который осуществляется проброс (80);
h_host - узел локальной сети, на который будет переадресован трафик (192.168.0.3).
После создания правила проброса потребуется создать правило разрешающее данный трафик на внешнем интерфейсе шлюза. Beastie, как всегда, скрывается в мелочах: пакеты сначала проходят преобразования и только потом список фильтров. Именно по этому следует разрешать трафик не на порт h_port_in, а на h_port_out! С учетом всего вышесказанного, получаем следующий конфигурационный файл.
Листинг 2.2.1. Усовершенствованный pf.conf(5) с пробросом портов и изменением порта назначения
# cat /etc/pf.conf
############################################################
# Simple pf configuration
############################################################
#
# Macroses
#
# External interface
if_ext="pppoe0"
# Internal interface
if_int="rl1"
# HTTP server
h_port_in = "8082"
h_port_out= "80"
h_host = "192.168.0.3"
#
# Options
#
# Soft packet reject
set block-policy return
# Don't filter loopback traffic
set skip on lo
#
# Translations
#
# Translate network addresses on external interface
nat on $if_ext from !($if_ext) -> ($if_ext)
# Redirect port
rdr on $if_ext proto tcp from any to any port $h_port_in \
-> $h_host port $h_port_out
#
# Filtering
#
# Default - block all
block all
# Allow outgoing traffic
pass out keep state
# Allow all local traffic
pass quick on $if_int keep state
# Allow incoming ssh
pass in on $if_ext proto tcp from any to ($if_ext) port ssh keep state
# Allow forwarded port incoming traffic
pass in on $if_ext proto tcp from any to any port $h_port_out keep state
|
3. Активный режим FTP через NAT
Задачу с обеспечением работы активного FTP через транслятор адресов разработчики OpenBSD решили просто - весь FTP-трафик переадресовывается на FTP proxy (ftp-proxy(8)), который добавляет необходимые правила для прохождения трафика через шлюз[2].
Сначала необходимо включить ftp-proxy(8) и разрешить его запуск при запуске системы.
Листинг 3.1. Разрешение запуска ftp-proxy(8)
# echo ftpproxy_flags="" >> /etc/rc.conf.local
|
Листинг 3.2. Запуск ftp-proxy
ftp-proxy прослушивает порт 127.0.0.1:8021, на него и необходимо пересылать FTP-трафик. Так же необходимо добавить якоря (точки автоматического добавления правил). В итоге получаем вот такой конфигурационный файл.
Листинг 3.3. Усовершенствованный pf.conf(5) с поддержкой активного режима FTP
# cat /etc/pf.conf
############################################################
# Simple pf configuration
############################################################
#
# Macroses
#
# External interface
if_ext="pppoe0"
# Internal interface
if_int="rl1"
#
# Options
#
# Soft packet reject
set block-policy return
# Don't filter loopback traffic
set skip on lo
#
# Translations
#
# Translate network addresses on external interface
nat on $if_ext from !($if_ext) -> ($if_ext)
# Active FTP
nat-anchor "ftp-proxy/*"
rdr-anchor "ftp-proxy/*"
rdr on $if_int proto tcp from any to any port ftp -> 127.0.0.1 port 8021
#
# Filtering
#
# Default - block all
block all
# Allow outgoing traffic
pass out keep state
# Allow all local traffic
pass quick on $if_int keep state
# Active FTP on-the-fly rules anchor
anchor "ftp-proxy/*"
|
4. Ограничение максимального размера сегмента TCP (MSS)
Примечание: MSS для TCP имеет такой же смысл, как и параметр MTU для интерфейса - максимальное количество данных, которое можно добавить в TCP пакет. При неправильной конфигурации, слишком большие пакеты могут быть просто отброшены на одном из маршрутизаторов, в худшем случае без какого либо ICMP-уведомления. MSS рассчитывается исходя из величины MTU и размеров заголовков. Для PPPoE соединения MTU меньше стандартного (Ethernet). Но узлы внутренней (и внешней тоже) сети не подозревают, что пакеты будут передаваться через соединения с меньшим MTU, и используют стандартный максимальный размер сегмента. Последствия вполне логичны - найдется такой случай, что большие пакеты просто не будут проходить по маршруту. Выходов из этой ситуации может быть несколько, но один из оптимальных - это уменьшать MSS для TCP-соединений проходящих через PPPoE-интерфейс.
Установка MSS задается одной строкой "match on <interface> scrub (max-mss 1440)", при добавлении которой получим конфигурационный файл следующего содержания.
Листинг 4.1. Усовершенствованный pf.conf(5) с ограничением MSS
# cat /etc/pf.conf
############################################################
# Simple pf configuration
############################################################
#
# Macroses
#
# External interface
if_ext="pppoe0"
# Internal interface
if_int="rl1"
#
# Options
#
# Soft packet reject
set block-policy return
# Don't filter loopback traffic
set skip on lo
#
# Translations
#
# Translate network addresses on external interface
nat on $if_ext from !($if_ext) -> ($if_ext)
#
# Filtering
#
# Default - block all
block all
# Reduce MSS
match on $if_ext scrub (max-mss 1440)
# Allow outgoing traffic
pass out keep state
# Allow all local traffic
pass quick on $if_int
|
4. Список литературы
1. Разбираем простой конфиг PF // http://www.lissyara.su/articles/openbsd/pf/pf/
2. PF: Issues with FTP // http://www.openbsd.org/faq/pf/ftp.html
Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?f=14&t=24465.
размещено: 2010-03-01,
последнее обновление: 2010-03-14,
автор: BlackCat
|
|
|
|
2014-07-27, lissyara
gmirror
Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту
Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis
Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS
Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT
В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat
Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp
Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration
Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster
HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS
История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire
Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
2011-01-28, Капитан
Температура в серверной
Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
2011-01-21, m4rkell
Syslog server
Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
2011-01-07, lissyara
Canon/gphotofs
Монтирование цифровых фотоаппаратов Canon (PTP) как файловой системы, автоматизация этого процесса через события devd и внешние скрипты.
2010-12-13, Al
IPSec
Описание принципов работы IPSEC и способов аутентификации.
2010-12-07, manefesto
FreeBSD on flash
Было принято решении переехать на USB Flash и установить минимальный джентельменский набор для работы своего роутера. Делаем =)
2010-12-05, Fomalhaut
root ZFS, GPT
Инструкция по установке FreeBSD с использованием в качестве таблицы разделов GPT и в качестве основной файловой системы - ZFS
2010-09-05, Cancer
Настройка аудиоплеера на ximp3
Цели: Простенький аудиоплеер, для того что бы тетя продавец в магазине утром пришла нажала на кнопку Power и заиграла в зале музыка, так же был доступ по сети, общая шара куда можно заливать музыку, к
2010-08-31, Cancer
Установка и настройка OpenVPN
На днях появилась задача - объединить головной офис и 3 филиала в одну сеть через интернет посредством OpenVPN, чтобы люди могли подключаться через RDP к базам 1С на серверах.
2010-08-25, manefesto
freebsd lvm
Использование linux_lvm для работы с LVM разделами из-под FreeBSD. Проблемы которые возники при монтирование lvm раздела
2010-04-30, gonzo111
proftpd file auth"a
Proftpd - квоты и авторизация из файлов, без использования базы данных и/или системных пользователей
2010-04-22, lissyara
tw_cli
Пошаговая инструкция по восстановлению RAID на контроллере 3ware, из которого выпал один диск. Настройка мониторинга состояния рейда и отчётов о его состоянии на email.
2010-04-14, fox
MySQL Master+Master
MySQL (Master Master) and (Master Slave) Как настроить репликацию…
2010-03-09, terminus
DNS zones
Краткий ликбез про управление DNS зонами. Примеры проведения делегирования прямых и обратных DNS зон.
2010-03-09, aspera
Squid+AD (group access)
Настройка прокси сервера SQUID с автроризацией пользователей в AD. Разделение пользователей на группы
2010-03-02, BlackCat
Шлюз: Часть 4
Настройка дополнительных сервисов: синхронизация времени (OpenNTPD), клиент DynDNS.org.
2010-03-01, BlackCat
Шлюз: Часть 3
Настройка DHCP и DNS серверов для работы внутри частной сети, c поддержкой внутренних (частных зон) DNS, а так же интеграция DHCP и DNS сервисов.
|
Статистика сайта
|
Сейчас на сайте находится: 25 чел.
|
За последние 30 мин было: 70 человек
|
За сегодня было 12965 показов, 778 уникальных IP
|
|
|
|
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK
|
|
|
Комментарии пользователей [4 шт.]