iptables é muito baixo nível, e quando você está escrevendo regras iptables, você está lidando com pacotes IP brutos. Isso tem várias implicações, uma das quais você encontrou.
Existem casos de uso perfeitamente válidos para quando o tráfego de saída deve ser permitido, mas qualquer tráfego de entrada correspondente não deve passar pelo firewall; ou o contrário, o tráfego de entrada permitido, mas a saída não é permitida. Um exemplo comum para isso são os servidores de armazenamento de logs (que, por sua vez, são úteis para auditoria): o tráfego de log deve ser permitido em , mas nenhum deve ser permitido fora . No caso extremo, o tráfego de log deve ser permitido em , mas nada mais deve ser permitido dentro ou fora .
Por iptables não fazer suposições sobre o que você quer, você não apenas aumenta a segurança, mas também o desempenho, porque o conjunto de regras pode ser otimizado para exatamente o que você quer que o firewall realmente faça.
Se você quiser permitir o tráfego de entrada que está relacionado a uma conexão ou sessão já estabelecida, basta informá-lo:
sudo iptables -I INPUT 1 -m state --state RELATED,ESTABLISHED -j ACCEPT
ou para IPv6:
sudo ip6tables -I INPUT 1 -m state --state RELATED,ESTABLISHED -j ACCEPT
Ajuste a parte -I INPUT 1
conforme necessário (por exemplo, se você tiver outras regras que devem ter precedência sobre a regra geral de permitir tráfego relacionado a uma conexão ou sessão estabelecida).