Alt linux проброс портов

Проброс портов iptables в Linux

С увеличением количества компьютеров, необходимое количество IP адресов увеличивалось и диапазона IPv4 начало не хватать. Тогда была разработана технология NAT, которая позволяет нескольким компьютерам объединяться в локальную сеть и быть доступными из внешней сети по IP адресу маршрутизатора.

Когда пакет приходит на маршрутизатор, выполняется выяснение какому устройству он был адресован и замена ip адресата на нужный. Кроме переопределения IP получателя и отправителя, NAT может изменять порты. Это называется проброс портов и может быть полезно если вы создали частную сеть, но все же хотите пропускать некоторые виды трафика. Всем этим можно управлять с помощью iptables. В этой статье мы рассмотрим как выполняется проброс портов iptables в Linux.

Как работает NAT?

Чтобы иметь возможность общаться с другими компьютерами в сети компьютер должен иметь уникальный ip адрес. Но поскольку количество адресов уменьшалось нужно было придумать технологию, которая позволяла бы давать один адрес нескольким машинам. И была придумана технология NAT или Network Address Translation.

Все работает очень просто. Компьютер имеет свой адрес в локальной сети, он не виден из интернета. Когда ему нужно отправить пакет, он отправляет его роутеру, затем роутер подменяет адрес отправителя на свой и передает пакет дальше к цели. Параллельно роутер запоминает с какого локального компьютера был отправлен пакет на этот адрес. Дальше ответный пакет приходит роутеру, он подменяет адрес назначения на адрес нужного компьютера и отдает пакет в локальную сеть.

Недостаток в том, что инициировать подключение извне нельзя, потому что маршрутизатор просто еще не знает к кому обращаются. Тут на помощь приходит проброс портов. Мы можем сказать роутеру: при поступлении пакетов на порт 80 перенаправлять их на порт 80 компьютера 192.168.1.2. Теперь адрес отправителя и порт будет заменяться на указанный нами и пакет будет передан туда, куда нужно. Если на маршрутизаторе установлен Linux, то все это можно настроить с помощью iptables.

Проброс портов в iptables

Первое что нужно сделать, это включить переадресацию трафика на уровне ядра, если это еще не сделано. Для этого выполните:

echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

Чтобы настройка сохранялась после перезагрузки используйте такую команду:

sudo sysctl -w net.ipv4.ip_forward=1

Мы не будем здесь подробно рассматривать правила iptables и значение каждой опции, поэтому перед тем, как читать дальше вам лучше ознакомиться со статьей iptables для начинающих. Дальше рассмотрим проброс портов iptables nat.

Настройка прохождения пакетов

Сначала мы рассмотрим как разрешить прохождение пакетов через маршрутизатор. Для этого в брандмауэре есть цепочка FORWARD. По умолчанию для всех пакетов применяется правило DROP, которое означает что все нужно отбросить. Сначала разрешим инициализацию новых соединений, проходящих от eth0 до eth1. Они имеют тип contrack и представлены пакетом SYN:

Читайте также:  Page table in linux

sudo iptables -A FORWARD -i eth0 -o eth1 -p tcp —syn —dport 80 -m conntrack —ctstate NEW -j ACCEPT

Действие ACCEPT означает, что мы разрешаем это соединение. Но это правило разрешает только первый пакет, а нам нужно пропускать любой следующий трафик в обоих направлениях для этого порта (80). поэтому добавим правила для ESTABLIHED и RLEATED:

sudo iptables -A FORWARD -i eth0 -o eth1 -m conntrack —ctstate ESTABLISHED,RELATED -j ACCEPT
$ sudo iptables -A FORWARD -i eth1 -o eth0 -m conntrack —ctstate ESTABLISHED,RELATED -j ACCEPT

Дальше явно установим что наша политика по умолчанию — DROP:

sudo iptables -P FORWARD DROP

Это еще не проброс портов, мы только разрешили определенному трафику, а именно на порт 80, проходить через маршрутизатор на другие машины локальной сети. Теперь настроим правила, которые будут отвечать за перенаправление трафика.

