Открыть порт 8080: Решение проблемы с появлением 8080 порта в ISP manager (настройка редиректа на 80 порт)

Содержание

Решение проблемы с появлением 8080 порта в ISP manager (настройка редиректа на 80 порт)

Сегодня столкнулся с проблемой — обнаружилось, что по ошибке старого системного администратора, в одном очень редком случае у нас происходил редирект с обычного 80 порта на порт 8080.

Из-за этого в индекс яндекса попала целая куча страниц, имеющих адрес example.com:8080, потому что проблема существовала уже 3 года, а заметили ее только сейчас.

Проблема усугублялась тем, что сервер конфигурировался автоматически с помощью ISP manager, что привело к тому, что сайты были доступны как по адресу example.com, так и по example.com:8080, и с учетом того, что к серверу было привязано 5 ip-адресов и на нем крутилось около 20 сайтов, переконфигурировать все вручную чтобы сконфигурировать правильным способом апач и nginx (сделать, чтобы апач слушал только 127.0.0.1 и чтобы они висели на одном порту с nginx, а внешние адреса слушал только nginx) не представлялось возможным. Проблеме потенциально подвержены все сайты, которые пользуются ISP manager, поэтому я считаю ее достаточно актуальной, и решил опубликовтаь свое решение, чтобы все тоже проверили и исправили, если надо.

Соответственно стояла задача — «малой кровью» сделать:
1. чтобы сайт example.com корректно работал, но не открывался по адресу example.com:8080
2. чтобы с порта 8080 для одного определенного сайта шел редирект на 80 порт, чтобы сохранить работоспособность страниц, попавших в выдачу яндекса.


Перейти сразу к ответу, без предыстории
Беглое гугление не показало ничего хорошего, большинство способов были аналогичны способу с iptables, предложенному тут:

iptables -A INPUT -p tcp -m tcp --dport 8080 -j REDIRECT --to-ports 80

Проблема в том, что этот способ не работает — dmesg выдает
ip_tables REDIRECT target: only valid in nat table, not filter.

После небольшого гугления нашел вариант в списке рассылки nginx-ru:
www.lexa.ru/nginx-ru/msg21134.html
Вариант был такой — перевесить в apache.conf мой сайт с моего ip 11.22.33.44:8080 на 127.0.0.1:8080, в nginx.conf соответсвенно прописать proxy_pass 127./(.*)$ http://$host:80/$1 redirect; }

Вариант в принципе был похож на правду, но была одна проблема — апач упорно слушал порт 11.22.33.44:8080, и соответсвенно не давал nginx-у начать его слушать.

Тут меня осенило — можно просто взять, и реализовать такой же редирект, но средствами apache а не nginx.

Просто берем и добавляем в apache2.conf соответствующий VirtualHost:

<VirtualHost 11.22.33.44:8080>
ServerName example.com
Redirect 301 / http://example.com/
</VirtualHost>

Попробовал — и вуаля, все заработало!

Решение проблемы

Таким образом, решение проблемы «как сделать редирект с 8080 порта на 80«, при условии что у вас стоит debian, nginx, apache и все это настроено isp-менеджером для сайта example.com с ip 11.22.33.44, состоит из четырех простых шагов:
1. В конфиге Apache (/etc/apache2/apache2.conf) меняем все вхождения
Virtual Host 11.22.33.44:8080
на
VirtualHost 127.0.0.1:8080

2. Добавляем в конфиг Apache (/etc/apache2/apache2.conf) новый VirtualHost с редиректом:
<VirtualHost 11.22.33.44:8080>
ServerName example.com
Redirect 301 / http://example.com/
</VirtualHost>

3. В конфиге nginx (/etc/nginx/nginx.conf) меняем все вхождения
proxy_pass http://11.22.33.44:8080

на
proxy_pass http://127.0.0.1:8080

4. перезапускаем apache, перезапускаем nginx
/etc/init.d/apache2 restart
/etc/init.d/nginx restart

Как открыть порт в Linux и чем проверить уже открытые?

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

Немного теории

Порт выражается числом от 0 до 65535. Многие значения зарегистрированы для служебных нужд, некоторые можно использовать произвольно. Порт определяет собой своеобразное уточнение адреса. К примеру, некоторый ресурс имеет запущенный у себя веб-сервер.

Чтобы знать, куда конкретно обратиться, компьютер, запрашивающий с него информацию, должен знать как минимум IP. Но если на ресурсе есть несколько различных служб, как понять, куда именно нужно переслать запрос? Вот тут и пригодится порт. Зная его номер, компьютер, используя IP-адрес и порт, сможет точно послать запрос на сервер.

Сложности в работе

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

Перечень наиболее популярных значений портов

Диапазон номеров от 0 до 1023 служит для использования системными программами и приложениями:

  • 21 — используется протоколом передачи данных FTP;
  • 22 — служба безопасной оболочки SSH;
  • 23 — Telnet;
  • 25 — протокол для передачи почтовых сообщений;
  • 80 — передача HTTP трафика. Используется веб-серверами;
  • 110 — POP3 (еще один почтовый протокол).

Данные значения зарезервированы и используются системой по умолчанию. Многие из оставшихся портов можно задействовать по своему усмотрению.

Как в Linux проверить открытые порты

Для этого имеются встроенные инструменты. Они показывают, какие порты в Linux открыты. Первый из них — netstat.

Пример его использования: sudo netstat -ntulp

