Странно, но правила выглядят рабочими. Может что-то не так на стороне клиента?
Вместо iptables -A INPUT -j DROP
используйте iptables -P INPUT DROP
Рекомендую пользоваться:
iptables-save > ipt.rules
iptables-restore < ipt.rules
Попробуйте посмотреть лог. Надо перед ACCEPTами добаивить:
iptables -A INPUT -p tcp --dport 22 -j LOG
iptables -A OUTPUT -p TCP --sport 22 -j LOG
и потом
journalctl -f
SSH-клиент работает?
Если -P OUTPUT ACCEPT, работает?
Нужно посмотреть вывод на сервере и клиенте
ip a
iptables-save
netstat -plnt
Ну и вообще нет смысла на хосте ограничивать OUTPUT. Это логично делать на пограничном МЭ. Софт сам будет слать данные в сеть? Зачем эти ограничения? Если INPUT будет фильтроваться, значит и ответных пакетов не будет. А если злоумышленник взломает сервер, то логично, что он сможет добавить исключение для своего приложения.