У меня есть 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?