Модификация пакетов в iptables

Далее мы настроим правила, которые будут указывать как и куда нужно перенаправить пакеты, приходящие на порт 80. Сейчас маршрутизатор может их пропускать в сеть, но он еще не знает куда. Для этого нам нужно будет настроить две вещи — модификацию адреса назначения (Destination) DNAT и модификацию адреса отправителя (Source) SNAT.

Правила DNAT настраиваются в цепочке PREROUTING, в таблице NAT. Эта операция изменяет адрес назначения пакета чтобы он достиг нужной нам цели, когда проходит между сетями. Клиенты будут отправлять пакеты нашему маршрутизатору, и им не нужно знать топологию внутренней сети. Пакет автоматически будет приходить нашему веб-серверу (192.168.1.2).

С помощью этого правила мы перенаправляем все пакеты, пришедшие на порт 80, к 192.168.1.2 опять же на порт 80:

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp —dport 80 -j DNAT —to-destination 192.168.1.2

Но это только половина работы. Пакет будет иметь исходный адрес клиента, а значит будет пытаться отправить ответ ему. Так как клиент ожидает получить ответ от маршрутизатора, то нормального TCP соединения не получиться. Чтобы решить эту проблему нужно модифицировать адрес источника и заменить его на адрес маршрутизатора 192.168.1.1. Тогда ответ придет маршрутизатору, а тот уже от своего имени передаст его в сеть.

sudo iptables -t nat -A POSTROUTING -o eth1 -p tcp —dport 80 -d 192.168.1.2 -j SNAT —to-source 192.168.1.1

Если вы хотите перенаправить трафик на порт 8080, то нужно указать его после ip адреса:

sudo iptables -t nat -A POSTROUTING -o eth1 -p tcp —dport 80 -d 192.168.1.2 -j SNAT —to-source 192.168.1.1:8080

Также может понадобиться выполнить проброс диапазона портов iptables, для этого просто укажите диапазон, например, 1000:2000:

sudo iptables -t nat -A POSTROUTING -o eth1 -p tcp —dport 1000:2000 -d 192.168.1.2 -j SNAT —to-source 192.168.1.1

После добавления этого правила можете проверять работу перенаправление портов iptables будет выполняться и все будет отправляться так, как нужно.

Сохранение настроек iptables

Теперь, когда все настроено, нужно сохранить этот набор правил, чтобы он загружался автоматически при каждом старте. Для этого выполните:

Читайте также:  Linux kernel boot message

sudo service iptables-persistent save

Готово. Теперь проброс портов iptables ubuntu будет работать так, как нужно.

Выводы

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

На завершение, видео о том, что такое NAT:

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Источник

Проброс порта внутрь сети

Добрый день! Вопрос вот в чем. Есть сеть, с Alt Linux в качестве маршрутизатора. За ним стоит сервер, на котором настроенно клиент-серверное приложение. Нужно что бы это приложение работало изнутри офиса, т.е. при настройке программы я указываю порт 4411, которое оно использует, и все работает.

В iptables я прописываю правило:

$IPTABLES -t nat -A PREROUTING -p TCP -d $INET_IP —dport 4411 -j DNAT —to-destination 192.168.0.157:4411

$IPTABLES -t nat -A POSTROUTING -s 192.168.0.157 -p TCP —sport 4411 -j SNAT —to-source $INET_IP:4411

$IPTABLES -A FORWARD -p ALL -i $INET_IFACE -o $LAN_IFACE -s 192.168.0.157 —dport 4411 -j ACCEPT

то при запуске скрипта пишет:

Starting firewalling. Cheking module dependencies. Loading additional modules. Flushing chains. iptables v1.3.1: Unknown arg `—dport’ Try `iptables -h’ or ‘iptables —help’ for more information.

Если кто то сталкивался с подобной проблемой помогите советом, в какую сторону смотреть.

Re: Проброс порта внутрь сети

