Показаны сообщения с ярлыком firewall. Показать все сообщения
Показаны сообщения с ярлыком firewall. Показать все сообщения

вторник, 12 ноября 2013 г.

Переадресация некоторых портов в VoIP-шлюзе Audiocodes MP-202

Чтобы в VoIP-шлюзе Audiocodes MP-202 переадресовать порты 80, 8080 или 443 на сервер внутри локальной сети, кроме соответствующих настроек в разделе «Переадресация портов», в разделе «Системные настройки» требуется изменить совпадающие порты для удаленного управления.

вторник, 1 декабря 2009 г.

Аналог reply-to из PF в IPFW

Нашел интересную статью с описанием работы межсетевого экрана IPFW. В частности, упомянута реализация действия, аналогичного reply-to из PF:
«
Тот факт, что на самом деле "перепрыгивание" выполняется на параметры действия, позволяет использовать это для интересных вещей. В частности, с использованием появившегося во FreeBSD 6.2 параметра tag на каждый пакет можно навешивать внутриядерный тег, что в применении со skipto позволяет сделать, к примеру, запоминание, с какого шлюза пришел входящий пакет на машине с каналами к двум разным провайдерам, и ответные пакеты отправлять в тот канал, откуда они пришли (допустим, у вашей машины только один IP-адрес, и сделать fwd на базе внешнего адреса не получится), т.е. реализовать аналог reply-to из PF:

ipfw add 100 skipto 300 tag 1 in recv $ext_if1 keep-state
ipfw add 200 skipto 300 tag 2 in recv $ext_if2 keep-state
ipfw add 300 allow { recv $ext_if1 or recv $ext_if2 } # входящие снаружи
ipfw add 400 allow in recv $int_if # разрешить ответы на внутреннем проходе
ipfw add 500 fwd $gw1 tagged 1 # остались ответы на внешнем интерфейсе,
ipfw add 600 fwd $gw2 tagged 2 # зарулим их куда надо
»

суббота, 28 ноября 2009 г.

Трансляция PPTP (GRE) на шлюзе с PF

Как известно, межсетевой экран PF, портированный в FreeBSD из OpenBSD, не может корректно транслировать (NAT) GRE-протокол и, к примеру, из локальной сети невозможно создать несколько одновременных соединений к внешнему серверу VPN PPTP.
Одним из способов решения проблемы является трансляция PPTP-соединений родным IPFW с «ядерным» NAT. При этом вовсе необязательно компилировать ядро. Все описанные действия проверены в FreeBSD версии 7.2. Но должно работать и в других версиях, где есть поддержка «ядерного» NAT для IPFW.

В «/etc/rc.conf» добавляем

#Включаем IPFW
firewall_enable="YES"
# Подгружаем модуль ядра ipfw_nat
firewall_nat_enable="YES"
# Указываем путь к скрипту загрузки правил
firewall_script="/etc/ipfw.script"
Создаем файл «/etc/ipfw.script»
#!/bin/sh

/sbin/ipfw -q /dev/stdin <<RULES
flush
#em0 - внешний интерфейс шлюза
nat 10 config if em0
#Правила для трансляции PPTP-соединения
add 10 nat 10 gre from any to any
add 11 nat 10 tcp from any to any dst-port pptp
add 12 nat 10 tcp from any pptp to any
# Разрешаем весь трафик
add allow all from any to any

RULES
Делаем скрипт исполняемым
# chmod +x /etc/ipfw.script
Добавляем в правила PF
# Запрещаем PF транслировать PPTP-соединения
no nat on $external_if proto gre all
no nat on $external_if proto tcp from any to any port = pptp
no nat on $external_if proto tcp from any port = pptp to any

... skip ...

# Пропускаем PPTP-соединения
pass quick on $external_if inet proto tcp from any to any port 1723
pass quick on $external_if inet proto tcp from any port 1723 to any
pass quick on $external_if inet proto gre from any to any
После всех сделанных изменений перезагружаемся.

вторник, 19 августа 2008 г.

Множественные таблицы маршрутизации в FreeBSD 7.0-STABLE

  • Обновляем исходные коды системы из CVS-ветки «RELENG_7»
    # csup cvsup.RELENG7
    Файл cvsup.RELENG7
    *default host=cvsup.ru.FreeBSD.org
    *default base=/usr
    *default prefix=/usr
    *default release=cvs tag=RELENG_7
    *default delete use-rel-suffix
    src-all
  • В опции ядра добавляем
    options ROUTETABLES=N
    где N - число используемых таблиц.
    Собираем ядро и систему
    # make buildworld kernel
    Переходим в однопользовательский режим и после установки системы перезагружаемся
    # init 1
    # mergemaster -p
    # make installworld
    # make delete-old
    # mergemaster
    # reboot
  • Таблицы маршрутизации управляются через команду setfib.
    Синтаксис команды
    setfib [-[F]]N command
    где N - номер таблицы маршрутизации.

    Просмотр таблиц
    # setfib N netstat -rn
    Изменение таблиц
    # setfib N route {add|change|delete|flush} ...
    Пример применения в консоли
    # setfib N traceroute www.domain.ru
  • В ipfw добавлены две дополнительные конструкции
    setfib N ip from any to any
    и
    count ip from any to any fib N
  • В PF для работы с таблицами маршрутизации предусмотрена опция «rtable N». Пример:
    pass out on fxp0 from any to any keep state rtable N

воскресенье, 9 марта 2008 г.

В интернет из lo0

Если ваши jail-машины висят на интерфейсе lo0, предоставить им доступ в локальную сеть (интернет) можно таким образом:
1. в /etc/rc.conf добавить

# Разрешить маршрутизацию
gateway_enable="YES"
# Включить PF
pf_enable="YES"
# Указываем файл конфигурации PF
pf_rules="/etc/pf-custom.conf"
2. создать или отредактировать файл /etc/pf-custom.conf, добавив следущее
# IP-адрес вашей jail-машины
my_jail="127.0.0.100"

lo="lo0"
if="if0"

nat on $if from $my_jail to !$lo:0:network tag FROM_JAIL -> $if
pass out on $if proto tcp to any tagged FROM_JAIL keep state flags S/SA
3. Запускаем PF из под рута
/etc/rc.d/pf start

среда, 24 октября 2007 г.

ftp-proxy в freebsd

Дело было ранней зимой. Требовалось обеспечить доступ из интернета к ftp-серверу в локальной сети. Сперва решил тупо перенаправить на него порт 21 и порты выше 1025, но выглядело это не очень красиво.
В результате было решено поднять на шлюзе прокси-сервер для протокола ftp (ftp-proxy - портированный из openbsd вместе с pf) и настроить его для работы в обратную сторону.

Что нужно сделать:
1. Добавить в файл /etc/inetd.conf строку:
ftp-proxy stream tcp nowait root /usr/libexec/ftp-proxy ftp-proxy -R <local-ftp-server> -S <local-net-if>

где
<local-ftp-server> - ip-адрес внутреннего ftp-сервера,
<local-net-if> - ip-адрес внутреннего интерфейса шлюза.
2. Настроить параметры запуска inetd в /etc/rc.conf:
inetd_enable="YES"
inetd_flags="-wW -c 60 -a 80.xx.yy.zz"

где 80.xx.yy.zz - внешний ip-адрес шлюза.
3. Настроить pf:
rdr on $ext_if proto tcp from any to $ext_ip port ftp tag TRAF_FTP -> 80.xx.yy.zz port 8021
< ... skip ... >
pass in on $ext_if reply-to proto tcp tagged TRAF_FTP flags S/SA keep state
pass out on $ext_if proto tcp from $ext_ip to any flags S/SA user proxy keep state
pass in on $ext_if proto tcp from any to $ext_ip flags S/SA user proxy keep state
pass out on $int_if proto tcp from $int_ip to any flags S/SA user proxy keep state
pass in on $int_if proto tcp from any to $int_ip flags S/SA user proxy keep state
где
$int_if - локальный интерфейс,
$int_ip - ip-адрес локального интерфейса,
$ext_if - внешний интерфейс,
$ext_ip - ip-адрес внешнего интерфейса,
proxy - имя пользователя ftp-proxy.
4. Запустить inetd.
# /etc/rc.d/inetd start

Прокси-сервер может работать в пассивном режиме. Работу в активном режиме не проверял.

P.S. Данные настройки действительны для семейства FreeBSD 6.x