У меня три виртуальных бокса.
1) Виртуальная машина ВМ-А который работает как маршрутизатор с двумя интерфейсами:
eth0 - 10.160.10.254
eth1 - 172.10.0.254
2) Виртуальная машина ВМ-Б который работает как внутренняя сеть с одним интерфейсом:
eth0 - 10.160.10.1 (и с gw до 10.160.10.254)
3) Виртуальная машина VM-C который работает как внешняя сеть с одним интерфейсом:
eth0 172.10.0.1 (и с gw до 172.10.0.254)
Я хочу разрешить ssh-подключения к маршрутизатору (VM-1), если они созданы для сервера во внутренней сети с iptables.
Итак, в маршрутизаторе vbox я использую эти две команды ниже:
iptables -A INPUT -s 10.160.10.4 -d 10.160.10.254 -p udp --dport 22 -j ACCEPT
iptables -A INPUT -s 10.160.10.4 -d 10.160.10.254 -p tcp--dport 22 -j ACCEPT
Чтобы проверить, работает ли это, я пытаюсь использовать netcat.
Во внутренней сети я использую nc -lu 22
и на машине внешней сети я использую nc -u 193.160.10.4 22
команда, но ничего не появляется.
Вы знаете, что должно появиться и как правильно использовать netcat для проверки правил iptables?
SSH использует TCP, а не UDP. Вы используете nc -u для отправки пакетов UDP. Просто попробуй
nc -vz <ip> <port>
Если вы хотите таким образом протестировать свои правила iptables, вы должны установить политику для цепочки INPUT на DROP или REJECT. Позаботьтесь о том, чтобы ранее вы разрешили TCP-пакеты на порт 22 от вашего источника. Вы можете разрешить это с IP-адреса конкретной машины, всей подсети или интерфейса.
Пример исходного ip:
iptables -A INPUT -s <source ip> -p tcp --dport 22 -j ACCEPT
Пример исходной подсети (принимает все от 192.168.xxx.xxx):
iptables -A INPUT -s 192.168.0.0/16 -p tcp --dport 22 -j ACCEPT
Пример исходного интерфейса (принимает каждый пакет, поступающий через интерфейс eth0):
iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
Установите политику для INPUT на DROP (действие по умолчанию, если ни одно из правил не применяется):
iptables -P INPUT DROP
С уважением
РЕДАКТИРОВАТЬ: И, конечно, то, что сказал Дэвид, но я предполагаю некоторые опечатки в вопросе, иначе не будет никакого рабочего соединения.
Ваша проблема состоит из двух частей:
Часть 1 - Конфигурация сети
Во-первых, вы используете 3 подсети. Я предполагаю, что вы используете их все как / 24: 10.160.10.0/24, 172.10.0.0/24 и 192.168.10.0/24
VM-A настроен для 10.160.10.0/24 и 172.10.0.0/24.
ВМ-Б настроен на 192.168.10.0/24
VM-C настроен на 172.10.0.0/24.
При такой конфигурации IP-адреса VM-B не сможет видеть ВМ-А или ВМ-Б. Вам нужно либо добавить подсеть 192.168.10.0/24 к VM-A (ваш маршрутизатор), либо изменить подсеть на VM-B на подсети 10.160.10.0/24 или 172.10.0.0/24. Это означает, что вы не можете настроить свой шлюз на подсеть, совершенно отличную от той, для которой вы установили IP-адрес на хосте. IP-адрес хоста и IP-адрес шлюза должны находиться в одной подсети.
Вы также должны знать, что 172.10.0.0/24 не является частной подсетью. В частный 172 диапазон: 172.16.0.0/12, который представляет собой IP-адреса: 172.16.0.0 - 172.31.255.255 [1]
Часть 2 - Конфигурация межсетевого экрана
iptables -A INPUT -s 10.160.10.4 -d 10.160.10.254 -p udp --dport 22 -j ПРИНЯТЬ
Исходный IP-адрес должен быть 10.160.10.1
Откуда взялся хост 10.160.10.4? В противном случае @Knorke хорошо разбирается в конфигурации iptables.