Файрвол-невидимка 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. |