Проброс портов в Linux
Система Убунту является самой оптимальной ОС для работы не только крупных производств, но и частных отдельных лиц. Однако если с одного гаджета работает несколько человек, это может стать причиной многих проблем, связанных с работой Линукс. Для решения этой проблемы есть такое явление, как проброс портов в Ubuntu. Этот процесс имеет свои преимущества и недостатки. Также для него характерны некоторые специфические нюансы и методики решения проблем у новичков в области IT-технологии.
Что такое проброс портов в Linux
Сначала нужно разобраться в сути явления проброса портов Linux. Эта техника необходима в том случае, когда запрашивающих портов гораздо больше, чем места на искомом устройстве. В этом случае для связи пользователя и сервиса нужна особая связь через «посредника».
В целом проброс портов debain или иными словами, настройка rinetd, осуществляется с помощью общей программы NAT.
Работа передачи данных достаточно проста и понятна: компьютер или ноутбук имеет свой уникальный адрес. Когда с помощью него нужно передать какие-то программы или документы, идет запрос к роутеру, а тот меняет адрес компьютера на уникальный адрес сервера. Таким образом, устанавливается связь пользователя с сервером. Обратный ответ получается аналогично через роутер. Чтобы можно было устанавливать свои адреса для роутера, было создано перенаправление портов Ubuntu.
Ubuntu port forwarding имеет несколько этапов работы:
- Переадресация трафика на ядерном уровне. Это происходит с помощью выражения echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward . Чтобы это состояние и возможные изменения смогли сохраниться после перезагрузки оборудования, нужно ввести команду sudo sysctl –w net.ipvip_forward=1.
- Настройка прохождения пакетов. Чтобы новые пакеты беспрепятственно приходили на определенный порт, следует ввести выражение sudo iptables — A FORWARD -i eth0 -o eth1 -p tcp —syn —dport 80 -m conntrack —ctstate NEW -j ACCEP T . Для разрешения прохода другого трафика нужно ввести команду 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 .
- Модификация пакетов. В этом случае создаются определенные правила работы системы с пакетами. Чтобы осуществлялось перенаправление документов только на один порт, нужна команда: sudo iptables -t nat -A PREROUTING -i eth0 -p tcp —dport 80 -j DNAT —to-destination168.1.2 . Можно настроить получение пакетов на маршрутизатор: 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 . Для установки еще одного порта: 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
- Сохранение настроек. Это делается просто, одной записью: sudo service iptables-persistent save .
Технология Ubuntu port forwarding достаточна проста.
Как сделать проброс портов в Ubuntu
Проброс портов в Ubuntu server может происходить разными путями. Причем у каждого метода есть своя специфическая методика.
С помощью маршрутизатора
Пусть есть конкретная ситуация:
$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 – внутренний адрес веб-сервера
Тогда методика проведения проброса портов будет выглядеть следующим образом:
- Маршрутизация: установка параметров маршрутизатора iptables -t nat -A PREROUTING —dst2.3.4 -p tcp —dport 80 -j DNAT —to-destination 192.168.0.22 и установка процесса iptables -I FORWARD 1 -i eth0 -o eth1 -d 192.168.0.22 -p tcp -m tcp —dport 80 -j ACCEPT .
- Для разрешения доступа других пользователей с другими адресами: iptables -t nat -A POSTROUTING —dst168.0.22 -p tcp —dport 80 -j SNAT —to-source 192.168.0.1.
- Для предотвращения переадресации к маршрутизатору: iptables -t nat -A OUTPUT —dst2.3.4 -p tcp —dport 80 -j DNAT —to-destination 192.168.0.22.
Для автоматического запуска изучаемого процесса можно создать скрипт.
И дальнейшее обращение к пробросу будет выполняться пользователем записью в командной строке: ./script.sh 192.168.0.56 20,21.
С помощью установки Hamachi в Ubuntu
Технология немного отличается от предыдущего варианта:
- Скачивание, загрузка и «сборка» необходимого пакета программы: wgethttps: //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.
- Выбор необходимой сети: hamachi list.
- Далее следует изменить настройки: sudo apt-get install rinetd; nano /etc/rinetd.conf; IP_in port_in IP_out port_out.
- Перезапустить службу: service rinetd restart.
- Выключить менеджер задач: sudo ufw disable.
Осталось только перезагрузить систему.
С помощью Squid
Он используется для контроля слишком большого трафика.
Алгоритм также прост:
- Установка: sudo apt-get install squid3.
- Настройка: /etc/squid/squid.conf.
Затем действия идут такие же, как и в предыдущем варианте.
С помощью Iptables
Такая программа аналогична первому варианту. Собственно алгоритм будет такой же:
- Маршрутизация: установка параметров маршрутизатора iptables -t nat -A PREROUTING —dst2.3.4 -p tcp —dport 80 -j DNAT —to-destination 192.168.0.22 и установка процесса iptables -I FORWARD 1 -i eth0 -o eth1 -d 192.168.0.22 -p tcp -m tcp —dport 80 -j ACCEPT.
- Для разрешения доступа других пользователей с другими адресами: iptables -t nat -A POSTROUTING —dst168.0.22 -p tcp —dport 80 -j SNAT —to-source 192.168.0.1.
- Для предотвращения переадресации к маршрутизатору: iptables -t nat -A OUTPUT —dst2.3.4 -p tcp —dport 80 -j DNAT —to-destination 192.168.0.22.
Для автоматического запуска изучаемого процесса можно создать скрипт.
И дальнейшее обращение к пробросу будет делаться пользователем записью в командной строке: ./script.sh 192.168.0.56 20,21.
Распространенные ошибки
Самая важная проблема и часто возникающая ошибка у начинающих пользователей – открытые порты. Они являются гарантом небезопасного нахождения в виртуальном пространстве. Для решения этой проблемы существуют различные программные обеспечения.
Заключение
Проброс портов в Ubuntu – очень важный процесс в комфортной работе с различными данными компьютера. Однако надо точно выполнять различные методики, иначе могут трудноразрешимые проблемы.
Источник
Перенаправление портов не работает
Есть сеть впн (10.1.1.1) (Centos 6.6), на сервере есть апач с сайтами. Обмен данными между клиентами не разрешен.
В одной сети с сервером есть сервер с сайтом-статистикой (192.168.1.3).
Нужно сделать, чтобы при вводе в сроке адреса 10.1.1.1:8083 появлялся сайт 192.168.1.3
В iptables в nat прописал
Но не перенаправляет.
Попробовал через .htaccess — перенаправляет, только если я на хожусь с ними одной локальной сети.
Как сделать так. чтобы введя 10.1.1.1:8083 — попасть на второй сервера и спокойно смотреть все страницы:?
Или может дело все в апаче?
-A FORWARD . за тебя кто сделает?
-A FORWARD -d 10.1.1.1 -p tcp -m tcp —dport 8083 -j DNAT —to-destination 192.168.1.3:80
тоже не помогло .. сейчас посмотрю ман
тоже не помогло .. сейчас посмотрю ман
У тебя порядок действий неправильный. Меняй.
Уверен? Смотрел снифером?
С тем правилом, что ты привел, хосту 192.168.1.3 прилетит пакет из сети 10.1.1.1 , вопрос в том, сможет ли он на него ответить?
И да, как выше отметили, у тебя может быть просто закрыт путь подобному трафику через FORWARD. iptables-save в студию.
тоже не помогло .. сейчас посмотрю ман
У тебя порядок действий неправильный. Меняй.
Поменял, не помогло.
Ввожу в строке адреса 10.1.1.1:8083 — ожидание истекло
И сразу фейл. У тебя правило с таргетом REJECT «съедает» все пакеты и следующим за ним правилам ничего не остается.
Если не нужно отправлять ICMP-сообщений на каждый заблокированный пакет, проще будет убрать это правило и установить default policy FORWARD’а в DROP.
Это касается и остальных цепочек. И да, в чем сакральный смысл цепочки RH-Firewall-1-INPUT в твоей настройке, если все можно писать в INPUT?
Что это и зачем/откуда оно?
Первая строка в куске выделенного мной кода нивелирует вторую.
Что-то я не помню таких фаервольных конструкций в 7 центоси. Это закидон 6 или отдельная приблуда какая-то?
Что-то я не помню таких фаервольных конструкций в 7 центоси. Это закидон 6 или отдельная приблуда какая-то?
Понятия не имею, скорей всего какая-то заглушка для гуйни/веб-панельки.
Вторая строчка появилась, скажем так случайно . )
Это все из 6 центоси.
Верно понял. либо убираю либо ставлю ниже всех это:
-A FORWARD -j REJECT —reject-with icmp-host-prohibited
Почти верно. Тебе выше посоветовали с политиками фаера разобраться.
Откуда другие правила? Что за дурь и рукожопие? Сделал бы схему на листочке и перекроил по-нормальному.
Во-первых, ниже всех. Во-вторых, какой у тебя маршрут по умолчанию там, куда ты делаешь проброс?
Делаю проброс с сервера впн на другую машину в локальной сети с сервером.
route на той машине. но которую перенаправляю.
Другие правила. это какие?
Часть открывает порты, а A RH-Firewall-1-INPUT, тут да .. тут копировал с другого сервера и не стал менять на просто инпут.
А 10.1.1.1 и 192.168.1.1 — это разные интерфейсы одного сервера?
192,168,1,1 — эт шлюз, он дает интернет обоим
Ну что ты тогда хочешь? Если делаешь перенаправление портов иптаблесами, то должен учесть ограничения. В общем, советую не мучить иптаблесы, поставить rinetd. Сам так делаю постоянно. Брат жив.
вариант 1. установи политики в дроп, разреши обратную петлю, разреши нужный транзит, обруби ход инвалидам, включи поддержку установленных соединений, сделай маскарадинг, и контролируй инициированный локалкой трафик
вариант 2. редиректор — rinetd
вариант 3. туннели ssh
вариант 4. nginx
Хорошо, посмотрю в строну rinetd
агап. спасибо , уже два совета про rinetd — нужно посмотреть, о нем и не думал даже
Отлично — rinetd решил проблему быстрей, чем думал.
Только оказалось что с https на https он не передает. или пока не нашел как .
Но спасибо , уже стало гораздо понятней все.
По идее, должен, он же траффик напрямую гонит.
Сделать всё через жёпу. Но зачем.
Почему бы просто не попросить openvpn выступать в режиме прокси для твоего сайта? Опенвпн вполне себе умеет разделять один порт с web сервером, к примеру, порт 443/tcp.
так сайт находится за пределами впн.
По идее, должен, он же траффик напрямую гонит.
Посмотрел, да гонит.
Но у меня 443 порт занят, а проброс с 8083 на 443 в локалку не сработал, получаю сообщение о ssl
Источник