Как выполнить проброс портов в Ubuntu Server
Настройка iptables от простого к сложному. Часть 3
Давайте посмотрим, как работать с тем, что называют iptables routing, или перенаправлением пакетов при помощи iptables.
В первой и второй частях мы рассматривали настройку iptables, касающуюся блокировки пакетов, а теперь посмотрим, как не блокировать их, а направлять туда, куда нам нужно.
Маскарадинг (или маскирование)
Маскарадинг — это метод обработки пакетов, при котором пакеты передаются через некоторую машину, работающую как шлюз. Эта машина при пересылке пакетов помечает их, чтобы знать, какой машине в сети вернуть полученный ответ.
Таким образом, несколько машин из внутренней сети могут обращаться к внешней сети, а извне это будет выглядеть так, как будто обращения идут от той самой машины, являющейся шлюзом. Маскарадинг связан в первую очередь с NAT (Network Address Translation), пакеты при трансляции адресов маскируются, чтобы ответ вернулся именно к источнику запроса.
Например, у нас есть некоторая локальная сеть с адресами 192.168.0.0/24, в этой сети есть шлюз с адресом 192.168.0.1, имеющий два сетевых интерфейса, eth0 и eth1. eth0 — внешний, подключенный к провайдеру, например, с адресом 192.168.100.25, eth1 — внутренний, подключенный к локальной сети, тот самый, на котором адрес 192.168.0.1.
Необходимо обеспечить работу всех клиентов из локальной сети в сети Интернет таким образом, чтобы это было для них прозрачно.
В таком случае в первую очередь необходимо включить форвардинг пакетов между сетевыми интерфейсами шлюза, чтобы пропускать трафик из внутренней сети наружу. Есть два варианта, как это можно сделать. Первый — раскомментировать в файле /etc/sysctl.conf строчкуnet.ipv4.ip_forward=1
После этого вам надо будет перезагрузиться, чтобы убедиться, что форвардинг работает. Второй — включить форвард вручную командой
echo «1» >/proc/sys/net/ipv4/ip_forward
Этот способ заработает без перезагрузки. Можно использовать оба, а можно в скрипте, например, использовать при загрузке правил iptables только второй.
После этого мы можем задать правило для адресной трансляции:
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -d ! 192.168.0.0/24 -j MASQUERADE
Это правило после обработки пакетов осуществит маскирование, если пакеты из внутренней сети направлены куда-то в другую подсеть. Если нам нужно маскировать пакеты для конкретной подсети, к примеру, из одной локальной подсети (192.168.2.0/24) в другую (192.168.0.0/24), то мы можем создать следующее правило:
iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -d 192.168.0.0/24 -j MASQUERADE
Перенаправление пакетов на другой порт
Перенаправление портов можно использовать для самых разных задач. Например, перенаправление пользователей из разных сетей на разные экземпляры веб-сервера, перенаправление порта на другой, если изменился порт какого-то сервиса, настройка прозрачного проксирования и так далее.
Общая идея в том, что пакеты с определенного порта перенаправляются на другой порт на том же сетевом интерфейсе той же самой машины, либо на loopback’е.
Для перенаправления порта, например, 80, с внешнего интерфейса на порт 80 на loopback-интерфейсе мы можем использовать правило
iptables -t nat -A PREROUTING -d 192.168.0.1/32 -p tcp -m tcp —dport 80 -j DNAT —to-destination 127.0.0.1:80
Это правило позволит перенаправить пакеты на loopback, изменив назначение пакета путем трансляции адреса (Destination NAT), и после этого можно будет их отфильтровать в цепочке, которая будет задана для loopback-интерфейса. Естественно, нужно будет сделать и обратную трансляцию:
iptables -t nat -A POSTROUTING -s 127.0.0.1/32 -p tcp -m tcp —dport 80 -j SNAT —to-source 192.168.0.1
Таким образом, происходит обратный процесс, при этом изменяется Source NAT, то есть, транслируется адрес источника соединения.
Форвардинг портов на другую машину
По сути форвардинг портов на другую машину не отличается от форварда портов в пределах одной машины, но по существу это не одно и то же, поскольку пакеты будут передаваться не в пределах одной машины, как в случае с loopback-интерфейсом, когда фактически пакеты транслируются в пределах сетевого стека.
Обычно форвардинг портов производится с определенного порта внешнего интерфейса на определенный порт машины во внутренней сети, поэтому между сетевыми интерфейсами должен быть настроен форвардинг. Например, проброс порта 3389 для работы удаленного рабочего стола (RDP) с внешнего сетевого интерфейса (192.168.100.
25) на порт 3389 на одну из машин во внутренней сети (192.168.0.15):
iptables -t nat -A PREROUTING -d 192.168.100.25/32 -p tcp -m tcp —dport 3389 -j DNAT —to-destination 192.168.0.15:3389 iptables -t nat -A POSTROUTING -s 192.168.0.15/32 -p tcp -m tcp —dport 3389 -j SNAT —to-source 192.168.100.25
Таблица форвардинга
При настройке iptables мы уже использовали таблицу форвардинга, но единственное, что мы делали — это очищали правила командой
iptables -F FORWARD
В этой таблице не рекомендуется фильтровать трафик, рекомендуется ее использовать только для перенаправления трафика. Фильтрацию необходимо выполнять либо до форвардинга, либо уже после.
В таблице FORWARD вы определяете, куда должны форвардиться пакеты, а куда нет.
Например:— разрешить форвардинг между eth0 и eth1— разрешить форвардинг между eth0 и eth2— запретить форвардинг между eth1 и eth2
Правила в таком случае могут выглядеть так:
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT iptables -A FORWARD -i eth0 -o eth2 -j ACCEPT iptables -A FORWARD -i eth2 -o eth0 -j ACCEPT iptables -A FORWARD -i eth1 -o eth2 -j DROP iptables -A FORWARD -i eth2 -o eth1 -j DROP
либо еще короче:
iptables -A FORWARD -i eth1 -o eth2 -j DROP iptables -A FORWARD -i eth2 -o eth1 -j DROP
Разница между DROP и REJECT
При сбросе пакетов используют обычно две цели — DROP и REJECT, при этом нужно понимать, почему вы используете именно этот вариант.
Основное различие состоит в том, что при использовании DROP не будет отправлен ICMP-ответ, по которому можно будет определить, что в соединении отказано. Оно просто не пройдет. Когда вы используете REJECT, то вы явно получите ответ, что в соединении отказано.
Поэтому при составлении таблиц правил iptables лучше использовать REJECT, а когда вы окончательно определитесь с конфигурацией, можно изменить REJECT на DROP.
Как выполнить проброс портов в Ubuntu Server
Термин «проброс портов» активно используют в своей терминологии профессионалы, а для новичков подобный жаргон часто остаётся непонятным. Это технология, которая позволяет работать с компьютером в локальной сети из интернета.
При этом в локальной сети может находиться маршрутизатор, который использует преобразование сетевых адресов. Таким образом, происходит перенаправление трафика с определённых портов по внешнему адресу на определённый адрес ПК во внутренней сети.
С Ubuntu проброс портов достаточно несложен в исполнении.
Проброс портов может понадобиться при организации пиринговой сети.
Подход проброса портов часто используется, когда нужно организовать на локальном компьютере сервер с доступом из любой точки мира, создать пиринговую сеть, или же использовать такое соединение для игр с большим количеством реальных игроков. Мы рассмотрим несколько основных способов реализации такой функции.
Средствами маршрутизатора
На некоторых маршрутизаторах есть возможность быстро включить поддержку проброса. Допустим, на устройствах D-Link она носит название «виртуальный сервер». Как правило, такая настройка выполняется через web-оболочку.
- Откройте браузер. В адресной строке наберите 192.168.0.1.
- Введите имя пользователя и пароль.
- Если на вашем маршрутизаторе есть Мастер настройки, запустите его и выберите задачу «Настройка виртуального сервера». Или же попробуйте найти такую функцию в разделах настроек «Межсетевой экран (Брандмауэр, firewall).
- В появившихся окнах задайте все необходимые параметры сервера. Как правило, это:
- Интерфейс. Здесь нужно выбрать соединение для связи между компьютерами.
- Внутренний IP. Это адрес сервера в местной сети.
- Внешний (удалённый) IP. Адрес сервера, с которого будет осуществляться доступ.
- Имя настройки. Имя для набора параметров.
- Сохраните введённые настройки.
Такой подход позволяет создать перенаправление средствами роутера. Он применим к любой операционной системе, в том числе, к Убунту Сервер.
С использованием hamachi
Этот способ ориентирован именно на Ubuntu, где проброс портов будет выполняться с помощью Hamachi. Хамачи позволяет построить VPN. Другими словами — это программа для работы с виртуальными частными сетями.
Допустим, в разных сетях существует группа удалённых друг от друга ПК, а связь в сети выполняется через VPN Hamachi. Сама программа должна быть установлена на сервере. После этого можно настраивать проброс портов.
Идея в том, что ПК из других локальных сетей будут обращаться напрямую только к серверу. Он, в свою очередь, будет перенаправлять их на нужный ПК внутри сети, на котором будет находиться необходимый порт.
Для выполнения инструкций потребуется компьютер с установленной Ubuntu Server.
Установка Хамачи. Для начала, загрузите пакет с официального сайта:
wget https://secure.logmein.com/labs/logmein-hamachi_2.1.0.119-1_amd64.deb
Инсталлируйте нужный пакет:
sudo apt-get install lsb
Теперь проведите сборку пакета, который был загружен:
dpkg -i logmein-hamachi_2.1.0.119-1_amd64.deb
Можно запустить соответствующую службу, а также саму программу:
service logmein-hamachi start
hamachi login
Присвойте личному компьютеру имя в Хамачи. После этого подключитесь к нужной сети:
hamachi set-nick $NAME.
hamachi join $NAME_NETWORK
Введите все нужные данные для доступа к сети.
Теперь рассмотрим, как на базе созданного подключения прокинуть порт. Воспользуемся утилитой Rinetd. Для начала нужно загрузить саму утилиту:
sudo apt-get install rinetd
Теперь в файлы конфигурации потребуется внести изменения:
nano /etc/rinetd.conf
Сам файл, открываем при помощи редактора nano. В конце документа нужно добавить строчку:
(IP-интерфейса сервера) (прослушиваемый порт) (адрес внешнего ПК) (порт внешнего ПК)
Вставлять значения нужно без скобок, с пробелами. Для каждого подключения нужно добавить свою строку, по порядку. Теперь нужно выполнить перезапуск службы:
service rinetd restart
Теперь потребуется отключить межсетевой экран:
sudo ufw disable
Вот и всё. В завершение процесса нужно перезагрузить сервер, после чего можно проверить подключения. Проброшенный трафик можно будет контролировать при помощи дополнительных утилит.
С использованием squid
Squid — это прокси-сервер для Ubuntu. Мы уже рассматривали, как прокинуть порт на Ubuntu Сервер, Squid — также хороший инструмент для этого. Он поможет, когда необходим максимальный контроль сетевого трафика. Squid можно установить по команде:
sudo apt-get install squid3
Настройка программы выполняется правкой директив, расположенных в файле:
/etc/squid/squid.conf
О других особенностях использования Squid вы сможете узнать на официальном сайте.
Заключение
Что такое проброс порта. Как пробросить порты на роутере
Перенаправление порта — это сопоставление определённого порта на внешнем интерфейсе роутера с определённым портом нужного устройства в локальной сети.
Перенаправление порта является одной из функций механизма NAT (трансляции сетевых адресов). Суть NAT заключается в использовании несколькими устройствами в локальной сети одного внешнего интерфейса.
В домашних сетях внешний интерфейс — это WAN-порт роутера, а сетевые устройства — это компьютеры, планшеты и смартфоны.
А суть перенаправления заключается в том, чтобы предоставить доступ к какому-то устройству в сети из Интернета, используя какой-либо открытый порт роутера.
Как сделать проброс порта на шлюзе (роутере, модеме)
Это то, что в народе называется «как открыть порт на роутере».
Допустим, есть задача предоставить доступ к удалённому рабочему столу компьютера, который подключён к Интернету через роутер. Для этого нужно создать правило перенаправления любого свободного порта WAN-интерфейса роутера на порт 3389 нужного компьютера.
3389 — это порт, который используется по умолчанию для приёма входящих подключений службы сервера удалённых рабочих столов.
После создания такого правила и применения настроек на роутере запросы, поступившие на указанный внешний порт будут перенаправлены на 3389 нужного компьютера в сети.
Для этого на роутере необходимо зайти в настройки перенаправления портов и добавить правило.
Пример настройки перенаправления порта на роутере D-Link.
1 Откройте раздел Advanced (Расширенные настройки).
2 Выберите настройку Port Forwarding (перенаправление портов).
3 Настройте правило перенаправления:
- Укажите любое удобное для вас имя правила;
- Укажите номер публичного порта (или диапазон). Публичный порт — это тот, который будет открыт на роутере для доступа из Интернета через WAN-интерфейс. Если нужно открыть только один порт, укажите один и тот же порт и в качестве начального в диапазоне, и в качестве конечного.В нашем случае нам нужно открыть порт 3389, поэтому мы два раза указали его в верхней строке настроек.
- Укажите IP-адрес компьютера (сервера) в локальной сети, на котором запущена служба, доступ к которой нужно предоставить. Рекомендуется зарезервировать IP-адрес для данного сервера в настройках DHCP-резервирования на роутере, чтобы он не поменялся в дальнейшем. Вместо этого также можно указать IP-адрес вручную в настройках сетевого адаптера на компьютере, проброс до которого вы будете делать на роутере.В нашем примере мы указываем внутренний серый IP-адрес 192.168.1.100, который принадлежит компьютеру с Windows Server 2008 с настроенным сервером удалённых рабочих столов.
- Укажите порт для приёма входящих подключений на компьютере в локальной сети.В нашем случае на сервере для службы Сервер удалённых рабочих столов используется порт по умолчанию 3389.
- Установите флажок слева для включения правила.
4 Нажмите Save Setting (Сохранить настройки)
Проверка работы перенаправления порта
Для проверки работы перенаправления портов нужно подключиться к компьютеру, используя внешний IP-адрес или имя хоста.
Нажмите win+r, введите mstsc и нажмите Enter:
В поле Компьютер dведите внешний IP-адрес роутера (который присвоен провайдером WAN-интерфейсу) либо имя хоста.
Нажмите Подключить:
(Тем самым вы устанавливаете соединение с WAN-портом роутера на 3389. При этом на роутере срабатывает перенаправление порта согласно правилу на внутренний IP-адрес 192.168.1.100 и указанный порт 3389)
Если вы увидите подпись Настройка удалённого сеанса, значит перенаправление порта работает:В итоге вы должны увидеть рабочий стол удалённого компьютера (сервера удалённых рабочих столов):
Примечание
В веб-интерфейсе маршрутизаторов вместо настройки Port Forwarding может присутствовать настройка Virtual Server. А иногда — и та, и другая.
Имейте в виду, что для публикации одного порта можно использовать как настройку Port Forwarding, так и Virtual Server.
Разница в том, что настройка Виртуальный сервер позволяет переадресовывать (публиковать) только один порт на локальном компьютере, а с помощью настройки Перенаправление можно пробрасывать и отдельные порты, и диапазоны.
Рекомендуемые к прочтению статьи:
Проброс и перенаправление портов в iptables
Проброс трафика за NAT или проброс трафика на другой сервер
Чаще всего проброс трафика используется, если мы находимся в локальной сети и от внешнего мира отделены шлюзом. Для того, чтобы открыть доступ для локальных служб (ssh, web, ftp), нам необходимо пробросить порты. Поскольку в качестве шлюза мы будем использовать сервер на Linux, то осуществлять данные действия будем с помощью iptables.
Определимся с переменными, которые будут использоваться в статье:
$EXT_IP — внешний, реальный IP-адрес шлюза;
$INT_IP — внутренний IP-адрес шлюза, в локальной сети;
$LAN_IP — внутренний IP-адрес сервера, предоставляющего службы внешнему миру;
$SRV_PORT — порт службы. Для веб-сервера равен 80, для SMTP — 25 и т.д.;
eth0 — внешний интерфейс шлюза. Именно ему присвоен сетевой адрес $EXT_IP;
eth1 — внутренний интерфейс шлюза, с адресом $INT_IP;
Проброс портов
На шлюз приходит пакет, который мы должны перенаправить на нужный сервер в локальной сети перед принятием решения о маршрутизации, то есть — в цепочке PREROUTING таблицы nat.
iptables -t nat -A PREROUTING —dst $EXT_IP -p tcp —dport $SRV_PORT -j DNAT —to-destination $LAN_IP |
Рассмотрим пример
iptables -t nat -A PREROUTING —dst 1.2.3.4 -p tcp —dport 80 -j DNAT —to-destination 192.168.1.50 |
Если входящий пакет пришёл извне на шлюз (1.2.3.4), но предназначен веб-серверу (порт 80), то адрес назначения подменяется на локальный адрес 192.168.1.50. И впоследствии маршрутизатор передаст пакет в локальную сеть.
Дальше принимается решение о маршрутизации. В результате пакет пойдёт по цепочке FORWARD таблицы filter, поэтому в неё надо добавить разрешающее правило. Оно может выглядеть, например, так:
iptables -I FORWARD 1 -i eth0 -o eth1 -d $LAN_IP -p tcp -m tcp —dport $SRV_PORT -j ACCEPT |
Перенаправление портов
Перенаправление портов нужно в том случае, если мы хотим «замаскировать» внутреннюю службу, обеспечив к ней доступ извне не по стандартному, а совсем по другому порту.
Пусть $FAKE_PORT — обманный порт на внешнем интерфейсе шлюза, подключившись к которому мы должны попасть на адрес $LAN_IP и порт $SRV_PORT.
Набор правил для iptables будет отличаться несущественно, поэтому приведу сразу пример итогового скрипта для ленивых.
iptables -t nat -A PREROUTING -d $EXT_IP -p tcp -m tcp —dport $FAKE_PORT -j DNAT —to-destination $LAN_IP:$SRV_PORTiptables -t nat -A POSTROUTING -d $LAN_IP -p tcp -m tcp —dport $SRV_PORT -j SNAT —to-source $INT_IPiptables -t nat -A OUTPUT -d $EXT_IP -p tcp -m tcp —dport $SRV_PORT -j DNAT —to-destination $LAN_IPiptables -I FORWARD 1 -i $EXT_IF -o $INT_IF -d $LAN_IP -p tcp -m tcp —dport $SRV_PORT -j ACCEPT |
Проброс портов 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:
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:
Серверная » Проброс и перенаправление портов средствами iptables
Допустим, мы находимся в локальной сети и от внешнего мира отделены шлюзом под управлением Linux.
В этой же локальной сети находятся сервера, которые должны предоставлять услуги внешнему миру. Например, web-сервер, ftp, почтовый сервер или все вместе одновременно.
Понятно, что доступ извне должен осуществляться через внешний адрес шлюза. И в зависимости от типа входящего соединения (которое определяется портом, например 80 — веб сервер, 21 — FTP), шлюз должен перенаправлять его на соответствующий сервер локальной сети.
Это и есть проброс портов.
Рассмотрим, как реализовать его средствами iptables.
Вначале договоримся о сокращениях и умолчаниях:
$EXT_IP — внешний, реальный IP-адрес шлюза
$INT_IP — внутренний IP-адрес шлюза, в локальной сети
$LAN_IP — внутренний IP-адрес сервера, предоставляющего службы внешнему миру
$SRV_PORT — порт службы. Для веб-сервера равен 80, для SMTP — 25 и т.д.
eth0 — внешний интерфейс шлюза. Именно ему присвоен сетевой адрес $EXT_IP
eth1 — внутренний интерфейс шлюза, с адресом $INT_IP
А для облегчения понимания, в таких блоках будем рассматривать конкретную ситуацию:
1.2.3.4 — внешний адрес шлюза
192.168.0.1 — внутренний адрес шлюза
В локальной сети работает веб-сервер (порт 80) для сайта webname.dom
192.168.0.22 — внутренний адрес веб-сервера
Как настроить ufw для перенаправления трафика 80/443 на внутренний сервер, размещенный в локальной сети | Администрирование серверов и техническая поддержка сайтов
Как настроить ufw для перенаправления трафика 80/443 на внутренний сервер, размещенный в локальной сети
5 (100%) 1 vote
Я использую UFW для защиты своей сети. Как перенаправить TCP HTTP-порт # 80 и 443 на внутренний сервер, размещенный по адресам 192.168.1.100:80 и 192.168.1.100:443, используя UFW на сервере Ubuntu Linux?
UFW — акроним для несложного брандмауэра.
Он используется для управления брандмауэром Linux и предназначен для обеспечения простого в использовании интерфейса для пользователя.
В этом учебном руководстве вы узнаете, как перенаправить входящий трафик на ваш сервер с ufw по порту 80/443 на порт 80/443 на другом внутреннем сервере, размещенном в вашей локальной сети / VLAN .
Наш пример
Предположим, вы хотите переслать запросы, отправляемые на {80,443} на сервер, прослушивающий 192.168.1.100:{80,443}. : Как настроить ufw для перенаправления http-трафика на другой IP-адрес: порт
Все запросы для порта 202.54.1.1 80 и 443 необходимо перенаправить на другой внутренний сервер.
DNAT
Если у вас есть сервер во внутренней сети, который вы хотите сделать доступным извне, вы можете использовать -j DNAT-адрес цепи PREROUTING в NAT, чтобы указать IP-адрес и порт назначения, где могут быть входящие пакеты, запрашивающие подключение к вашей внутренней службе. Синтаксис:
/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp -d {PUBLIC_IP} —dport 80 -j DNAT —to {INTERNAL_IP}:80
/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp -d {PUBLIC_IP} —dport 80 -j DNAT —to {INTERNAL_IP}:80 |
или
/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp -d {PUBLIC_IP} —dport 443 -j DNAT —to {INTERNAL_IP}:443
/sbin/iptables -t nat -A PREROUTING -i eth0 -p tcp -d {PUBLIC_IP} —dport 443 -j DNAT —to {INTERNAL_IP}:443 |
Постобработка и IP-Masquerading
Чтобы разрешить узлам локальной сети с частными IP-адресами связываться с внешними общедоступными сетями, настройте брандмауэр для маскировки IP-адресов, который маскирует запросы от узлов локальной сети с IP-адресом внешнего устройства брандмауэра, например eth0. Синтаксис:
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
/sbin/iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE |
или
/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.0/24 ! -d 192.168.1.0/24 -j MASQUERADE
/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.0/24 ! -d 192.168.1.0/24 -j MASQUERADE |
Как настроить ufw для перенаправления порта
Вам нужно отредактировать файл /etc/ufw/before.rules, введите:
$ sudo vi etc/ufw/before.rules
$ sudo vi etc/ufw/before.rules |
Затем настройте ufw для перенаправления http-трафика на другой (LAN) IP: порт. В верхнем файле добавьте:
*nat :PREROUTING ACCEPT [0:0] # forward 202.54.1.1 port 80 to 192.168.1.100:80 # forward 202.54.1.1 port 443 to 192.168.1.100:443 -A PREROUTING -i eth0 -d 202.54.1.
1 -p tcp —dport 80 -j DNAT —to-destination 192.168.1.100:80 -A PREROUTING -i eth0 -d 202.54.1.1 -p tcp —dport 443 -j DNAT —to-destination 192.168.1.100:443 # setup routing -A POSTROUTING -s 192.168.1.
0/24 ! -d 192.168.1.0/24 -j MASQUERADE COMMIT
*nat :PREROUTING ACCEPT [0:0] # forward 202.54.1.1 port 80 to 192.168.1.100:80 # forward 202.54.1.1 port 443 to 192.168.1.100:443 -A PREROUTING -i eth0 -d 202.54.1.1 -p tcp —dport 80 -j DNAT —to-destination 192.168.1.100:80 -A PREROUTING -i eth0 -d 202.54.1.1 -p tcp —dport 443 -j DNAT —to-destination 192.168.1.100:443 # setup routing -A POSTROUTING -s 192.168.1.0/24 ! -d 192.168.1.0/24 -j MASQUERADE COMMIT |
Сохраните и закройте файл. Измените /etc/sysctl.conf:
$ sudo vi /etc/sysctl.conf
$ sudo vi /etc/sysctl.conf |
Установите / отредактируйте следующим образом:
Net.ipv4.ip_forward = 1
Сохраните и закройте файл. Обновить изменения:
$ sudo sysctl -p
Наконец, перезапустите брандмауэр, чтобы включить маршрутизацию:
$ sudo systemctl restart ufw
$ sudo systemctl restart ufw |
Убедитесь, что разрешены порты 80 и 443, иначе ufw заблокирует запросы, перенаправленные на внутренние 192.168.1.100:{80,443}:
$ sudo ufw allow proto tcp from any to 202.54.1.1 port 80 $ sudo ufw allow proto tcp from any to 202.54.1.1 port 443
$ sudo ufw allow proto tcp from any to 202.54.1.1 port 80 $ sudo ufw allow proto tcp from any to 202.54.1.1 port 443 |
Проверьте новые настройки:
$ sudo ufw status $ sudo iptables -t nat -L -n -v
$ sudo ufw status $ sudo iptables -t nat -L -n -v |
Наконец, убедитесь, что в вашем домене указанаDNS ‘a’ запись , установлена на 202.54.1.1.
Услуги администрирования серверов, настройка сети, [email protected]