Eu peguei a sugestão do eckes e tentei registrar o que é DROPPUTO pela política INPUT. Então, adicionei a seguinte regra como última na cadeia INPUT:
iptables -A INPUT -j LOG --log-prefix "IPTables DROP: wrong drop " --log-level 4
Isso mostrou que muitas coisas estavam sendo descartadas, o que provavelmente não deveria acontecer. Um exemplo é esta linha do log:
Dec 12 22:45:13 myservername kernel: [41817.875804] IPTables DROP: drop errado IN = ens18 OUT = MAC = aa: 43: 9d: 07: 06: a7: 00: 1b: 21: ad: d0: 5d: 08: 00 SRC = 149.56.134.238 DST = 30.123.234.6 LEN = 113 TOS = 0x00 PREC = 0x00 TTL = 49 ID = 471 DF PROTO = TCP SPT = 6667 DPT = 47054 WINDOW = 227 RES = 0x00 ACK PSH URGP = 0
Eu estava conectado ao servidor de IRC 149.56.134.238 (cherryh.freenode.net) no momento do teste do meu laptop usando o encaminhamento dinâmico de porta ssh, conforme descrito. Perdi a conexão depois que as regras do iptables foram carregadas no servidor (VPS).
Então, eu tomei o conselho de eckes novamente e tentei aceitar pacotes ESTABLISHED, RELACIONADOS adicionando esta linha como a última regra da cadeia (mas antes da regra de LOG de depuração mencionada acima).
iptables -A INPUT -m conntrack --cstate ESTABLISHED,RELATED -j ACCEPT
Problema resolvido. Eu acho que a lição aprendida é que o primeiro passo com os problemas do iptables é checar o que está realmente sendo descartado!