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

Проверьте, работают ли правила iptables

У меня три виртуальных бокса.

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]

  1. https://www.arin.net/knowledge/address_filters.html

Часть 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.