IPTABLES: No route to host и порядок правил фаервола

Автор: | 11/07/2014
 

firewallПри добавлении нового порта для SSH возникает ошибка при подключении:

$ ssh -p 2222 user@77.***.***.20
ssh: connect to host 77.***.***.20 port 2222: No route to host

Хотя правило в IPTABLES добавлено:

# iptables -A INPUT -p tcp --dport 2222 -m state --state NEW -j ACCEPT

И присутствует в списке:

# iptables -L -n --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
...
20 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
21 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2222 state NEW

Тут следует обратить внимание на порядок правил – 20-ым указано “REJECT all“, тогда как при добавлении правила с опцией -A оно будет append, т.е. – добавлено в конец списка.

Соответственно, первым срабатывает правило REJECT, и пакет до порта 2222 просто не доходит.

Что бы исправить это – удаляем старое правило:

# iptables -D INPUT 21

И добавляем его заново, но с опцией -I (insert) и с указанием номера:

# iptables -I INPUT 20 -p tcp --dport 2222 -m state --state NEW -j ACCEPT

Смотрим список сейчас:

# iptables -L -n --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
...
20 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:2222 state NEW
21 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Теперь правило с REJECT переместилось на 21 место, и подключение работает нормально:

$ ssh -p 2222 user@77.***.***.20
user@77.***.***.20's password:
Last login: Thu Jul 3 09:33:13 2014 from 37.115.113.56
[user@venti ~]$

Не забываем сохранить правила:

# service iptables save
iptables: Правила межсетевого экрана сохраняются в /etc/sys[ OK ]ptables: