Я принял предложение eckes и попытался записать, что DROPped политикой INPUT. Поэтому я добавил следующее правило как последнее в цепочке INPUT:
iptables -A INPUT -j LOG --log-prefix "IPTables DROP: wrong drop " --log-level 4
Это показало, что на самом деле отбрасывается много вещей, чего, вероятно, не следует. Примером является эта строка из журнала:
12 декабря 22:45:13 myservername kernel: [41817.875804] IPTables DROP: неправильное падение 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
Я был подключен к IRC-серверу 149.56.134.238 (cherryh.freenode.net) во время теста с моего ноутбука с использованием переадресации динамического порта ssh, как описано. Я потерял соединение после того, как правила iptables были загружены на сервер (VPS).
Итак, я снова воспользовался советом eckes и попытался принять ESTABLISHED, RELATED пакеты, добавив эту строку в качестве последнего правила цепочки (но до упомянутого выше правила отладки LOG).
iptables -A INPUT -m conntrack --cstate ESTABLISHED,RELATED -j ACCEPT
Задача решена. Я полагаю, что извлеченный урок состоит в том, что первый шаг с проблемами iptables - проверить, что на самом деле отбрасывается!