Bandwidth Limiting HOWTO

Ограничение пропускной способности HOWTO

Tomasz Chmielewski

tch@metalab.unc.edu 

Перевод на русский: © Иван Песин.

ipesin@post.Lviv.UA

Редакции документа
Редакция 0.9 2001-11-20 Выполнена: tc

Этот документ описывает настройку Linux сервера для ограничения пропускной способности (скорости) канала. Кроме того, рассматриваются вопросы эффективного использования Internet-каналов.


Содержание
1. Введение
1.1. Новые версии этого документа
1.2. Отказ
1.3. Авторское право и лицензия
1.4. Отзывы и исправления
1.5. Благодарности
2. Перед тем, как начать
2.1. Что нам нужно
2.2. Как это работает?
3. Установка и настройка необходимого программного обеспечения
3.1. Установка Squid с функцией пулов задержки
3.2. Настройка Squid с использованием пулов задержки
3.3. Решение оставшихся проблем
4. Применение CBQ для других протоколов
4.1. FTP
4.2. Napster, Realaudio, Windows Media и другие продукты
5. Часто задаваемые вопросы
5.1. Возможно ли ограничение скорости на основании адреса клиента с помощью пулов задержки?
5.2. Как заставить работать wget через Squid?
5.3. Я установил свой SOCKS сервер на порте 1080 и теперь не могу подключиться к серверам IRC.
5.4. Мне не нравится, когда Kazaa и Audiogalaxy занимают весь мой канал.
5.5. Мой почтовый сервер, при отправлении почты занимает весь канал.
5.6. Могу ли я ограничить мои FTP и WWW сервера способом, указанным в предыдущем примере?
5.7. Возможно ли ограничение скорости на основании адреса клиента с помощью скрипта cbq.init?
5.8. При запуске cbq.init, выдается сообщение, об отсутствии sch_cbq.
5.9. Иногда CBQ не работает без видимой причины.
5.10. Пулы задержки меня не устраивают; почему я не могу загружать что-либо на полной скорости, если сеть использую только я?
5.11. Мои загрузки обрываются в 23:59 из-за строки "acl day time 09:00-23:59" в файле squid.conf. Можно ли с этим что-то сделать?
5.12. Протоколы (логи) Squid растут очень быстро, что я могу с этим сделать?
5.13. CBQ меня не устраивает; почему я не могу загружать что-либо на полной скорости, если сеть использую только я?
6. Разное
6.1. Полезные ресурсы

1. Введение

Назначение этого руководства - продемонстрировать решения направленные на ограничение входящего трафика, что позволяет более эффективно использовать Internet-канал.

Особенно это полезно при медленном доступе к Internet или когда пользователи ЛВС загружают тонны mp3 файлов, образы новых дистрибутивов Linux и т.п.


1.1. Новые версии этого документа

Последняя версия этого документа доступна на сайте Linux Documentation Project (LDP) http://www.linuxdoc.org.


1.2. Отказ

Ни автор, ни лица, так или иначе распространяющие этот HOWTO, не несут никакой ответственности за физические, финансовые, моральные или какие-либо другие убытки, нанесенные в результате использования советов и рекомендаций, приведенных в этом документе.


1.3. Авторское право и лицензия

Авторское право на этот документ принадлежит Томашу Чмелевски (Tomasz Chmielewski), 2001. Публикуется в соответствии с лицензией GNU Free Documentation License, которая включена, как ссылка.


1.4. Отзывы и исправления

Если у Вас есть вопросы или комментарии к этому документу, присылайте их Томашу Чмелевски - tch@metalab.unc.edu. Я буду рад, как советам, так и критике. Если Вы обнаружите ошибку или опечатку в этом документе (а Вы их найдете в большом количестве, так как английский - не мой родной язык), дайте мне знать и я смогу исправить ее в следующей версии. Спасибо.


1.5. Благодарности

Я хотел бы поблагодарить Ами М. Эчеверри (Ami M. Echeverri) lula@pollywog.com, помогшей мне сконвертировать HOWTO в формат SGML и исправить некоторые ошибки. Так же хочу поблагодарить Ричарда Просовича (Ryszard Prosowicz) prosowicz@poczta.fm за полезные советы.


2. Перед тем, как начать

Представим следующую ситуацию:

  • У нас есть модемный канал, скоростью 115,2 кбит/с (115,2/10 = 11,5 кбайт/с). Примечание: при соединении сетевых карт (ethernet) мы должны были бы разделить 115,2 на 8; при модемном соединении (рpp), мы делим на 10 из-за стартового и стопового битов (8 + 1 + 1 = 10).

  • У нас имеется несколько машин в локальной сети, пользователи которых постоянно загружают большие файлы из Internet.

  • Мы хотим, что бы web-страницы открывались быстро вне зависимости от количества загружаемых файлов.

  • Наш Internet интерфейс - ppp0.

  • Наш локальный интерфейс - eth0.

  • Наш адрес ЛВС - 192.168.1.0/24


2.1. Что нам нужно

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

Для того, что бы заработали ограничения, нам нужен, как минимум, прокси-сервер Squid; если же мы хотим все настроить достаточно тонко, то нам придется ознакомиться еще и с программами ipchains или iptables, и алгоритмом CBQ (Class-Based Queue - Прим. пер.).

В целях тестирования настроек, установим программу IPTraf.


2.2. Как это работает?

Наверное, Squid -- самый мощный HTTP прокси-сервер, доступный для Linux платформ. Он может помочь нам сохранить пропускную способность нашего канала двумя своими функциями:

  • Первая функция, которая является основной характеристикой прокси-серверов -- сохранение загруженных web-страниц, картинок и других объектов в памяти и на диске. Так, если два человека обратятся к одной и той же странице, она не будет повторно загружена из Internet, а восстановлена из локального кэша.

  • Кроме обычного кэширования, Squid обладает функцией, которая называется "пулы задержки" (delay pools). Благодаря этим пулам, становится возможным ограничивать трафик, при помощи так называемых "магических слов", которые присутствуют в URL. Например, магическим словом может быть '.mp3', '.exe' или '.avi'. Любая отличительная часть URL (такая как .avi) может быть определена как магическое слово. (Безусловно, это не единственный критерий, по которому можно ограничить трафик. - Прим.пер.)

Пользуясь Squid, мы можем настроить его таким образом, что загрузка файлов определенного типа будет происходить на указанной скорости (в нашем примере это будет около 5 кбайт/c). Если даже несколько наших локальных пользователей будут выкачивать файлы одновременно, то все равно на них всех будет выделено 5 кбайт/c, а остальная пропускная способность будет использоваться для просмотра web-страниц, почты, новостей, irc, и т.п.

Конечно, Internet используется не только для загрузки файлов по протоколам http и ftp. Позже мы рассмотрим вопрос об ограничении трафика для Napster, Realaudio и других протоколов.


3. Установка и настройка необходимого программного обеспечения

Теперь, я объясню, как установить необходимые программы, для ограничения и тестирования пропускной способности.


3.1. Установка Squid с функцией пулов задержки

Как я уже отмечал ранее, Squid имеет функцию, которая называется "пулы задержки". Она позволяет контролировать скорость загрузки информации. К сожалению, в большинстве дистрибутивов, Squid поставляется без этой функции (Это несколько устаревшая информация. Основные современные дистрибутивы поставляют Squid с включенной функцией пулов задержки. - Прим.пер.).

Потому, если у Вас уже установлен Squid, я буду вынужден разочаровать Вас: необходимо его удалить. Будем устанавливать его еще раз, но уже с функцией пулов задержки. Ниже я объясню, как ее включить.

  1. Что бы обеспечить максимальную производительность Squid, лучше выделить отдельный раздел для кэша. Он будет размещаться в каталоге /cache/. Его размер должен быть около 300 МБайт, в зависимости от наших нужд.

    Если вы не знаете, как создавать отдельный раздел, можно разместить каталог /cache/ на главном разделе, но производительность Squid немного понизится.

  2. Создаем пользователя 'squid':

    # useradd -d /cache/ -r -s /dev/null squid >/dev/null 2>&1

    (Должен заметить, что это очень плохая команда, на мой взгляд. Вы не сможете увидеть ни результат ее выполнения, ни сообщения об ошибках в случае их присутствия. Рекомендовал бы использовать команду:
    # useradd -d /cache/ -r -s /dev/null squid
    Прим. пер.)

    Никто не может войти в систему под пользователем squid, включая root.

  3. Загружаем исходные тексты Squid с сервера http://www.squid-cache.org

    Когда я писал этот HOWTO, последней версией был Squid 2.4 stable 1:

    http://www.squid-cache.org/Versions/v2/2.4/squid-2.4.STABLE1-src.tar.gz
    (на данный момент, последней версией является Squid 2.5.STABLE1 - Прим.пер.)

  4. Разархивируем все в каталоге /var/tmp:

  5. # tar xzpf squid-2.4.STABLE1-src.tar.gz

  6. Компилируем (с поддержкой пулов задержки. - Прим.пер.) и устанавливаем Squid:

    # ./configure --prefix=/opt/squid --exec-prefix=/opt/squid --enable-delay-pools --enable-cache-digests --enable-poll --disable-ident-lookups --enable-truncate --enable-removal-policies

    # make all

    # make install


3.2. Настройка Squid для использования пулов задержки

  1. Настраиваем наш файл squid.conf (расположенный в каталоге /opt/squid/etc/squid.conf):

    #squid.conf
    #Каждый ключ в этом файле очень подробно описан в оригинальном 
    #файле squid.conf #и по адресу http://www.visolve.com/squidman/Configuration%20Guide.html # #Порты, по которым будет слушать Squid. http_port 8080 icp_port 3130 #Файлы в каталогах cgi-bins кэшироваться не будут. acl QUERY urlpath_regex cgi-bin \? no_cache deny QUERY #Количество памяти, которую будет использовать Squid.
    #Хотя он будет использовать гораздо больше. # (Количество памяти, занимаемой Squid, расчитывается по формуле cache_mem * 3 - Прим. пер.). cache_mem 16 MB #250 означает, что Squid будет использовать
    #250 МБ дискового пространства. cache_dir ufs /cache 250 16 256 #Место, где будут расположены файлы логов. cache_log /var/log/squid/cache.log cache_access_log /var/log/squid/access.log cache_store_log /var/log/squid/store.log cache_swap_log /var/log/squid/swap.log #Сколько версий логов оставлять до их удаления. #Обратитесь к ЧаВО за более подробной информацией. logfile_rotate 10 redirect_rewrites_host_header off cache_replacement_policy GDSF acl localnet src 192.168.1.0/255.255.255.0 acl localhost src 127.0.0.1/255.255.255.255 acl Safe_ports port 80 443 210 119 70 20 21 1025-65535 acl CONNECT method CONNECT acl all src 0.0.0.0/0.0.0.0 http_access allow localnet http_access allow localhost http_access deny !Safe_ports http_access deny CONNECT http_access deny all maximum_object_size 3000 KB store_avg_object_size 50 KB #Эти установки нужны, если вы хотите работать в прозрачном режиме. #Прозрачный прокси означает, что в общем, Вам не придется его
    #настраивать в клиентских браузерах. Однако это тоже имеет свои минусы. #Если Вы просто оставите эти строки незакомментированными, это ни #на чем не отразится httpd_accel_host virtual httpd_accel_port 80 httpd_accel_with_proxy on httpd_accel_uses_host_header on #Всем внешним серверам будет казаться, что наши локальные
    #пользователи используют Mozilla на Linux. :) anonymize_headers deny User-Agent #Поместите все в одну строку: fake_user_agent Mozilla/5.0 (X11; U; Linux i686; en-US; rv:0.9.6+)
    Gecko/20011122 #Что бы сделать наше соединение еще более быстрым, поместите #две строки, аналогичные приведенной ниже. Они будут указывать #на родительский прокси-сервер для нашего Squid. Не забудьте изменить #сервер, на тот, который ближе к Вам! #Для измерений используйте ping, traceroute и т.п. #Убедитесь, что http и icp порты указаны верно. #Раскомментируйте строки, начинающиеся с "cache_peer", если необходимо. #Это прокси, который Вы собираетесь использовать для всех запросов... #cache_peer w3cache.icm.edu.pl parent 8080 3130 no-digest default #...кроме запросов к адресам, начинающимся с "!".
    #Неплохая идея не использовать родительский прокси для: #cache_peer_domain w3cache.icm.edu.pl !.pl !7thguard.net !192.168.1.1 #Это полезно, когда мы хотим использовать менеджер кэша. #Скопируйте cachemgr.cgi в каталог cgi-bin Вашего www сервера. #Теперь к нему можно обратится через браузер, введя адрес #http://your-web-server/cgi-bin/cachemgr.cgi cache_mgr your@email cachemgr_passwd secret_password all #Это имя пользователя и группы, от которых работает Squid. cache_effective_user squid cache_effective_group squid log_icp_queries off buffered_logs on #####Пулы задержки #Эта часть, является самой важной для ограничения входящего
    #трафика при помощи Squid #Для более детального описания обратитесь к файлу squid.conf, или
    #к документации по адресу http://www.squid-cache.org #Мы не хотим ограничивать загрузки внутри нашей ЛВС. acl magic_words1 url_regex -i 192.168 #Мы хотим ограничить загрузки файлов следующих типов #Поместите все в одну строку: acl magic_words2 url_regex -i ftp .exe .mp3 .vqf .tar.gz .gz .rpm
    .zip .rar .avi .mpeg .mpe .mpg .qt .ram .rm .iso .raw .wav .mov #Мы не блокируем .html, .gif, .jpg и аналогичные файлы, поскольку #обычно они не занимают значительной части полосы пропускания #Мы хотим ограничить скорость только днем и разрешить #полную скорость ночью #Внимание! acl приведенный ниже, скорее всего оборвет Ваши #загрузки в 23:59. Прочтите раздел FAQ этого документа, если
    #Вы хотите избежать этого. acl day time 09:00-23:59 #Определяем два пула задержки #Обратитесь к документации Squid по вопросам #с delay_pools и delay_class. delay_pools 2 #Первый пул #Мы не хотим ограничивать локальный трафик. #Существует три класса пулов; мы же будем работать только со #вторым. Первый пул (1) второго класса (2). delay_class 1 2 #-1/-1 означает, что ограничений нет. delay_parameters 1 -1/-1 -1/-1 #magic_words1: 192.168 мы определили раньше delay_access 1 allow magic_words1 #Второй пул. #мы хотим ограничить скорость загрузки для файлов #упомянутых в magic_words2. #Второй пул (2) второго класса (2). delay_class 2 2 #Числа - это значения в байтах; #нужно помнить, что Squid не предполагает наличия #стартовых/стоповых битов #5000/150000 - значения для всей сети #5000/120000 - значения для одного IP-адреса #после загрузки 150 Кбайт, #(или даже в два или три раза большего количества) #скорость будет ограничена до 5000 байт в секунду. delay_parameters 2 5000/150000 5000/120000 #Мы установили day в 09:00-23:59 выше. delay_access 2 allow day delay_access 2 deny !day delay_access 2 allow magic_words2 #EOF

    После настройки, нам нужно убедится, что каталоги /opt/squid и /cache вместе со своим содержимым принадлежат пользователю squid.

    # mkdir /var/log/squid/

    # chown squid:squid /var/log/squid/

    # chmod 770 /var/log/squid/

    # chown -R squid:squid /opt/squid/

    # chown -R squid:squid /cache/

    Теперь все готово к запуску Squid. Перед первым запуском нам необходимо создать каталоги кэша:

    # /opt/squid/bin/squid -z

    Теперь запускаем Squid и проверяем, все ли работает. Хорошая утилита для проверки - IPTraf; ее можно найти по адресу http://freshmeat.net. Убедитесь, что Вы установили верные значения для прокси-сервера в Вашем браузере (в нашем примере - 192.168.1.1, порт 8080):

    # /opt/squid/bin/squid

    Если все работает, добавляем строку /opt/squid/bin/squid в конец наших стартовых скриптов. Обычно это файл /etc/rc.d/rc.local.

    Другие полезные ключи Squid:

    # /opt/squid/bin/squid -k reconfigure (переконфигурирует Squid если в его файл настроек были внесены изменения)

    # /opt/squid/bin/squid -help :) очевидно

    Можете так же скопировать файл cachemgr.cgi в каталог cgi-bin Вашего WWW сервера, что бы иметь возможность работать с менеджером кэша (Cache Manager).


3.3. Решение оставшихся проблем

Мы установили Squid и настроили его с использованием пулов задержки. Держу пари, никто не хочет быть занесен в пулы задержки, особенно наши мудрые локальные пользователи. Наверняка они будут пробовать избежать ограничений, что бы загрузить любимые mp3 чуть быстрее (причиняя этим Вам головную боль).

Я полагаю, что Вы используете IP-маскарад локальной сети так, что пользователи могут пользоваться IRC, ICQ, e-mail и т.п. Все правильно, нам нужно лишь убедится, что пользователи при работе с web-страницами и ftp-серверами будут использовать пулы задержки.

Эти проблему решает использование программы ipchains (ядра Linux 2.2.x) или iptables (ядра Linux 2.4.x).

Кроме решений приведенных в разделе 3 автором, существует другой вариант -- создание недоверяющего брандмауера - Прим.пер.


3.3.1. Ядра Linux 2.2.x (ipchains)

Мы должны убедится, что никто не будет пытаться использовать не наш прокси сервер. Прокси сервера обычно работают по портам 3128 и 8080:

/sbin/ipchains -A input -s 192.168.1.1/24 -d ! 192.168.1.1 3128 -p TCP -j REJECT

/sbin/ipchains -A input -s 192.168.1.1/24 -d ! 192.168.1.1 8080 -p TCP -j REJECT

Так же мы должны быть уверены, что никто не будет иметь прямой доступ в Internet (IP-маскарад) :

/sbin/ipchains -A input -s 192.168.1.1/24 -d ! 192.168.1.1 80 -p TCP -j REDIRECT 8080

Если все работает, добавляем указанные строки в конец стартовых скриптов. Обычно, это файл /etc/rc.d/rc.local.

Может появиться мысль заблокировать ftp трафик (порты 20 и 21), что бы пользователи работали через Squid, но это плохая идея по крайней мере по двум причинам:

  • Squid - это http прокси с поддержкой ftp, а не настоящий ftp прокси сервер. Он умеет загружать файлы с ftp, он также умеет загружать файлы на некоторые ftp-сервера, но он не может удалить/переименовать файлы на удаленном ftp-сервере.

    Когда мы блокируем порты 20 и 21, мы теряем возможность удаления/переименования файлов на ftp-серверах.

  • В IE5.5 есть ошибка -- он не использует proxy-сервер для получения каталога ftp. Вместо этого он подключается напрямую, при помощи IP-маскарада.

    Когда мы блокируем порты 20 и 21, мы теряем возможность просматривать ftp-сервера при помощи IE5.5.

Потому мы будем ограничивать загрузки с ftp-серверов другими методами. С ними мы познакомимся в главе 4.


3.3.2. Ядра Linux 2.4.x (iptables)

Мы должны убедится, что никто не будет пытаться использовать не наш прокси сервер. Прокси сервера обычно работают по портам 3128 и 8080:

/sbin/iptables -A FORWARD -s 192.168.1.1/24 -d ! 192.168.1.1 --dport 3128 -p TCP -j DROP

/sbin/iptables -A FORWARD -s 192.168.1.1/24 -d ! 192.168.1.1 --dport 8080 -p TCP -j DROP

Так же мы должны быть уверены, что никто не будет иметь прямой доступ в Internet (IP-маскарад):

/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

Если все работает, добавляем указанные строки в конец стартовых скриптов. Обычно, это файл /etc/rc.d/rc.local.

Может появиться мысль заблокировать ftp трафик (порты 20 и 21), что бы пользователи работали через Squid, но это плохая идея по крайней мере по двум причинам:

  • Squid - это http прокси с поддержкой ftp, а не настоящий ftp прокси сервер. Он умеет загружать файлы с ftp, он также умеет загружать файлы на некоторые ftp-сервера, но он не может удалить/переименовать файлы на удаленном ftp-сервере.

    Когда мы блокируем порты 20 и 21, мы теряем возможность удаления/переименования файлов на ftp-серверах.

  • В IE5.5 есть ошибка -- он не использует proxy-сервер для получения каталога ftp. Вместо этого он подключается напрямую, при помощи IP-маскарада.

    Когда мы блокируем порты 20 и 21, мы теряем возможность просматривать ftp-сервера при помощи IE5.5.

Потому мы будем ограничивать загрузки с ftp-серверов другими методами. С ними мы познакомимся в главе 4.


4. Применение CBQ для других протоколов

Мы должны помнить, что наши локальные пользователи могут свести на нет достижения главы 3, если они используют Napster, Kazaa или Realaudio. Кроме того, как Вы помните, мы не блокировали ftp трафик в разделе 3.3.

Мы решим эту проблему другим способом -- не прямым ограничением скорости, а, скорее, непрямым. Если наш Internet интерфейс это ppp0, а локальный -- eth0, мы ограничим исходящий трафик на интерфейсе eth0, тем самым, ограничив входящий трафик на интерфейсе ppp0.

Что бы сделать это, ознакомимся с CBQ и скриптом cbq.init. Его можно получить по адресу ftp://ftp.equinox.gu.net/pub/linux/cbq/. Загрузите cbq.init-v0.6.2 и скопируйте его в каталог /etc/rc.d/.

Последней версией скрипта cbq.init является 0.7.1 - Прим.пер.

Вам так же будет нужен пакет iproute2. Он поставляется с каждым дистрибутивом Linux.

Теперь посмотрите в каталог /etc/sysconfig/cbq/. Там должен находится файл с примером, который предназначен для работы с cbq.init. Если его там нет, вероятно Ваше ядро скомпилировано без поддержки CBQ. В любом случае, создайте каталог, создайте там файл, приведенный ниже, и посмотрите, работает ли он.


4.1. FTP

В главе 3, мы не блокировали ftp трафик по двум причинам -- мы не смогли бы выполнять загрузку файлов на ftp-сервера, а пользователи IE5.5 не смогли бы просматривать ftp каталоги вообще. В общем, браузеры и ftp клиенты должны выполнять загрузку через наш Squid сервер, а загрузку/переименование/удаление файлов на ftp должно выполнятся через IP-маскарад.

Создадим файл cbq-10.ftp-network в каталоге /etc/sysconfig/cbq/ :

# touch /etc/sysconfig/cbq/cbq-10.ftp-network

Вставим в него такие строки:

DEVICE=eth0,10Mbit,1Mbit
RATE=15Kbit
WEIGHT=1Kbit
PRIO=5
RULE=:20,192.168.1.0/24
RULE=:21,192.168.1.0/24

Описание этих строк можно найти в файле cbq.init-v0.6.2 .

При запуске скрипта /etc/rc.d/cbq.init-v0.6.2, он читает конфигурацию, которая находится в каталоге /etc/sysconfig/cbq/:

# /etc/rc.d/cbq.init-v0.6.2 start

Если все работает, добавим строку /etc/rc.d/cbq.init-v0.6.2 start в конец стартовых скриптов. Обычно, это файл /etc/rc.d/rc.local.

Благодаря этой команде, Ваш сервер не будет слать ftp данные через eth0 быстрее чем 15кбит/с, а потому и загружать ftp данные из Internet быстрее чем 15кбит/с. Локальные пользователи убедятся, что более эффективно использовать прокси сервер для загрузок. В тоже время пользователи IE5.5 сохранят возможность просматривать ftp каталоги.

Есть и другая ошибка в IE5.5 - когда Вы кликаете правой клавишей мышки на файле в ftp каталоге, потом выбираете 'Копировать в папку', файл загружается не через прокси, а напрямую, потому он не попадает в пулы задержки Squid.


4.2. Napster, Realaudio, Windows Media и другие продукты

Идея та же, что и для ftp; мы просто указываем другой порт и другую скорость.

Создаем файл cbq-50.napster-network в каталоге /etc/sysconfig/cbq/ :

# touch /etc/sysconfig/cbq/cbq-50.napsterandlive

Добавляем такие строки:

DEVICE=eth0,10Mbit,1Mbit
RATE=35Kbit
WEIGHT=3Kbit
PRIO=5
#Windows Media Player.
RULE=:1755,192.168.1.0/24
#Real Player использует TCP порт 554, для UDP он использует разные порты,
#однако, UDP трафик не очень велик.
RULE=:554,192.168.1.0/24
RULE=:7070,192.169.1.0/24
#Napster использует порты 6699 и 6700, может быть еще какие-то?
RULE=:6699,192.168.1.0/24
RULE=:6700,192.168.1.0/24
#Audiogalaxy использует порты от 41000 до 41900,
#Так как их очень много, повторение 900 строк, естественно бессмысленно.
#Мы просто запретим порты 410031-41900 при помощи ipchains или iptables.
RULE=:41000,192.168.1.0/24
RULE=:41001,192.168.1.0/24
#продолжаем от 41001 до 41030
RULE=:41030,192.168.1.0/24
#Умные пользователи могут попробовать работать через SOCKS-сервер
#Потому стоит ограничить 1080-ый порт
RULE=:1080,192.168.1.0/24
#Далее добавляйте необходимые Вам порты
#RULE=:port,192.168.1.0/24

Не забываем запретить оставшиеся порты Audiogalaxy (41031-41900) при помощи ipchains (ядра 2.2.x) или iptables (ядра 2.4.x).

Ядра 2.2.x.

/sbin/ipchains -A input -s 192.168.1.1/24 -d ! 192.168.1.1 41031:41900 -p TCP -j REJECT

Ядра 2.4.x.

/sbin/iptables -A FORWARD -s 192.168.1.1/24 -d ! 192.168.1.1 --dport 41031:41900 -p TCP -j REJECT

Не забудьте добавить надлежащую строку в Ваши стартовые скрипты.


5. Часто задаваемые вопросы

5.1. Возможно ли ограничение скорости на основании адреса клиента с помощью пулов задержки?

Да. Посмотрите описания в файле squid.conf. Кроме того, обратитесь к документации по Squid на сайте http://www.squid-cache.org


5.2. Как заставить работать wget через Squid?

Просто. Создать файл .wgetrc и поместите его в Ваш каталог. Вставьте в него следующие строки:

HTTP_PROXY=192.168.1.1:8080
FTP_PROXY=192.168.1.1:8080

Вот и все!

Если Вы хотите установить такие настройки глобально для всех пользователей, обратитесь к руководству программы (man wget).


5.3.Я установил свой SOCKS сервер на порте 1080 и теперь не могу подключиться к серверам IRC

Возможны две проблемы:

Первая -- если Ваш SOCKS сервер общедоступен. Это означает, что кто угодно может использовать его с любой машины в мире. Это проблема безопасности и нужно проверить конфигурацию сервера. Обычно IRC сервера не разрешают соединения от общедоступных SOCKS серверов.

Если Вы уверены, что Ваш SOCKS сервер не общедоступен, а некоторые IRC сервера продолжают отказывать в соединении, то это может быть вызвано тем, что они проверяют запущен ли у клиента SOCKS сервер на порте 1080. В этом случае Вам придется перенастроить Ваш SOCKS сервер на другой порт. Кроме того, нужно будет перенастроить и все программы в ЛВС, использовавшие SOCKS сервер.


5.4. Мне не нравится когда Kazaa или Audiogalaxy занимают весь мой канал

