Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #33, АВГУСТ 2003 г.

САМЫЙ СЕРЬЕЗНЫЙ ГЕЙТ
Настраиваем ipfw + NAT во FreeBSD

DemiurG (arkhangel@mail.ru)

Спецвыпуск Xakep, номер #033, стр. 033-054-4


reject - отбрасываем принятый пакет и информируем хост (который послал нам этот пакет), что наш узел недоступен (путем посылки ICMP сообщения "host unreachable" или "port unreachable");

allow - разрешаем принятие пакета (или pass, или accept);

deny - запрещаем принятие пакета без информирования по ICMP;

count - ведет подсчет пакетов (очень часто используется для снятия статистики, когда запрещать/разрешать не требуется, а надо просто получить информацию, сколько пакетиков использует тот или другой узел). Весь список правил выполняется от меньшего к большему, то есть сначала выполняется первое правило, а в конце последнее (обычно оно имеет номер 65535).

А что мы будем разрешать или запрещать? В ipfw пакеты делятся на четыре группы: TCP, UDP, ICMP, all - если с первыми тремя все понятно, то "all" (оно же ip) - это все протоколы. То есть, допустим, тебе надо разрешить для какого-то хоста только одну аську - ты и разрешаешь только udp протокол по какому-либо определенному порту (обычно 5190), а другой хост должен иметь право не только болтать по аське, но и ползать по web'у и качать файлы с ftp-серверов - вот ему-то мы и позволяем использовать "все протоколы", то есть в правилах назначаем "аll" (или "ip").

Для того чтобы задать правило, используем команду ipfw add, чтобы удалить - ipfw del. Трафик делится на два вида - входящий и исходящий. Бывает необходимо указать интерфейс для работы (в нашем случае xl0 или xl1), это делается с помощью префикса via. Для того чтобы твой комп использовался как шлюз, мало запустить демон natd, требуется еще перенаправить ему трафик исходящего интерфейса, то есть в нашем с тобой случае делаем: ipfw add 20 divert natd all from any to any via xl1

НЕМНОГО ПРАКТИКИ

Набери команду ipfw -a list и увидишь, что под номером 65535 кроется правило "deny ip from any to any". Что оно означает? Расшифровываем по порядку "запретить любой трафик по любым протоколам от любого хоста к любому хосту". То есть в этом случае мы не можем вообще работать с сетью и даже пропинговать собственный хост. Попытайся: ping 127.0.0.1 или ping 192.168.6.12 - ответ "permission denied", что в принципе логично. Разрешим все в сети, для этого наберем: ipfw add 100 allow ip from any to any. Смотрим ipfw -a list - у нас уже два правила.

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

Пример 1: ipfw add 8000 deny ip from 192.168.0.55 to any 80 via xl1 - создаем правило с номером 8000, запрещающее открывать сайты www (порт 80) хосту с ip-адресом 192.168.0.55 в Интернете. Заметь, что если сайт открыт на другом порту (например, 8080) и правил, запрещающих это, нет, то чел сможет спокойно открыть свою страничку. Следовательно делаем вывод, что вся защита задается по портам и нет какой-либо проверки контента. Кроме того, если на самом роутере находится web-сервер, то 192.168.0.55 может спокойно с ним работать, так как он откроется через интерфейс xl0.

Назад на стр. 033-054-3  Содержание  Вперед на стр. 033-054-5