![]() |
|
| Правила Форума редакция от 22.06.2020 |
|
|||||||
|
|
Окажите посильную поддержку, мы очень надеемся на вас. Реквизиты для переводов ниже. |
|
![]() |
|
|
Опции темы | Опции просмотра |
Language
|
|
|
#1
|
|
Guest
Сообщений: n/a
|
Скажу сразу - в теме FreeBSD разбираюсь слабо. Есть сервер на FreeBSD 4.10. Он является шлюзом для доступа в интернет. Одним концом он смотрит в интернет (через DSL модем), другим концом подключен к свичу. В локальной сети один компьютер с IP напр. 192.168.0.1 имеет доступ в инет со скоростью около 200 Кбит/с. Остальные IP адреса имеют доступ со скоростью меньшей (примерно 50 Кбит/с.
) Вопрос: где это настроено и как этим управлять? |
|
| Реклама: |
|
|
#2
|
|
Неактивный пользователь
Регистрация: 22.01.2006
Сообщений: 3
Репутация: 7
|
Чтобы этим управлять надо понимать чем конкретно реализуются эти функции - 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 получил ту скорость которую надо. |
|
|
|
| Эти 2 пользователя(ей) сказали cпасибо за это полезное сообщение: |
|
|
#3
|
|
Guest
Сообщений: n/a
|
Тогда ещё один вопрос: добавляю два правила в 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). Но эффект от этого нулевой. А при перезагрузке сервера созданые мною правила изчезают. Почему так происходит? |
|
|
|
#4
|
||||||||||||||||||||||||||||||||||||||||||||||
|
Постоялец
![]() ![]() Пол:
Регистрация: 09.09.2005
Сообщений: 272
Репутация: 71
|
Жаль что у меня миелафон сломался ![]() Скинь сюда все правила, тогда можно будет сказать что и почему у тебя не работает.
А ты их в стартовых скриптах сохранял? (типа /etc/rc.firewall) |
||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
|
|
#5
|
|
Guest
Сообщений: n/a
|
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.. |
|
|
|
#6
|
|||||||||||||||||||||||
|
Неактивный пользователь
Регистрация: 22.01.2006
Сообщений: 3
Репутация: 7
|
Есть такая утиль в 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". На этом познавательная лекция закончена. ;) |
|||||||||||||||||||||||
|
|
|
| Эти 2 пользователя(ей) сказали cпасибо за это полезное сообщение: |
|
|
#7
|
|
Guest
Сообщений: n/a
|
unn, sysctl -a -d | grep .ip.fw не исполняется. Сисконтрол net.inet.ip.fw.one_pass найти не могу. Но с этим я разберусь.
Вопрос: можно внести правило в ipfw так, чтобы оно сразу начало работать и не надо было ничего перезагружать? Посмотрите в ответе #5 мои правила ipfw и подскажите пожалуйста, какие изменения надо внести, чтобы порты 4662, 4672 были открыты извне для 192.168.0.7. |
|
|
|
#8
|
|||||||||||||||||||||||
|
Неактивный пользователь
Регистрация: 22.01.2006
Сообщений: 3
Репутация: 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.. |
|||||||||||||||||||||||
|
|
|
| Эти 2 пользователя(ей) сказали cпасибо за это полезное сообщение: |
|
|
#9
|
|||||||||||||||||||||||
|
Guest
Сообщений: n/a
|
Добавлено через 38 секунд
1) Чем правило 00601, которое ты порекомендовал, отличается от правила 00700 в моём ipfw? 2) А показанный здесь внешний адрес - липовый ;) Последний раз редактировалось jin; 05.07.2006 в 07:25.. Причина: Добавлено сообщение |
|||||||||||||||||||||||
|
|
|
#10
|
|||||||||||||||||||||||
|
Постоялец
![]() ![]() Пол:
Регистрация: 09.09.2005
Сообщений: 272
Репутация: 71
|
т.е. надо чтобы снаружи они залетали внутрь на 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.. |
|||||||||||||||||||||||
|
|
|
|
|
#11
|
|||||||||||||||||||||||
|
Доброго времени суток!
Не будут. Смотри в сторону опции redirect_port для запуска natd. |
||||||||||||||||||||||||
|
|
|
|
|
#12
|
|||||||||||||||||||||||
|
Guest
Сообщений: n/a
|
Здорово сказал. Почему не будут? Про 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.. Причина: Добавлено сообщение |
|||||||||||||||||||||||
|
|
|
#13
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Доброго времени суток!
Самое простое объяснение - пропиши правила и посмотри.
man natd
Сначала прибиваем процесс ната и еще вы забыли в команде указать на каком интерфейсе вы это делает (опция -n). А в дальнейшем прописать в rc.conf в опциях natd_flags. Удачи. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
![]() |
Похожие темы
|
||||
| Тема | Автор | Раздел | Ответов | Последнее сообщение |
| Ограничение траффика под линуксом | 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 |
|
|