The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
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, 10:57 , 03-Авг-11 (1)
    а если на время разрешить все входящие - работает?
    и попробуйте не использовать self
    • pf & udp, !*! restyler, 16:49 , 03-Авг-11 (2)
      Дело было не в бобине...
      Для начала как все соединено:

                                          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, 17:38 , 03-Авг-11 (3)
        >[оверквотинг удален]
        > 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'ом сканировал, результатом в целом доволен, но подозреваю что этого все
        > же недостаточно, хочется чтобы все было в порядке. Заранее спасибо.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру