Компьютерный форум NoWa.cc Здесь может быть Ваша реклама
Правила Форума
редакция от 22.06.2020
Форум .::NoWa.cc::.
Вернуться   Компьютерный форум NoWa.cc > Операционные системы > UNIX, Linux, MacOs для PC и другие ОС > Вопросы и проблемы

Уважаемые пользователи nowa.cc. Мы работаем для вас более 20 лет и сейчас вынуждены просить о финансовой помощи по оплате за сервер.
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже.
Webmoney Webmoney WMZ: Z021474945171 Webmoney WME: E159284508897 Webmoney WMUSDT: T206853643180
Кошелёк для вашей помощи YooMoney 4100117770549562
YooMoney Спасибо за поддержку!

Ответ
 
Опции темы Опции просмотра Language
Старый 27.06.2006, 08:31   #1
jin
Guest
 
Сообщений: n/a
Unhappy Help! Ограничение траффика во FreeBSD 4.1

Скажу сразу - в теме FreeBSD разбираюсь слабо. Есть сервер на FreeBSD 4.10. Он является шлюзом для доступа в интернет. Одним концом он смотрит в интернет (через DSL модем), другим концом подключен к свичу. В локальной сети один компьютер с IP напр. 192.168.0.1 имеет доступ в инет со скоростью около 200 Кбит/с. Остальные IP адреса имеют доступ со скоростью меньшей (примерно 50 Кбит/с. ) Вопрос: где это настроено и как этим управлять?
  Ответить с цитированием Вверх
Здесь может быть Ваша реклама
Здесь может быть Ваша реклама


Реклама:


Старый 27.06.2006, 20:21   #2
unn
Неактивный пользователь
 
Регистрация: 22.01.2006
Сообщений: 3
Репутация: 7
По умолчанию Re: Help! Ограничение траффика во FreeBSD 4.1

Чтобы этим управлять надо понимать чем конкретно реализуются эти функции - http://www.freebsd.org/doc/ru_RU.KOI8-R/books/handbook/ - хэндбук на русском - там все основные (начальные сведения) по FreeBSD.

Управлять в данном случае придется фаерволом. Фаервол во FreeBSD 4.x это команда ipfw ( man ipfw - мануал по использованию этого самого фаервола ). Но ipfw не единственный фаервол в 4.x - man ipf - еще один мануал по еще одному фаерволу. Кроме того для 4.x одно время существовал порт фаервола pf с OpenBSD.

Основным фаерволом в FreeBSD является ipfw. На его примере я и опишу как сделать необходимые ограничения.

Предпологается что ядро скомпилированно с поддержкой ipfw и dummynet - шейпер трафика в FreeBSD ( т.е. в dmesg присутствуют такие или подобные строки - DUMMYNET initialized (011031) и ipfw2 initialized, divert enabled, rule-based forwarding enabled, default to accept, logging limited to 100 packets/entry by default ). Проверить используется ли в данный момент ipfw можно введя в рутовой консоли ipfw show - на экран будет выведен список правил фаервола.

К примеру:
root@gw:~$ ipfw show
00100 296 38628 allow ip from any to any via lo0
00200 0 0 deny ip from any to 127.0.0.0/8
00300 0 0 deny ip from 127.0.0.0/8 to any
65500 917677 331261458 allow ip from any to any
65535 0 0 allow ip from any to any

Чтобы наложить скоростные ограничения необходимо сначала их создать - создаются они той же командой ipfw, ограничения называются пайпами (pipe).

Создадим пайп №1.
root@gw:~$ ipfw pipe 1 config bw 200K

В него направим исходящий трафик от узла 192.168.0.1 к любым узлам.
root@gw:~$ ipfw add 400 pipe 1 ip from 192.168.0.1 to any out

Создадим пайп №2.
root@gw:~$ ipfw pipe 2 config bw 200K

В него направим входящий трафик от любых узлов к 192.168.0.1.
root@gw:~$ ipfw add 500 pipe 2 ip from any to 192.168.0.1 in