$IPTABLES -t nat -A PREROUTING -p TCP -d $INET_IP —dport 4411 -j DNAT —to-destination 192.168.0.157:4411

$IPTABLES -t nat -A PREROUTING -p TCP -d $INET_IP -m tcp —dport 4411 -j DNAT —to-destination 192.168.0.157:4411

Re: Проброс порта внутрь сети

Попробовал что вы советуете, ситуацию не изменилась 🙁

Re: Проброс порта внутрь сети

достаточно одного правила:

iptables -t nat -A PREROUTING -p tcp -d $INET_IP —dport 4411 -j DNAT —to-destination 192.168.0.157

вы уверены что у вас правила добавляются?
iptables -t nat -L -v -n
смотрите?

какие еще правила есть? FORWARD не заблочен?

Re: Проброс порта внутрь сети

И TCP стоит наверное в нижнем регистре писать. Хотя он бы ругался наверное на незнакомый протокол.

Re: Проброс порта внутрь сети

iptables -t filter -A INPUT -i eth1 -p tcp -m tcp —dport 5678 -j ACCEPT

iptables -t filter -A FORWARD -i eth1 -p tcp -m tcp —dport 5678 -j ACCEPT

iptables -t nat -A PREROUTING -d 1.2.3.4 -i eth1 -p tcp -m tcp —dport 5678 -j DNAT —to-destination 192.168.1.100:5678

Module Size Used by agpgart 26928 1 intel_agp ata_generic 5252 0 capability 3336 0 commoncap 5376 1 capability eepro100 26384 0 evdev 7936 0 i2c_piix4 7436 0 intel_agp 21532 1 ip_tables 10184 3 iptable_mangle,iptable_nat,iptable_filter iptable_filter 2304 1 iptable_mangle 2304 0 iptable_nat 6148 1 ipv6 226016 22 lp 9800 0 mii 4736 2 eepro100,via_rhine nf_conntrack 47560 4 iptable_nat,nf_nat,nf_conntrack_ipv4,xt_state nf_conntrack_ipv4 13324 4 iptable_nat nf_nat 15276 1 iptable_nat nfnetlink 5016 3 nf_nat,nf_conntrack_ipv4,nf_conntrack parport 30152 2 lp,parport_pc parport_pc 23844 1 pcspkr 2304 0 psmouse 34440 0 shpchp 29204 0 tun 8064 1 via_rhine 20360 0 x_tables 11268 5 iptable_nat,xt_tcpudp,xt_limit,xt_state,ip_tables xt_limit 2304 1 xt_state 2048 2 xt_tcpudp 3200 19

Источник

Как пробросить порт в Linux

Как пробросить порт в Linux

Заметки айтишника

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

Читайте также:  Configure file system linux

Начальные данные

У нас имеется компьютер под управлением linux, выступающий в роли маршрутизатора с одним внешним интерфейсом enp0s3 для доступа в Интернет (80.81.82.83) и внутренним enp0s8 интерфейсом Локальной сети (10.0.7.1). Требуется пробросить 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 , убираем знак комментария.

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

Итак, приступим. Для выполнения поставленной задачи, перенаправление порта 2222 на порт 22 другой машины, необходимо добавить следующие правила 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 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 адрес нашего сервера.

Перенаправления всего трафика

iptables -t nat -A PREROUTING -p tcp -d 80.81.82.83 -j DNAT --to-destination 10.0.7.2 iptables -t nat -A POSTROUTING -p tcp --dst 10.0.7.2 -j SNAT --to-source 80.81.82.83

Для сохранения наших правил необходимо создать файл и подгружать его при каждой перезагрузки системы, иначе правила iptables которые мы написали слетять. Для этого набираем в терминале следующее:

Содержимое файла по первому примеру:

#!/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

И добавляем в конце следующую строчку:

Данное выражение подгрузить правила iptables после перезагрузки системы.

Как посмотреть правила iptables

Посмотреть текущие правила iptables можно с помощью команды:

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 завершено.

Источник

Оцените статью
Adblock
detector