- PVSM.RU - https://www.pvsm.ru -
Открытые порты — это распахнутые двери в вашу инфраструктуру. Сервис, который слушает по ним запросы, обрабатывает входящие данные и реагирует на них в зависимости от заложенной логики. Из-за ошибок на этом уровне возникают уязвимости, которые хактивист может эксплуатировать для нелегитимного доступа к инфраструктуре.
Самый логичный способ обезопасить себя — ограничить сетевой доступ к сервису или инфраструктуре — например, через порты. Это можно сделать с помощью межсетевого экрана — инструмента для управления трафиком в сети и защиты от несанкционированного доступа. Решение позволяет описать, какие запросы будут проходить через определенные порты, к каким сервисам можно получить доступ и т. д.
Привет! Меня зовут Иван, я ведущий инженер по информационной безопасности в Selectel [1]. Давно хотели научиться настраивать сетевые интерфейсы? Хорошая новость: мы в Selectel запускаем цикл статей по работе с портами в разрезе ИБ. В этом материале разберем, как с помощью различных межсетевых экранов: локальных, облачных и МСЭ в составе NGFW — обеспечить дополнительную защиту сервисов. Подробности под катом!
Используйте навигацию, если не хотите читать текст полностью:
→ Подготовка: в чем нужно разобраться [2]
→ Поверхность атаки и открытые порты [3]
→ Сценарий 1. Белый адрес задан на сетевом интерфейсе [4]
→ Сценарий 2. Дополнительно настроен локальный межсетевой экран [5]
→ Сценарий 3. Дополнительно настроен облачный межсетевой экран [6]
→ Сценарий 4. Сервер заведен на виртуальный NGFW [7]
→ Заключение [8]
Про сетевые технологии написано уже много. Как минимум, для работы с портами важно разобраться, как устроена модель TCP/IP, в чем разница между портом и сокетом и т. д. Обо всем этом мы с коллегами уже рассказали в бесплатном курсе «Как работают сетевые протоколы [9]».
1. Уровень сетевого интерфейса (Network Interface Layer) отвечает за физическую передачу данных между устройствами. Включает работу с аппаратным обеспечением: сетевыми картами и кабелями. А также преобразование цифровых данных в сигналы для передачи по каналам связи.
2. Интернет-уровень (Internet Layer) занимается адресацией и маршрутизацией данных. Основной протокол — IP (Internet Protocol). Данные разбиваются на пакеты, которым присваиваются IP-адреса отправителя и получателя. Интернет-уровень определяет оптимальный путь передачи данных через сеть.
3. Транспортный уровень (Transport Layer) управляет передачей данных между хостами. Протоколы TCP (Transmission Control Protocol) и UDP (User Datagram Protocol) обеспечивают передачу данных: TCP — с проверкой ошибок и гарантией доставки, UDP — более простой и быстрый способ передачи без гарантии.
4. Уровень приложений (Application Layer) предоставляет интерфейс для конечных пользователей и приложений, позволяя им взаимодействовать с сетью. Примеры протоколов — HTTP, FTP и SMTP.
Важно: в основном я буду говорить о втором и третьем уровне. Больше подробностей о работе TCP/IP — в Академии Selectel [10].
Публикация сервисов в интернете означает, что устройство предоставляет определенные услуги — например, веб-сайты — и делает их доступными в интернете. Для этого девайс должен иметь публичный IP-адрес и открытые порты, чтобы другие устройства могли подключиться и использовать предлагаемые сервисы.
Есть несколько вариантов публикации виртуальной машины наружу. Например, вы можете добавить белый адрес на сетевой интерфейс сервера. Или использовать серый адрес и далее настроить NAT 1:1 или Port-Forwarding.
В рамках статья я буду использовать три архитектуры:
Схема 1. Виртуальная машина с веб-сайтом находится в серой сети. Для серого адреса сервера добавлен плавающий IP. Все порты ВМ пробрасываются наружу.
Схема 2. Виртуальная машина с веб-сайтом защищена облачным межсетевым экраном. На ВМ может быть назначен как белый адрес, так и серый с плавающим IP, как это реализовано в первой схеме.
Схема 3. Сервер с веб-сайтом заведен за виртуальный межсетевой экран — отдельную машину с Usergate VE.
Давайте посмотрим, какой будет поверхность атаки для разных способов публикации. Я создам в публичном облаке Selectel [11] виртуальную машину для размещения веб-страницы в одном пуле и сервер для сканирования в другом. Контент сайта в данном случае не играет никакой роли — для нас важна только доступность портов из интернета.
В рамках этого сценария все будет актуально для схемы, где на сетевом интерфейсе виртуальной машины задан серый адрес и настроен NAT 1:1 (т. е. плавающий IP-адрес).
1. Переходим в панель управления my.selectel.ru [12] и выбираем раздел Облачная платформа.
2. Открываем вкладку Серверы и создаем два сервера в разных пулах [13]. Например, в ru-9a и ru-3b. Будет достаточно минимальных произвольных конфигураций:
Конфигурации виртуальных серверов.
1. После создания виртуальной машины [14] проведем первичное сканирование. На сервере scan необходимо установить сетевой сканер nmap:
$ sudo apt install nmap -y
2. Выполним команду для сканирования портов виртуальной машины srv:
sudo nmap -p 0-65535 <ip srv>
3. Получаем вывод:
Starting Nmap 7.80 ( https://nmap.org ) at 2024-09-02 14:55 UTC
Nmap scan report for 87.228.25.110
Host is up (0.0011s latency).
Not shown: 65534 closed ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp filtered smtp
Nmap done: 1 IP address (1 host up) scanned in 3.22 seconds
Как видим, наружу открыт порт 22/TCP, а 25/TCP фильтруется Selectel по умолчанию.
4. Далее на машине srv установим nginx:
$sudo apt install nginx
5. Возвращаемся на сервер scan. Попробуем повторно просканировать порты виртуальной машины srv:
tarting Nmap 7.80 ( https://nmap.org ) at 2024-09-02 15:03 UTC
Nmap scan report for 87.228.25.110
Host is up (0.0011s latency).
Not shown: 65533 closed ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp filtered smtp
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 3.18 seconds
Сейчас я могу взаимодействовать со службами, которые работают на этих портах. То есть при дефолтных настройках порты открыты для всего интернета. И можно увидеть, сколько обращений сыпется на порты 22/TCP и 80/TCP. Для этого на сервере srv достаточно выполнить команду:
$ sudo tcpdump -pni eth0 inbound
Сразу после публикации в интернет нашим сервером начинают интересоваться и сканировать порты. О том, как это работает, мы рассказали в отдельной статье [15].
Поднимем и настроим стенд, как в первом сценарии.
1. Теперь в ОС самого виртуального сервера разрешим доступ к порту 22/TCP только для доверенных белых IP-адресов. Для этого добавим правило iptables — читайте в Академии [16], что это такое.
$ sudo iptables -L
Запросы со всех остальных IP-адресов к порту 22/TCP будут отклоняться. В результатах сканирования видим:
Starting Nmap 7.80 ( https://nmap.org ) at 2024-09-02 15:20 UTC
Nmap scan report for 87.228.25.110
Host is up (0.0011s latency).
Not shown: 65533 closed ports
PORT STATE SERVICE
22/tcp filtered ssh
25/tcp filtered smtp
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 3.18 seconds
Видно, что доступным остался только порт 80/TCP. Порт 22/TCP сейчас имеет статус filtered.
Как в первом и втором сценариях, поднимем и настроим стенд, но вместо сервера scan будет использовать межсетевой экран. Предварительно также нужно удалить iptables на сервере srv, если он есть:
$ sudo iptables -F INPUT
Настроим то же самое на базе облачного межсетевого экрана Selectel [17].
1. Переходим в панель управления my.selectel.ru и выбираем раздел Облачная платформа.
2. Открываем вкладку Файрволы и создаем файрвол. Выбираем пул, в котором расположен сервер srv, и указываем сеть, для которой будет настроен межсетевой экран:
Настройка файрвола в облаке.
2. Создаем правило входящего трафика, разрешающее доступ по 22/TCP к серверу srv только для доверенного белого адреса. А также — правило, которое разрешает исходящий трафик от сервера srv в интернет:
Настройка правил файрвола.
Сканируем порты сервера srv:
$ sudo nmap -p 0-65535 <ip>
Starting Nmap 7.80 ( https://nmap.org ) at 2024-09-02 15:38 UTC
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 3.04 seconds
Как видно из результата сканирования, все порты сервера недоступны.
Если на облачном межсетевом экране разрешить входящий трафик на 80/TCP для всего интернета, то и со сканера будет доступен порт:
$ sudo nmap -p 0-65535 <ip>
Starting Nmap 7.80 ( https://nmap.org ) at 2024-09-02 15:40 UTC
Nmap scan report for 87.228.25.110
Host is up (0.0012s latency).
PORT STATE SERVICE
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 0.03 seconds
Облачным межсетевым экраном можно управлять не только через веб-интерфейс панели my.selectel.ru, но и через API OpenStack. Подробнее рассказали в документации [18].
1. Переходим в панель управления my.selectel.ru и выбираем раздел Облачная платформа.
2. В разделе Образы загружаем предварительно установленный образ диска Usergate VE.
3. Открываем вкладку Серверы и создаем виртуальную машину с Usergate VE. Будет достаточно 2 vCPU и 4 ГБ RAM.
4. Далее осуществляем первичную настройку сервера по инструкции [19].
5. После установки Usergate VE изменим конфигурацию сети, чтобы она соответствовала третьей схеме. В результате настройки интерфейсов будут выглядеть следующим образом:
Admin@aleasaageeas# show network interface
adapter:
port0
type : adapter
interface-name : port0
node-name : utmcore@aleasaageeas
zone : Untrusted
enabled : on
ip-addresses : 192.168.0.3/24
iface-mode : static
mac : fa:16:3e:95:58:c0
mtu : 1500
running : on
master : off
dhcp-relay :
enabled : off
utm-address : undefined
iface-type : l3
netflow-profile : Undefined
lldp-profile : Undefined
port1
type : adapter
interface-name : port1
node-name : utmcore@aleasaageeas
zone : Trusted
enabled : on
ip-addresses : 192.168.100.3/24
iface-mode : static
mac : fa:16:3e:b3:34:4a
mtu : 1500
running : on
master : off
dhcp-relay :
enabled : off
utm-address : undefined
iface-type : l3
netflow-profile : Undefined
lldp-profile : Undefined
6. Добавим на зону внешнего интерфейса более жесткие условия защиты от DoS:
Admin@aleasaageeas# set network zone Untrusted dos-protection-syn alert-threshold 100
Admin@aleasaageeas# set network zone Untrusted dos-protection-syn drop-threshold 150
Admin@aleasaageeas# show network zone Untrusted dos-protection-syn
enabled : on
aggregate : off
alert-threshold : 100
drop-threshold : 150
7. Настроим Port Forwarding на Usergate для публикуемого сервиса:
# create network-policy nat-routing 1 upl-rule
…OK
... src.zone = Untrusted
... dst.ip = lib.network(Uplink)
... target_ip("192.168.100.2")
... port_map(80)
... name(SRV)
…src.geoip = RU
... port_mapping
...
Для данной публикации можно добавить разрешение доступа только для src ip, входящих в список GeoIP = RU. То есть сервис будет доступен только IP AS, зарегистрированных в РФ.
Дополнительные настройки
Кроме того, можно опубликовать сервис с помощью Reverse Proxy — в этом случае будет возможность дополнительно анализировать HTTP-запрос.
1. Сначала создадим Reverse Proxy Server:
# create global-portal reverse-proxy-servers name SRV address 192.168.100.2 port
2. Далее через веб-интерфейс или в CLI с помощью UPL [20] создадим правило Reverse-proxy. Для этого понадобится задать GeoIP источников, а также разрешенные Useragent пользовательских браузеров. Получится примерно такое правило:
# show global-portal reverse-proxy-rules
% ----------------- 1 -----------------
OK
url.port = 80
src.zone = Untrusted
src.geoip = RU
request.header.User-Agent = lib.useragent(Chrome, Edge, Firefox, Opera, Safari, "Yandex browser")
profile(SRV)
rewrite_path("example.com/path1", "example.local/path2")
enabled(true)
name(SRV)
Теперь опубликованный сервис будет доступен только для белых IP, входящих в диапазон GeoIP=RU и с HTTP-заголовками Useragent, значения которых указаны в открытых списках [21].
Как видим, самый простой способ обезопасить себя — ограничить сетевой доступ к сервису или к инфраструктуре. К тому же, на межсетевых экранах можно задавать белые и черные списки.
Суть белого списка (whitelist) — разрешить доступ только явно указанным доверенным адресам источников. Такой способ можно использовать, если заранее известны адреса легитимных адресов-источников.
Черный список (blacklist) содержит адреса, доступ с которых должен быть запрещен. Для всех остальных доступ будет разрешен. Этот способ, например, позволяет ограничить доступ для IP-адресов с плохой репутацией, которые уже попали в списки блокировок.
Частным случаем белых и черных списков можно считать GeoIP. С помощью него можно разрешить или запретить доступ к сервисам для разных пулов IP-адресов, зарегистрированных в AS определенной страны.
Другим способом выявления аномалий является анализ поведения пользователей. Например, число запросов за единицу времени или количество полученных ошибок от сервера может говорить о попытках нелегитимного доступа или воздействия на сервис. поэтому источник таких запросов необходимо внести в черный список, запретив доступ к защищаемому ресурсу на заранее определенное время.
Обеспечение безопасности открытых портов — это ключевой аспект защиты сетевой инфраструктуры. Открытые порты являются потенциальными точкой входа для атак, поэтому важно регулярно проверять их и использовать различные инструменты для минимизации рисков.
Понимание основ работы IP-адресов, портов, сокетов и различных уровней модели TCP/IP позволяет более глубоко осознать риски и методы защиты. А сканирование — выявлять потенциальные уязвимости и реагировать на них.
В следующей статье рассмотрим список наиболее популярных портов. А еще поговорим о том, как открытые порты могут свидетельствовать о взломе сервиса. Еще увидимся!
Автор: is113
Источник [22]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/c-3/395753
Ссылки в тексте:
[1] по информационной безопасности в Selectel: https://selectel.ru/services/is/?utm_source=habr.com&utm_medium=referral&utm_campaign=security_article_ports_040924_content
[2] Подготовка: в чем нужно разобраться: #1
[3] Поверхность атаки и открытые порты: #2
[4] Сценарий 1. Белый адрес задан на сетевом интерфейсе: #3
[5] Сценарий 2. Дополнительно настроен локальный межсетевой экран: #4
[6] Сценарий 3. Дополнительно настроен облачный межсетевой экран: #5
[7] Сценарий 4. Сервер заведен на виртуальный NGFW: #6
[8] Заключение: #7
[9] Как работают сетевые протоколы: https://selectel.ru/blog/courses/network-protocols/?utm_source=habr.com&utm_medium=referral&utm_campaign=cloud_article_ports_040924_academy
[10] в Академии Selectel: https://selectel.ru/blog/tcp-ip-for-beginners/?utm_source=habr.com&utm_medium=referral&utm_campaign=cloud_article_ports_040924_academy
[11] в публичном облаке Selectel: https://selectel.ru/services/cloud/?utm_source=habr.com&utm_medium=referral&utm_campaign=cloud_article_ports_040924_content
[12] my.selectel.ru: http://my.selectel.ru/?utm_source=habr.com&utm_medium=referral&utm_campaign=cloud_article_ports_040924_content
[13] в разных пулах: https://docs.selectel.ru/control-panel-actions/infrastructure/
[14] виртуальной машины: https://selectel.ru/services/cloud/servers/?utm_source=habr.com&utm_medium=referral&utm_campaign=cloud_article_ports_040924_content
[15] в отдельной статье: https://habr.com/ru/companies/selectel/articles/760080/
[16] читайте в Академии: https://selectel.ru/blog/setup-iptables-linux/?utm_source=habr.com&utm_medium=referral&utm_campaign=cloud_article_ports_040924_academy
[17] облачного межсетевого экрана Selectel: https://selectel.ru/blog/cloud-firewall/?utm_source=habr.com&utm_medium=referral&utm_campaign=cloud_article_ports_040924_academy
[18] в документации: https://docs.selectel.ru/terraform/examples/cloud-firewalls/create-firewall/
[19] по инструкции: https://docs.selectel.ru/security/firewalls/usergate/deploy-virtual-usergate-on-cloud-server/
[20] UPL: https://support.usergate.com/node/23819
[21] в открытых списках: https://www.useragentstring.com/pages/useragentstring.php
[22] Источник: https://habr.com/ru/companies/selectel/articles/840834/?utm_source=habrahabr&utm_medium=rss&utm_campaign=840834
Нажмите здесь для печати.