Не смотря на то, что это может быть неприятным, это легко достижимо.

Создадим файл, например /etc/sysconfig/cbq/cbq-15.ppp.

Вставим следующие строки в него и Kazaa с Audiogalaxy будут загружать файлы не быстрее 15 кбит/с. Я полагаю, что внешний интерфейс -- это ppp0.

DEVICE=ppp0,115Kbit,11Kbit
RATE=15Kbit
WEIGHT=2Kbit
PRIO=5
TIME=01:00-07:59;110Kbit/11Kbit
RULE=,:21
RULE=,213.25.25.101
RULE=,:1214
RULE=,:41000
RULE=,:41001
#И так до 41030
RULE=,:41030

5.5. Мой почтовый сервер, при отправлении почты занимает весь канал.

Вы можете ограничить Ваш SMTP сервер (Postfix, Sendmail или другой) путем, аналогичным приведенному выше. Просто добавьте правило:

RULE=,:25

Более того, если у Вас есть SMTP сервер, можно заставить локальных пользователей использовать его, даже если они указали другой внешний сервер. Это организовывается тем же прозрачным путем, что и принудительная работа через Squid.


5.6. Могу ли я ограничить мои FTP и WWW сервера способом, указанным в предыдущем примере?

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

Ядра 2.2.x

/sbin/ipchains -A input -s 192.168.1.1/24 -d ! 192.168.1.1 25 -p TCP -j REDIRECT 25

Ядра 2.4.x

/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 25

Не забудьте добавить надлежащую строку в Ваши стартовые скрипты.


5.7. Возможно ли ограничение скорости на основании адреса клиента с помощью скрипта cbq.init?

Да. Посмотрите в скрипте cbq.init; там приведены примеры.


5.8. При запуске cbq.init выдается сообщение, об отсутсвии sch_cbq.

Вероятно, CBQ не присутствует в виде модуля в Вашей системе. Если он статически вкомпилирован в ядро, закомментируйте следующие строки в Вашем скрипте cbq.init-v0.6.2

### If you have cbq, tbf and u32 compiled into kernel, comment it out
#for module in sch_cbq sch_tbf sch_sfq sch_prio cls_u32; do
#        if ! modprobe $module; then
#               echo "**CBQ: could not load module $module"
#               exit
#        fi
#done

5.9. Иногда CBQ не работает без видимой причины.

Вообще говоря, такое происходить не должно. Иногда Вы можете наблюдать большой трафик, хотя Вы думаете, что заблокировали все порты, используемые Napster и Audiogalaxy. Однако, всегда найдется один порт для загрузки. Что бы обнаружить его используйте IPTraf. Поскольку таких портов может быть тысячи, это может оказаться сложной задачей. Для ее упрощения, Вы можете решить использовать свой SOCKS сервер -- Napster, Audiogalaxy и многие другие программы умеют работать с SOCKS прокси серверами. А управлять одним портом намного проще, чем тысячами (стандартный SOCKS сервер использует порт 1080, но если Вы установите свой SOCKS сервер, можно будет его изменить. Кроме того, можно запустить несколько экземпляров SOCKS, которые будут работать по разным портам). Не забудьте только закрыть все порты, оставив только те, которые действительно необходимы, вроде 25 и 110 (SMTP и POP3). Ссылку на Nylon socks сервер Вы найдете в конце этого HOWTO.


5.10.Пулы задержки меня не устраивают; почему я не могу загружать что-либо на полной скорости, если сеть использую только я?

К сожалению, с этим ничего нельзя сделать.

Единственная вещь, которую Вы можете сделать -- использовать демон cron для автоматической перенастройки, например в 1.00 отключать пулы задержки в Squid, а в 7.30 подключать их обратно.

Для того, что бы организовать это создайте два файла squid.conf-day и squid.conf-night в каталоге /opt/squid/etc/.

squid.conf-day -- это точная копия конфигурационного файла, который мы создали ранее.

squid.conf-night -- настройка, не содержащая пулов задержки.

Теперь отредактируем файл /etc/crontab и добавим в него такие строки:

#SQUID - изменение конфигурации -- день/ночь
01 9 * * * root /bin/cp -f /opt/squid/etc/squid.conf-day /opt/squid/etc/squid.conf; /opt/squid/bin/squid -k reconfigure
59 23 * * * root /bin/cp -f /opt/squid/etc/squid.conf-night /opt/squid/etc/squid.conf; /opt/squid/bin/squid -k reconfigure

5.11. Мои загрузки обрываются в 23:59 из-за строки "acl day time 09:00-23:59" в файле squid.conf. Можно ли с этим что-то сделать?

Можно избежать этого убрав этот acl из squid.conf, и строки "delay_access 2 allow day delay_access 2 deny !day".

