Перенаправление портов в линуксе

Как перенаправлять порты через шлюз Linux с помощью Iptables

Большое количество компьютеров в сети постепенно начало становиться проблемой, ведь в IPv4 встроена поддержка относительно ограниченного количества хостов. Обойти лимиты получилось при помощи технологии NAT, позволяющей объединять любые офисные сети таким образом, чтобы внутри они работали «как обычно», а для внешних клиентов были доступны по одному IP-адресу (обычно установленному для сетевого устройства, роутера или маршрутизатора).

Оборудование считывает из пакета данных информацию о локальной машине, для которой адресованы переданные блоки, и подменяет IP на реальный. Те же операции доступны и для портов – NAT меняет их значение, эта процедура получила название « проброс портов ». Ее используют при необходимости получения внешнего трафика в частную сеть. На базе платформы Linux управление технологией осуществляется утилитой IPTables.

Принцип работы NAT

Первое и наиболее важное условие для функционирования любой системы – уникальный IP-адрес у каждого компьютера, объединенного в сеть. Но резкий рост количества объединяемых хостов привел к тому, что номеров стало не хватать. И пришлось продумывать варианты, как временно объединить несколько машин под одним адресом – это и стало толчком к появлению технологии Network Address Translation (NAT), так называемому форвардингу портов.

Система функционирует довольно просто. Фактически компьютеры не видны извне, хотя имеют уникальные IP-адреса. Их фильтрует маршрутизатор, который и занимается подменой. Например, локальная машина отправила пакет на внешний ресурс. Тот сначала попадает в память сетевого устройства, которое подменяет адрес отправителя на собственный и отправляет данные дальше. В памяти роутера сохраняется информация, откуда пришел пакет и куда отправлять ответ.

Единственный минус такого подхода заключается в невозможности инициации подключения к ПК напрямую извне. Ведь в таком случае маршрутизатор не знает, какой именно компьютер нужен, и соединение отсекается. Хотя при помощи утилиты IPTables можно настроить NAT , если роутер работает под управлением операционки Debian 10 .

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

Первым шагом активируем режим переадресации трафика, которая будет работать на уровне ядра (возможно, это уже сделано, но лучше убедиться):

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

Важно обеспечить сохранение настройки после перезапуска сетевого оборудования:

sudo sysctl -w net.ipv4.ip_forward=1

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

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

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

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

Внесение правила ACCEPT необходимо для разрешения текущего соединения. Оно имеет действие только на первый поступающий пакет, а ведь еще предстоит давать ответ и отправлять «обратные» пакеты. Поэтому включим возможность коннекта в обе стороны через порт 80, в этом нам помогут правила ESTABLIHED и RELATED:

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 и обратно. Но это еще не все, проброс портов пока не работает, потому что нужно настроить еще несколько правил, отвечающих за перенаправление потоков данных.

Читайте также:  Установка snap astra linux

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

Чтобы сделать это, укажем маршрутизатору, как модифицировать адрес компьютера, для которого предназначены пакеты (Destination) DNAT и адрес отправляющей машины (Source) SNAT. Первые будем настраивать в цепочке PREROUTING в таблице NAT. Процедура изменит адрес на нужный для достижения требуемой цели при прохождении информации между разными сетями. Пакеты же исходящего направления будут автоматом направляться на веб-сервер с IP 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

Половина требуемого сделана. Теперь в пакет будет включен изначальный адрес рабочего места, а это означает, что на него уже можно отправлять ответные пакеты. Но локальная машина ожидает их от маршрутизатора, а не от внешнего ресурса, поэтому придется решить еще одну проблему – сетевое оборудование должно менять входящий IP на внутренний, принадлежащий конкретному компьютеру (в нашем случае 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

Когда речь идет о пробросе диапазона портов, их указывают следующим образом:

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

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

sudo service iptables-persistent save

Выводы

Мы разобрались, как работает проброс портов в Debian . Процедура предполагает настройку обоих направлений передачи данных. Тогда система поймет, откуда пришел пакет и куда возвращать ответ, если тот поступит на маршрутизатор. В качестве тренировки можно настроить подобный коннект с удаленным сервером, арендованным у провайдера cloud.timeweb.com .

Источник

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

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

Читайте также:  Как установить nessus kali linux

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

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

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

sudo service iptables-persistent save

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

Выводы

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

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

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

Источник

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