Com as regras do IPTables, a ordem é 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, qualquer pacote que passa pelas cadeias INPUT e OUTPUT começa a ser descartado assim que a política padrão é definida. Este é também, aliás, porque você recebeu o erro mensagem que você fez. O que está acontecendo é isto:
- A política de DROP padrão é aplicada
- IPTables recebe um nome de host como destino
- O IPTables tenta uma pesquisa de DNS em 'serverfault.com'
- A pesquisa de DNS é bloqueada pela ação DROP
Embora as opções de origem / destino aceitem nomes de host, isso não é recomendado. Para citar a página man,
Hostnames will be resolved once only, before the rule is submitted to the kernel. Please note that specifying any name to be resolved with a remote query such as DNS is a really bad idea.
Slillibri acertou na cabeça que sua resposta, você perdeu a regra de DNS ACCEPT. No seu caso, não importa, mas geralmente eu definiria a política padrão mais tarde no processo. A última coisa que você quer é trabalhar remotamente e permitir o SSH após ativar uma negação padrão.
Além disso, dependendo da sua distribuição, você deve salvar suas regras de firewall de modo que elas sejam automaticamente aplicadas na hora de início.
Sabendo de tudo isso e reorganizando seu roteiro, aqui está o que eu recomendaria.
# Allow loopback
iptables -I INPUT 1 -i lo -j ACCEPT
# Allow DNS
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
# 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
# Drop everything
iptables -P INPUT DROP
iptables -P OUTPUT DROP