Перейти до

Помогите разобраться в правилах?


Рекомендованные сообщения

hi, all!

 

FreeBSD 6.0

 

Есть скрипт файрволла. В целом работает, но есть две проблемки, решение которых ниасилил, сколько вариантов не пробовал:

 

1. Исходящая скорость юзера ровно в два раза меньше размера пайпа, со входящей всё нормально.

 

2. Если юзер начинает качать с торрента, то, к примеру при пайпе в 64Кбит/с такую скорость он получает с каждого пира, что в итоге приводит к забиванию канала :huh:

 

Сам скрипт:

# Сброс текущих правил, пайпов и таблиц

ipfw -f flush

ipfw -f pipe flush

 

# юзерский сегмент

ipfw table 1 flush

 

# Описания интерфейсов

ext="fxp0"

int="em0"

srv="em1"

 

# Пайпы для безлимитных тарифов

ipfw pipe 1 config mask dst-ip 0xffffffff bw 64Kbit/s queue 4Kbytes

ipfw pipe 2 config mask src-ip 0xffffffff bw 64Kbit/s queue 4Kbytes

 

ipfw pipe 3 config mask dst-ip 0xffffffff bw 128Kbit/s queue 8Kbytes

ipfw pipe 4 config mask src-ip 0xffffffff bw 128Kbit/s queue 8Kbytes

 

# some security

ipfw add 30 pass all from any to any via lo0

ipfw add 40 deny all from any to 127.0.0.0/8

ipfw add 50 deny all from 127.0.0.0/8 to any

 

# NAT

ipfw add 70 divert natd ip from any to any out via ${ext}

ipfw add 80 divert natd ip from any to me in via ${ext}

 

# Разрешаем icmp-протокол

ipfw add 90 pass icmp from any to any in icmptype 0,3,4,11,12

ipfw add 100 pass icmp from any to any out icmptype 3,8,12

 

# Разрешаем раздачу адресов по DHCP

ipfw add 110 pass udp from 0.0.0.0 68 to me 67 in recv ${int}

ipfw add 120 pass udp from any 68 to 255.255.255.255 67 in recv ${int}

ipfw add 130 pass udp from me 67 to 255.255.255.255 68 out xmit ${int}

 

# Разрешаем юзерам подключатся к серверу для авторизации

ipfw add 165 pass tcp from 'table(1)' to me via ${int}

ipfw add 170 pass udp from 'table(1)' to me 5555 in via ${int}

ipfw add 180 pass udp from me 5555 to 'table(1)' out via ${int}

 

# Разрешаем dns-запросы и ntp для всех

ipfw add 190 pass udp from any to any 53,123

ipfw add 200 pass udp from any 53,123 to any

 

# Разрешаем роутеру связь с миром

ipfw add 210 pass ip from me to any keep-state

 

# выпускаем юзеров в инет

ipfw add 30000 pipe 2 ip from any to 10.101.0.5

ipfw add 30010 pipe 1 ip from 10.101.0.5 to any

 

# Запрещаем всё остальное

ipfw add 65530 deny all from any to any

-------------------8<---------------------------

 