Следующий за самой командой набор ключей представляет собой дополнительные параметры:

  • -l. Означает, что нужно показать только те порты, которые в данный момент прослушиваются;
  • -p. Более подробное отражение информации о приложении, использующем порт. В частности, отобразятся его название и ID процесса;
  • -t. Включить в список TCP порты;
  • -u. То же самое, только с UDP;
  • -n. Означает что адреса IP будут показаны в виде чисел.

Как открыть порт в Linux

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

Для открытия используется утилита iptables. Чтобы проверить, имеется ли она вообще в системе, нужно набрать в консоли команду: iptables —list

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

iptables -A INPUT -p tcp -m tcp —dport 53 -j ACCEPT

Здесь ключ А означает, что нужно добавить новое правило в существующую цепочку. INPUT показывает, что открытый порт будет входящим. Ключ -p говорит, что дальше указывается тип протокола, в данном случае TCP. Dport означает порт назначения, здесь — 53. Ну и ACCEPT — разрешающие соединения.

На самом деле ключей у iptables гораздо больше, что открывает широкие возможности для более тонкой настройки и способов открыть порт в Linux.

Как сделать, чтобы был открыт порт в Windows?

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

Брандмауэр

Нужно точно знать, открыт ли порт, поскольку если он временно недоступен, приглашения в пути теряются и не поступают. Для активации необходимо выполнить ряд шагов, о которых речь пойдет далее. Сегодня мы подробно опишем, как открыть порты на Windows. Прежде всего открываем «Панель управления». Изменяем вариант просмотра содержимого на «Мелкие значки». Переходим к функции «Брандмауэр Windows». В левой части окна расположилось несколько пунктов, среди них находим и применяем «Дополнительные параметры». Переходим к следующему диалоговому окну.

Мастер создания правил подключения

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

Входящее подключение

Если порт не открыт, нам предстоит пройти через все этапы работы мастера. Прежде всего, нам предлагают выбрать тип создаваемого правила. Ставим галочку напротив пункта «Для порта», нажимаем кнопку «Далее». Выбираем «Входящее подключение». Переходим к следующему этапу. Далее, чтобы был открыт порт, выбираем его номер или диапазон. Таким образом можно обеспечить беспрепятственный доступ на различные серверы. Перед нами появиться строка, в которой идет речь об определенных локальных портах.

Разрешение

Если уже открыт порт, однако нужно то же самое сделать с другими, разделяем их дефисами и нажимаем кнопку «Далее». На следующем этапе нам будут предложены всевозможные варианты подключения. Переходим на следующий этап и отмечаем галочкой пункт «Разрешать подключение». Таким образом, представленные соединения станут доступны для ПК. Нажимаем кнопку «Далее». Создаваемое правило применяется к доменному, частному и публичному профилю, поэтому их отмечаем во время открытия порта. Когда все действия будут выполнены, нажимаем кнопку «Готово». Мастер завершит работу. Мы в свою очередь сможем устанавливать соединения или получать сообщения посредством нового доступного порта.

Роутер

Данное устройство позволяет без особых трудностей подключить к Интернету сразу несколько устройств, при этом его настройка также напрямую касается нашей сегодняшней темы. Такое приспособление выступает в качестве маршрутизатора, обеспечивает доступ к ресурсам сети, а также позволяет открывать порты. Прежде всего, нам необходимо открыть сам роутер. Запускаем браузер и заходим в маршрутизатор. Далее перед нами возникнет строка, в которой вписываем внутренний IP. Чаще всего он выглядит так: 192.168.1.1. В случае возникновения ошибки вводим 192.168.0.1.

На следующем этапе проходим авторизацию в системе. С этой целью заполняем следующее окно необходимыми данными. Речь идет о логине и пароле, которые предоставляются провайдером. Чаще всего достаточно в обоих полях указать слово admin. Если эти данные не подойдут, заглядываем под роутер. Внизу отыскиваем всю необходимую информацию. Перед нами появится окно со специальной панелью навигации. Переходим к разделу Advanced Setup. После этого находим и используем функцию NAT. Затем нажимаем на кнопку Add (в русскоязычной версии интерфейса путь таков: «Настройки» и «Добавить»). В следующем окне мы найдем ряд особых полей: имя пользователя, адрес ПК, внешний и внутренний порт. Комбинацию, которую необходимо внести в первый пункт, нам предстоит придумать самостоятельно. При этом она должна быть максимально запоминающейся. Можно также выбрать название, используя предоставленный список. В адресной строке вводим внутренний IP. В полях внешнего порта указываем следующие цифры 25565. В результате внутренний порт будет указан автоматически. Далее нажимаем кнопку «Сохранить» и открываем порт через брандмауэр операционной системы. Любой компьютер, подключенный к сети, имеет 65535 портов. Речь идет о своеобразных «дверях», которые открывают доступ к данным. Таким образом, возможно взаимодействие нескольких устройств. Однако для этого обязательно должен быть открыт порт, в противном случае доступ к содержимому ПК будет ограничен. Кстати о роутерах: благодаря им пакеты данных, которые поступают из сети, распределяются через локальную сеть между устройствами. Беспроводное соединение можно установить не только между ПК, но даже с фотокамерами и бытовой техникой.

Как посмотреть открытые порты в Linux

Сетевые порты — это механизм, с помощью которого операционная система определяет какой именно программе необходимо передать сетевой пакет. Здесь можно привести пример с домом. Например, почтальону необходимо доставить посылку. Он доставляет посылку к дому, это IP адрес компьютера. А дальше в самом доме уже должны разобраться в какую квартиру направить эту посылку. Номер квартиры — это уже порт.

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

Содержание статьи:

Как посмотреть открытые порты linux

1. netstat

Утилита netstat позволяет увидеть открытые в системе порты, а также открытые на данный момент сетевые соединения. Для отображения максимально подробной информации надо использовать опции:

  • -l или —listening — посмотреть только прослушиваемые порты;
  • -p или —program — показать имя программы и ее PID;
  • -t или —tcp — показать tcp порты;
  • -u или —udp показать udp порты;
  • -n или —numeric показывать ip адреса в числовом виде.

Открытые порты Linux, которые ожидают соединений имеют тип LISTEN, а перед портом отображается IP адрес на котором сервис ожидает подключений. Это может быть определенный IP адрес или */0.0.0.0 что означают любой доступный адрес:

sudo netstat -tulpn

2. ss

Утилита ss — это современная альтернатива для команды netstat. В отличие от netstat, которая берет информацию из каталога /proc, утилита ss напрямую связывается со специальной подсистемой ядра Linux, поэтому работает быстрее и её данные более точные, если вы хотите выполнить просмотр открытых портов это не имеет большого значения. Опции у неё такие же:

sudo ss -tulpn

Можно вывести только процессы, работающие на 80-том порту:

sudo ss -tulpn | grep :80

3. lsof

Утилита lsof позволяет посмотреть все открытые в системе соединения, в том числе и сетевые, для этого нужно использовать опцию -i, а чтобы отображались именно порты, а не названия сетевых служб следует использовать опцию -P:

sudo lsof -i -P

Ещё один пример, смотрим какие процессы работают с портом 80:

sudo lsof -i -P | grep :80

4. Nmap

Программа Nmap — мощный сетевой сканер, разработанный для сканирования и тестирования на проникновение удаленных узлов, но ничего не мешает направить его на локальный компьютер. Утилита позволяет не только посмотреть открытые порты, но и примерно определить какие сервисы их слушают и какие уязвимости у них есть. Программу надо установить:

sudo apt install nmap

Затем можно использовать:

nmap localhost

Для простого сканирования можно запускать утилиту без опций. Детальнее о её опциях можно узнать в статье про сканирование сети в Nmap. Эта утилита ещё будет полезна если вы хотите посмотреть какие порты на компьютере доступны из интернета.

Если это публичный сервер, то результат скорее всего не будет отличатся от локального сканирования, но на домашнем компьютере все немного по другому. Первый вариант — используется роутер и в сеть будут видны только порты роутера, еще одним порогом защиты может стать NAT-сервер провайдера. Технология NAT позволяет нескольким пользователям использовать один внешний IP адрес. И так для просмотра открытых внешних портов сначала узнаем внешний ip адрес, для надежности воспользуемся онлайн сервисом:

wget -O - -q eth0.me

Дальше запускаем сканирование:

nmap 185.29.237.91

В результате мы видим, что открыт порт 80 веб-сервера и 22 — порт службы ssh, я их не открывал, эти порты открыты роутером, 80 — для веб-интерфейса, а 22 для может использоваться для обновления прошивки. А еще можно вообще не получить результатов, это будет означать что все порты закрыты, или на сервере установлена система защиты от вторжений IDS. Такая проверка портов может оказаться полезной для того, чтобы понять находится ли ваш компьютер в безопасности и нет ли там лишних открытых портов, доступных всем.

5. Zenmap

Программа Zenmap — это графический интерфейс для nmap. Она не делает ничего нового кроме того, что может делать nmap, просто предоставляет ко всему этому удобный интерфейс. Для её установки выполните:

sudo apt install zenmap

Запустить программу можно из главного меню или командой:

zenmap

Затем введите адрес localhost в поле Цель и нажмите кнопку Сканирование:

После завершения сканирования утилита вывела список открытых портов Linux.

Выводы

В этой статье мы рассмотрели инструменты, которые вы можете использовать для того чтобы узнать узнать открытые порты linux. Инструментов не так много как для просмотра информации об оперативной памяти или процессоре, но их вполне хватает. А какими программами пользуетесь вы? Напишите в комментариях!

Оцените статью:

Загрузка…

Linux — Какое приложение использует порт 8080

Автор mkyong |

Просмотрено: 0 | +0 pv / w

Разработчикам Java всегда необходимо знать, какое приложение использует порт 8080 с высокими требованиями. В этом руководстве мы покажем вам два способа узнать, какое приложение использует порт 8080 в Linux.

1. Команда lsof + ps

1.1 Поднимите терминал, введите lsof -i: 8080

 
$ lsof -i: 8080

КОМАНДНЫЙ ПИД ПОЛЬЗОВАТЕЛЬ ТИП FD РАЗМЕР УСТРОЙСТВА / ВЫКЛ. ИМЯ УЗЛА
java 10165 mkyong 52u IPv6 191544 0t0 TCP *: http-alt (СЛУШАТЬ)
  

Примечание
Если результат несколько, попробуйте lsof -i: 8080 | grep СЛУШАТЬ

1.2 PID 10165 использует порт 8080, тип ps -ef | grep 10165 , чтобы узнать подробности приложения.

 
$ ps -ef | grep 10165

мкёнг 10165 4364 1 11:58? 00:00:20 /opt/jdk/jdk1.8.0_66/jre/bin/java
// ...
-Djava.endorsed.dirs = / home / mkyong / software / apache-tomcat-8.0.30 / одобрено
-classpath /home/mkyong/software/apache-tomcat-8.0.30/bin/bootstrap.jar:
/home/mkyong/software/apache-tomcat-8.0.30/bin/tomcat-juli.jar
-Dcatalina.base = / home / mkyong / .IntelliJIdea15 / system / tomcat / Безымянный_hc_2
-Dcatalina.Главная = / главная / mkyong / программное обеспечение / apache-tomcat-8.0.30
-Djava.io.tmpdir = / home / mkyong / software / apache-tomcat-8.0.30
/ temp org.apache.catalina.startup.Bootstrap запуск
 

