Назад | Перейти на главную страницу

iptables правило ssh не работает

У меня есть 2 виртуальные машины, использующие виртуальный ящик. Одна виртуальная машина работает как роутер. Я пытаюсь отключить все коммуникации, входящие в маршрутизатор, за исключением некоторых услуг. IP-интерфейсы, которые у меня есть на каждой машине:

Виртуальная машина 1, работающая как маршрутизатор:

eth1: 193.136.200.254 
eth2: 10.10.0.254 
eth3: 10.254.0.254 

Виртуальная машина 2:

eth1: 10.10.0.2 
eth1:0: 10.10.0.3 
...

Я хочу принимать ssh-подключения к маршрутизатору, если они исходят на машине с ip 10.10.0.3. Итак, на маршрутизаторе я определяю правила:

iptables -P INPUT DROP
iptables -A INPUT -p tcp -s 10.10.0.3 -d 10.10.0.254 --dport 22 -j ACCEPT

И теперь я пытаюсь проверить, работает ли это с помощью netcat. Итак, на маршрутизаторе я запускаю команду:

nc -l 10.10.0.254 22

И в виртуальной машине 2 я запускаю:

nc 10.10.0.254 22

Затем я пишу случайное слово на одной машине, но оно не появляется на другой машине. Так что это не работает. Вы знаете, что не так?

Если я протестирую эти команды netcat перед тем, как поместить политику с drop, она работает, то, что я пишу на одной машине, появится на другой машине.

Результат iptables -L:

Chain INPUT (policy DROP)
target     prot opt      source        destination
ACCEPT     tcp  ---      10.10.0.2     10.10.0.254     tcp dpt:ssh

Какой исходный адрес печатается tcpdump для входящего соединения netcat на порту 22 с виртуальной машины 1?

На виртуальной машине 2:

iptables -F
tcpdump -n -i eth3 'port 22'

Возможно, маршрут по умолчанию на виртуальной машине 1 связан с интерфейсом eth2, поэтому весь исходящий трафик в этой подсети будет иметь адрес источника этого интерфейса.

Что дает выход route -n показать на Виртуальной машине 1?