- Linux iptables: Port Redirection Example
- Syntax
- Examples:
- How Do I View NAT Rules?
- How Do I Save NAT Redirect Rules?
- References:
- ИТ База знаний
- Полезно
- Навигация
- Серверные решения
- Телефония
- Корпоративные сети
- Про SSH port forwarding в Linux
- Что такое переброс порта SSH?
- Для чего нужен переброс порта SSH?
- Сколько сессий можно устанавливать?
- Переброс локального порта
- Тестирование работы переадресованного порта
- Создание постоянного туннеля (Autossh)
- Переброс удалённого порта
- Динамическая переадресация портов
- Множественная переадресация
- Просмотр списка туннелей
- Ограничение переадресации портов
- Уменьшение задержки
Linux iptables: Port Redirection Example
H ow do I redirect 80 port to 8123 using iptables?
You can easily redirect incoming traffic by inserting rules into PREROUTING chain of the nat table. You can set destination port using the REDIRECT target.
Syntax
The syntax is as follows to redirect tcp $srcPortNumber port to $dstPortNumber:
The syntax is as follows to redirect udp $srcPortNumber port to $dstPortNumber:
Replace eth0 with your actual interface name. The following syntax match for source and destination ips:
Examples:
The following example redirects TCP port 25 to port 2525:
- No ads and tracking
- In-depth guides for developers and sysadmins at Opensourceflare✨
- Join my Patreon to support independent content creators and start reading latest guides:
- How to set up Redis sentinel cluster on Ubuntu or Debian Linux
- How To Set Up SSH Keys With YubiKey as two-factor authentication (U2F/FIDO2)
- How to set up Mariadb Galera cluster on Ubuntu or Debian Linux
- A podman tutorial for beginners – part I (run Linux containers without Docker and in daemonless mode)
- How to protect Linux against rogue USB devices using USBGuard
Join Patreon ➔
In this example all incoming traffic on port 80 redirect to port 8123
Quoting from the iptables man page:
The OUTPUT chain example:
How Do I View NAT Rules?
Type the following command:
How Do I Save NAT Redirect Rules?
Type the following command:
References:
🐧 Get the latest tutorials on Linux, Open Source & DevOps via
Category | List of Unix and Linux commands |
---|---|
Documentation | help • mandb • man • pinfo |
Disk space analyzers | df • duf • ncdu • pydf |
File Management | cat • cp • less • mkdir • more • tree |
Firewall | Alpine Awall • CentOS 8 • OpenSUSE • RHEL 8 • Ubuntu 16.04 • Ubuntu 18.04 • Ubuntu 20.04 |
Linux Desktop Apps | Skype • Spotify • VLC 3 |
Modern utilities | bat • exa |
Network Utilities | NetHogs • dig • host • ip • nmap |
OpenVPN | CentOS 7 • CentOS 8 • Debian 10 • Debian 8/9 • Ubuntu 18.04 • Ubuntu 20.04 |
Package Manager | apk • apt |
Processes Management | bg • chroot • cron • disown • fg • glances • gtop • jobs • killall • kill • pidof • pstree • pwdx • time • vtop |
Searching | ag • grep • whereis • which |
Shell builtins | compgen • echo • printf |
Text processing | cut • rev |
User Information | groups • id • lastcomm • last • lid/libuser-lid • logname • members • users • whoami • who • w |
WireGuard VPN | Alpine • CentOS 8 • Debian 10 • Firewall • Ubuntu 20.04 |
Comments on this entry are closed.
Just came across this one.Never tried but good idea.
gotta love this site.
thanks for the 1000th time 😉
Please check my query and update me if it is possible by iptables or any other software…
I have 2 application servers (i.e. A and B)
A ip is :- 192.168.11.22 and port :- 7013 (single lan card)
B ip is :- 10.10.10.22 and port :- 8014 (single lan card)
Now i want to set port fowarding/ redirection. When any client request to 192.168.11.22:7013 it will redirect to 10.10.10.22:8014 . How it is possible by iptables or any other way ?
I think for nat , two lan cards are required……
and can we pass one machine traffic to other which are on internet via port redirection….?
Thank you! I always forget how to redirect
Well heck. I thought this was my answer but adding the iptables rule to redirect outbound port 25 traffic to port 2525 has no effect. (Ubuntu 10.04)
Mixmaster is giving me cat fits because ISPs have decided that we are not allowed to send RFC compliant e-mail any more. Ever. No matter what. Any suggestions?
Can we see packet , means redirection from port 80 to port 3128 or redirect of confiugred ports in iptables rule.
My question is that , is there any tool or utility, by use of it we can see how packet handle by iptables.
How about redirecting an internal request to go out over a different interface.
I got bond0 and wlan0.
The request for a specific server let’s call it foobar on port 443. I always want to go out over wlan0 and never over bond0.
God bless you. I’ve been looking for these!
all connections are being redirected to the proxy … Why, if it is set different from the 172.16.0.0/12 and those connections I’m also going through the proxy
$IPTABLES -A PREROUTING -t nat -p tcp -i eth2 -s 10.18.83.0/24 -d ! 172.16.0.0/12 -m multiport –dports 80,443 -j DNAT –to 172.19.100.206:3128
Thanks, this was very helpful 🙂
Hi, I’ve got a quite funny setup. I connect with ssh to server1 and establish a tunnel. Packets are generated I mark the packets on the OUTPUT chain and redirect them with ip route through a vpn gateway. This works fine.
But I want to redirect the port from 80 to 3028 and this does not work on the output chain. The rule is ignored. How can I redirect the port on the Postrouting chain?
single rule doesnt work if You have a big script. Could You please publish complete firewall script with all settings ?
Does this syntax guarantee the return path from $dstPortNumber back to $srcPortNumber as well? I tried this out and it seems that my client can receive packets on the dstPort just fine, but those sent back are lost somehow.
Can you do it without iptables?
every packet arriving to port 25 will be forward to 2525, but what happens to packets arriving to port 2525? I would like to redirect them to 25, should I also add this rule?
iptables -t nat -A PREROUTING -i venet0 -p tcp –dport 1:20 -j REDIRECT –to-port 411
following request:
iptables: No chain/target/match by that name.
You want to redirect 2525 -> 25, and 25 -> 2525 – why on earth would you think that’s a great idea?
I am trying to redirect request on port 80 to 8080 (as tomcat is listening on this);
Following are the rules I added;
iptables -I INPUT -p tcp –dport 80 -j ACCEPT
iptables -t nat -I PREROUTING -p tcp –dport 80 -j REDIRECT –to-ports 8080
But, I am unable to see the tomcat page when I hit http://xxx.xx.xx.xx/ from outside.
But, when I also add the following in the IPTABLES, it works;
iptables -I INPUT -p tcp –dport 8080 -j ACCEPT
But, my question is why do I also need to expose port 8080. Because, that way http://xxx.xx.xx.xx:8080/ and http://xxx.xx.xx.xx/ would both work.
could someone help me with a better solution in this regard.
As far as I know the PREROUTING rules are applied before the INPUT rules. More in general the rules from the nat table are applied before the rules in the filter table. So, in your case, any packet going to port 80 is redirected to port 8080 (iptables -t nat -I PREROUTING -p tcp –dport 80 -j REDIRECT –to-ports 8080) and then it is filtered by the default DROP policy of the INPUT chain, which I assume you are using, in fact it doesn’t match the ACCEPT rule on port 80 (iptables -I INPUT -p tcp –dport 80 -j ACCEPT).
You have already verified it, as you said if you add a rule to accept INPUT packets on port 8080, both http://xxx.xx.xx.xx:8080/ and http://xxx.xx.xx.xx/ work properly. The former because it connects to port 8080 which is open, the latter because it connects to port 80 and gets redirected to port 8080 which is open.
To further verify it you should run iptables -L -n -v more times and check that the packet counter of the rule iptables -I INPUT -p tcp –dport 80 -j ACCEPT remains 0 even if you connect to http://xxx.xx.xx.xx/ between a run and the other.
As last option, for debugging purposes, you could add a LOG rule for packets on the 80 port and study the logs to see if any packet is accepted (syntax is easy, where the logs are depends on your system). Just remember to add it in the table just before the related ACCEPT rule and not after, otherwise the LOG rule would be ignored.
As last thing, don’t worry about how scary and difficult iptables can seem as everything I’ve told you I’ve learned this afternoon just by googling around and the good old trial and error 😉
Good luck
Hey I need help in port Redirection
This is my setup and it does not work
#iptables -A FORWARD -i eth1 -o eth0 -p tcp –dport 3390 -d 192.168.200.2 -j ACCEPT
#iptables -t nat -A PREROUTING -p tcp -i eth1 –dport 3389 -j DNAT –to 192.168.200.2:3389
I have ubuntu server 12.04 with two network card
This eth0 LAN
This eth1 WAN
I need to access from any to the addresses 192.168.200.2 Port 3390 and redirect to Port 3389 to (RDP)
My firewall is disabled
Is there a way to redirect only the allowed traffic to a specific port?
Either I am able to redirect or drop but not both of them together.
doesn’t make the config persistent, that just dumps out the running config. You’ll need to backup
/etc/sysconfig/iptables then run
to make the running config persistent accross reboots
Источник
ИТ База знаний
Курс по Asterisk
Полезно
— Узнать IP — адрес компьютера в интернете
— Онлайн генератор устойчивых паролей
— Онлайн калькулятор подсетей
— Калькулятор инсталляции IP — АТС Asterisk
— Руководство администратора FreePBX на русском языке
— Руководство администратора Cisco UCM/CME на русском языке
— Руководство администратора по Linux/Unix
Навигация
Серверные решения
Телефония
FreePBX и Asterisk
Настройка программных телефонов
Корпоративные сети
Протоколы и стандарты
Про SSH port forwarding в Linux
SSH туннели один из самых часто используемых методов связи среди системных и сетевых администраторов. В данном руководстве расскажем о такой функции как переброс порта SSH. Это используется для безопасной передачи данных между двумя и более системами.
Онлайн курс по Linux
Мы собрали концентрат самых востребованных знаний, которые позволят тебе начать карьеру администратора Linux, расширить текущие знания и сделать уверенный шаг к DevOps
Что такое переброс порта SSH?
Коротко, переброс порта SSH даёт возможность создавать туннель между несколькими системами, а затем настроить эти системы так, чтобы трафик они гнали через этот туннель. Именно по такой логике работает VPN или SOCKS Proxy.
Есть несколько разных методов переброса: переброс локального порта, переброс удалённого порта или динамический переброс. Для начала дадим пояснение каждому из них.
- Локальный переброс порта позволяет получать доступ ко внешним ресурсам из локальной сети и работать в удаленной системе, как если бы они находились в одной локальной сети. По такому принципу работает Remote Access VPN.
- Переброс удаленного порта дает возможность удалённой системе получать доступ к вашей локальной сети.
- Динамический переброс создает SOCKS прокси сервер. После этого настраиваем приложения так, чтобы они использовали это туннель для передачи данных. Чаще всего такой переброс используется для доступа к ресурсам, который по той или иной причине заблокированы для данной страны.
Для чего нужен переброс порта SSH?
Допустим у вас есть какое-то приложение, которые передаёт данные в открытом виде или через нешифрованный протокол. Ввиду того, что SSH создает шифрованное соединение, то вы с легкостью можете настроить программу так, чтобы трафик её шёл через этот туннель.
Он так же часто используется для доступа к внутренним ресурсам извне. Приблизительно это напоминает Site-to-Site VPN, где нужно указывать какой именно трафик нужно заворачивать в туннель.
Сколько сессий можно устанавливать?
Теоретически, можно создавать столько сессий, сколько нам захочется. В сети используется 65 535 различных портов, и мы можем перебрасывать любой из этих портов.
Но при перебросе порта нужно учитывать, что некоторые из них зарезервированы за конкретными сервисами. Например, HTTP использует 80 порт. Значит, переброс на порт 80 возможен только если нужно переадресовать веб трафик.
Порт, который перебрасывается на локальном хосте может не совпадать с портом удаленной системы. Мы легко можем перебросить локальный порт 8080 на порт 80 на удаленной машине. Иными словами, если мы напишем IP адрес нашей машины и порт 8080, то запрос пойдет на 80 порт удалённой системы.
Если вам не критично какой порт использовать на своем хосте, лучше выбрать что-то из диапазона 2000-10000, так как все порты ниже 2000 зарезервированы.
Переброс локального порта
Локальная пересылка представляет собой переброс порта из клиентской системы на сервер. Он позволяет настроить порт в системе таким образом, чтобы все соединения на этот порт проходили через туннель SSH.
Для переадресации локального порта используется ключ L. Общий синтаксис команды таков:
Данной командой мы говорим системе, что все запросы на 8080 порт example1.com переадресовывать на example2.com. Это часто используется когда нужно организовать доступ извне на внутренний ресурсы компании.
Тестирование работы переадресованного порта
Чтобы проверить, работает ли переадресация должным образом можно воспользоваться утилитой netcat. На машине, где была запущена команда переадресации нужно ввести команду netcat в следующем виде:
Если переадресация работает и трафик проходит, то утилита вернёт «Успех!». В противном случае выдаст ошибку об истечении времени ожидания.
Если что-то не работает, нужно убедиться, что подключение к удаленному порту по SSH работает корректно и запросы не блокируются межсетевым экраном.
Создание постоянного туннеля (Autossh)
Для создания туннеля, который будет активен постоянно используется так называемая утилита Autossh. Единственно требование это необходимость настройки между двумя системами аутентификацию по публичным ключам, чтобы не получать запросы на ввод пароля при каждом обрыве и восстановлении соединения.
По умолчанию, Autossh не установлен. Чтобы установить эту утилиту введем команду ниже.
Синтаксис утилиты autossh почти похож на синтаксис ssh:
Переброс удалённого порта
Переброс порта с удалённой машины используется в тех случаях, если нужно предоставить доступ на свой хост. Допусти у нас установлен веб сервер и нам нужно, чтобы друзья могли пользоваться им. Для этого нужно ввести команду показанную ниже:
А общий синтаксис команды выглядит так:
Динамическая переадресация портов
Динамическая переадресация портов позволит ssh функционировать как прокси-сервер. Вместо переброса трафика на специфический порт, здесь трафик будет идти через на диапазон портов.
Если вы когда-нибудь пользовались прокси сервером для посещения заблокированного сайта или просмотра контента, недоступного в вашем регионе, вероятнее всего вы пользовались SOCKS сервером.
Динамическая переадресация также обеспечивает некоторую приватность. Она затрудняет логирование и анализ трафика, так как трафик проходит через промежуточный сервер. Для настройки динамической переадресации используется следующая команда:
Таким образом, если нужно весь трафик идущий на порт 1234 направить на SSH сервер, нужно ввести команду:
После установления соединения, мы можем указать в приложениях, например, браузере, пропускать трафик через туннель.
Множественная переадресация
Иногда приходится перебрасывать несколько внутренних портов на несколько внешних. Допустим у нас на одном и том же сервере крутятся и веб сервер и oracale. В таком случае мы можем указать несколько условий переадресации ставя перед каждым из них ключ L для локальной переадресации и R для внешней.
Просмотр списка туннелей
Чтобы просмотреть сколько SSH туннелей активны на данный момент можно прибегнуть к помощи команды lsof:
Как видим, на нашей системе сейчас активно три подключения. Чтобы вместо имени хоста показать IP адрес к команде нужно добавить ключ n.
Ограничение переадресации портов
По умолчанию, переброс портов SSH активен для всех. Но если нужно ограничить переадресацию портов в целях безопасности, то нужно отредактировать файл sshd_config.
$ sudo vi /etc/ssh/sshd_config
Здесь есть несколько опций, позволяющих ограничивать создание SSH туннелей.
PermitOpen позволяет прописать адреса, для которых можно включить переадресацию портов. Тут можно указать конкретный IP адреса или название хоста:
AllowTCPForwarding данная опция включает или отключает переадресацию портов для SSH. Так же можно указать какой тип переадресации допускается на этом хосте.
Для подробной информации можно вызвать руководство по файлу sshd_config:
Уменьшение задержки
Проблема с переадресацией портов на SSH это возможность увеличения задержки. При работе с текстовой информацией э то не критично. Проблема даёт о себе знать если по сети идёт много трафика, а SSH сервер настрое как SOCKS сервер, то есть на нём настроена динамический переброс портов.
Это происходит по той причине, что SSH туннели по сути это TCP туннель поверх TCP. Это не очень эффективный метод передачи данных.
Для решения проблемы можно настроить VPN, но если по какой-то причине предпочитаете SSH туннели, то существует программа sshuttle, которая устраняет проблему. На Ubuntu или других дистрибутивах семейства Debian программу можно установить командой
Если же программы нет в репозиториях дистрибутива, то можно взять ее с GitHub:
Настройка туннеля в sshuttle отличается от SSH. Чтобы завернуть весь трафик в туннель нужно ввести следующую команду:
Прервать соединение можно комбинацией клавиш Ctrl+C. Чтобы запустить sshuttle как демон, нужно добавить ключ D.
Чтобы убедиться что туннель поднят и в глобальной сети показывается другой IP, в терминале можно ввести команду:
Или же просто открыть любой другой сайт, который покажет белый IP и местоположение.
Онлайн курс по Linux
Мы собрали концентрат самых востребованных знаний, которые позволят тебе начать карьеру администратора Linux, расширить текущие знания и сделать уверенный шаг к DevOps
Источник