Ответ : IntelliJ IDEA + Tomcat 8 использует порт 8080.

2. Команда netstat + ps

Просто другая команда, чтобы сделать то же самое. Введите netstat -nlp | grep 8080 для получения PID и ps it.

 
$ netstat -nlp | grep 8080

(Не все процессы могут быть идентифицированы, информация о процессах, не принадлежащих
 не будет отображаться, вы должны быть root, чтобы увидеть все это.)
tcp6 0 0 ::: 8080 ::: * СЛУШАТЬ 10165 / java

$ ps -ef | grep 10165

мкёнг 10165 4364 1 11:58? 00:00:20 /opt/jdk/jdk1.8.0_66/jre/bin/java
// ...
 

Ссылки

  1. Википедия: Lsof command
  2. Википедия: ps co

Сканирование портов в Интернете | Сканирование портов | Сканер портов

Используйте этот инструмент для сканирования отдельных портов, чтобы определить, прослушивает ли устройство этот порт.Сканирование только портов TCP (сканирование UDP скоро будет доступно при бесплатной регистрации). Для наших гостей просканировано более 12 983 079 847 портов.

Полный список присвоенных номеров портов поддерживается T1 Shopper.

Подобно ветру, дующему через окна в доме, порты — это просто места для оборудования, используемые для передачи данных внутрь и наружу. Как ветерок, дующий в окно и выходящий из него, компьютеры отправляют информацию (и принимают данные) через эти окна или порты.(Чтобы не сбить вас с толку, у компьютеров есть внутренние порты (для подключения дисководов, мониторов, клавиатур и т. Д.), А также внешние порты (для подключения модемов, принтеров, мыши и других периферийных устройств). Но я не собираюсь Если вы хотите знать о внутренних или внешних портах, давайте просто будем проще. Как насчет примера?

  • Я использую порт 80 (да, я компьютер веб-сервера) для отправки этой веб-страницы в ваш веб-браузер. Я делаю это, читая веб-страницу со своего диска, а затем отправляю ее из моего порта 80 через веселый Интернет на ваш невероятно быстрый компьютер.Ваш компьютер получит его через «принимающий порт» (который не будет портом 80), и, наконец, ваш веб-браузер прочитает HTML-код и отобразит его как красивую веб-страницу, которую вы читаете прямо сейчас.

а почему порт 80? Почему веб-серверы используют порт 80? Ничего особенного в этом числе — люди просто собрались вместе и волей-неволей решили, что порт 80 будет портом по умолчанию, через который веб-сервер будет отправлять свой контент. Не верите мне? Хорошо, попробуйте это: перейдите на свой любимый веб-сайт, скажем, http: // www.t1shopper.com/, но вместо того, чтобы вводить его, как обычно, добавьте «: 80» после части «.com», например: http://www.t1shopper.com:80/. Магия! Вы получите ту же веб-страницу, даже если укажете номер порта!

Так в чем преимущество таких номеров портов? Что ж, при публично согласованной нумерации портов ввод номера порта становится необязательным! Да, это быстрее — нам не нужно набирать пальцы, глупо вводя каждый раз номер порта. Вместо http: // www.t1shopper.com:80/ мы можем просто ввести http://www.t1shopper.com/, и наши компьютеры узнают (из-за префикса http), что мы запрашиваем веб-страницу, и поэтому он использует порт 80 по умолчанию, без нашего напечатать это. Компьютеры — это не весело!

Ладно, давай поиграемся! Номера портов были разделены на три диапазона: хорошо известные порты (от 0 до 1023), зарегистрированные порты (с 1024 по 49151), а также динамические и / или частные порты (это самые высокие порты с 49152 по 65535 и обычно используются для приема data, как в нашем примере выше).И кто отслеживает все эти номера портов по умолчанию, списки портов и протоколы? Управление по присвоению номеров в Интернете. IANA не только координирует это, но и все всемирные доменные имена и назначения IP-адресов. Они заняты. Если вы настоящий компьютерщик, вам понравится сухое чтение RFC793, в котором дается полное техническое описание портов.

Некоторые вирусы атакуют определенные порты вашего компьютера в рамках своей конструкции, например старый вирус SASSER, который использовал TCP-порт 445.Чтобы проверить, можете ли вы быть уязвимы для вируса SASSER, используйте вышеуказанный инструмент сканирования портов для сканирования порта 445. Если сканирование портов показывает, что оно может пройти через порт 445 на любом брандмауэре, который у вас есть, и порт 445 вашего компьютера также открыт / активен , то вы можете быть восприимчивы к вирусу SASSER.

Для полной безопасности / сканирования на вирусы T1 Shopper предлагает использовать следующие инструменты:

Открытые порты брандмауэра Ubuntu — Как открыть порт в брандмауэре Ubuntu

В этом руководстве по UFW мы узнаем, как открыть порт в брандмауэре Ubuntu.

ufw позволяет использовать команду для открытия порта в брандмауэре Ubuntu. По умолчанию, если вы не указали протокол, порт будет открыт для протоколов TCP и UDP.

ufw разрешить номер порта / протокол

Примеры

Приведенное выше правило откроет 53 порт TCP и UDP для всех сетей.

Это правило откроет TCP-порт 22 для всех сетей.

Мы можем удалить правила брандмауэра, используя команду удаления ufw

Открытый порт по имени службы в брандмауэре Ubuntu

Также возможно открыть порт по имени службы вместо номера порта.

Это правило разрешает протокол ssh (который по умолчанию использует TCP-порт 22) из ​​брандмауэра Ubuntu.

ufw проверит файл / etc / services для соответствующего порта, если мы укажем протокол по имени службы вместо номера порта.

Открыть порт для определенного IP-адреса в UFW

Вместо того, чтобы открывать порт для всех, UFW позволяет открывать порты для определенного IP-адреса, используя следующий формат.

ufw разрешить с <удаленного IP> на <локальный IP> порт <номер порта> proto <протокол>

Примеры

ufw позволяют от 192.168.1.50 на любой порт 53

Разрешить доступ с IP-адреса 192.168.1.50 как для TCP, так и для UDP-порта 53 (поскольку протокол не указан).

ufw позволяет с 192.168.1.50 на любой порт 22 proto tcp

Это правило открывает TCP-порт 22 для удаленного IP-адреса 192.168.1.50 из брандмауэра Ubuntu.

ufw разрешить от 192.168.1.50 до 192.168.1.200 порт 22 протокол TCP

Это правило брандмауэра открывает порт 22 для IP-адреса 192.168.1.50, но соединение может быть установлено только через локальный IP-адрес (192.168.1.200). Это полезно, если вы настроили более одного IP-адреса на своем сервере Ubuntu.

Открытый порт для сети

Используя маску подсети, мы можем открыть сетевой порт для всей сети или диапазона IP-адресов.

ufw разрешить с 192.168.1.0/24 на любой порт 22 proto tcp

Это правило брандмауэра открывает порт TCP 22 для всей сети 192.168.1.0.

Открыть несколько портов из одного правила брандмауэра

Мы можем открыть несколько портов, разделив порты запятой или диапазон портов с помощью двоеточия.

ufw разрешить с любого на любой порт протокола TCP 21,22

Откройте порт 21 и 22 в брандмауэре Ubuntu.

ufw разрешить с любого на любой порт протокола TCP 8080: 8090

Это правило брандмауэра откроет TCP-порт с 8080 по 8090 из брандмауэра Ubuntu.

Дополнительные правила брандмауэра Пример

Откройте http-порт 80 для всех из брандмауэра Ubuntu.

Откройте FTP-порт 21 в брандмауэре.

ufw разрешить с 192.168.1.10 на любой порт 21 proto tcp

Откройте FTP-порт 21 на IP-адрес 192.168.1.10

Резюме — Что мы узнали

В этом руководстве по UFW мы узнали, как открыть порт из брандмауэра Ubuntu с помощью команды ufw allow.

Что дальше?

В следующем руководстве мы узнаем, как заблокировать сетевой порт в брандмауэре Ubuntu UFW Firewall.

ClusterIP, NodePort, LoadBalancer, Services и Ingress — обзор с примерами

Для сетевых коммуникаций Kubernetes представляет четыре типа услуг — ClusterIP (по умолчанию), NodePort , LoadBalancer и ExternalName , а также ресурсы Ingress .

В этом посте мы кратко рассмотрим их все и проверим, как они работают.

Документация доступна здесь — Publishing Services (ServiceTypes).

Я использую AWS Elastic Kubernetes Service, поэтому имейте в виду, что у нас есть виртуальное частное облако AWS и балансировщики нагрузки приложений AWS.

В кластере Kubernetes вам могут потребоваться следующие сетевые сценарии:

  • прямая связь между контейнерами — обеспечивается абстракцией Pod и доступ контейнеров друг к другу через локальный хост внутри одного и того же модуля — см. Модули
  • связь между Pod и Pod в области кластера — обеспечивается сетевыми плагинами, в случае AWS EKS см. AWS VPC CNI для Kubernetes
  • подключений от Pod к Сервису — предоставляется абстракцией Service, например — ClusterIP
  • подключений из мира к подам в кластере — предоставляется абстракцией Service, с внешним ресурсом, например — AWS Load Balancer

Основная цель Сервисов в Kubernetes — обеспечить постоянный доступ к его модулям без необходимости искать IP-адрес модуля каждый раз, когда вы воссоздаете такой модуль.

Кроме того, службы могут обеспечивать минимальную балансировку нагрузки между аналогичными модулями, см. Службы.

Для тестов давайте создадим развертывание с модулем с веб-сервером NGINX, который будет принимать подключения к своему порту 80:

kubectl create deployment nginx —image = nginx

deployment.apps / nginx created

Чек:

kk get deploy nginx

ИМЯ ГОТОВА АКТУАЛЬНОЕ ДОСТУПНО ВОЗРАСТ

nginx 1/1 1 1 53s

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

kubectl получить развертывание nginx -o jsonpath = ‘{.metadata.labels} ‘

карта [приложение: nginx]

Хорошо — это тег app со значением nginx — запомните.

kubectl порт-вперед

Чтобы убедиться, что наш модуль работает и может обрабатывать входящие подключения к порту 80, позвольте использовать kubectl port-forward . После того, как мы проверим, что он работает — можно начинать играть с настройкой сети со стороны кластера Kubernetes.

Найдите имя модуля:

kubectl get pod

НАЗВАНИЕ ГОТОВ СОСТОЯНИЕ ВОССТАНОВЛЕНИЕ ВОЗРАСТ

nginx-554b9c67f9-rwbp7 1/1 Бег 0 40 м

Передайте его kubectl port-forward в качестве первого аргумента, затем укажите локальный порт ( 8080 ) и порт на модуле ( 80 ):

kubectl port-forward nginx-554b9c67f9-rwbp7 8080: 80

Перенаправление от [:: 1]: 8080 -> 80

С локального компьютера проверьте подключение к модулю NGINX в кластере Kubernetes:

curl localhost: 8080

Добро пожаловать в nginx!

Cool — «Это работает!», У нас есть рабочий модуль, и теперь мы можем использовать его для наших Сервисов.

Давайте кратко рассмотрим каждый тип, а затем начнем с примеров:

  1. ClusterIP : тип по умолчанию, будет создавать ресурс службы с IP-адресом из пула кластера, такая служба будет доступна только внутри кластера (или с kube-proxy )
  2. NodePort : откроет порт TCP на каждом рабочем узле EС2, «за ним» автоматически создаст службу ClusterIP и направит трафик с этого порта TCP на ЕС2 на этот ClusterIP — такая служба будет быть доступным из мира (очевидно, если EC2 имеет общедоступный IP-адрес) или внутри VPC
  3. LoadBalancer : создаст внешний балансировщик нагрузки (AWS Classic LB), «за ним» автоматически создаст NodePort , затем ClusterIP и, таким образом, направит трафик от балансировщика нагрузки к модулю в кластер
  4. ExternalName : что-то вроде DNS-прокси — в ответ на такой сервис будет возвращена запись, принятая через CNAME записи, указанной в externalName

КластерIP

Самый простой тип, стандартный.

Откроет доступ к приложению в кластере без доступа из мира.

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

Давайте использовать следующий манифест Kubernetes:

 ---
apiVersion: v1
вид: Сервис
метаданные:
  имя: "nginx-service"
  пространство имен: "по умолчанию"
спецификации:
  порты:
    - порт: 80
  тип: ClusterIP
  селектор:
    приложение: "nginx" 

Создание службы:

kubectl применить -f nginx-svc.yaml

служба / nginx-служба создана

Проверьте это:

kk get svc nginx-service

ИМЯ ТИП КЛАСТЕР-IP ВНЕШНИЙ IP-ПОРТ (И) ВОЗРАСТ

nginx-service ClusterIP 172.20.54.138 <нет> 80 / TCP 38s

kubectl прокси и служба DNS

Поскольку ClusterIP Service type будет доступен только из кластера — мы можем использовать kubectl proxy для его тестирования — это откроет локальный TCP-порт для API-сервера, а затем мы сможем использовать его для доступа к нашему NGINX.

Запустить прокси:

kubectl proxy —port = 8080

Запуск на 127.0.0.1:8080

Теперь, зная имя нашей службы — мы устанавливаем его в метаданных : имя — мы можем открыть соединение с локальным хостом : 8080 , а затем через имя пространства имен — с самой службой:

curl -L localhost: 8080 / api / v1 / namespaces / default / services / nginx-service / proxy

Добро пожаловать в nginx! < / название></p><p>…</p><p> Или просто можете получить информацию об услуге:</p><p> curl -L localhost: 8080 / api / v1 / namespaces / default / services / nginx-service /</p><p> {</p><p> «kind»: «Service»,</p><p> «apiVersion»: «v1»,</p><p> «metadata» : {</p><p> «name»: «nginx-service»,</p><p> «namespace»: «default»,</p><p> «selfLink»: «/ api / v1 / namespaces / default / services / nginx-service»,</p><p>. ..</p><p> Итак, <code> ClusterIP </code>:</p><ul><li> предоставит доступ к приложению в кластере Kubernetes, но без доступа из мира</li><li> будет использовать IP-адрес из IP-пула кластера и будет доступен через DNS-имя в области кластера, см. DNS для служб и подов</li></ul><h3><span class="ez-toc-section" id="NodePort"> <code> NodePort </code> </span></h3><p> Теперь давайте подробнее рассмотрим тип службы <code> NodePort </code>.</p><p> С этим типом Kubernetes откроет TCP-порт на каждом WorkerNode, а затем через <code> kube-proxy </code>, работающий на всех узлах, будет прокси-запросы от этого TCP-порта к модулю на этом узле.</p><p></p><p> Обновите наш манифест:</p><pre data-enlighter-language="generic"> --- apiVersion: v1 вид: Сервис метаданные: имя: "nginx-service" пространство имен: "по умолчанию" спецификации: порты: - порт: 80 nodePort: 30001 тип: NodePort селектор: приложение: "nginx" </pre><p> Параметр <code> nodePort </code> здесь не является обязательным, он добавлен здесь только для примера.Без него Kubernetes выделит порт из диапазона портов 30000-32767.</p><p> Обновите службу:</p><p> kubectl apply -f nginx-svc.yaml</p><p> служба / nginx-служба настроена</p><p> Проверьте это:</p><p> kubectl get svc nginx-service</p><p> ИМЯ ТИП КЛАСТЕР-IP ВНЕШНИЙ IP-ПОРТ (И) ВОЗРАСТ</p><p> nginx-service NodePort 172.20.54.138 <нет> 80: 30001 / TCP 20h</p><p> И проверьте порт на инстансе EC2:</p><p> [root @ ip-10-3-49-200 ec2-user] # netstat -anp | grep 30001</p><p> tcp6 0 0 ::: 30001 ::: * СЛУШАТЬ 5332 / kube-proxy</p><p> Очевидно, что если рабочие узлы размещены в частных подсетях и у них нет доступа из мира, такая служба не может использоваться для предоставления доступа к приложению извне в сети.</p><p> Тем не менее, вы можете получить доступ к приложению NGINX из той же сети, например, с хоста Bastion:</p><p> [ec2-user @ ip-10-3-49-200 ~] $ curl 10.3.49.200:30001</p><p> <! DOCTYPE html></p><p><html></p><p><head></p><p><title> Добро пожаловать в nginx!

Итак, тип NodePort :

  • привязан к конкретному хосту, например ЕС2
  • , если хост недоступен из мира — тогда такая служба не будет предоставлять внешний доступ к подам
  • будет использовать IP-адрес из пула провайдера, например AWS VPC CIDR
  • .
  • предоставит доступ к модулям только на том же рабочем узле

Балансировщик нагрузки

Наиболее часто используемый тип услуги.

В случае AWS — создаст AWS Load Balancer, по умолчанию Classic, который будет проксировать трафик на все экземпляры ЕС2 TargetGroup, привязанные к этому Load Balancer, а затем через службу NodePort — ко всем модулям.

На таком балансировщике нагрузки можно использовать TLS, можно использовать различные типы балансировщиков нагрузки — внутренний / внешний и т. Д., См. Другие аннотации ELB.

Обновите манифест:

 ---
apiVersion: v1
вид: Сервис
метаданные:
  имя: "nginx-service"
  пространство имен: "по умолчанию"
спецификации:
  порты:
    - порт: 80
  тип: LoadBalancer
  селектор:
    приложение: "nginx" 

Применить:

kubectl применить -f nginx-svc.yaml

служба / nginx-служба настроена

Чек:

kubectl get svc nginx-service

ИМЯ ТИП КЛАСТЕР-IP ВНЕШНИЙ IP-ПОРТ (S) ВОЗРАСТ

nginx-service LoadBalancer 172.20.54.138 ac8415de24f6c4db9b5019f789792azb-4432607.us / TCP 21h

Подождите пару минут, пока ваш DSN обновится, и проверьте URL-адрес созданного балансировщика:

curl ac8415de24f6c4db9b5019f789792e45-443260761.us-east-2.elb.amazonaws.com

Добро пожаловать в nginx!

Что вы не можете сделать, используя этот тип, так это использовать маршрутизацию на основе хоста или пути, см. Сравнение Application Load Balancer и Classic Load Balancer.

На самом деле, чтобы иметь все возможности в приложении AWS Application Load Balancer, мы можем использовать другой тип сервиса — Ingress , о нем мы поговорим чуть позже в части Ingress этого поста.

Итак, LoadBalancer Тип сервиса:

  • обеспечит внешний доступ к подам
  • обеспечит базовую балансировку нагрузки для модулей на разных EC2
  • даст возможность завершить сеансы SSL / TLS
  • не поддерживает маршрутизацию уровня 7

Внешнее имя

Другой тип службы — это ExternalName , который перенаправляет запрос в домен, указанный в его параметре externalName :

 ---
apiVersion: v1
вид: Сервис
метаданные:
  name: "google-service"
  пространство имен: "по умолчанию"
спецификации:
  порты:
    - порт: 80
  тип: ExternalName
  externalName: google.com 

Создать:

kubectl apply -f nginx-svc.yaml

служба / служба Google создана

Проверить службу:

kubectl get svc google-service

ИМЯ ТИП КЛАСТЕР-IP ВНЕШНИЙ IP-ПОРТ (И) ВОЗРАСТ

google-service ExternalName <нет> google.com 80 / TCP 33s

И проверьте, как это работает — перейдите в модуль NGINX и используйте утилиту dig для проверки записи DNS:

root @ nginx-554b9c67f9-rwbp7: / # dig google-service.default.svc.cluster.local + short

google.com.

172.217.8.206

Здесь мы запрашиваем локальное DNS-имя google-servic e, которое было преобразовано в IP-адрес домена google.com , который был установлен в externalName .

На самом деле, Ingress не является специализированной службой — он просто описывает набор правил для Kubernetes Ingress Controller для создания балансировщика нагрузки, его слушателей и правила маршрутизации для них.

Документация здесь >>>.

В случае AWS это будет ALB Ingress Controller — см. ALB Ingress Controller в Amazon EKS и AWS Elastic Kubernetes Service: запуск ALB Ingress controller.

Чтобы заставить его работать, Ingress требуется дополнительная служба, в которой Ingress будет перенаправлять трафик на — своего рода серверную часть.

Для ALB Ingress Controller манифест с Ingress и его службой может быть следующим:

 ---
apiVersion: v1
вид: Сервис
метаданные:
  имя: "nginx-service"
  пространство имен: "по умолчанию"
спецификации:
  порты:
    - порт: 80
  тип: NodePort
  селектор:
    приложение: "nginx"
---
apiVersion: extensions / v1beta1
вид: Ingress
метаданные:
  имя: "nginx-ingress"
  аннотации:
    кубернетес.io / ingress.class: alb
    alb.ingress.kubernetes.io/scheme: доступ в Интернет
  ярлыки:
    приложение: "nginx"
спецификации:
  бэкэнд:
    serviceName: "nginx-service"
    servicePort: 80 

Здесь мы создаем службу с типом NodePort и Ingress с типом ALB.

Kubernetes создаст объект Ingress , затем alb-ingress-controller увидит его, создаст AWS ALB с правилами маршрутизации из spec для Ingress , создаст объект Service с NodePort порт, затем откроет TCP-порт на WorkerNodes и начнет маршрутизацию трафика от клиентов => к Load Balancer => к NodePort на EC2 => через Service к модулям.

Давай проверим.

Служба:

kubectl get svc nginx-service

ИМЯ ТИП КЛАСТЕР-IP ВНЕШНИЙ IP-ПОРТ (И) ВОЗРАСТ

nginx-service NodePort 172.20.54.138 <нет> 80: 30968 / TCP 21h

Вход :

kubectl get ingress nginx-ingress

ИМЯ ХОЗЯЙСТВА АДРЕС ПОРТЫ ВОЗРАСТ

nginx-ingress * e172ad3e-default-nginxingr-29e9-1405936870.us-east-2.elb.amazonaws.com 80 5 мин. 22 сек.

и URL-адрес балансировщика нагрузки:

curl e172ad3e-default-nginxingr-29e9-1405936870.us-east-2.elb.amazonaws.com

Добро пожаловать в nginx! / title>

«Работает!» (в)

Маршрутизация на основе пути

В приведенном выше примере мы отправим весь трафик от ALB к той же службе и ее модулям.

Используя Ingress и его правила, мы также можем указать правила для отправки трафика на конкретный сервер, в зависимости, например, от URI запроса.

Итак, давайте раскроем два модуля NGINX:

kubectl create deployment nginx-1 —image = nginx

deployment.apps / nginx-1 created

kubectl create deployment nginx-2 —image = nginx

deployment.apps / nginx-2 created

Создайте файл для каждого, но с разным содержанием:

kubectl exec nginx-1-75969c956f-gnzwv — bash -c «echo svc-1> / usr / share / nginx / html / sv1.html «

kubectl exec nginx-2-db55bc45b-lssc8 — bash -c» echo svc-2> /usr/share/nginx/html/svc2.html «

Обновите файл манифеста и добавьте еще одну службу и установите правила для Ingress с двумя бэкэндами:

 ---
apiVersion: v1
вид: Сервис
метаданные:
  имя: "nginx-1-service"
  пространство имен: "по умолчанию"
спецификации:
  порты:
    - порт: 80
  тип: NodePort
  селектор:
    приложение: "nginx-1"
---
apiVersion: v1
вид: Сервис
метаданные:
  имя: "nginx-2-service"
  пространство имен: "по умолчанию"
спецификации:
  порты:
    - порт: 80
  тип: NodePort
  селектор:
    приложение: "nginx-2"
---
apiVersion: extensions / v1beta1
вид: Ingress
метаданные:
  имя: "nginx-ingress"
  аннотации:
    кубернетес.io / ingress.class: alb
    alb.ingress.kubernetes.io/scheme: доступ в Интернет
  ярлыки:
    приложение: "nginx"
спецификации:
  правила:
  - http:
      пути:
      - путь: /svc1.html
        бэкэнд:
          serviceName: "nginx-1-service"
          servicePort: 80
      - путь: /svc2.html
        бэкэнд:
          serviceName: "nginx-2-service"
          servicePort: 80 

Здесь мы устанавливаем два правила: если URI == / svc1.html или / svc2.html — затем отправил трафик на nginx-1 или nginx-2 соответственно.

Разверни:

kubectl apply -f nginx-svc.yaml

service / nginx-1-service created

service / nginx-2-service created

ingress.extensions / nginx-ingress configured

Ознакомьтесь с правилами:

kubectl describe ingress nginx-ingress

Rules:

Backends пути к хосту

—- —- ———

*

/ svc1.html nginx-1-service: 80 (<нет>)

/svc2.html nginx-2-service: 80 (<нет>)

Проверьте — сделайте запрос по URI svc1.html и svc2.html :

curl e172ad3e-default-nginxingr-29e9-1405936870.us-east-2.elb.amazonaws.com/svc1.html

svc-1

curl e172ad3e-default-nginxingr-29e9-140-east-2 .elb.amazonaws.com / svc2.html

svc-2

Маршрутизация на основе имени

Другой пример — маршрутизация на основе имени хоста.

Давайте создадим три записи DNS — svc1.example.com , svc2.example.com, и просто svc.example.com , а затем через CNAME-записи укажем их на наш URL-адрес балансировщика нагрузки, созданный из Ресурс Ingress .

Затем обновите манифест:

 ---
apiVersion: v1
вид: Сервис
метаданные:
  имя: "nginx-1-service"
  пространство имен: "по умолчанию"
спецификации:
  порты:
    - порт: 80
  тип: NodePort
  селектор:
    приложение: "nginx-1"
---
apiVersion: v1
вид: Сервис
метаданные:
  имя: "nginx-2-service"
  пространство имен: "по умолчанию"
спецификации:
  порты:
    - порт: 80
  тип: NodePort
  селектор:
    приложение: "nginx-2"
---
apiVersion: extensions / v1beta1
вид: Ingress
метаданные:
  имя: "nginx-ingress"
  аннотации:
    кубернетес.io / ingress.class: alb
    alb.ingress.kubernetes.io/scheme: доступ в Интернет
  ярлыки:
    приложение: "nginx"
спецификации:
  правила:
  - хост: "svc1.example.com"
    http:
      пути:
      - бэкэнд:
          serviceName: "nginx-1-service"
          servicePort: 80
  - хост: "svc2.example.com"
    http:
      пути:
      - бэкэнд:
          serviceName: "nginx-2-service"
          servicePort: 80
  - http:
      пути:
      - бэкэнд:
          serviceName: "nginx-1-service"
          servicePort: 80 

Здесь мы оставили Сервисы без изменений, но в Правилах мы установили запрос на svc1.example.com необходимо отправить на Service-1, svc2.example.com — на Service-2, svc.example.com — на серверную часть по умолчанию, например Сервис-1.

Проверьте это:

curl svc1.example.com

svc-1

curl svc2.example.com

svc-2

curl svc.example.com

svc-1

И проверьте эти правила на прослушивателе балансировщика нагрузки в консоли AWS:

«Вот и все, ребята!» (в)



Также опубликовано на Medium.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *