URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID10
Нить номер: 4911
[ Назад ]

Исходное сообщение
"pf & udp"

Отправлено restyler , 03-Авг-11 09:17 
Есть сервер 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


Содержание

Сообщения в этом обсуждении
"pf & udp"
Отправлено reader , 03-Авг-11 10:57 
а если на время разрешить все входящие - работает?
и попробуйте не использовать self

"pf & udp"
Отправлено restyler , 03-Авг-11 16:49 
Дело было не в бобине...
Для начала как все соединено:

                                    Internet
                                        |
Сервер FreeBSD------Роутер------Моя машинка
                 |                                   |      
                 |                                   |
                 |                                   |
                 -------------------------------------
                 #               LAN                 #
                 -------------------------------------

Я сначала просто забыл о том, что при подключении к роутеру все машины друг от друга отделяются.Потом чтобы вчистую проверить внешний интерфейс сервака я соединил напрямую свой комп с сервером фришки, у себя выставил IP из сети 10.0.39., немного переписал правила - и все заработало! Привожу последний рабочий конфиг:

# Перва сетевая карта Локалка (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 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 on $ext_if proto tcp from any to $ext_if port 21 synproxy state
pass in on $ext_if proto tcp to port 21 synproxy state
pass in on $ext_if proto tcp to port > 49151

# Разрешаем входящий ssh
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 $ext_if port 27910 synproxy state

# Разрешаем входящий трафик Quake 3 (3 сервера)
pass in on $ext_if proto udp from any to $ext_if port 27960 synproxy state
pass in on $ext_if proto udp from any to $ext_if port 27961 synproxy state
pass in on $ext_if proto udp from any to $ext_if port 27962 synproxy state

# Разрешаем входящий трафик Counter-Strike Server
pass in on $ext_if proto udp from any to $ext_if port 27015 synproxy state

--------------------------------------------------------------------------------
Потом конечно сервер с фришкой воткнул обратно в роутер и со своей машинки уже не могу попасть на сервер по внешнему интерфейсу,так и должно быть. Благодарю за ответ!

Правила подкрутил, политику выбрал более жесткую - блочить все.

Еще несколько глупых вопросов. При таком конфиге насколько безопасен сервер? Могут ли взломав его порыться в локалке? Могул ли вообще добраться до локалки, когда она находится за двойной защитой - роутер и сервер с фрей? Что еще посоветуете для улучшения безопасности?

P.S. Nmap'ом сканировал, результатом в целом доволен, но подозреваю что этого все же недостаточно, хочется чтобы все было в порядке. Заранее спасибо.


"pf & udp"
Отправлено reader , 03-Авг-11 17:38 
>[оверквотинг удален]
> synproxy state
> pass in on $ext_if proto udp from any to $ext_if port 27962
> synproxy state
> # Разрешаем входящий трафик Counter-Strike Server
> pass in on $ext_if proto udp from any to $ext_if port 27015
> synproxy state
> --------------------------------------------------------------------------------
> Потом конечно сервер с фришкой воткнул обратно в роутер и со своей
> машинки уже не могу попасть на сервер по внешнему интерфейсу,так и
> должно быть. Благодарю за ответ!

tcpdump и смортите что от кого приходит и что кому отправляется

> Правила подкрутил, политику выбрал более жесткую - блочить все.
> Еще несколько глупых вопросов. При таком конфиге насколько безопасен сервер? Могут ли
> взломав его порыться в локалке? Могул ли вообще добраться до локалки,
> когда она находится за двойной защитой - роутер и сервер с
> фрей? Что еще посоветуете для улучшения безопасности?

если зальют и запустят что-то типа vpn клиента, то ваша локалка будет как на ладоне

так что следите за web и ftp серверами

> P.S. Nmap'ом сканировал, результатом в целом доволен, но подозреваю что этого все
> же недостаточно, хочется чтобы все было в порядке. Заранее спасибо.