Bandwidth Limiting HOWTOHOWTO по ограничению пропускной способности сетиTomasz Chmielewski
|
Редакции документа: | ||
---|---|---|
Редакция 0.9 | 2001-11-20 | Выполнена: tc |
Этот документ описывает настройку Linux-сервера для ограничения пропускной способности (скорости) канала доступа в Internet. Кроме того, рассматриваются вопросы эффективного совместного использования доступа в Internet.
Назначение этого руководства -- продемонстрировать способы ограничения входящего трафика, позволяющие более эффективно использовать разделяемый Internet-канал.
Это особенно полезно при медленном доступе к Internet или когда пользователи ЛВС загружают "тонны" mp3-файлов, образы новых дистрибутивов Linux и т.п.
Последнюю версию этого документа можно взять на сайте Linux Documentation Project (LDP) http://www.linuxdoc.org.
Ни автор, ни лица, так или иначе распространяющие этот HOWTO, не несут никакой ответственности за физические, финансовые, моральные или какие-либо другие убытки, нанесенные в результате использования советов и рекомендаций, приведенных в этом документе.
Авторское право на этот документ принадлежит Томашу Чмелевски (Tomasz Chmielewski), 2001. Публикуется в соответствии с лицензией GNU Free Documentation License, которая включена, как ссылка.
Если у Вас есть вопросы или комментарии к этому документу, присылайте их Томашу Чмелевски -- [email protected]. Я буду рад как советам, так и критике. Если Вы обнаружите в этом документе ошибку или опечатку (а Вы их найдете в большом количестве, так как английский -- не мой родной язык), дайте мне знать и я смогу исправить ее в следующей версии. Спасибо.
Я хотел бы поблагодарить Ами М. Эчеверри (Ami M. Echeverri) [email protected], помогшей мне преобразовать HOWTO в формат SGML и исправить некоторые ошибки. Так же хочу поблагодарить Ричарда Просовича (Ryszard Prosowicz) [email protected] за полезные советы.
Представим следующую ситуацию:
У нас есть модемный канал со скоростью 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
Верите или нет, но ограничение входящего трафика -- задача простая и Вам не нужно читать груду литературы по маршрутизации и алгоритмам очередей.
Для того, чтобы заработали ограничения, нам, как минимум, нужен прокси-сервер Squid; если же мы захотим все настроить достаточно тонко, то нам придется ознакомиться еще и с программами ipchains или iptables, и алгоритмом CBQ (Class-Based Queue - Прим. пер.).
В целях тестирования настроек, установим программу IPTraf.
Наверное, 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 и других протоколов.
Теперь я объясню, как установить программы, необходимые для ограничения и тестирования пропускной способности.
Как я уже отмечал ранее, Squid имеет функцию, которая называется "пулы задержки". Она позволяет контролировать скорость загрузки данных. К сожалению, в большинстве дистрибутивов, Squid поставляется без этой функции (Это несколько устаревшая информация. Основные современные дистрибутивы поставляют Squid с включенной функцией пулов задержки. -- Прим.пер.).
Потому если Squid у вас уже установлен, то я буду вынужден вас разочаровать: его необходимо удалить. Мы установим его еще раз, но уже с включенной функцией пулов задержки. Ниже я объясню, как ее включить.
Чтобы обеспечить максимальную производительность Squid, лучше выделить для кэша отдельный раздел дисковый раздел. Сам кэш будет размещаться в каталоге /cache/. Для этого необходимо около 300 МБайт, точный размер может меняться в зависимости от наших нужд.
Если вы не знаете, как создавать отдельный раздел, можно разместить каталог /cache/ на главном разделе, но производительность Squid немного снизится.
Создаем пользователя 'squid':
# useradd -d /cache/ -r -s /dev/null squid >/dev/null
2>&1
(Должен заметить, что на мой взгляд
это очень плохая команда. Вы не сможете увидеть ни результат
ее выполнения, ни сообщения об ошибках, если таковые
случатся. Рекомендую использовать команду:
# useradd -d /cache/ -r -s /dev/null squid
-- Прим. пер.)
Никто, даже root, не может войти в систему под пользователем squid.
Загружаем исходные тексты Squid с сервера http://www.squid-cache.org
Когда я писал этот документ, последней версией был 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 -- Прим.пер.)
Разархивируем все в каталог /var/tmp:
# tar xzpf squid-2.4.STABLE1-src.tar.gz
Компилируем (с поддержкой пулов задержки. -- Прим.пер.) и устанавливаем 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
Настраиваем наш файл 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).
Мы установили Squid и настроили его с использованием пулов задержки. Держу пари: никто не хочет быть занесен в пул задержки, особенно наши мудрые локальные пользователи. Наверняка они будут пробовать избежать ограничений для того, чтобы загрузить любимые mp3 чуть быстрее (причиняя тем самым головную боль вам).
Я полагаю, что вы используете IP-маскарад локальной сети так, что пользователи могут пользоваться IRC, ICQ, e-mail и т.п. Все правильно, нам нужно лишь убедится, что пользователи при работе с web-страницами и ftp-серверами будут использовать пулы задержки.
Эти проблему решает использование программы ipchains (ядра Linux 2.2.x) или iptables (ядра Linux 2.4.x).
Кроме решений, приведенных автором в разделе 3, существует другой вариант -- создание "недоверяющего" брандмауера -- Прим.пер.
Мы должны убедится, что никто не будет пытаться использовать "чужой" прокси-сервер. Прокси-сервера обычно работают по портам 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.
Мы должны убедится, что никто не будет пытаться использовать "не наш" прокси-сервер. Прокси-сервера обычно работают по портам 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.
Не стоит забывать, что если наши локальные пользователи используют Napster, Kazaa или Realaudio, то они могут свести достижения главы 3 на нет. Кроме того, как Вы помните, в разделе 3.3 мы не блокировали ftp-трафик.
Мы решим эту проблему другим способом -- не прямым, а скорее непрямым ограничением скорости. Если наш 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. В любом случае создайте этот каталог, создайте там файл по приведенному ниже образцу и посмотрите, будет ли он работать.
В главе 3 мы не блокировали ftp-трафик по двум причинам -- мы не смогли бы выполнять загрузку файлов на ftp-сервера, а пользователи IE5.5 вообще не смогли бы просматривать ftp-каталоги. В общем, браузеры и ftp-клиенты должны выполнять загрузку через наш Squid сервер, а загрузку/переименование/удаление файлов на ftp должно выполнятся через IP-маскарад.
Создадим файл в каталоге /etc/sysconfig/cbq/cbq-10.ftp-network:
# 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.
Идея та же, что и для ftp: мы просто указываем другой порт и другую скорость.
Создаем в каталоге /etc/sysconfig/cbq/ файл cbq-50.napster-network:
# 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 |
Не забываем при помощи ipchains (ядра 2.2.x) или iptables (ядра 2.4.x) запретить оставшиеся порты Audiogalaxy (41031-41900).
Ядра 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
Не забудьте добавить надлежащую строку в Ваши стартовые скрипты.
Да. Посмотрите описания в файле squid.conf. Кроме того, обратитесь к документации по Squid на сайте http://www.squid-cache.org
Просто. Создать файл .wgetrc и поместите его в Ваш домашний каталог. Вставьте в него следующие строки:
HTTP_PROXY=192.168.1.1:8080 FTP_PROXY=192.168.1.1:8080 |
Вот и все!
Если Вы хотите установить такие настройки глобально для всех пользователей, обратитесь к руководству программы (man wget).
Возможны две проблемы:
Первая: если Ваш SOCKS сервер общедоступен, т.е. то, что его может использовать кто угодно и с любой машины в мире. Это -- проблема безопасности и нужно проверить конфигурацию сервера. Обычно IRC-сервера не разрешают соединения от общедоступных SOCKS серверов.
Если Вы уверены, что Ваш SOCKS сервер не общедоступен, а некоторые IRC сервера продолжают отказывать в соединении, то это может быть вызвано тем, что они проверяют, запущен ли у клиента SOCKS сервер на порте 1080. В этом случае Вам придется перенастроить Ваш SOCKS сервер на другой порт. Кроме того, нужно будет перенастроить в ЛВС все программы, использовавшие SOCKS сервер.
Такое бывает неприятным, но этого легко избежать.
Создадим файл, например /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 |
Вы можете ограничить Ваш SMTP-сервер (Postfix, Sendmail или другой) путем, аналогичным приведенному выше. Просто добавьте правило:
RULE=,:25 |
Более того, если у Вас есть SMTP-сервер, то можно заставить локальных пользователей использовать его, даже если они указали другой внешний сервер. Это организовывается таким же "прозрачным" способом, что и принудительная работа через Squid.
В общем это возможно, однако обычно такие сервера имеют свои собственные функции ограничения скорости. Потому перед тем, как организовывать такое ограничение, стоит проконсультироваться с документацией.
Ядра 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
Не забудьте добавить в ваши стартовые скрипты надлежащую строку.
Да. Посмотрите в скрипте cbq.init; там приведены примеры.
Вероятно, модуль CBQ отсутствует в Вашей системе. Если он статически "вкомпилирован" в ядро, закомментируйте следующие строки в скрипте cbq.init-v0.6.2
### Если cbq, tbf и u32 непосредственно "вкомпилированны" в ядро, то ### следующие строки надо закоментировать #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 |
Вообще говоря, такое происходить не должно. Иногда можно наблюдать большой трафик, хотя вы думаете, что заблокировали все порты, используемые Napster и Audiogalaxy. Однако для загрузки всегда найдется хоть один порт. Чтобы обнаружить его, используйте IPTraf. Поскольку таких портов может быть тысячи, это может оказаться сложной задачей. Для ее упрощения, Вы можете использовать свой SOCKS сервер -- Napster, Audiogalaxy и многие другие программы умеют работать с SOCKS прокси-серверами. А управлять одним портом намного проще, чем тысячами (стандартный SOCKS сервер использует порт 1080, но, если Вы установите свой SOCKS сервер, можно будет его изменить. Кроме того, можно запустить несколько экземпляров SOCKS, которые будут работать по разным портам). Не забудьте только закрыть все порты, оставив лишь те, которые действительно необходимы, такие как 25 и 110 (SMTP и POP3). Ссылку на Nylon socks сервер Вы найдете в конце этого HOWTO.
К сожалению, с этим ничего нельзя сделать.
Единственное, что вы можете сделать -- использовать демон cron для автоматической перенастройки, например в 1.00 отключать пулы задержки в Squid, а в 7.30 подключать их обратно.
Для того, чтобы организовать это, создайте в каталоге /opt/squid/etc/ два файла: squid.conf-day и squid.conf-night.
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 |
Этого можно избежать убрав из squid.conf соответствующий acl и строки "delay_access 2 allow day delay_access 2 deny !day".
После чего используйте методику из предыдущего пункта.
Конечно, чем больше у вас пользователей, тем больше -- иногда очень полезной -- информации протоколируется.
Лучшим способом борьбы с разрастанием файлов журналов является 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 } |
Это возможно!
Есть два способа.
Первый (простой) похож на решение, которое мы применили к Squid. Вставьте строку аналогичную приведенной в нужный файл конфигурации CBQ /etc/sysconfig/cbq/:
TIME=00:00-07:59;110Kbit/11Kbit |
В файле настройки CBQ можно задавать несколько параметров TIME.
Будьте осторожны, в скрипте 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 имеет расширенные возможности по управлению трафиком. За детальным описанием обращайтесь к скрипту. -- Прим.пер.
Кэширующий прокси-сервер Squid
Руководство по настройке 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
Управление трафиком (на польском)
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) [email protected]
http://raf.unisba.ac.id/resources/BandwidthLimitingHOWTO/index.html