Cum să ascunzi versiunile Apache, nginx și PHP în CentOS

Ori de câte ori vizitezi o pagină internet, browserul tău trimite serverului în cererile HTTP și informații de identificare, iar la rândul lui, serverul răspunde cu anumite detalii. Problema e că serverul web trimite în mod implicit mai multe detalii decât e nevoie pentru funcționare.

Iată un exemplu de răspuns:

# curl -I http://xxx.xxxxxxx.xx
 HTTP/1.1 301 Moved Permanently
 Date: Wed, 08 Jan 2014 18:27:24 GMT
 Server: Apache/2.2.24 (Unix) mod_ssl/2.2.24 OpenSSL/0.9.8e-fips-rhel5 mod_bwlimited/1.4
 X-Powered-By: PHP/5.2.17
 Location: http://xxxxxxx.xx/
 Connection: close
 Content-Type: text/html

Aflăm imediat că pagina web vizitată rulează pe un server Apache învechit (versiunea 2.2 este de-„legacy”) și cu potențiale probleme de securitate, devreme de ultima versuine din ramura „legacy” este 2.2.26. Mai mult, versiunea PHP folosită — 5.2.17 — este una foarte veche.

Un hacker poate folosi aceste informații alături de altele) pentru a-și pregăti un atac de succes asupra site-ului, folosind exact exploit-urile disponibile pentru versiunile găsite.

În anumite situații (un exemplu este certificarea PCI) preferăm să nu divulgăm aceste versiuni. Iată cum puteți ascunde informațiile de identificare:

Apache

Serverul Apache are două directive de configurare: ServerSignature și respectiv ServerTokens.

Directiva ServerSignature este responsabilă pentru informațiile ce apar la finalul documentelor „server-generated” (ex. paginile 404 sau index-urile de fișiere). De obicei apar informații despre serverul web și adresa de email a webmaster-ului

Directiva ServerTokens este responsabilă pentru informațiile explicite despre server. În funcție de valoarea sa, următoarele informații sunt afișate.

Setare Răspuns trimis
ServerTokens Prod[uctOnly] Server: Apache
ServerTokens Major Server: Apache/2
ServerTokens Minor Server: Apache/2.2
ServerTokens Min[imal] Server: Apache/2.2.24
ServerTokens OS Server: Apache/2.2.24 (Unix)
ServerTokens Full Server: Server: Apache/2.2.24 (Unix) mod_ssl/2.2.24 ….

Pentru a limita total informațiile servite pe baza acestor directive, modificați fișierul de configurare /etc/httpd/conf/httpd.conf:

# vi /etc/httpd/conf/httpd.conf

Căutați cele două directive și modificați-le; dacă nu există, adăugați-le la finalul fișierului:

ServerSignature Off
ServerTokens Prod

Salvați fișierul și restartați serverul Apache:

# service httpd restart

PHP

Pentru a bloca afișarea informațiilor despre PHP, editați fișierul /etc/php.ini

# vi /etc/php.ini

Căutați directiva și modificați-o ca mai jos; dacă nu există, adăugați-o la finalul fișierului:

expose_php = Off

Salvați fișierul și restartați serverul Apache:

# service httpd restart

Asta e tot!
Acum, informațiile publicate vor fi mult mai criptice. De exemplu, în cazul de mai sus, datele ar arăta așa:

# curl -I http://xxx.xxxxxxx.xx
 HTTP/1.1 301 Moved Permanently
 Date: Wed, 08 Jan 2014 18:27:24 GMT
 Server: Apache
 Location: http://xxxxxxx.xx/
 Connection: close
 Content-Type: text/html

Bonus: nginx

Pentru serverul nginx, setarea ce trebuie urmărită este server_tokens: Aceasta poate fi adăugată în oricare din secțiunile http, server, sau location.Trebuie doar s-o setați pe off, în fișierul /etc/nginx/nginx.conf, ca mai jos:

server_tokens off;

Apoi restartați serverul cu comanda service nginx restart și gata.

Bibliografie: