Stiskněte "Enter" pro přeskočení obsahu

Jak mě Apache2 s fixem prastaré CVE-2007-6203 nasral a co s tím

ToŠ 0

Co se posralo

Po aktualizaci Apache (konkrétně verze 2.4.58 na Ubuntu) začaly některé proxy požadavky přes Nginx Proxy Manager (NPM) házet chybu:

Misdirected Request

The client needs a new connection for this request as the requested host name does not match the Server Name Indication (SNI) in use for this connection.
Apache/2.4.58 (Ubuntu) Server at valasi.eu Port 443

A tím začalo peklo. V prohlížeči to padá, v logách to plive tuhle srajdu, a člověk od pasu neví, co se děje.

Kde je zakopanej pes

Apache v této verzi opravil bezpečnostní díru CVE-2007-6203, která se týká SNI (Server Name Indication). Jinými slovy – pokud příchozí požadavek nemá správně nastavené SNI, Apache ho teď pošle do kytek.

Problém je, že Nginx Proxy Manager (a obecně reverzní proxy) si dřív s SNI nedělaly hlavu. Jenže po téhle opravě už Apache očekává, že i backend spojení má správně nastavené SNI podle Host.

Řešení? Dodělat to ručně.

Musíme donutit Nginx, aby posílal správné SNI do Apache.

Krok 1: Vytvořit fixovací soubor

Na hostiteli, kde běží NPM (např. Docker container app), vytvoř tento soubor:

/data/nginx/custom/server_proxy.conf

A do něj napchat:

proxy_ssl_server_name on;
proxy_ssl_name $host;

Tohle vnutí správný SNI do proxy požadavků směřujících na HTTPS backendy – tedy třeba právě na Apache.

Krok 2: Restartni kontejnery

Jestli máš NPM v Dockeru s composerem, pak:

docker-compose down
docker-compose up -d

Případně pokud používáš jinou správu kontejnerů, restartuj to podle svého.

POZOR: Pokud ti to při restartu hází nějaký ten debilní ContainerConfig error, mrkni na to, jestli nemáš nějaký nekompatibilní nebo rozbitý image. Pomáhá třeba smazat kontejnery a znovu sestavit. (docker-compose pull)

Krok 3: Zkontroluj

Zkus požadavek znovu přes browser. Chyba Misdirected Request by měla být v fuč.

Shrnutí

  • Apache opravil starou bezpečnostní díru CVE-2007-6203.
  • Proxy požadavky bez správného SNI Apache teď odmítá.
  • Nginx Proxy Manager to musíme naučit posílat.
  • Stačí přidat dvě direktivy do server_proxy.conf v /data/nginx/custom/.

A je klid.


Doufám, že ti to ušetří pár hodin života jako mě. Jestli ne, tak aspoň víš, kam házet flašky 😅

Napsat komentář