Ключевые слова:cbq, shaper, bandwidth, linux, limit, route, install, redhat, firewall, squid, (найти похожие документы)
From: Black Cat Linux
Subject: Настройка сетевой подсистемы в основанных на RedHat Linux
Выборка из руководства по Black Cat Linux, раздел "сервер Internet/lntranet"
Установка дополнительной сетевой карты
Протокол TCP/IP ограничивает количество адресов на одном сегменте
Ethernet числом 254. Обойти это ограничение можно, присвоив одной
сетевой карте несколько адресов IP, но даже при меньшем количестве
машин возникает опасность перегрузки сегмента широковещательными
запросами и недопустимо увеличивается число коллизий. Поэтому большие
сегменты фрагментируют, устанавливая в сервере несколько сетевых карт.
Установка нескольких сетевых карт позволяет также эффективно
разграничить доступ к информации. Black Cat Linux ограничивает
количество сетевых карт только количеством слотов в вашем компьютере.
Рассмотрим процедуру установки второй карты (не отличается для
третьей, четвертой и т.д.). При этом возможны следующие варианты:
Добавление однотипной карты
Если дополнительная карта аналогична уже установленной и имеет шину
РСI, дополнительный драйвер не требуется: все платы будут успешно
обнаружены и установлены. Если это карты ISA, драйверу потребуется
"подсказка". Так, для плат NE2000 необходимо перечислить адреса
ввода-вывода в файле /etc/conf.modules:
alias eth0 ne
options ne io=0x300, 0х320, 0х340
Номера интерфейсов при этом будут присвоены в порядке перечисления
адресов.
Все карты разных моделей
Если все карты разные, файл conf.modules может выглядеть следующим
образом:
alias eth0 3c59x #3Com 3C905B
alias eth1 rd8139 #Realtek RTL8139
alias eth2 ne
options ne io=0x300,0x320 #две платы NE2000-ISA
Все современные сетевые карты ISA имеют два режима - ISA PnP и Legacy
ISA. Для работы в Linux такие карты необходимо перевести в режим
Legacy ISA, используя поставляемую с картой программу конфигурации для
DOS.
Настройка TCP/IP
Настроить параметры TCP/IP для вновь установленной карты можно при
помощи программы Linuxconf (Config -> Networking -> Client tasks ->
Basic host information), netcfg или при помощи вашего любимого
текстового редактора, создав в каталоге /etc/sysconfig/network файл
ifcfg-ethX в соответствии с документацией от пакета initscripts.
Разрешение маршрутизации пакетов с одного интерфейса на другой
В Black Cat Linux пересылка (forwarding) пакетов с одного интерфейса
на другой по умолчанию запрещена. Чтобы разрешить ее, нужно в файле
/etc/sysconfig/network изменить значение параметра FORWARDJPV4 с
"false" на "true".
Безопасные сервисы для вашего сервера.
В поставку Black Cat Linux входят средства для организации безопасного
доступа к вашему серверу по протоколам HTTPS,IMAPS,POP3S,TELNETS.
Apache с mod_ssl.
Вы можете сделать ваш собственный Secure Web server. Для этого вам
необходимо поставить пакет apache-mod_ssl из директории
contrib/crypto. (Перед установкой этого пакета убедитесь, что у вас
уже установлен пакет openssi). После его установки вам необходимо
сделать для себя сертификат. Последовательно выполняя
нижеперечисленные команды вы получите работоспособный Secure Web
Server, к которому позже вы сможете обратиться как
https://my.host.name/:
openssl genrsa -des3 -out server.key.secure 1024
Изготовление первичного секретного ключа.
openssl rsa -in server.key.secure -out server.key
Изготовление беспарольного первичного ключа сервера. Вам он
понадобится для автоматического запуска сервера.
openssl req -new -key server.key.secure -out server.csr
Изготовление запроса на получение официального сертификата.
Мы показываем, как изготовить подписанный вами самими сертификат.
Для серьезного сервера вам придется купить подписанный на основе
вашего server.csr. О том как это сделать вы можете прочитать в
файле: /home/httpd/html/manual/mod/mod_ssl/ssl_faq.html
openssl req -new -x509 -days 365 -key server.key.secure -out
server.crt
Подписываем сертификат.
cp server.key /etc/httpd/ssl.key/server.key
Копируем первичный ключ сервера.
cp server.key.secure /etc/httpd/ssl.key/server.key.secure
Копируем первичный ключ с паролем.
Вы можете его положить как/etc/httpd/conf/ssl.key/server.key, но вы
этом случае при каждом перезапуске машины или просто apache вам
придется вводить пароль для подтверждения что ключ действительно
соответствует содержимому сайта. Это может использоваться только
при пароноидальном подходе к безопасности сервера.
cp server.csr /etc/httpd/ssl.csr/server.csr
Копируем запрос сертификата...
cp server.crt /etc/httpd/ssl.crt/server.crt
... и сам сертификат.
IMAP+SSL,POP3+SSL,TELNET+SSL.
Для организации криптованного доступа вам придется поставить пакет
ssl-wrap из директории contrib/crypto (так же требует наличие пакета
openssi). После этого вам необходимо проделать следующие операции:
* Изготовление сертификата
cd /etc/ssl/certs
RANDFILE=/dev/urandom opeussl req -new -x509 -nodes -out
server.pem \ -keyout server.pem -days 365
ln -s server.pem `openssl x509 -noout -hash < server.pem`.0
* Заведения пользователя под идентификатором которого будет работать
демон ssl-wrap.
useradd -с 'SSL wrapper' -d / -g daemon -s /bin/fake sslwrap
chown sslwrap /etc/ssl/certs/server.pem
chmod go-rwx /etc/ssl/certs/seiver.pem
* Описание сервисов для супердемона inetd в файле /etc/inetd.conf.
Необходимо прописать три строчки:
Внимание: описание каждого сервиса полностью должно занимать одну
строку в файле /etc/inetd.conf. Переводы строки только после -port
NNN
imaps stream tcp nowait sslwrap /usr/sbin/tcpd
/usr/sbin/sslwrap-imaps -cert /etc/ssl/certs/server.pem -port 143
telnets stream tcp nowait sslwrap /usr/sbin/tcpd
/usr/sbin/sslwrap-telnets -cert /etc/ssl/certs/server.pem -port 23
pop3s stream tcp nowait sslwrap /usr/sbin/tcpd
/usr/sbin/sslwrap-pop3s -cert /etc/ssl/certs/server.pem -port 110
После этого вам достаточно выполнить killall -1 inetd. После этого
рекомендуем еще закрыть доступ к портам 23,143,110 всем IP адресам
кроме 127.0.0.1
Настройка фильтра пакетов
Зачем нужен фильтр пакетов? Вот два основных ответа на этот вопрос:
Управление
Когда ваш Linux подключен к различным сетям (и к Интернету в том
числе), вы должны иметь возможность управлять любыми потоками данных,
идущих через вашу систему. Например, вы должны быть уверены, что любой
пакет из внутренней сети, которые может содержать важную информацию,
не уйдет на просторы Интернет.
Безопасность
Когда Linux стоит один на один с хаосом Интернета, да еще и служит
мостом в Интернет для машин внутренней сети, вы должны быть уверены,
кто и куда ходит через мост. Например, вы желаете ходить по Интернет,
но не желаете, чтобы ваша машина была сервером (а вы уверены, что у
вас все пользователи имеют пароли и лишние сервисы закрыты ?). С
наличием firewall эти проблемы решаются легко и быстро. Полное
описание вы сможете найти в /usr/doc/HOWTO/IPCHAINS-HOWTO.
Мы приведем пример с объяснением, как решить эту задачу.
Условия:
* Есть локальная сеть с адресами 10.х.х.х, подключенная к нашему
маршрутизатору через интерфейс eth0 (или eth1, если в машине
больше одного сетевого адаптера).
* Соединение с ISP через интерфейс ррр0.
Задача:
* для клиентов из сетей 10.х.х.х обеспечить выход в Internet.
Решение:
Фильтр пакетов в Linux 2.2.X состоит из трех цепочек правил: входной,
выходной и транзитной. Поскольку для реализации описанной выше задачи
не требуется защищать какие-либо сервисы в сети, то цепочки
input(входная) и output(выходная) оставим чистыми. Цепочка для
транзитных пакетов должна:
* пропускать пакеты из локальных подсетей в локальную без изменения
* из локальной сети в мир должна подменять адрес источника на наш
реальный IP-адрес на устройстве ррр0 (осуществлять маскарадинг).
* остальные пакеты (которые в 99 случаях из 100 представляют
всевозможные атаки на вашу сеть) мы должны не пропускать.
Первоначальная настройка делается при помощи команды ipchains:
ipchains -A forward -s 10.0.0.0/8 -d 10.0.0.0/8 -j ACCEPT
ipchains -A forward -s 10.0.0.0/8 -d 0.0.0.0/0 -j MASQ
ipchains -P forward REJECT
После этого необходимо сохранить созданную настройку фильтра в файле
конфигурации:
ipchains-save > /etc/sysconfig/firewall/firewall
Теперь осталось только при помощи ntsysv или chkconfig добавить сервис
firewall в автозапуск. Изменение настройки фильтра можно делать
командой Ipchains или при помощи графической программы gfcc. После
того как вы измените настройку выполните приведенные ниже команды:
/etc/rc.d/init.d/firewall stop
ср /etc/sysconfig/firewall/firewall.work
/etc/sysconfig/firewall/firewall
/etc/rc.d/init.d/firewall start
Ваша предыдущая настройка сохраняется в файле
/etc/sysconfig/firewall/firewall.bak до первого выполнения
/etc/rc.d/init.d/firewall с параметром stop.
Внимание! При перезапуске машины или выключении питания этот скрипт
выполнится автоматически
Управление скоростью графика пакетов.
В крупных сетях с довольно развитой структурой, где есть выход в
Internet через канал со сравнительно небольшой пропускной способностью
часто возникает необходимость перераспределить полосы пропускания для
отдельных машин в сети или в целом на отдельные подсети. Black Cat
Linux включает в себя средство для управления транзитным графиком.
Здесь мы приведем лишь два примера конфигурация для самых
распространенных случаев:
Пример 1:
Необходимо ограничить график из мира на определенную машину, а
локальный график пропускать с максимальной скоростью.
Для этого необходимо создать два файла в директории
/etc/sysconfig/cbq:
cbq-10.out
cbq-8.out
Первый (с большим приоритетом) описывает правила для случая "локальная
машина- локальная машина". Вот его содержимое:
DEVICE=eth0, 10Mbit, 1Mbit
RATE=10Mbit
WEIGHT=1Mbit
PRIO=5
RULE=10.0.0.0/24,10.0.0.2/32
Где DEVICE - описание устройства к которому подключена машина
получатель пакетов, RATE - скорость с которой передавать пакеты, a
RULE это правило описывающее что шейпер действует для пакетов только с
нашей локальной сети на конкретную машину.
Второй файл содержит описание правил для случая "мир - локальная
машина":
DEVICE=eth0, 10Mbit, 1Mbit
RATE=8Kbit
WEIGHT=800
PRIO=5
RULE=10.0.0.2/32
Здесь стоит ограничение на 8Kbit (строка RATE) для всех пакетов на
подпавших под правило первого более приоритетного шейпера. Как вы
можете заметить - в строке RULE только один адрес. Такая сокращенная
запись равносильна "RULE=0.0.0.0/0,10.0.0.2/32". Если вам понадобится
в правиле указать "все пакеты которые идут от машины 10.0.0.2", то вам
необходимо написать "RULE=10.0.0.3," (Обратите внимание на запятую).
Пример 2:
Необходимо ограничить исходящий трафик с машины для всех кроме своих
сетей.
Такой вариант может возникнуть если вы ставите свой сервер в локальной
сети Internet провайдера который просит ограничить исходящий с вашего
сервера график через внешние каналы.
Вот вариант решения, (имена файлов для простоты оставлены те же):
cbq-10.out:
DEVICE=eth0, 10Mbit, 1Mbit
RATE=10Mbit
WEIGHT= 1Mbit
PRIO=5
RULE=209.192.223.78/32,204.165.159.3/32
RULE=209.192.223.78/32,209.192.223.72/28
RULE=209.192.223.78/32,209.113.218.0/24
Пояснение: все пакеты нашего адреса 209.192.223.78 на
вышеперечисленные подсети (да, строк RULE может быть несколько)
пропускать с максимальной скоростью.
cbq-8.out:
DEVICE=eth0, 10Mbit, 1Mbit
RATE=80Kbit
WEIGHT=8000
PRIO=5
RULE=209.192.223.78/32,
Все остальные пакеты с адреса 209.192.223.78 "зажать" на скорость
80Kbit/s. Полное описание вы сможете найти в файле
/usr/doc/initscripts-4.16/readme.cbq.rus
Трансляция адресов. Приоритетная маршрутизация
Трансляция адресов
В сетях со сложной топологией бывают ситуации когда необходимо
присвоить машине стоящей в нескольких переходах от маршрутизатора (и
имеющей локальный IP адрес) реальный IP адрес и обеспечить проход
пакетов как от этой машины в мир так и наоборот. Описанный выше способ
маскарада пакетов не подходит так, как этот метод односторонний. Ниже
приведен вариант решения.
ip rule add from 192.168.68.5 nat 194.44.183.204
ip route add nat 194.44.183.204 via 192.168.68.5
Где 194.44.183.204 - реальный адрес IP под которым из внешнего мира
внутренняя машина 192.168.68.5 должны быть видна. Более подробно о
возможностях трансляции адресов IP вы можете прочитать в
/usr/doc/iproute2-2.2.4/ps/ip-cref.ps
Приоритетная маршрутизация
Бывают случаи когда необходимо пакеты от разных источников направить
через разные каналы. В этом нам опять поможет команда ip:
ip rule add from 194.200.0.0/24 table 1
ip rule add from 194.44.53.0/24 table 2
Для начала мы создали помимо основной таблицы маршрутизации две
добавочных для двух блоков адресов от двух провайдеров к которому
подключен наш маршрутизатор.
ip route add default via 194.200.0.1 table 1
ip route add default via 194.44.53.254 table 2
А во вторых двух командах мы прописали маршрут по умолчанию на ррр
интерфейсы наших провайдеров соответственно. Более подробную
информацию вы сможете найти там же:
/usr/doc/iproute2-2.2.4/ps/ip-cref.ps
Ваш собственный прокси-сервер
Прокси-сервера предназначены для минимизации обращений клиентов во
внешний мир за одними и теми же страницами по протоколам http (WWW) и
за одними и теми же файлами с серверов ftp. Имея в своей локальной
сети прокси-сервер вы сможете снизить загрузку вашего внешнего канала
до 30-40%.
Что нужно для прокси-сервера?
Для настройки вашего собственного прокси-сервера вам необходимо,
прежде всего, установить пакет squid (выбрав его при инсталляции или
установив позже при помощи команды rpm). Далее вам понадобится решить,
сколько вы хотите отвести дискового пространства для хранения
кэшированной информации. Для сетей небольших предприятий понадобится
от 200МЬ до 1Gb. Помимо этого вам понадобится от 32Mb до 128Mb ОЗУ, в
связи с тем, что вся служебная информация о запрашиваемых файлах
хранится особым образом в памяти. В общем случае стоит рассчитывать
примерно из таких значений: на каждых 200МЬ дискового пространства
16Mb ОЗУ.
Ну и наконец последнее что вам понадобится для следующего шага -
узнать у вашего провайдера, обязательно ли его использование.
Настройка squid.
Основной файл конфигурации squid, conf расположен в директории
/etc/squid. Ниже приведем жизненно важные опции squid которые
желательно подправить под себя:
http_port 3128
icp_port 3130
Две данных опции описывают на каком порту будет отвечать ваш
прокси-сервер на запросы клиентов. (Можно оставить
закомментированными).
tcp_incoming_address 0.0.0.0
tcp_outgoing_address 0.0.0.0
udp_incoming_address 0.0.0.0
udp_outgoiug_address 0.0.0.0
Эти четыре параметра заставляют принудительно слушать запросы на
определенном адресе и соответственно на кэш высшего уровня
(прокси-сервер вашего ISP если нужен) ходить с *_outgoing адреса.
Обычно можно оставить закомментированными.
cache_peer proxy.my.isp.net type 3128 3130
Эта опция описывает прокси-сервер вашего провайдера (если вы конечно
хотите им воспользоваться). Вместо type может стоять:
* parent - все запросы отправлять на прокси провайдера.
* sibling - сначала посмотреть на прокси провайдера, и если там нет,
то самим пойти за объектом по URL.
Соответственно выберите для себя необходимое.
cache_mem 16 MB
Описывает сколько памяти (ОЗУ) может использовать squid для хранения
служебной информации в памяти. На практике squid может использовать на
20-30% больше чем разрешено в этой переменной. Будьте аккуратны.
cache_dir /var/spool/squid 100 16 256
Этот параметр описывает, сколько дискового пространства отдать под
хранение данных (второй параметр). По умолчанию 100Mb. Вам возможно
захочется поставить побольше. Первый, третий и четвертый параметр
желательно не трогать, если вы не уверенны, что вы делаете.
Ну а теперь самое интересное - кому куда можно ходить.
Доступ к вашему прокси-серверу.
Squid имеет очень гибкую систему управлением доступом к нему. Для
начала вы можете пропустить все до строки (до нее лишь стандартные
определения правил):
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS ....
Дальше рекомендуется удалить раскомментированные строчки с переменными
http_access, icp_access и miss_access. Опишем наших локальных клиентов
(и наши домены если они есть):
acl localclients src 10.0.0.0/255.0.0.0
acl localdomain dstdomain mydomain.com
Доступ (в общем понятии этого слова) своим клиентам а остальным нет:
http_access allow localhost
http_access allow localclients
http_access deny all
Доступ к нашему серверу от дочерних прокси-серверов (если в локальной
сети еще кто-то захочет поставить себе прокси сервер с опцией parent
или sibling на вас):
icp_access allow localclients
icp_access deny all
Доступ к нашему серверу для запросов во внешнюю сеть. Если http_access
разрешен, a miss_access нет для какого-то клиента, единственное что он
сможет сделать - это получать только те URL которые лежат у нас в
дисковом кэше.
miss_access allow localclients
miss_access deny all
Еще один нюанс: настройка туда куда нам ходить самим.
always_direct allow localdomain
always_direct deny all
never_direct deny localdomain
never_direct allow all
Первый запуск squid.
Перед первым запуском следует выполнить команду
squid -z
для инициализации дискового кэша. Потом
/etc/rc.d/init.d/squid start
Теперь с локальной машины вы можете запустить Netscape Communicator, и
(предварительно прописав в его настройках
Edit->Preferences->Advanced->Proxies- >Manual->HTTP Proxy IP адрес
вашего прокси сервера и порт 3128) попробовать сходить на какой-нибудь
WWW-сайт. Более полную документацию вы сможете найти в директории
/usr/doc/squid.
Мужики, я знаю, что это как два пальца, но долблюсь вторую неделю. Есть три (лок) интерфейса,
каждый из которых пингует машины своей подсети. Однако подсети друг друга не видят. Ответьте, плиз. ОС: RedHat7.3, Slackware9.0.
(Если кто из знающих правельный ответ живет в Крыму - могу укатать пивом/водкой/вином/етц по самое оно).
Уважаемые специалисты!!! Подскажите пожалуйста программу с графическим интерфейсом или как проще сделать для начинающего пользователя дебиан настройки параметра скороси сетевой карты чтобы зафиксировать к примеру 10 мегабит или 100 дуплекс и т.д.