Preciso configurar minha máquina para permitir apenas o tráfego HTTP de / para serverfault.com. Todos os outros sites, portas de serviços não estão acessíveis. Eu vim com estas regras do iptables:
#drop everything
iptables -P INPUT DROP
iptables -P OUTPUT DROP
#Now, allow connection to website serverfault.com on port 80
iptables -A OUTPUT -p tcp -d serverfault.com --dport 80 -j ACCEPT
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
#allow loopback
iptables -I INPUT 1 -i lo -j ACCEPT
Não funciona muito bem:
Depois de largar tudo e seguir para a regra 3:
iptables -A OUTPUT -p tcp -d serverfault.com --port 80 -j ACEITAR
Eu recebo este erro:
iptables v1.4.4: host/network `serverfault.com' not found
Try `iptables -h' or 'iptables --help' for more information.
Você acha que está relacionado ao DNS? Devo permitir também? Ou devo apenas colocar endereços IP nas regras? Você acha que o que estou tentando fazer poderia ser alcançado com regras mais simples? Quão?
Gostaria de receber qualquer ajuda ou dicas sobre isso. Muito obrigado!
Respostas:
Com as regras do IPTables, o pedido é importante. As regras são adicionadas e aplicadas em ordem. Além disso, ao adicionar regras manualmente, elas são aplicadas imediatamente. Assim, no seu exemplo, todos os pacotes passando pelas cadeias INPUT e OUTPUT começam a ser descartados assim que a política padrão é definida. Aliás, também é por isso que você recebeu a mensagem de erro que recebeu. O que está acontecendo é o seguinte:
Embora as opções de origem / destino aceitem nomes de host, isso é altamente desencorajado. Para citar a página de manual,
Slillibri bateu na unha na cabeça que sua resposta, você perdeu a regra de DNS ACEITAR. No seu caso, isso não importa, mas geralmente eu definiria a política padrão posteriormente no processo. A última coisa que você deseja é trabalhar remotamente e permitir o SSH após ativar uma negação padrão.
Além disso, dependendo da sua distribuição, você poderá salvar suas regras de firewall para que sejam aplicadas automaticamente na hora de início.
Sabendo de tudo isso e reorganizando seu script, eis o que eu recomendaria.
fonte
iptables -P
declarações em qualquer lugar do seu script, pois as políticas de cadeia são aplicadas apenas quando os pacotes "caem" no final de uma cadeia. Normalmente, coloco as instruções de política (normalmenteDROP
políticas) na parte superior dos meus scripts do iptables.sudo iptables -I OUTPUT 1 -o lo -j ACCEPT
. Isso não deveria ser adicionado?Adicionar
para permitir pesquisas de DNS.
fonte
Esse tipo de requisito pode ser melhor tratado com um proxy da web e / ou filtro. Dansgaurdian pode ser configurado para fazer isso. Você precisará usar regras NAT para forçar seu tráfego através do filtro.
Usar o iptables para filtrar permitirá que todos os sites estejam disponíveis nos endereços IP relevantes. Normalmente, esse é um pequeno subconjunto de toda a web.
fonte
iptables
é provavelmente a ferramenta errada a ser usada aqui, pois não lida particularmente bem com nomes DNS. Um proxy da web com configurações de filtro apropriadas é um ajuste muito melhor.Receio que o iptables não funcione nesse nível, ele se preocupa apenas com o endereço IP, não com o nome do host. Se você deseja bloquear o acesso a outros hosts virtuais de nomes no mesmo IP, precisará colocar arquivos .htaccess.
fonte
Você precisa configurar isso no seu servidor da web. O iptables é um filtro de pacotes. As transações HTTP enviam o nome do site (ou seja, stackoverflow) como parte da carga útil do TCP (ou seja, não como parte do cabeçalho TCP, que é o que o iptables lê facilmente).
Dado isso, e o fato de que as transações HTTP quase certamente se espalharão por vários pacotes (ou seja, você não pode simplesmente corresponder a uma sequência no cabeçalho HTTP), isso é muito melhor tratado pela configuração do servidor da Web ou por um proxy à frente. disso.
Seria útil conhecer o raciocínio por trás disso, existem algumas outras alternativas:
fonte