Посмотрим на то что получилось:
oot@gw:~$ ipfw show
00100 296 38628 allow ip from any to any via lo0
00200 0 0 deny ip from any to 127.0.0.0/8
00300 0 0 deny ip from 127.0.0.0/8 to any
00400 0 0 pipe 1 ip from 192.168.0.1 to any out
00500 0 0 pipe 2 ip from any to 192.168.0.1 in
65500 917677 331261458 allow ip from any to any
65535 0 0 allow ip from any to any

2 пайпа необходимо для корректного ограничения скорости входящего и исходящего трафика - можно засунуть все и в один пайп, но тогда исходящий трафик будет давить входящий и наоборот .

Теперь так называемые "остальные IP адреса" - положим что они это сеть 192.168.0.0/24. Чтобы залимитировать скорость всей подсети скопом, но не указывать каждый конкретный IP в правиле фаервола нужно пойти на хитрость - создать так называемые динамические пайпы ;) .

root@gw:~$ ipfw pipe 3 config bw 50K mask src-ip 0xffffffff
root@gw:~$ ipfw pipe 4 config bw 50K mask dst-ip 0xffffffff

И направим в них трафик:
root@gw:~$ ipfw add 600 pipe 3 ip from 192.168.0.0/24 to any out
root@gw:~$ ipfw add 700 pipe 4 ip from any to 192.168.0.0/24 in

И естественно посмотрим командой ipfw show что получилось.

Засим всё - всем сестрам по серьгам - каждый IP получил ту скорость которую надо.
unn вне форума
 
Ответить с цитированием Вверх
Эти 2 пользователя(ей) сказали cпасибо за это полезное сообщение:
Старый 03.07.2006, 03:11   #3
jin
Guest
 
Сообщений: n/a
По умолчанию Re: Help! Ограничение траффика во FreeBSD 4.1

Тогда ещё один вопрос: добавляю два правила в ipfw с целью сделать открытыми порты 4662, 4672, 4661 для использования eDonkey (eMule).
ipfw add 580 allow tcp from any to 192.168.0.7 4662,4672
ipfw add 590 allow tcp from 192.168.0.7 to any 4661
ipfw list показывает созданные правила.
add 580 и 590 - т.к. правила для 192.168.0.7 уже созданы (номер 600 и 700).
Но эффект от этого нулевой.
А при перезагрузке сервера созданые мною правила изчезают. Почему так происходит?
  Ответить с цитированием Вверх
Старый 03.07.2006, 04:17   #4
Shardin
Постоялец
 
Пол:Мужской
Регистрация: 09.09.2005
Сообщений: 272
Репутация: 71
По умолчанию Re: Help! Ограничение траффика во FreeBSD 4.1

Цитата:
Сообщение от jin
Тогда ещё один вопрос: добавляю два правила в ipfw с целью сделать открытыми порты 4662, 4672, 4661 для использования eDonkey (eMule).
ipfw add 580 allow tcp from any to 192.168.0.7 4662,4672
ipfw add 590 allow tcp from 192.168.0.7 to any 4661
ipfw list показывает созданные правила.
add 580 и 590 - т.к. правила для 192.168.0.7 уже созданы (номер 600 и 700).
Но эффект от этого нулевой.

Жаль что у меня миелафон сломался
Скинь сюда все правила, тогда можно будет сказать что и почему у тебя не работает.
Цитата:
Сообщение от jin
А при перезагрузке сервера созданые мною правила изчезают. Почему так происходит?

А ты их в стартовых скриптах сохранял? (типа /etc/rc.firewall)
Shardin вне форума
 
Ответить с цитированием Вверх
Старый 03.07.2006, 06:38   #5
jin
Guest
 
Сообщений: n/a
По умолчанию Re: Help! Ограничение траффика во FreeBSD 4.1

