Решение проблемы с появлением 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 // ...
Ссылки
- Википедия: Lsof command
- Википедия: 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
…
Cool — «Это работает!», У нас есть рабочий модуль, и теперь мы можем использовать его для наших Сервисов.
Давайте кратко рассмотрим каждый тип, а затем начнем с примеров:
-
ClusterIP
: тип по умолчанию, будет создавать ресурс службы с IP-адресом из пула кластера, такая служба будет доступна только внутри кластера (или сkube-proxy
) -
NodePort
: откроет порт TCP на каждом рабочем узле EС2, «за ним» автоматически создаст службуClusterIP
и направит трафик с этого порта TCP на ЕС2 на этотClusterIP
— такая служба будет быть доступным из мира (очевидно, если EC2 имеет общедоступный IP-адрес) или внутри VPC -
LoadBalancer
: создаст внешний балансировщик нагрузки (AWS Classic LB), «за ним» автоматически создастNodePort
, затемClusterIP
и, таким образом, направит трафик от балансировщика нагрузки к модулю в кластер -
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
…
Или просто можете получить информацию об услуге:
curl -L localhost: 8080 / api / v1 / namespaces / default / services / nginx-service /
{
«kind»: «Service»,
«apiVersion»: «v1»,
«metadata» : {
«name»: «nginx-service»,
«namespace»: «default»,
«selfLink»: «/ api / v1 / namespaces / default / services / nginx-service»,
. ..
Итак, ClusterIP
:
- предоставит доступ к приложению в кластере Kubernetes, но без доступа из мира
- будет использовать IP-адрес из IP-пула кластера и будет доступен через DNS-имя в области кластера, см. DNS для служб и подов
NodePort
Теперь давайте подробнее рассмотрим тип службы NodePort
.
С этим типом Kubernetes откроет TCP-порт на каждом WorkerNode, а затем через kube-proxy
, работающий на всех узлах, будет прокси-запросы от этого TCP-порта к модулю на этом узле.
Обновите наш манифест:
--- apiVersion: v1 вид: Сервис метаданные: имя: "nginx-service" пространство имен: "по умолчанию" спецификации: порты: - порт: 80 nodePort: 30001 тип: NodePort селектор: приложение: "nginx"
Параметр nodePort
здесь не является обязательным, он добавлен здесь только для примера.Без него Kubernetes выделит порт из диапазона портов 30000-32767.
Обновите службу:
kubectl apply -f nginx-svc.yaml
служба / nginx-служба настроена
Проверьте это:
kubectl get svc nginx-service
ИМЯ ТИП КЛАСТЕР-IP ВНЕШНИЙ IP-ПОРТ (И) ВОЗРАСТ
nginx-service NodePort 172.20.54.138 <нет> 80: 30001 / TCP 20h
И проверьте порт на инстансе EC2:
[root @ ip-10-3-49-200 ec2-user] # netstat -anp | grep 30001
tcp6 0 0 ::: 30001 ::: * СЛУШАТЬ 5332 / kube-proxy
Очевидно, что если рабочие узлы размещены в частных подсетях и у них нет доступа из мира, такая служба не может использоваться для предоставления доступа к приложению извне в сети.
Тем не менее, вы можете получить доступ к приложению NGINX из той же сети, например, с хоста Bastion:
[ec2-user @ ip-10-3-49-200 ~] $ curl 10.3.49.200:30001
…
Итак, тип 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
…
Что вы не можете сделать, используя этот тип, так это использовать маршрутизацию на основе хоста или пути, см. Сравнение 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
…
«Работает!» (в)
Маршрутизация на основе пути
В приведенном выше примере мы отправим весь трафик от 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.