В этой статье поговорим о пробросе портов или IP Forwarding, используя ОС Astra Linux и утилиту iptables.
Начальные данные
У нас имеется компьютер под управлением Astra Linux с двумя сетевыми интерфейсами. Также в сети есть ещё одна машина с одним сетевым интерфейсом, которой выход в Интернет недоступен.
Требуется пробросить tcp порт (2222) с белого ip-адреса расположенного на ПК подключенного к Интернету, на серый ip-адрес Локальной сети порт (22).
Чаще всего проброс трафика используется, если мы находимся в локальной сети и от внешнего мира отделены шлюзом. Для того, чтобы открыть доступ для локальных служб (ssh, web, ftp и т.д.), нам необходимо пробросить порты. Поскольку в качестве шлюза мы будем использовать Astra Linux, то осуществлять данные действия будем с помощью встроенной утилиты iptables.
Алгоритм проброса портов в iptables.
В принципе все довольно просто, необходимо добавить всего несколько правил в таблицу маршрутизации iptables. Но для начала нам нужно включить форвардинг пакетов на ПК подключенного к Интернету. Для этого открываем терминал (ctrl+t) и вводим следующие команды:
sudo echo 1 > /proc/sys/net/ipv4/ip_forward
sudo sysctl -p
Для того чтобы каждый раз не вводить команды, отредактируем файл /etc/sysctl.conf
sudo nano /etc/sysctl.conf
Ищем там строку #net.ipv4.ip_forward=1
, и убираем знак комментария.
net.ipv4.ip_forward=1
Также необходимо узнать названия наших сетевых интерфейсов и их IP адреса. Для этого введем следующую команду:
ifconfig -a
Из вывода нас интересует интерфейсов eth0 с ip-адресом 80.81.82.83 и eth1 — 10.0.7.1. Первый интерфейс подключен к всемирной паутине, а второй к локальной сети.
Настройка port forwarding в Astra Linux
Для перенаправление tcp порта 2222 на tcp порт 22 другой машины, необходимо добавить следующие правила iptables:
sudo iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
Это правило разрешает прохождение входящих пакетов внутрь сети.
Теперь опишем форвардинг (forwarding) пакетов:
sudo iptables -t nat -A PREROUTING -p tcp -d 80.81.82.83 --dport 2222 -j DNAT --to-destination 10.0.7.2:22
sudo iptables -t nat -A POSTROUTING -p tcp --sport 22 --dst 10.0.7.2 -j SNAT --to-source 80.81.82.83:2222
- Первая строка подменяет IP адрес приемника (белый IP) на внутренний (серый IP)
- Вторая адрес отправителя (серый IP) на внешний (белый IP).
- 10.0.7.2 — IP адрес машины в локальной сети, на который перенаправляет трафик.
- 80.81.82.83 — внешний IP адрес нашего сервера.
- 22 — внутренний порт локальной машины
- 2222 — внешний порт для подключения.
- tcp — может принимать значения tcp или udp в зависимости от того какой порт вам необходимо прикинуть.
Для сохранения наших правил необходимо создать файл и подгружать его при каждой перезагрузки системы, иначе правила iptables которые мы написали слетять. Для этого набираем в терминале следующее:
sudo nano /etc/nat
содержимое файла по первому примеру:
#!/bin/sh
# Перенаправляем ssh с 2222 на 22 IP-10.0.7.2
iptables -t nat -A PREROUTING -p tcp -d 80.81.82.83 --dport 2222 -j DNAT --to-destination 10.0.7.2:22
iptables -t nat -A POSTROUTING -p tcp -dst 10.0.7.2 --sport 22 -j SNAT --to-source 80.81.82.83:2222
Далее открываем файл interfaces
sudo nano /etc/network/interfaces
И добавляем в конце следующую строчку:
pre-up /etc/nat
Данное выражение подгрузить правила iptables после перезагрузки системы.
Как посмотреть правила iptables
Посмотреть текущие правила iptables можно с помощью команды:
sudo iptables -L -t nat
Пример:
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- anywhere 80.81.82.83 tcp dpt:2222 to:10.0.7.2:22
Chain POSTROUTING (policy ACCEPT)
SNAT tcp -- 10.0.7.2 anywhere tcp spt:ssh to:80.81.82.83:2222
Вот и все, на этом проброс портов в Astra Linux с помощью iptables завершено.
[endtxt]