Содержание
Итак, у нас поставлена система FreeBSD и на ней собрано ядро с файрволлом ipfw. Теперь начинаем настраивать этот файрволл, заодно и разберемся, как он работает.
Подключение файрволла ipfw.
Открываем файл /etc/rc.conf
#ee /etc/rc.conf
Дописываем туда строки:
firwall_enable="yes"
firewall_script="/etc/firewall.conf"
Закрываем файл /etc/rc.conf
Создаем файл /etc/firewall.conf:
#ee /etc/firewall.conf
Пишем туда:
#!/bin/sh
ipfw="/sbin/ipfw" #объявили переменную ipfw, которая содержит путь до исполняемого файла файрволла.
${ipfw} -f flush #очищаем список всех старых правил
${ipfw} -f queue flush #очищаем список очередей
${ipfw} -f pipe flush #очищаем список каналов
Сохраняем и делаем файл исполняемым:
#chmod +x /etc/firewall.conf
А далее будем учиться писать правила. Правила я разбиваю на категории и подробно рассмотрю каждую из них ниже. Но для начала опишу сетевую топологию данного примера.
У нас две виртуальные машины, которые друг друга прекрасно пингуют. ОС Windows XP (192.168.0.10) и ОС FreeBSD 8.2, описанная в самом начале статьи, с файрволлом ipfw.
Запрещающее правило для ipfw (deny)
${ipfw} add 00010 deny icmp from any to me via em1
Итак, начинаем разбор полётов.
Структура правила очень проста. Вначале идёт использование переменной ipfw, которая у нас в начале скрипта. Можно в тексте скрипта объявить любую переменную NAME=”VALUE” и использовать её в скрипте как ${NAME}. Весьма удобно, если нужно изменить в разных местах одно и то же значение.
Итак, add 00010 – это добавление правила с номером 10. Нумерация правил идет с 1 до 65535, причем последнее правило – разрешающее по-умолчанию (определяется опцией ядра IPFIREWALL_DEFAULT_TO_ACCEPT), либо запрещающее по-умолчанию.
Следующим идёт действие. В данном случае – deny (запретить), могут быть allow, deny, divert и т.д, мы их будем касаться по мере изучения.
Следующим идет протокол. Можно запретить any (все), только tcp или ip (соответствующей директивой).
from <откуда> to <куда> via <интерфейс>
Я думаю, здесь тоже проблем не возникает. В качестве параметров откуда и куда можно использовать либо указывающие слова any (любой), me – адрес самого сервера с файрволлом, или переменная, в которой хранится IP узла.
В данном примере правило:
${ipfw} add 00010 deny icmp from any to me via em1
Создает запрет на прохождение icmp пакетов с любого узла через интерфейс em1 на адрес шлюза. Правило будет иметь номер 10.
Надо сказать, что правила применяются в порядке нумерации, то есть правила с меньшим номером сравниваются раньше, чем с большим.
Пакет проходит по списку правил до первого совпадения. Далее, с пакетом происходит действие, указанное в правиле.
Применяются правила простым вызовом этого файла:
#/etc/firewall.conf
Он ведь у нас исполняемый. Легко заметить, что пинги теперь не идут.
Зелёным подчеркнул до применения правила файрволла, а красным – после.
Ограничение скорости на передачу данных.
Сейчас мы будем заниматься ограничением пропускной способности сети. Я примерно нарисовал схемку, как работает пайп (pipe).
Мы видим два направления передачи данных. Коричневое и зеленое. Коричневое из винды в freebsd, зеленое – обратно. Так вот, ещё важное уточнение, что у каждого направления есть in и out. Т.е. Передается из Windows (это out) но в FreeBSD (in), наоборот, для FreeBSD в качестве out будет начало канала, а для нас он входящий, значит in. По рисунку, я думаю, понятно.
Так вот, Pipe – труба – ставится на любое направление. И как бы “сужает” канал до нужного значения. Тестировать скорость сети мы будем утилитой Iperf. Я замеряю скорость изначально:
Устанавливаем пайп. Для этого в список правил файрволла добавляем:
${ipfw} pipe 1 config bw 2048Kbit/s
Это правило определяет пайп с номером 1, шириной 2048 Кбит/сек., т.е. примерно 2 Мбит/с. bw – bandwidth – ширина канала.
Теперь пропустим канал в трубу. Так как для тестирования утилитой Iperf FreeBSD у нас будет сервером, а Windows XP – клиентом, то резать скорость будем в месте “in” у FreeBSD, т.е. на вход.
HOST="192.168.0.10/32"
${ipfw} add pipe 1 tcp from ${HOST} to me via em1
Как видите, здесь мы создали переменную HOST, в которую внесли адрес узла.
Просмотреть список правил можно командой:
#ipfw show
— покажет список правил и количество пакетов (байт) пропущеных по этим правилам
или
#ipfw list
— покажет только список правил
Применяем новые правила:
#/etc/firewall.conf
И наслаждаемся:
Скорость порезана на ~2 Мбит/с.
ПРОДОЛЖЕНИЕ СЛЕДУЕТ
Comments: