Что видно из сети, решают две вещи: на каком адресе слушает программа и что пропускает фильтр. Начинают с первой — с описи на самом сервере.
Поверхность атаки сервера — всё, до чего можно достучаться из сети. Каждый открытый порт — программа, в которой может найтись уязвимость, и вход, где можно подбирать пароли. Поэтому снаружи оставляют только то, без чего сервер не сделает свою работу.
Опись — это sudo ss -tlnp: все слушающие TCP-сокеты с программами (урок «Кто слушает порт»). Без sudo столбец Process пустой — чужие процессы ss не показывает. По каждой строке решают три вещи: на каком адресе сокет, чья это программа и кому она нужна.
Адрес в Local Address |
Кто подключится |
|---|---|
127.0.0.1, 127.0.0.53 |
только программы этой же машины |
0.0.0.0 |
клиенты с любого IPv4-адреса машины, то есть из сети |
[::] |
то же для IPv6 |
Сокет на 0.0.0.0 или [::] виден из сети, если его не закрыл межсетевой экран. Сокет на 127.0.0.1 из сети не виден никогда: пакет с чужой машины на этот адрес не придёт.
Составь опись сокетов
На самом сервере выведи слушающие TCP-сокеты вместе с программами.
Сначала предположи
Сканер снаружи нашёл четыре порта. Будут ли в описи сокеты, которых он не видел?
Теперь начни упражнение, выполни команду и сверь прогноз с выводом.
В описи у postgres — 0.0.0.0:5432. База нужна только приложению магазина на этом же сервере. Что с ней сделаешь?
-
Базу использует приложение магазина: остановленная база закроет порт вместе с магазином.
-
Сканер находит любой открытый порт:
nmap -p-проверит все 65535. Порт останется виден из сети. -
Подключение база принимает, и до кода, который проверяет пароль, из сети достучаться можно. nmap видит порт открытым.
Клиент базы — на этой же машине, поэтому ей хватит адреса 127.0.0.1.