Назад | Перейти на главную страницу

Брандмауэр PF на OSX с IceFloor

Я установил pf с помощью IceFloor в своей системе OSX 10.9 с сервером 3.0.2. Кажется, все в порядке, за исключением того, что я не могу подключиться к системе, используя DNS-имя или общедоступный IP-адрес с localhost. Например. Я могу подключиться к http / порту 80 из Интернета, но не с самого компьютера, используя общедоступный IP-адрес. Соединение с машины на localhost / 127.0.0.1 работает. Вот журнал, который я получаю (x.x.x.x - это общедоступный IP-адрес хоста):

rule 7/0(match): block in on en0: x.x.x.x.80 > x.x.x.x.64460: Flags [R.], seq 1, ack 1, win 65535, length 0

А вот список правил

$ sudo pfctl -s rules
[sudo] password for paul: 
No ALTQ support in kernel
ALTQ related functions disabled
scrub-anchor "icefloor.nat" all fragment reassemble
anchor "icefloor.nat" all
block drop in quick from <emergingthreats> to any
block drop out quick from any to <emergingthreats>
block drop in log quick from <_blacklist> to any
block drop out log quick from any to <_blacklist>
block drop in quick from no-route to any
block drop in quick from urpf-failed to any label "uRPF"
block drop log inet all label "Generic_blocks_(IPv4)"
block drop log inet6 all label "Generic_blocks_(IPv6)"
anchor "icefloor.groupblocks" all label "Blocks"
anchor "inspector.blocks" all label "Temp_blocks"
anchor "icefloor.exceptions" all label "Logs_exceptions"
anchor "icefloor.portknocking" all label "Hidden_services"
anchor "icefloor.genericipv6" all
anchor "icefloor.inbound" all label "Local_services"
anchor "icefloor.outbound" all label "All_traffic"
anchor "icefloor.outbound_nat" all label "NAT_clients_traffic"
anchor "icefloor.custom_rules" all

Вы можете сказать мне, какой из них rule 7/0(match) является? И почему нельзя подключаться с localhost к публичному ключу (на любых открытых портах)? Это как-то связано с no-route е правило? Или два Generic_blocks_-правила?

Заранее спасибо,

Павел

Я тоже столкнулся с этой проблемой, и потребовалось немного тестирования и tcpdump чтобы во всем разобраться.

Чтобы ответить на ваш первый вопрос, какой rule 7/0(match) is: Это правило «Generic_blocks_ (IPv4)», автоматически добавляемое IceFloor для блокировки и регистрации всего неавторизованного трафика. Вы можете подтвердить номер этого правила, запустив pfctl -gsr как корень.

О причине, по которой он заблокирован. Входящее соединение - это то, что заблокировано. Это не имеет ничего общего с запретом маршрута или чем-то еще в видимый набор правил. Это связано с тем, как ваше DNS-имя обрабатывается локально. Таблица маршрутизации вашего аппарата (netstat -r) есть запись для вашего DNS-имени, указывающая на localhost на lo0 интерфейс.

Запись журнала содержит некоторую загадочную информацию, в частности block in on en0, что заставляет вас думать, что что-то происходит в интерфейсе en0. Однако делая tcpdump -nvvvi en0 tcp and port 80 показал, что на самом деле пакеты не передавались en0. Однако были обнаружены пакеты с tcpdump -nvvvi lo0 tcp and port 80, таким образом подтверждая, что трафик (как и ожидалось) происходил на lo0.

Конфигурация IceFloor по умолчанию (/Library/IceFloor/icefloor.conf) генерируется строкой, имеющей set skip on lo0. Сначала это кажется очень стандартной, желанной строкой (см. http://www.openbsd.org/faq/pf/options.html). Каждый второй кусок lo0 появились беспрепятственно по правилам pf. Догадываясь, я решил закомментировать эту строку и добавить новое правило (сразу после включения таблицы): pass quick on lo0. После перезагрузки с этой измененной конфигурацией мне удалось получить доступ к своему веб-серверу через свое DNS-имя (проблема решена). Так что похоже set skip on lo0 линия имеет некоторые проблемы.

Неудача с ручным изменением icefloor.conf файла заключается в том, что он не позволяет вам использовать вкладку Firewall в интерфейсе IceFloor. Поскольку сохранение новой конфигурации отменяет любые ручные изменения.