root@mail# ipfw list
00100 allow ip from any to any via lo0
00200 deny ip from 192.168.0.0/16 to any in recv fxp0
00300 fwd 127.0.0.1,3128 tcp from 192.168.0.0/24 to any 80 via fxp1
00400 divert 8668 ip from 192.168.0.0/24 to any out xmit fxp0
00500 divert 8668 ip from any to 193.25.12.66 in recv fxp0
00600 allow tcp from 192.168.0.7 to any 20,21,22,23,80,443,4000,3389,4662
00700 allow tcp from any 20,21,22,23,80,443,4000,3389,4662 to 192.168.0.7
00800 allow tcp from 195.40.13.130 to any 20,21,22,23,80,443,4000,3389,1494,3128
00900 allow tcp from any 20,21,22,23,80,443,4000,3389,1494,3128 to 195.40.13.130
01000 allow tcp from 195.40.0.0/16 to any 20,21,22,23,80,443,4000,3128,1494,3389
01100 allow tcp from any 20,21,22,23,80,443,4000,3128,1494,3389 to 195.40.0.0/16
01200 allow tcp from 195.40.13.130 to 195.40.12.66 3389 in recv fxp0
01300 allow tcp from any to any established
01400 allow ip from 195.40.12.66 to any out xmit fxp0
01500 allow tcp from 192.168.0.10 to any 9093
01600 allow tcp from any 9093 to 192.168.0.10
01700 allow tcp from 192.168.0.11 to any 9093
01800 allow tcp from any 9093 to 192.168.0.11
01900 allow tcp from 192.168.0.12 to any 9093
02000 allow tcp from any 9093 to 192.168.0.12
02100 allow tcp from 192.168.0.13 to any 9093
02200 allow tcp from any 9093 to 192.168.0.13
02300 allow tcp from 192.168.0.14 to any 9093
02400 allow tcp from any 9093 to 192.168.0.14
02500 allow tcp from 192.168.0.2 to any 21,22
02600 allow tcp from any 21,22 to 192.168.0.2
02700 allow udp from any to any 53 via fxp0
02800 allow udp from any 53 to any via fxp0
02900 allow udp from 129.132.2.21 123 to 195.40.12.66 via fxp0
03000 allow tcp from any to any 25 via fxp0
03100 allow tcp from any 25 to any via fxp0
03200 allow tcp from any to any 110 via fxp0
03300 allow tcp from any 110 to any via fxp0
03400 deny tcp from any to any 20,21,22,23,3128 in recv fxp0
03500 deny tcp from any to any 20,21,22,23,80,443 in recv fxp1
03600 deny tcp from any to any 8000-8104 in recv fxp1
03700 allow ip from any to any via fxp1
03800 allow ip from any to any via ppp1
03900 allow ip from any to any via ppp0
04000 allow icmp from any to 195.40.12.66 in recv fxp0 icmptype 0,3,4,8,11,12
04100 allow icmp from any to 192.168.0.0/24 in recv fxp0 icmptype 0,3,4,8,11,12
04200 allow icmp from 195.40.12.66 to any out xmit fxp0 icmptype 3,8,12
04300 allow icmp from 195.40.12.66 to any out xmit fxp0 frag
04400 deny log logamount 5000 ip from any to any via fxp0
04500 deny log logamount 5000 ip from any to any
65535 deny ip from any to any

В скриптах я ничего не сохранял.

Последний раз редактировалось jin; 03.07.2006 в 06:48..
  Ответить с цитированием Вверх
Старый 03.07.2006, 10:43   #6
unn
Неактивный пользователь
 
Регистрация: 22.01.2006
Сообщений: 3
Репутация: 7
По умолчанию Re: Help! Ограничение траффика во FreeBSD 4.1

Цитата:
Сообщение от jin
Тогда ещё один вопрос: добавляю два правила в ipfw с целью сделать открытыми порты 4662, 4672, 4661 для использования eDonkey (eMule).
ipfw add 580 allow tcp from any to 192.168.0.7 4662,4672
ipfw add 590 allow tcp from 192.168.0.7 to any 4661
ipfw list показывает созданные правила.
add 580 и 590 - т.к. правила для 192.168.0.7 уже созданы (номер 600 и 700).
Но эффект от этого нулевой.
А при перезагрузке сервера созданые мною правила изчезают. Почему так происходит?

Есть такая утиль в FreeBSD (да и во многих других *nix ОС она есть) sysctl. С помощью этой программы можно подкрутить многие параметры работы системы.

Для начала немного полезных манов ;) : man sysctl, man sysctl.conf, man rc.conf. И полезных команд - sysctl -a -d | grep .ip.fw. - вывод сисконтролов отвечающих за работу фаервола с описаниями, sysctl -a | grep .ip.fw. - тоже самое, но с их значениями в данный момент.

Есть такой сисконтрол - net.inet.ip.fw.one_pass - он отвечает за то, каким образом фаервол будет обрабатывать правила пропускания трафика через шейпер (т.е. через пайпы). Если этот сисконтрол установлен в 1, то правило перенаправляющее трафик в пайп будет считатся завершающим - пакет сразу после него будет выпущен на волю. Если же сисконтрол установлен в 0, то после прохода правила с пайпом пакет будет пущен дальше по цепочке правил (т.е. до ближайшего deny/allow).

Теперь как управлять сисконтролами и естественно как сохранить плоды своих трудов ;) . В каталоге /etc есть файл sysctl.conf именно в него надо добавить управляющие строки в виде строка=значение ( net.inet.ip.fw.one_pass=0 ), тогда при следующей перезагрузке значения сисконтролов будут восстановлены.
Чтобы поменять что-то на лету необходимо ввести в рутовой конслоли sysctl -w net.inet.ip.fw.one_pass=0.

И наконец касаемо правил фаервола. В каталоге /etc создаем (естественно будучи рутом) файл который содержащий правила фаервола с любым названием ( к примеру rc.ipfw ) и делаем его исполняемым:
root@gw:~# cd /etc/ ; touch rc.ipfw ; chmod +x rc.ipfw

После этого заполняем его правилами фаервола в любимом редакторе. Если на целевой системе установлен командный шелл bash, то для удобства начать заполнение файла можно со строк:

#!/usr/local/bin/bash
fwcmd="/sbin/ipfw -q"
${fwcmd} -f flush
${fwcmd} -f pipe flush

Соответственно правила надо будет писать в виде:
${fwcmd} add 100 allow ip from any to any via lo0
${fwcmd} add 200 deny ip from any to 127.0.0.0/8
${fwcmd} add 200 deny ip from 127.0.0.0/8 to any
.
.
<правила по вкусу>
.
.
И завершить всю конструкцию правил можно так:

${fwcmd} add 65500 allow ip from any to any
${fwcmd} -f zero

Теперь как вызвать составленый нами скрипт на запуск при загрузке системы. Я не зря упоминал про man rc.conf - в этом мануале можно найти упоминание про
firewall_script
(str) This variable specifies the full path to the firewall
script to run. The default is /etc/rc.firewall.
Читаем, втыкаем. Воткнув редактируем /etc/rc.conf с целью довавить в него строку firewall_script="/etc/rc.ipfw".

На этом познавательная лекция закончена. ;)
unn вне форума
 
Ответить с цитированием Вверх
Эти 2 пользователя(ей) сказали cпасибо за это полезное сообщение:
Старый 04.07.2006, 06:54   #7
jin
Guest
 
Сообщений: n/a
По умолчанию Re: Help! Ограничение траффика во FreeBSD 4.1

unn, sysctl -a -d | grep .ip.fw не исполняется. Сисконтрол net.inet.ip.fw.one_pass найти не могу. Но с этим я разберусь.
Вопрос: можно внести правило в ipfw так, чтобы оно сразу начало работать и не надо было ничего перезагружать? Посмотрите в ответе #5 мои правила ipfw и подскажите пожалуйста, какие изменения надо внести, чтобы порты 4662, 4672 были открыты извне для 192.168.0.7.
  Ответить с цитированием Вверх
Старый 04.07.2006, 12:16   #8
unn
Неактивный пользователь
 
Регистрация: 22.01.2006
Сообщений: 3
Репутация: 7
По умолчанию Re: Help! Ограничение траффика во FreeBSD 4.1

