Negar acesso a uma porta do localhost no OSX

4

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?

    
por Vlad Zloteanu 13.11.2012 / 18:01

2 respostas

1

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
    
por 13.11.2012 / 18:57
17

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 :

  1. carregando o conjunto original de regras:

    sudo pfctl -f /etc/pf.conf 
    
  2. 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.
    
por 13.11.2012 / 21:34