A nyitott portok listája egyben a szerverhez vezető utak listája. Minden más — tűzfalak, WAF, behatolásészlelés — csak ráépítmény. Ezért áll a „mi figyel nálam” ellenőrzés minden auditban az első helyen, és éppen ez adja a legkellemetlenebb eredményt is: a talált dolgok felét nem te nyitottad meg, hanem valamelyik csomag telepítőszkriptje.

Olvassuk a kimenetet

sudo ss -tulpn

Kapcsolók: t — TCP, u — UDP, l — csak a figyelők, p — folyamat, n — nincs névfeloldás. sudo nélkül a folyamatoszlop üres marad, és az egész elveszti értelmét.

A Local Address:Port oszlopot kell nézni, és ott a különbség elvi:

  • 127.0.0.1:3306 — a szolgáltatás csak magáról a gépről érhető el. Ez jó;
  • 0.0.0.0:3306 — minden IPv4-címről, tehát az internetről. Ezt ellenőrizni kell;
  • [::]:3306 — ugyanez IPv6-ra. Külön sor, amelyről rendszeresen megfeledkeznek;
  • 203.0.113.25:443 — konkrét címen, általában szándékosan.

Ezután minden 0.0.0.0 vagy [::] sornál egyetlen kérdést teszel fel: bejuthat-e ide egy kívülálló? A 80-as és 443-as portra a válasz igen. Szinte minden másra nem.

Szokásos leletek

Redis, 6379-es port. A lehető legveszélyesebb sor. Alapból a Redis nem kér jelszót, a parancsai pedig lehetővé teszik fájl lemezre írását — azaz idegen kulcs elhelyezését az authorized_keys fájlban. A Redis nyilvános címen való megjelenése és kihasználása között órák telnek el, néha kevesebb. Ellenőrizd a bind 127.0.0.1 és a protected-mode yes beállítást a konfigurációban.

Memcached, 11211/UDP. Még ha nincs is benne semmi értékes, a szervered mások támadásainak erősítőjévé válik — a panaszok pedig a tárhelyszolgáltatótól érkeznek.

MySQL és PostgreSQL, 3306 és 5432. Jelszó van, de a találgatás megszakítás nélkül folyik, az adatbázisverziók pedig ritkábban frissülnek, mint kellene. Kifelé szinte soha nincs rájuk szükség: az alkalmazás ugyanazon a gépen van, a munkához pedig elég egy SSH-alagút.

Elasticsearch 9200, MongoDB 27017. Történetileg alapértelmezett hitelesítés nélkül. E szolgáltatások nyilvános példányai állandó forrásai az adatszivárgási híreknek.

A Docker API-ja, 2375. A Docker nyitott vezérlőportja root a gépen, mindenféle jelszó nélkül. Általában a Docker távoli elérésével végzett kísérletek után jelenik meg.

Vezérlőpanelek és phpMyAdmin a saját portjaikon: 8080, 8083, 10000. Nem arról van szó, hogy soha nem szabad megnyitni őket, de éppen ezek vonzzák magukra a próbálkozások fő áramát.

A szolgáltatás szintjén javíts, ne a tűzfalon

A kísértés, hogy minden leletet UFW-szabállyal zárj le, érthető, de ez a második vonal, nem az első. Egy szabály véletlenül törölhető, a tűzfal hibakeresés közben pillanatokra kikapcsolható, a Docker pedig teljesen az UFW mellett publikál portokat. A kötés beállítása a szolgáltatás konfigurációjában mindezt túléli:

  • MySQL/MariaDB — bind-address = 127.0.0.1;
  • PostgreSQL — listen_addresses = 'localhost';
  • Redis — bind 127.0.0.1 ::1;
  • Docker Compose — publikálás így: "127.0.0.1:5432:5432".

A tűzfal biztosításként kerül rá, nem helyette.

A folyamat megtalálása, ha nem tudod, mi az

Az ss mutatja a nevet és a pid-et. Azután:

sudo systemctl status <pid>
sudo lsof -i :8080

Az első parancs megnevezi azt a systemd-egységet, amelyhez a folyamat tartozik — ez általában elég annak megértéséhez, mi ez, és kell-e. Egy ismeretlen folyamat, amely magas porton figyel, és a rendszerkönyvtárakon kívülről indult — például a /tmp vagy a /dev/shm könyvtárból —, már nem konfigurációs kérdés, hanem külön vizsgálat oka.

A kívülről végzett ellenőrzés kötelező

Az ss arra a kérdésre válaszol, hogy „mi figyel”, nem arra, hogy „mihez lehet hozzáférni”. E kettő között ott áll a tűzfal, a NAT és a szolgáltató szabályai. Az egyetlen őszinte választ egy másik gépről végzett szkennelés adja:

nmap -Pn -p- 203.0.113.25
nmap -Pn -p- -6 2001:db8::1

A második parancsot ne hagyd ki: IPv6-címe szinte minden VPS-nek van, a hozzá tartozó szabályokat külön írják, a szolgáltatás pedig a protokoll mindkét verzióján egyszerre figyel.

Ez nem egyszeri ellenőrzés

A nyitott portok listája magától változik. Telepítettél egy csomagot — hozott egy szolgáltatást, és nyitott egy portot. Frissítetted a panelt — visszaállította az alapbeállítást. Indítottál egy konténert — publikált egy portot a tűzfal mellett. Az egyszeri ellenőrzés a mai napra felel, semmi többre.

Az érték nem magában a listában van, hanem a változásaiban: egy új port, amely tegnap még nem volt ott, rövid és nagyon beszédes jelzés. Éppen így érdemes tekinteni rá — pillanatképként, amelynek van előzménye, nem pedig fejből felidézett ss-kimenetként. Az alábbi bemutatóoldal pontosan ezt mutatja.