asphix 0 Опубликовано: 2008-07-08 20:53:51 Share Опубликовано: 2008-07-08 20:53:51 hi, all! FreeBSD 6.0 Есть скрипт файрволла. В целом работает, но есть две проблемки, решение которых ниасилил, сколько вариантов не пробовал: 1. Исходящая скорость юзера ровно в два раза меньше размера пайпа, со входящей всё нормально. 2. Если юзер начинает качать с торрента, то, к примеру при пайпе в 64Кбит/с такую скорость он получает с каждого пира, что в итоге приводит к забиванию канала Сам скрипт: # Сброс текущих правил, пайпов и таблиц 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 то инет вообще перестаёт работать. Очень надеюсь на помощь сообщества! Ссылка на сообщение Поделиться на других сайтах
nicelife 80 Опубликовано: 2008-07-09 07:18:45 Share Опубликовано: 2008-07-09 07:18:45 #!/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 правила вставляй, переназначь интерфейсы и аторизацию убери и добавь свою, плюс дхцп. всё работает наура. Ссылка на сообщение Поделиться на других сайтах
asphix 0 Опубликовано: 2008-07-09 07:48:27 Автор Share Опубликовано: 2008-07-09 07:48:27 под "пайпы после 40000 правила вставляй" ты имеешь ввиду юзерские правила, которые выпускают в инет и шейпят? Ссылка на сообщение Поделиться на других сайтах
nicelife 80 Опубликовано: 2008-07-09 08:20:22 Share Опубликовано: 2008-07-09 08:20:22 да просто это конфиг ноудени который переделай под свои нужды в ноудени правила на раздачу инета вставляются после 40000 го правила билингом. а каким билингом ты пользуешься ? или ручками? Ссылка на сообщение Поделиться на других сайтах
asphix 0 Опубликовано: 2008-07-09 08:35:47 Автор Share Опубликовано: 2008-07-09 08:35:47 дык Stargazer родимый, его мучаю кстати, а что не так в моём конфиге? хотелось бы понять свои ошибки Ссылка на сообщение Поделиться на других сайтах
nicelife 80 Опубликовано: 2008-07-09 08:46:41 Share Опубликовано: 2008-07-09 08:46:41 я бы переделал так # правилом 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кБ? Ссылка на сообщение Поделиться на других сайтах
asphix 0 Опубликовано: 2008-07-09 08:50:12 Автор Share Опубликовано: 2008-07-09 08:50:12 переделал.. в смысле мой набор? Или в твоём примере исправления? 4Кб для 64кбит/с, 8Кб для 128кбит/с - взял пример с роутера местного провайдера. Говорят, что экспериментальным путём вывели.. Ссылка на сообщение Поделиться на других сайтах
nicelife 80 Опубликовано: 2008-07-09 09:06:46 Share Опубликовано: 2008-07-09 09:06:46 в твой конфиг бы переделал или добавил # Сброс текущих правил, пайпов и таблиц 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 Ссылка на сообщение Поделиться на других сайтах
asphix 0 Опубликовано: 2008-07-09 09:30:46 Автор Share Опубликовано: 2008-07-09 09:30:46 ок, теперь понял. Кстати, в юзерских правилах в таком случае не нужно будет направления in/out указывать? Или при таком раскладе двойной проход исключён? Ссылка на сообщение Поделиться на других сайтах
asphix 0 Опубликовано: 2008-07-09 17:57:02 Автор Share Опубликовано: 2008-07-09 17:57:02 при таком раскладе инет у юзеров вообще не работает Ссылка на сообщение Поделиться на других сайтах
nicelife 80 Опубликовано: 2008-07-09 18:24:27 Share Опубликовано: 2008-07-09 18:24:27 ну поставь нормальные номера правил на нат посмотри на их номер и второе ipfw show команда можно посмотреть счётчики срабатывают или нет и тд и тп ipfw pipe show пайпы просмотреть Ссылка на сообщение Поделиться на других сайтах
asphix 0 Опубликовано: 2008-07-09 18:27:59 Автор Share Опубликовано: 2008-07-09 18:27:59 пока пробовал без пайпов - не пашет. Номера правил ната ставил: # правилом 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 пробовал выше - не срабатывает Ссылка на сообщение Поделиться на других сайтах
nicelife 80 Опубликовано: 2008-07-10 13:19:03 Share Опубликовано: 2008-07-10 13:19:03 ipfw show смотри где не проходят пакеты по счётчикам Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВойти
Уже зарегистрированы? Войдите здесь.
Войти сейчас