Enquanto você pode estar usando o Ubuntu, esta questão não é específica do Ubuntu, mas específica do Linux, então eu acho que seria melhor perguntar no ServerFault.
Responda à pergunta original (antes de OP editá-la)
Sua regra na cadeia INPUT está correta, mas a regra na cadeia OUTPUT está errada. Você quer deixar lá os pacotes endereçados ao IP mencionado, não os que vêm dele (o que é inútil nessa cadeia).
É por isso que você precisa alterar -s
( --source
) para -d
( --destination
) na regra:
# iptables -A OUTPUT -d 172.21.7.188 -j DROP
Mas mesmo quando você estava perdendo apenas pacotes de entrada, era meio que suficiente, pode-se dizer. É verdade que o ping estava retornando (a resposta de eco do ICMP estava chegando ao seu host) sem a linha acima, e consultar tcpdump ou wireshark mostraria datagramas relacionados a ping (ou seja, enviados e recebidos), mas o aplicativo ping
não estava recebendo datagramas de entrada, porque eles foram descartados.
Obviamente, é bastante imprudente descartar apenas pacotes de entrada na maioria dos casos, porque isso leva a um estado diferente em ambas as extremidades da conexão (no nível da conexão ou no nível do aplicativo).
Responda à pergunta editada
Se, após a correção, ele ainda não funcionar, suspeito que seu firewall já tenha algumas regras que tornem suas novas regras inacessíveis. A maneira como você adicionou suas regras as torna anexadas no final da cadeia. Você deve remover suas novas regras primeiro (os mesmos comandos usados para anexar, mas altere -A
para -D
).
Agora, adicione suas regras ao início das cadeias (ou seja, insira-as na regra número 1) para as quais elas são adequadas (os mesmos comandos para acrescentar, altere -A
para -I
):
# iptables -I INPUT -s 172.21.7.188 -j DROP
# iptables -I OUTPUT -d 172.21.7.188 -j DROP
Agora deve funcionar.