Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #87, МАРТ 2006 г.

Нарезаем трафик ломтиками

Andrey Matveev

Хакер, номер #087, стр. 087-130-5


keep state queue (q_hig)

/* Если в поле заголовка IP-пакета установлен TCP ACK или TOS LOWDELAY (к примеру, это могут быть интерактивные ssh-сессии), используем очередь q_max, иначе q_def */

pass out on pppoe0 inet proto tcp from (pppoe0) to any \

flags S/SA keep state queue (q_def, q_max)

/* Обращения к удаленным Web-сайтам имеют наивысший приоритет */

pass out on pppoe0 inet proto tcp from (pppoe0) to any port www \

flags S/SA keep state queue (q_hig, q_max)

Активируем правила:

# pfctl -e -f /etc/pf.conf

Проверяем, вступили ли в силу новые изменения:

# pfctl -sq

queue q_max priority 7

queue q_hig priority 5

queue q_def priority 3

queue q_low priq( default )

[визуализация трафика]

На этом обе части настройки закончены. Теперь, чтобы оценить выигрыш от использования ALTQ/PRIQ, можно воспользоваться pfstat. Эта программа из дерева портов прекрасно справляется с задачей обработки статистики pf и построения наглядных графиков.

# cd /usr/ports/net/pfstat

# make install clean CLEANDEPENDS=Yes

Приведу пример конфигурационного файла pfstat.conf:

# vi /etc/pfstat.conf

image "/var/www/htdocs/pfstat/pfstat.jpg" {

from 10 minutes to now

width 960 height 300

left

graph bytes_v4_in label "incoming" color 0 192 0 filled,

graph bytes_v4_out label "outgoing" color 0 0 255

}

Далее утилитой crontab вызываем текстовый редактор (тот, что определен в переменной окружения $EDITOR) для постановки pfstat на исполнение и ротации логов в заданное время:

# crontab -e

* * * * * /usr/local/bin/pfstat -q >>/var/log/pfstat

1 1 * * 1 tail -n 50000 /var/log/pfstat >/tmp/pfstat && mv /tmp/pfstat /var/log/pfstat

*/1 * * * * /usr/local/bin/pfstat -c /etc/pfstat.conf -d /var/log/pfstat >/dev/null

PS. Статья не претендует на роль полноценного руководства или панацеи на все случаи жизни. Для каких-то типов соединений выигрыш будет больше, для каких-то - меньше. Истинный результат может показать только эксперимент.

МИНИ-СТАТЬЯ

Пример настройки штатной утилиты pppoe(8).

Редактируем ppp.conf:

# vi /etc/ppp/ppp.conf

default:

Set log Phase Chat LCP IPCP CCP tun command

Disable ipv6cp

pppoe:

set device "!/usr/sbin/pppoe -i vr0"

set mtu max 1492

set mru max 1492

set speed sync

disable acfcomp protocomp

deny acfcomp

set authname user

set authkey password

add! default HISADDR

Так как конфиг содержит имя пользователя и пароль, выставляем корректные права доступа:

# chmod 600 /etc/ppp/ppp.conf

Устанавливаем PPPoE-соединение:

# ppp -ddial pppoe

Назад на стр. 087-130-4  Содержание