Подскажите, что не так? Всю голову сломал :-( Предположительно где-то пакеты совершают два прохода, но где - не пойму.. если в правилах указать направления, типа:

# выпускаем юзеров в инет

ipfw add 30000 pipe 2 ip from any to 10.101.0.5 in

ipfw add 30010 pipe 1 ip from 10.101.0.5 to any out

 

то инет вообще перестаёт работать.

 

Очень надеюсь на помощь сообщества!

Ссылка на сообщение
Поделиться на других сайтах

#!/bin/sh

 

ipfw='/sbin/ipfw'

ournet='10.0.0.0/8' # наша локальная сеть

ifout='fx0' # интерфейс смотрящий в интернет

ifuser='em0' # интерфейс смотрящий в ЛС

 

${ipfw} -f flush

# правилом 100 будут разрешены все обратные пакеты, которые были разрешены правилом 200

${ipfw} add 100 check-state

 

${ipfw} add 150 allow ip from any to any via lo0

# разрешаем трафик от сервера (не клиентский трафик)

${ipfw} add 200 allow ip from me to any keep-state

 

# Правило безопасности - отшиваем любые пакеты внутри локальной сети,

# которые имет ip не нашего диапазона ($ournet)

${ipfw} add 220 deny ip from not ${ournet} to any via ${ifuser} in

 

# Правило безопасности на случай если у вышестоящего провайдера ошибки в настройке

# Суть заключается в том, что со стороны интернета не может быть пакетов кроме как

# направленных на наш внешний ip

${ipfw} add 240 deny ip from any to not me via ${ifout} in

# NAT

${ipfw} add 250 divert natd ip from any to any via ${ifout}

${ipfw} add 260 allow ip from any to any via ${ifout} out

# В данной точке на внешнем интерфейсе только входящие пакеты (исходящие уже все разрешили)

# Если пакет не направлен к ip сервера значит это ответ на пакет нашего внутреннего клиента -

# поскольку он прошел обратное преобразование в natd и последний подменил ip назначения

# Если после natd пакет все равно указывает на ip сервера - это коннект внешней станции к

# нашему серверу. Для безопасности разрешим коннекты только по ssh

 

${ipfw} add 300 allow tcp from any to me ssh

# Клиенты должны иметь возможность просматривать статистику

${ipfw} add 310 allow tcp from any to me 80 via ${ifuser}

 

# если установлен почтовый сервер на этом же сервере - пускаем

# без авторизации (либо добавить via ${ifout})

${ipfw} add 320 allow tcp from any to me 25,110

# разрешим прохождение icmp-пакетов

${ipfw} add 330 allow icmp from any to me

# разрешим ДНС запросы

${ipfw} add 340 allow udp from any to me 53 via ${ifuser}

# разрешим клиентам ЛС авторизоваться по UDP-протоколу

${ipfw} add 350 allow udp from any to me 7723 via ${ifuser}

 

# все что не разрешили в направлении к серверу - запрещаем

${ipfw} add 400 deny ip from any to me

 

# разрешаем все входящие (in не ставим т.к все исходящие разрешили) через внешний интерфейс

# поскольку в данной точке точно известно, что эти пакеты направлены к нашим

# клиентам, поскольку прошли обратное преобразование в natd

${ipfw} add 450 allow ip from any to any via ${ifout}

 

# обязательно должно существовать правило 65400

${ipfw} add 65400 allow ip from any to any

 

 

 

Это стандартный фаер для ноудени

пайпы после 40000 правила вставляй, переназначь интерфейсы и аторизацию убери и добавь свою, плюс дхцп.

всё работает наура.

Ссылка на сообщение
Поделиться на других сайтах

да

просто это конфиг ноудени который переделай под свои нужды

в ноудени правила на раздачу инета вставляются после 40000 го правила билингом.

а каким билингом ты пользуешься ? или ручками?

Ссылка на сообщение
Поделиться на других сайтах

я бы переделал так

 

 

# правилом 100 будут разрешены все обратные пакеты, которые были разрешены правилом 200

${ipfw} add 100 check-state

 

# разрешаем трафик от сервера (не клиентский трафик)

${ipfw} add 200 allow ip from me to any keep-state

 

и нат

 

${ipfw} add 250 divert natd ip from any to any via ${ifout}

${ipfw} add 260 allow ip from any to any via ${ifout} out

 

а так вроде всё ок

 

ipfw pipe 1 config mask dst-ip 0xffffffff bw 64Kbit/s queue 4Kbytes

а почему 4кБ?

Ссылка на сообщение
Поделиться на других сайтах

переделал.. в смысле мой набор? Или в твоём примере исправления?

 

4Кб для 64кбит/с, 8Кб для 128кбит/с - взял пример с роутера местного провайдера. Говорят, что экспериментальным путём вывели..

Ссылка на сообщение
Поделиться на других сайтах

в твой конфиг бы переделал или добавил

 

# Сброс текущих правил, пайпов и таблиц

ipfw -f flush

ipfw -f pipe flush

 

# юзерский сегмент

ipfw table 1 flush

 

# Описания интерфейсов

ext="fxp0"

int="em0"

srv="em1"

 

# Пайпы для безлимитных тарифов

ipfw pipe 1 config mask dst-ip 0xffffffff bw 64Kbit/s queue 4Kbytes

ipfw pipe 2 config mask src-ip 0xffffffff bw 64Kbit/s queue 4Kbytes

 

ipfw pipe 3 config mask dst-ip 0xffffffff bw 128Kbit/s queue 8Kbytes

ipfw pipe 4 config mask src-ip 0xffffffff bw 128Kbit/s queue 8Kbytes

 

# some security

ipfw add 30 pass all from any to any via lo0

ipfw add 40 deny all from any to 127.0.0.0/8

ipfw add 50 deny all from 127.0.0.0/8 to any

 

# правилом 60 будут разрешены все обратные пакеты, которые были разрешены правилом 65

ipfw add 60 check-state

 

# разрешаем трафик от сервера (не клиентский трафик)

ipfw add 65 allow ip from me to any keep-state

 

# NAT

ipfw add 250 divert natd ip from any to any via ${ext}

ipfw add 260 allow ip from any to any via ${ext} out

 

# Разрешаем icmp-протокол

ipfw add 90 pass icmp from any to any in icmptype 0,3,4,11,12

ipfw add 100 pass icmp from any to any out icmptype 3,8,12

 

# Разрешаем раздачу адресов по DHCP

ipfw add 110 pass udp from 0.0.0.0 68 to me 67 in recv ${int}

ipfw add 120 pass udp from any 68 to 255.255.255.255 67 in recv ${int}

ipfw add 130 pass udp from me 67 to 255.255.255.255 68 out xmit ${int}

 

# Разрешаем юзерам подключатся к серверу для авторизации

ipfw add 165 pass tcp from 'table(1)' to me via ${int}

ipfw add 170 pass udp from 'table(1)' to me 5555 in via ${int}

ipfw add 180 pass udp from me 5555 to 'table(1)' out via ${int}

 

# Разрешаем dns-запросы и ntp для всех

ipfw add 190 pass udp from any to any 53,123

ipfw add 200 pass udp from any 53,123 to any

 

 

# выпускаем юзеров в инет

ipfw add 30000 pipe 2 ip from any to 10.101.0.5

ipfw add 30010 pipe 1 ip from 10.101.0.5 to any

 

# Запрещаем всё остальное

ipfw add 65530 deny all from any to any

Ссылка на сообщение
Поделиться на других сайтах

ок, теперь понял. Кстати, в юзерских правилах в таком случае не нужно будет направления in/out указывать? Или при таком раскладе двойной проход исключён?

Ссылка на сообщение
Поделиться на других сайтах

ну поставь нормальные номера правил на нат посмотри на их номер

и второе ipfw show команда можно посмотреть счётчики срабатывают или нет и тд и тп

 

ipfw pipe show пайпы просмотреть

Ссылка на сообщение
Поделиться на других сайтах

пока пробовал без пайпов - не пашет. Номера правил ната ставил:

# правилом 60 будут разрешены все обратные пакеты, которые были разрешены правилом 65

ipfw add 60 check-state

 

# разрешаем трафик от сервера (не клиентский трафик)

ipfw add 65 allow ip from me to any keep-state

 

# NAT

ipfw add 66 divert natd ip from any to any via ${ext}

ipfw add 67 allow ip from any to any via ${ext} out

 

пробовал выше - не срабатывает :huh:

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

×
×
  • Створити нове...