Я хочу протестировать запасную стратегию для моего драйвера memcached (в случае, если порт защищен брандмауэром). Как я могу запретить доступ к определенному порту на 127.0.0.1?
2 ответа
Вы можете использовать pfctl
.
OS X 10.7 "Lion" и более поздние версии используют OpenBSD PF (Packet Filter). Псевдо-устройство с именем /dev/pf
позволяет инструментам пространства пользователя настраивать фильтр пакетов. Команда pfctl
обеспечивает большую часть функциональности.
Для фильтрации порта 1234 в интерфейсе обратной связи вы можете использовать правило, подобное следующему:
block drop quick on lo0 proto tcp from any to any port = 1234
Это правило блокирует весь входящий / исходящий трафик на lo0
для порта 1234 (quick
означает, что в этом контексте, если это правило соответствует, дальнейшее правило не должно применяться).
Команда для загрузки правила в PF:
(sudo pfctl -sr 2>/dev/null; echo "block drop quick on lo0 proto tcp from any to any port = 1234") | sudo pfctl -nf -
Команда pfctl -sr 2>/dev/null
выводит список всех текущих правил (и отправляет довольно раздражающее сообщение об ошибке. No ALTQ support in kernel ALTQ related functions disabled
в /dev/null
). echo
добавляет вышеприведенное правило к выводу, который передается в pfctl
. Опция -n
означает, что не применяется, просто проверьте .
Если сообщение об ошибке отсутствует (кроме вышеупомянутого сообщения « No ALTQ support
и предупреждения « pfctl: Use of -f option, could result in flushing of rules present in the main ruleset added by the system at startup
), вы можете применить правило:
(sudo pfctl -sr 2>/dev/null; echo "block drop quick on lo0 proto tcp from any to any port = 1234") | sudo pfctl -f - 2>/dev/null
Эта команда отличается от предыдущей тем, что я удалил -n
. Обратите внимание, что вам, возможно, придется добавить опцию -e
чтобы включить фильтр пакетов (спасибо за ваш комментарий, casey): (sudo pfctl -sr 2>/dev/null; echo "block drop quick on lo0 proto tcp from any to any port = 1234") | sudo pfctl -e -f - 2>/dev/null
Теперь вы можете перечислить правила, чтобы убедиться, что они были добавлены правильно:
sudo pfctl -sr 2>/dev/null
(...)
block drop quick on lo0 proto tcp from any to any port = 1234
Когда вы закончите, вы можете удалить правило:
либо загружаем оригинальный набор правил:
sudo pfctl -f /etc/pf.conf
или удаление правила подобным образом, правило было добавлено:
(sudo pfctl -sr 2>/dev/null | fgrep -v "block drop quick on lo0 proto tcp from any to any port = 1234") | sudo pfctl -f -
(Я протестировал всю процедуру на OS X 10.8.2 "Горный лев" и работал без нареканий.)
Вы можете найти больше информации в этом прекрасном введении: http://nomoa.com/bsd/gateway/pf/valid/pfctl.html.
ipfw
по-прежнему включен в OS X 10.7 и 10.8, но не рекомендуется:
IPFW(8) BSD System Manager's Manual IPFW(8)
NAME
ipfw -- IP firewall and traffic shaper control program (DEPRECATED)
SYNOPSIS
(...)
DESCRIPTION
Note that use of this utility is DEPRECATED. Please use pfctl(8) instead.
Пример для Mac OS X 10.6 (Snow Leopard)
чтобы запретить подключения к локальному хосту, порт SSH (= 22, чтение из /etc/services
):
sudo ipfw add deny tcp from any to localhost ssh