Цитата:
Сообщение от jin
unn, sysctl -a -d | grep .ip.fw не исполняется. Сисконтрол net.inet.ip.fw.one_pass найти не могу. Но с этим я разберусь.
Вопрос: можно внести правило в ipfw так, чтобы оно сразу начало работать и не надо было ничего перезагружать? Посмотрите в ответе #5 мои правила ipfw и подскажите пожалуйста, какие изменения надо внести, чтобы порты 4662, 4672 были открыты извне для 192.168.0.7.

Работа правил ipfw начинается сразу после выполнения команды ipfw.

Порты 4662 и иные "козлиные порты" никогда не будут открыты извне для закрытых приватных диапазонов IP-адресов (RFC1918) - т.к. эти адреса не маршрутизируются в сети интернет. Чтобы пропустить необходимый трафик надо поместить за этим правилом 00600 allow tcp from 192.168.0.7 to any 20,21,22,23,80,443,4000,3389,4662 следующее:
00601 allow tcp from any 20-23,80,443,4000,3389,4662 to 192.168.0.7.

Но еще лучше будет разделить правила фильтрования трафика и нат по разным интерфейсам добавлением via fxp1 ко всем правилам фильтрации по портам - соответственно нат (divert) оставить на fxp0 ( via fxp0).

Также рекомендую фильтровать на всех интерфейсах сети 0.0.0.0/8,127.0.0.0/8,10.0.0.0/8,169.254.0.0/16,204.152.64.0/23,224.0.0.0/3 и не пропускать через внешний интерфейс tcp/udp трафик по портам 135,137-139,445 в обоих направлениях. Эти правила необходимо поместить до divert.

Да, ещё не надо светить 500 правилом свой внешний адрес ;) - заменяй его на * при постах в публичных местах ;).

Последний раз редактировалось unn; 04.07.2006 в 12:19..
unn вне форума
 
Ответить с цитированием Вверх
Эти 2 пользователя(ей) сказали cпасибо за это полезное сообщение:
Старый 05.07.2006, 07:23   #9
jin
Guest
 
Сообщений: n/a
По умолчанию Re: Help! Ограничение траффика во FreeBSD 4.1

Добавлено через 38 секунд
Цитата:
Сообщение от unn
Работа правил ipfw начинается сразу после выполнения команды ipfw.

Порты 4662 и иные "козлиные порты" никогда не будут открыты извне для закрытых приватных диапазонов IP-адресов (RFC1918) - т.к. эти адреса не маршрутизируются в сети интернет. Чтобы пропустить необходимый трафик надо поместить за этим правилом 00600 allow tcp from 192.168.0.7 to any 20,21,22,23,80,443,4000,3389,4662 следующее:
00601 allow tcp from any 20-23,80,443,4000,3389,4662 to 192.168.0.7.

Но еще лучше будет разделить правила фильтрования трафика и нат по разным интерфейсам добавлением via fxp1 ко всем правилам фильтрации по портам - соответственно нат (divert) оставить на fxp0 ( via fxp0).

Также рекомендую фильтровать на всех интерфейсах сети 0.0.0.0/8,127.0.0.0/8,10.0.0.0/8,169.254.0.0/16,204.152.64.0/23,224.0.0.0/3 и не пропускать через внешний интерфейс tcp/udp трафик по портам 135,137-139,445 в обоих направлениях. Эти правила необходимо поместить до divert.

Да, ещё не надо светить 500 правилом свой внешний адрес ;) - заменяй его на * при постах в публичных местах ;).

1) Чем правило 00601, которое ты порекомендовал, отличается от правила 00700 в моём ipfw?
2) А показанный здесь внешний адрес - липовый ;)

Последний раз редактировалось jin; 05.07.2006 в 07:25.. Причина: Добавлено сообщение
  Ответить с цитированием Вверх
Старый 05.07.2006, 09:37   #10
Shardin
Постоялец
 
Пол:Мужской
Регистрация: 09.09.2005
Сообщений: 272
Репутация: 71
По умолчанию Re: Help! Ограничение траффика во FreeBSD 4.1

Цитата:
Сообщение от jin
unn, sysctl -a -d | grep .ip.fw не исполняется. Сисконтрол net.inet.ip.fw.one_pass найти не могу. Но с этим я разберусь.
Вопрос: можно внести правило в ipfw так, чтобы оно сразу начало работать и не надо было ничего перезагружать? Посмотрите в ответе #5 мои правила ipfw и подскажите пожалуйста, какие изменения надо внести, чтобы порты 4662, 4672 были открыты извне для 192.168.0.7.

т.е. надо чтобы снаружи они залетали внутрь на ip 192.168.0.7, то тогд надо что-то типа
ipfw add fwd 192.168.0.7:4662 tcp from any to ТвойВнешнийIP 4662
все входящие пакеты на порт 4662 будут пересылаться на внутренний IP

Последний раз редактировалось Shardin; 05.07.2006 в 09:48..
Shardin вне форума
 
Ответить с цитированием Вверх
Старый 05.07.2006, 10:07   #11
Wombat
Неактивный пользователь
 
Аватар для Wombat
 
Пол:Мужской
Регистрация: 09.10.2005
Адрес: Ставрополь
Сообщений: 52
Репутация: 81
По умолчанию Re: Help! Ограничение траффика во FreeBSD 4.1

Доброго времени суток!
Цитата:
Сообщение от Shardin
т.е. надо чтобы снаружи они залетали внутрь на ip 192.168.0.7, то тогд надо что-то типа
ipfw add fwd 192.168.0.7:4662 tcp from any to ТвойВнешнийIP 4662
все входящие пакеты на порт 4662 будут пересылаться на внутренний IP

Не будут.
Смотри в сторону опции redirect_port для запуска natd.
Wombat вне форума
 
Ответить с цитированием Вверх
Старый 07.07.2006, 04:58   #12
jin
Guest
 
Сообщений: n/a
По умолчанию Re: Help! Ограничение траффика во FreeBSD 4.1

Цитата:
Сообщение от Wombat
Доброго времени суток!

Не будут.
Смотри в сторону опции redirect_port для запуска natd.

Здорово сказал. Почему не будут?
Про redirect_port поподробнее, если можно.

Добавлено через 16 минут 13 секунд
Результат применения redirect_port:
root@mail# natd -redirect_port tcp 192.168.0.7:4662 4662
natd: redirect_port: missing public port

Последний раз редактировалось jin; 07.07.2006 в 05:14.. Причина: Добавлено сообщение
  Ответить с цитированием Вверх
Старый 07.07.2006, 13:55   #13
Wombat
Неактивный пользователь
 
Аватар для Wombat
 
Пол:Мужской
Регистрация: 09.10.2005
Адрес: Ставрополь
Сообщений: 52
Репутация: 81
По умолчанию Re: Help! Ограничение траффика во FreeBSD 4.1

Доброго времени суток!
Цитата:
Сообщение от jin
Здорово сказал. Почему не будут?

Самое простое объяснение - пропиши правила и посмотри.
Цитата:
Сообщение от jin
Про redirect_port поподробнее, если можно.

man natd
Цитата:
Сообщение от jin
Результат применения redirect_port:
root@mail# natd -redirect_port tcp 192.168.0.7:4662 4662
natd: redirect_port: missing public port

Сначала прибиваем процесс ната и еще вы забыли в команде указать на каком интерфейсе вы это делает (опция -n).
А в дальнейшем прописать в rc.conf в опциях natd_flags.
Удачи.
Wombat вне форума
 
Ответить с цитированием Вверх
Ответ


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ограничение траффика под линуксом OlegRom UNIX, Linux, MacOs для PC и другие ОС 19 29.03.2010 12:24
Счётчик траффика smartm Архив 2 30.11.2008 10:58
Контроль траффика mrviktor Windows 200x Server 9 21.10.2008 18:17
Учет траффика UDAV Скорая помощь 5 23.09.2008 12:11
Шефпинг траффика apis Хакинг в глобальной сети WWW 1 02.04.2008 20:07

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 04:06. Часовой пояс GMT +3.


Copyright ©2004 - 2026 NoWa.cc

Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2026, vBulletin Solutions, Inc. Перевод: zCarot
Время генерации страницы 0.07243 секунды с 11 запросами