5

Я хочу протестировать запасную стратегию для моего драйвера memcached (в случае, если порт защищен брандмауэром). Как я могу запретить доступ к определенному порту на 127.0.0.1?

2 ответа2

18

Вы можете использовать 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

Когда вы закончите, вы можете удалить правило:

  1. либо загружаем оригинальный набор правил:

    sudo pfctl -f /etc/pf.conf 
    
  2. или удаление правила подобным образом, правило было добавлено:

    (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.
1

Пример для Mac OS X 10.6 (Snow Leopard)

чтобы запретить подключения к локальному хосту, порт SSH (= 22, чтение из /etc/services):

sudo ipfw add deny tcp from any to localhost ssh

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .