Considere o uso de DROP em vez de REJECT.
As cadeias têm uma política que diz o que deve acontecer com os pacotes que não correspondem a nenhuma regra, use isso em vez de uma regra final.
Essas regras não permitem que o SSH funcione, como você menciona apenas na cadeia INPUT, e o tráfego flui nos dois sentidos.
O rastreamento de conexão do kernel é bom o suficiente, que eu recomendaria apenas ter as regras '-m state - state ESTABLISHED, RELATED -j ACCEPT' em INPUT e OUTPUT. Então você só precisa considerar quem inicia as conexões ao adicionar novas regras.