A regra estava bem, esqueci de instalar o open-ssh.
Alterei todas as cadeias do iptables para DROP
e criei uma regra para permitir ssh do computador (10.21.0.40, oculto NAT, eth1) para o Ubuntu Server (172.16.21.1, static ip, eth0), aqui está a regra:
sudo iptables -I INPUT 1 -p tcp -dport 22 -i eth1 -s 10.21.0.40 -d 172.16.21.1 -m conntrack --ctstate NEW -j ACCEPT
e quando estou tentando conectar do computador ao servidor ubuntu no ssh, recebo o erro:
connect to host 172.16.21.1 port 22: Connection refused
por que isso acontece?
A regra estava bem, esqueci de instalar o open-ssh.
A regra que você citou não funcionaria devido a erros de sintaxe. Além disso, você tinha dois outros problemas:
O conjunto completo de regras para adicionar na máquina que você deseja aceitar conexões SSH de entrada:
# Flush all the rules in all tables
iptables -F
iptables -t nat -F
# Delete all user defined tables
iptables -X
# Set default policies (you normally leave OUTPUT as 'ACCEPT')
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
# Allow local connections
iptables -A INPUT -i lo -j ACCEPT
# Allow ICMP traffic (optional)
iptables -A INPUT -i lo -j ACCEPT
# Allow TCP sessions that are already established
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Finally, allow incoming SSH connections.
iptables -A INPUT -p tcp --dport 22 -j ACCEPT