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

Файрвол-невидимка

Andrey Matveev

Хакер, номер #079, стр. 079-100-4


# vi /etc/pf.conf

/* Пользователи (например, 192.168.1.2/32, 192.168.1.5/32) прописаны в специальном файле */

table <users> persist file "/etc/pfusers.conf"

/* Содержимое www-серверов этих подсетей не кэшируем */

table <no_cache> { 192.168.1.0/24, 192.168.7.0/24 }

/* Запросы от пользователей, поступающие на внутренний сетевой интерфейс, перенаправляем на проксю */

rdr on $int_if from <users> to ! <no_cache> port { 80, 8080, 8101 } -> 127.0.0.1 port 3128

/* Роутим нужные пакетики на loopback-интерфейс */

pass in on $int_if route-to lo0 from <users> to 127.0.0.1 port 3128

[чудеса мостостроения]

У данной конструкции есть еще одна изюминка: бридж можно подстраивать и пересобирать что называется "на лету". А именно: удалять одни сетевые интерфейсы, добавлять другие, модифицировать правила привязки и значения переменных, полностью или частично очищать таблицу MAC-адресов. И все это без перезагрузки: успевай только корреспондировать имена сетевых интерфейсов в бридже и правилах файрвола. В качестве примера заменим fxp1 на беспроводной ral0:

# brconfig bridge0 down

# ifconfig fxp1 down

# ifconfig bridge0 destroy

# ifconfig bridge0 create

# brconfig bridge0 add fxp0 ral0 up

Теперь в /etc/pf.conf остается лишь исправить значение макроса $int_if на ral0 и перечитать конфиг. Сказка.

% brconfig bridge0

bridge0: flags=41<UP,RUNNING>

Configuration:

priority 32768 hellotime 2 fwddelay 15 maxage 20

Interfaces:

ral0 flags=7<LEARNING,DISCOVER,BLOCKNONIP>

port 1 ifpriority 128 ifcost 55

fxp0 flags=7<LEARNING,DISCOVER,BLOCKNONIP>

port 3 ifpriority 128 ifcost 55

Addresses (max cache: 100, timeout: 240):

00:0f:ea:91:43:f6 ral0 1 flags=0<>

00:0f:3d:f4:d6:63 fxp0 1 flags=0<>

[приятные тяготы администрирования]

Так как наш хост не имеет ни одного IP-адреса, нам не удастся использовать его сетевые службы, а значит, и удаленно админить. Изменять конфигурацию можно будет только сидя непосредственно за компьютером (console) либо с помощью нуль-модемного кабеля (serial console). Конечно, доставив еще один сетевой адаптер и присвоив ему глобально (не)маршрутизируемый IP-адрес, мы решим проблему, но, согласись, с этим ухищрением пропадет вся красота прозрачности брандмауэра. Поэтому в качестве терминала предпочтительнее использовать старенький ноут класса 486/DX2-66 ;-). Рассмотрим этот вариант поподробнее.

В отличие от DOS и Windows, нумерация последовательных портов в OpenBSD начинается не с единицы, а с нуля. Виндовому COM1 соответствует com0 (/dev/tty00), а COM2 - com1 (/dev/tty01). На самом раннем этапе загрузки OpenBSD убедись, что оба порта верно распознаются загрузчиком: "probing: pc0 com0 com1 apm mem[636K 510M a20=on]". Если ты являешься счастливым обладателем управляемого источника бесперебойного питания, повесь интерфейсный кабель на com1, так как «serial console» умеет работать только с com0.

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