Есть сервер FreeBSD 6.4, на нем крутяться игровые сервера, меня интересует как открыть порты для игровых серверов у наружнего интерфейса.Я по-разному пробовал, честно говоря уже теряюсь в догадках, 3 дня раскуривал сабж на разных сайтах, смотрел faq.
Привожу вывод sockstat (только интересующие демоны):csuser hlds_i686 1203 4 udp4 *:27015 *:*
csuser hlds_i686 1203 9 udp4 10.0.39.201:26900 *:*
csuser hlds_i686 1202 4 udp4 *:27015 *:*
csuser hlds_i686 1202 9 udp4 10.0.39.201:26900 *:*
csuser hlds_i686 1167 4 udp4 *:27015 *:*
csuser hlds_i686 1167 9 udp4 10.0.39.201:26900 *:*
quake r1q2ded 1144 6 udp4 *:27910 *:*
quake q3ded 1141 39 udp4 *:27962 *:*
quake q3ded 1138 39 udp4 *:27961 *:*
quake q3ded 1135 39 udp4 *:27960 *:*
Привожу pf.conf с комментариями:
# Перва сетевая карта Локалка (192.168.130.201)
int_if="vr0"
# Вторая сетевая карта Мир (10.0.39.201)
ext_if="xl0"
# LAN (локальная сеть)
lan_net="{ 192.168.130.0/24 }"
# Таблица для доступа к Внешним MTA
mail="{ 192.168.130.170, 192.168.130.171, 192.168.130.172, 192.168.130.173,
192.168.130.174, 192.168.130.175, 192.168.130.176, 192.168.130.177, 192.168.130.178,
192.168.130.179, 192.168.130.180 }"
NoRouteIPs = "{ 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, \
10.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24, 0.0.0.0/8, 240.0.0.0/4 }"
# Определяем политику при блокировке пакетов
set block-policy drop
# Поведение пакетного фильтра при использовании таблицы состояний
set state-policy floating
# Логируемый интерфейс
set loginterface $ext_if
# Максимальное количество записей в пуле отвечающем за нормализацию трафика (scrub)
# Максимальное количество вхождений в пул отвечающий за состояние таблицы состояний соединений (keep state)
set limit { frags 100000, states 100000 }
# Устанавливаем тип оптимизации
set optimization normal
# Игнорируем фильтрацию на кольцевом интерфейсе
set skip on lo0
# Нормализуем входящий трафик
scrub in all
# Открытые порты 25 и 110 для таблицы mail
nat pass on $ext_if from $mail to any port 25 -> $ext_if
nat pass on $ext_if from $mail to any port 110 -> $ext_if
# Защита от спуфинга
antispoof quick for { lo0, $int_if, $ext_if }
pass in quick on $int_if from $lan_net to any
pass out quick on $int_if from self to $lan_net
pass out quick on $ext_if from self to any keep state
#block in on $ext_if from any to any
block in all
# те, кто ломится на внешний интерфейс с левыми адресами
#block drop in log quick on $ext_if from $NoRouteIPs to any
# умников, которые лезут на внутренний интерфейс с любых сетей
# отличных от 192.168.130.0/24
block drop in log quick on $int_if from !$int_if:network to any
# пишем тех, кто ломится к нам на 25 порт. Облегчает работу по
# определению зараженных компов в локальной сети
block drop in log quick on { $int_if, $ext_if } proto tcp from any to any port smtp
#pass in on $int_if proto tcp from $int_if to any port 80 synproxy state
#------------------------------
# Icoming #
#------------------------------
# Разрешаем входящий ssh
pass in log on $int_if proto tcp from any to $int_if port 22 flags S/SA synproxy state
# Разрешаем входящий www трафик
pass in on $ext_if proto tcp from any to $ext_if port 80 flags S/SA synproxy state
# Разрешаем входящий ftp трафик
pass in quick on $ext_if proto tcp from any to any port {20,21} keep state
#Правило хз почему не работает
pass in on $ext_if proto tcp from any to $ext_if port ssh synproxy state
# Открываем доступ к Quake 2 серверу снаружи, но правило не катит
pass in on $ext_if proto udp from any to any port 27910 keep state
#Конец конфига
Так же пробовал писать для открытия порта методом проброса(глупо конечно,но от отчаяния):
rdr on $ext_if inet proto udp from any to $ext_if port 27910 -> $int_if
Пробовал, но тоже не катит:
pass in on $ext_if proto udp from any to any port 27910 synproxy state
-------------------------------------------------------------------------
Хочу в конце добавить, что все правила проходят синтаксический контроль pf.
Мне все-таки хочется открыть доступ к серверам кваки 2,3 и КС на внешней сетевой карте, которая:
# Вторая сетевая карта Мир (10.0.39.201)
ext_if="xl0"
Ребят, подскажите как правильно это сделать?
P.S. С апачем долго возился, но победил, правило все-таки работает:
pass in on $ext_if proto tcp from any to $ext_if port 80 flags S/SA synproxy state