Проброс портов (port forwarding) в Linux используя iptables

В этой статье поговорим о том, как можно перебросить порт с одного IP адреса (белого) на другой IP адрес (серый) использую утилиту iptables.

У нас имеется компьютер под управлением linux, выступающий в роли маршрутизатора с одним внешним интерфейсом для доступа в Интернет и внутренним интерфейсом локальной сети. Требуется пробросить tcp порт (2121) с белого ip-адреса на серый ip-адрес порт (21).

Чаще всего проброс трафика используется, если мы находимся в локальной сети и от внешнего мира отделены шлюзом. Для того, чтобы открыть доступ для локальных служб (ssh, web, ftp и т.д.), нам необходимо пробросить порты. Поскольку в качестве шлюза мы будем использовать сервер на Linux, то осуществлять данные действия будем с помощью утилиты iptables.

Алгоритм проброса портов в iptables.

В принципе все довольно просто, необходимо добавить всего два правила в таблицу маршрутизации iptables. Но для начала нам нужно включить форвардинг пакетов на нашем сервере:

sudo echo 1 > /proc/sys/net/ipv4/ip_forward

Для автоматического включения открываем файл /etc/sysctl.conf и ищем там строку и убираем знак комментария:
# net.ipv4.ip_forward=1:

sudo nano /etc/sysctl.conf
net.ipv4.ip_forward=1

Настройка port forwarding на Linux

Итак, приступим. Для выполнения поставленной задачи (перенаправление порта 2121 во внутреннюю сеть на порт 21) необходимо добавить следующие правила iptables:

sudo iptables -A FORWARD -i enp0s3 -o enp0s8 -j ACCEPT

Это правило разрешает прохождение входящих пакетов внутрь сети.

Теперь опишем форвардинг (forwarding) пакетов:

sudo iptables -t nat -A PREROUTING -p tcp -d 80.81.82.83 --dport 2121 -j DNAT --to-destination 10.0.7.2:21
iptables -t nat -A POSTROUTING -p tcp -s 10.0.7.2 --sport 21 -j SNAT --to-source 80.81.82.83:2121

Первая строка подменяет IP адрес приемника (белый IP) на внутренний (серый IP), а вторая адрес отправителя (серый IP) на внешний (белый IP).

Для сохранения наших правил необходимо создать файл и подгружать его при каждой перезагрузки системы, иначе правила 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 -s 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 -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

Вот и все, на этом рассмотрение проброса портов в операционных системах под управлением Linux с помощью iptables завершено.

Если есть вопросы, то пишем в комментариях и не забываем проголосовать за статью.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Проброс портов (port forwarding) в Linux используя iptables
5 (100%) 3 votes

Оставить комментарий

avatar
  Подписаться  
Уведомление о
Меню

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Рейтинг@Mail.ru