После чего сделайте тоже самое методом, приведенном в предыдущем пункте.


5.12. Протоколы (логи) Squid растут очень быстро, что я могу с этим сделать?

Конечно, чем больше у Вас пользователей, тем больше -- иногда очень полезной -- информации протоколируется.

Лучшим способом борьбы с этим является logrotate, но Вам придется сделать один трюк, что бы он заработал со Squid: добавить соответствующие строки в конфигурацию cron и logrotate.

Строку в /etc/crontab:

#SQUID - logrotate
01 4 * * * root /opt/squid/bin/squid -k rotate; /usr/sbin/logrotate /etc/logrotate.conf; /bin/rm -f /var/log/squid/*.log.0

Мы запускаем logrotate ежедневно в 04:01, потому уберите остальные строки запуска logrotate, например из /etc/cron.daily/.

Строки в /etc/logrotate.d/syslog:

#SQUID logrotate - храним логи 40 дней
/var/log/squid/*.log.0 {
rotate 40
compress
daily
postrotate
/usr/bin/killall -HUP syslogd
endscript
}

5.13. CBQ меня не устраивает; почему я не могу загружать что-либо на полной скорости, если сеть использую только я?

Это возможно!

Есть два способа добиться этого.

Первый, простой, похож на решение, которое мы применили к Squid. Вставьте строку аналогичную приведенной в нужный файл конфигурации CBQ /etc/sysconfig/cbq/:

TIME=00:00-07:59;110Kbit/11Kbit

Можно задавать несколько параметров TIME в файле настройки CBQ.

Будте осторожны, в скрипте cbq.init-v0.6.2 есть ошибка (в новой версии скрипта она уже исправлена - Прим. пер.) -- она не позволяет утанавливать некоторые временные промежутки, например 00:00-08:00! Что бы проверить все ли работает нормально, запустите cbq.init-v0.6.2, а после введите:

/etc/rc.d/cbq.init-v0.6.2 timecheck

Ниже приведен пример, как должен выглядеть вывод команды:

[root@mangoo rc.d]# ./cbq.init start; ./cbq.init timecheck
**CBQ: 3:44: class 10 on eth0 changed rate (20Kbit -> 110Kbit)
**CBQ: 3:44: class 40 on ppp0 changed rate (15Kbit -> 110Kbit)

**CBQ: 3:44: class 50 on eth0 changed rate (35Kbit -> 110Kbit)

А вот пример настройки с ошибкой, вероятнее всего во втором файле в каталоге /etc/sysconfig/cbq/; второй файл, если считать с наименьшего номера в имени:

[root@mangoo rc.d]# ./cbq.init start; ./cbq.init timecheck
**CBQ: 3:54: class 10 on eth0 changed rate (20Kbit -> 110Kbit)

./cbq.init: 08: value too great for base (error token is "08")

Другой способ заставить CBQ быть более умным -- сложнее, он не зависит от времени. Об этом можно прочесть в Linux 2.4 Advanced Routing HOWTO, и поиграть с командой tc.

Новая версия скрипта cbq.init имеет расширенные возможности по уравлению трафиком. За детальным описанием обращайтесь к скрипту. - Прим.пер.


6. Разное

6.1. Полезные ресурсы

Кэширующий прокси сервер Squid

http://www.squid-cache.org

Руководство по настройке Squid 2.4 Stable 1

http://www.visolve.com/squidman/Configuration%20Guide.html

http://www.visolve.com/squidman/Delaypool%20parameters.htm

Часто задаваемые вопросы по Squid

http://www.squid-cache.org/Doc/FAQ/FAQ-19.html#ss19.8

Скрипт cbq-init

ftp://ftp.equinox.gu.net/pub/linux/cbq/

Linux 2.4 Advanced Routing HOWTO
(готовится к переводу. - Прим. пер.)

http://www.linuxdoc.org/HOWTO/Adv-Routing-HOWTO.html

Управление трафиком (на польском)

http://ceti.pl/~kravietz/cbq/

Securing and Optimizing Linux Red Hat Edition - A Hands on Guide

http://www.linuxdoc.org/guides.html

IPTraf

http://cebu.mozcom.com/riker/iptraf/

IPCHAINS

http://www.linuxdoc.org/HOWTO/IPCHAINS-HOWTO.html

socks прокси сервер Nylon

http://mesh.eecs.umich.edu/projects/nylon/

Индонезийский перевод этого HOWTO от Рахмата Рафюдина (Rahmat Rafiudin) mjl_id@yahoo.com

http://raf.unisba.ac.id/resources/BandwidthLimitingHOWTO/index.html



Наш баннер
Вы можете установить наш баннер на своем сайте или блоге, скопировав этот код:
RSS новости