Exemplo para o Mac OS X 10.6 (Snow Leopard)
para negar conexões ao localhost, porta SSH (= 22, leitura de /etc/services
):
sudo ipfw add deny tcp from any to localhost ssh
Eu quero testar uma estratégia de fallback para meu driver do memcached (caso a porta esteja protegida por firewall). Como posso negar acesso a uma porta específica em 127.0.0.1?
Você pode usar pfctl
.
OS X 10.7 "Lion" e depois use o OpenBSD PF (Filtro de Pacotes). Um pseudo-dispositivo chamado /dev/pf
permite que as ferramentas de espaço do usuário configurem o filtro de pacotes. O comando pfctl
fornece a maior parte da funcionalidade.
Para filtrar a porta 1234 na interface de loopback, você pode usar uma regra como esta:
block drop quick on lo0 proto tcp from any to any port = 1234
Essas regras bloqueiam todo o tráfego de entrada / saída em lo0
para a porta 1234 ( quick
significa, nesse contexto, que se essa regra corresponder, nenhuma outra regra deverá ser aplicada).
O comando para carregar a regra no PF é:
(sudo pfctl -sr 2>/dev/null; echo "block drop quick on lo0 proto tcp from any to any port = 1234") | sudo pfctl -nf -
O comando pfctl -sr 2>/dev/null
lista todas as regras atuais (e envia a mensagem de erro muito irritante No ALTQ support in kernel ALTQ related functions disabled
to /dev/null
). O echo
adiciona a regra acima à saída, que é canalizada para pfctl
. Opção -n
significa não se aplica, apenas marque .
Se não houver mensagem de erro (além da mensagem No ALTQ support
mencionada acima e do aviso pfctl: Use of -f option, could result in flushing of rules present in the main ruleset added by the system at startup
), você poderá aplicar a regra:
(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
Este comando é diferente do anterior, em que removi -n
. Note que você pode ter que adicionar a opção -e
para habilitar o filtro de pacotes (obrigado pelo seu comentário , 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
Você pode listar agora as regras para verificar se ela foi adicionada corretamente:
sudo pfctl -sr 2>/dev/null
(...)
block drop quick on lo0 proto tcp from any to any port = 1234
Quando terminar, você pode excluir a regra :
carregando o conjunto original de regras:
sudo pfctl -f /etc/pf.conf
ou removendo a regra de maneira semelhante, a regra foi adicionada:
(sudo pfctl -sr 2>/dev/null | fgrep -v "block drop quick on lo0 proto tcp from any to any port = 1234") | sudo pfctl -f -
(Eu testei todo o procedimento no OS X 10.8.2 "Mountain Lion" e trabalhei sem problemas.)
Você pode encontrar mais informações nesta excelente introdução: link .
ipfw
ainda está incluído no OS X 10.7 e 10.8, mas está obsoleto:
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.