
Я настроил pf с помощью IceFloor на моей системе OSX 10.9, работающей под управлением Server 3.0.2. Все вроде бы в порядке, за исключением того, что я не могу подключиться к системе, используя DNS-имя или публичный IP с localhost. Например, я могу подключиться к http/port 80 из интернета, но не с самой машины, используя публичный IP. Подключение с машины к localhost/127.0.0.1 работает. Вот журнал, который я получаю (xxxx — публичный 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
правилом f? Или с двумя Generic_blocks_
правилами?
Заранее спасибо,
Павел
решение1
Я тоже столкнулся с этой проблемой, и мне потребовалось немного времени на тестирование, tcpdump
чтобы во всем разобраться.
Чтобы ответить на ваш первый вопрос, какой из них rule 7/0(match)
: Это правило "Generic_blocks_(IPv4)", автоматически добавленное IceFloor для блокировки и регистрации всего неавторизованного трафика. Вы можете подтвердить номер этого правила, запустив его pfctl -gsr
как root.
По поводу причины блокировки. Блокируется входящее соединение. Это не имеет ничего общего с no-route или чем-то еще ввидимыйruleset. Это связано с тем, как ваше 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. Поскольку сохранение новой конфигурации переопределит любые ручные изменения.