13 Consells de seguretat i enduriment del servidor web Apache


Tots estem molt familiaritzats amb el servidor web Apache, és un servidor web molt popular per allotjar els vostres fitxers web o el vostre lloc web al web. Aquí teniu alguns enllaços que us poden ajudar a configurar el servidor web Apache a la vostra caixa de Linux.

  1. Instal·leu el servidor web Apache
  2. Configura el teu lloc web al teu Linux Box

En aquest tutorial, explicaré alguns consells principals per protegir el vostre servidor web. Abans d'aplicar aquests canvis al vostre servidor web, hauríeu de tenir alguns conceptes bàsics del servidor Apache.

  1. Directori arrel del document: /var/www/html o /var/www
  2. Fitxer de configuració principal: /etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora) i /etc/apache2/apache2.conf (Debian/Ubuntu).
  3. Port HTTP predeterminat: 80 TCP
  4. Port HTTPS predeterminat: 443 TCP
  5. Prova la configuració i la sintaxi del fitxer de configuració: httpd -t
  6. Accediu als fitxers de registre del servidor web: /var/log/httpd/access_log
  7. Fitxers de registre d'errors del servidor web: /var/log/httpd/error_log

1. Com ocultar la versió d'Apache i la identitat del sistema operatiu dels errors

Quan instal·leu Apache amb la font o qualsevol altre instal·lador de paquets com yum, mostra la versió del vostre servidor web Apache instal·lat al vostre servidor amb el nom del sistema operatiu del vostre servidor a Errors. També mostra la informació sobre els mòduls Apache instal·lats al vostre servidor.

A la imatge de dalt, podeu veure que Apache mostra la seva versió amb el sistema operatiu instal·lat al vostre servidor. Això pot ser una amenaça de seguretat important per al vostre servidor web i també per a la vostra caixa de Linux. Per evitar que Apache no mostri aquesta informació al món, hem de fer alguns canvis al fitxer de configuració principal d'Apache.

Obriu el fitxer de configuració amb l'editor vim i cerqueu ServerSignature, de manera predeterminada. Hem de desactivar aquesta signatura del servidor i la segona línia ServerTokens Prod diu a Apache que torni només Apache com a producte a la capçalera de resposta del servidor a la sol·licitud de cada pàgina, suprimeix la informació de la versió principal i menor del sistema operatiu.

# vim /etc/httpd/conf/httpd.conf (RHEL/CentOS/Fedora)
# vim /etc/apache2/apache2.conf (Debian/Ubuntu)
ServerSignature Off
ServerTokens Prod
# service httpd restart (RHEL/CentOS/Fedora)
# service apache2 restart (Debian/Ubuntu)

2. Desactiveu la llista de directoris

Per defecte, Apache llista tot el contingut del directori arrel del document en absència d'un fitxer d'índex. Si us plau, mireu la imatge següent.

Podem desactivar la llista de directoris utilitzant la directiva Opcions al fitxer de configuració d'un directori específic. Per això hem de fer una entrada al fitxer httpd.conf o apache2.conf.

<Directory /var/www/html>
    Options -Indexes
</Directory>

3. Continueu actualitzant Apache amb regularitat

La comunitat de desenvolupadors d'Apache treballa contínuament en problemes de seguretat i publica la seva versió actualitzada amb noves opcions de seguretat. Per tant, sempre es recomana utilitzar l'última versió d'Apache com a servidor web.

Per comprovar la versió d'Apache: podeu comprovar la vostra versió actual amb l'ordre httpd -v.

# httpd -v
Server version: Apache/2.2.15 (Unix)
Server built:   Aug 13 2013 17:29:28

Podeu actualitzar la vostra versió amb l'ordre següent.

# yum update httpd
# apt-get install apache2

També es recomana mantenir el nucli i el sistema operatiu actualitzats amb les últimes versions estables si no esteu executant cap aplicació específica que només funcioni en un sistema operatiu o nucli específic.

4. Desactiveu els mòduls innecessaris

Sempre és bo reduir les possibilitats de ser víctima d'un atac web. Per tant, es recomana desactivar tots aquells mòduls que no s'utilitzen actualment. Podeu llistar tots els mòduls compilats del servidor web, utilitzant la següent comanda.

# grep LoadModule /etc/httpd/conf/httpd.conf

# have to place corresponding `LoadModule' lines at this location so the
# LoadModule foo_module modules/mod_foo.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authn_alias_module modules/mod_authn_alias.so
LoadModule authn_anon_module modules/mod_authn_anon.so
LoadModule authn_dbm_module modules/mod_authn_dbm.so
LoadModule authn_default_module modules/mod_authn_default.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_dbm_module modules/mod_authz_dbm.so
LoadModule authz_default_module modules/mod_authz_default.so
LoadModule ldap_module modules/mod_ldap.so
LoadModule authnz_ldap_module modules/mod_authnz_ldap.so
LoadModule include_module modules/mod_include.so
LoadModule log_config_module modules/mod_log_config.so
LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
LoadModule ext_filter_module modules/mod_ext_filter.so
....

A dalt hi ha la llista de mòduls que estan habilitats per defecte però sovint no són necessaris: mod_imap, mod_include, mod_info, mod_userdir, mod_autoindex. Per desactivar el mòdul en concret, podeu inserir un \# al principi d'aquesta línia i reiniciar el servei.

5. Executeu Apache com a Usuari i Grup separats

Amb una instal·lació predeterminada, Apache executa el seu procés amb l'usuari ningú o dimoni. Per motius de seguretat, es recomana executar Apache al seu propi compte no privilegiat. Per exemple: http-web.

# groupadd http-web
# useradd -d /var/www/ -g http-web -s /bin/nologin http-web

Ara heu de dir a Apache que s'executi amb aquest nou usuari i per fer-ho, hem de fer una entrada a /etc/httpd/conf/httpd.conf i reiniciar el servei.

Obriu /etc/httpd/conf/httpd.conf amb l'editor vim i cerqueu les paraules clau Usuari i Grup i allà haureu d'especificar el nom d'usuari i el nom del grup que voleu utilitzar.

User http-web
Group http-web

6. Utilitzeu Permetre i Denegar per restringir l'accés als directoris

Podem restringir l'accés als directoris amb les opcions Permetre i Denegar al fitxer httpd.conf. Aquí, en aquest exemple, assegurarem el directori arrel, per això establint el següent al fitxer httpd.conf.

<Directory />
   Options None
   Order deny,allow
   Deny from all
</Directory>

  1. Opcions Cap: aquesta opció no permetrà als usuaris habilitar cap funció opcional.
  2. Ordre denegar, permetre: aquest és l'ordre en què es processaran les directives Denegar i Permetre. Aquí denegarà primer i permetre després.
  3. Denega de tots: això denegarà la sol·licitud de tothom al directori arrel, ningú podrà accedir al directori arrel.

7. Utilitzeu els mòduls mod_security i mod_evasive per assegurar Apache

Aquests dos mòduls mod_security i mod_evasive són mòduls molt populars d'Apache en termes de seguretat.

On mod_security funciona com a tallafoc per a les nostres aplicacions web i ens permet controlar el trànsit en temps real. També ens ajuda a protegir els nostres llocs web o servidor web dels atacs de força bruta. Simplement podeu instal·lar mod_security al vostre servidor amb l'ajuda dels instal·ladors de paquets predeterminats.

$ sudo apt-get install libapache2-modsecurity
$ sudo a2enmod mod-security
$ sudo /etc/init.d/apache2 force-reload
# yum install mod_security
# /etc/init.d/httpd restart

mod_evasive funciona de manera molt eficient, es necessita una sol·licitud per processar-la i la processa molt bé. Evita que els atacs DDOS facin tant de dany. Aquesta característica de mod_evasive li permet gestionar la força bruta HTTP i l'atac Dos o DDos. Aquest mòdul detecta atacs amb tres mètodes.

  1. Si tantes sol·licituds arriben a la mateixa pàgina en poques vegades per segon.
  2. Si algun procés secundari intenta fer més de 50 sol·licituds concurrents.
  3. Si alguna IP encara intenta fer noves sol·licituds quan està temporalment a la llista negra.

mod_evasive es pot instal·lar directament des de la font. Aquí, tenim una guia d'instal·lació i configuració d'aquests mòduls que us ajudarà a configurar aquests mòduls Apache a la vostra caixa de Linux.

  1. Protegiu Apache amb Mod_Security i Mod_evasive

8. Desactiveu el seguiment d'Apache dels enllaços simbòlics

Per defecte, Apache segueix els enllaços simbòlics, podem desactivar aquesta funció amb la directiva FollowSymLinks with Options. I per fer-ho hem de fer la següent entrada al fitxer de configuració principal.

Options -FollowSymLinks

I, si algun usuari o lloc web en particular necessita l'habilitació de FollowSymLinks, simplement podem escriure una regla al fitxer .htaccess d'aquest lloc web.

# Enable symbolic links
Options +FollowSymLinks

Nota: Per habilitar les regles de reescriptura dins del fitxer .htaccess, AllowOverride All hauria d'estar present a la configuració principal globalment.

9. Desactiveu les inclusions del costat del servidor i l'execució CGI

Podem desactivar les inclusions del costat del servidor (mod_include) i l'execució CGI si no és necessari i per fer-ho hem de modificar el fitxer de configuració principal.

Options -Includes
Options -ExecCGI

També ho podem fer per a un directori concret amb l'etiqueta Directori. Aquí En aquest exemple, estem desactivant les execucions de fitxers Includes i Cgi per al directori /var/www/html/web1.

<Directory "/var/www/html/web1">
Options -Includes -ExecCGI
</Directory>

Aquests són alguns altres valors que es poden activar o desactivar amb la directiva Opcions.

  1. Opcions Totes: per activar totes les opcions alhora. Aquest és el valor predeterminat, si no voleu especificar cap valor explícitament al fitxer de configuració d'Apache o .htaccess.
  2. Opcions IncludesNOEXEC: aquesta opció permet incloure al servidor sense el permís d'execució d'una ordre o fitxers cgi.
  3. Opcions MultiViews: permet visualitzacions múltiples de contingut negociat amb el mòdul mod_negotiation.
  4. Opcions SymLinksIfOwnerMatch: és similar a FollowSymLinks. Però això només es farà quan el propietari sigui el mateix entre l'enllaç i el directori original al qual està enllaçat.

10. Limitar la mida de la sol·licitud

Per defecte, Apache no té límits a la mida total de la sol·licitud HTTP, és a dir, il·limitada i quan permeteu sol·licituds grans en un servidor web, és possible que pugueu ser víctima d'atacs de denegació de servei. Podem limitar la mida de les sol·licituds d'una directiva Apache LimitRequestBody amb l'etiqueta de directori.

Podeu establir el valor en bytes de 0 (il·limitat) a 2147483647 (2 GB) que es permeten en un cos de sol·licitud. Podeu establir aquest límit segons les necessitats del vostre lloc. Suposem que teniu un lloc on permet càrregues i voleu limitar la mida de pujada d'un directori concret.

En aquest exemple, user_uploads és un directori que conté fitxers penjats pels usuaris. Posem un límit de 500K per a això.

<Directory "/var/www/myweb1/user_uploads">
   LimitRequestBody 512000
</Directory>

11. Protegiu els atacs DDOS i l'enduriment

Bé, és cert que no podeu protegir completament el vostre lloc web dels atacs DDos. Aquí teniu algunes directrius que us poden ajudar a tenir-ne un control.

  1. TimeOut : aquesta directiva us permet establir la quantitat de temps que el servidor esperarà que finalitzin determinats esdeveniments abans que falli. El seu valor predeterminat és de 300 segons. És bo mantenir aquest valor baix en aquells llocs que estan subjectes a atacs DDOS. Aquest valor depèn totalment del tipus de sol·licitud que rebeu al vostre lloc web. Nota: podria generar problemes amb els scripts CGI.
  2. MaxClients : aquesta directiva us permet establir el límit de connexions que es serviran simultàniament. Cada connexió nova es posarà a la cua després d'aquest límit. Està disponible amb Prefork i Worker ambdós MPM. El seu valor per defecte és 256.
  3. KeepAliveTimeout : és la quantitat de temps que el servidor esperarà una sol·licitud posterior abans de tancar la connexió. El valor predeterminat és de 5 segons.
  4. LimitRequestFields : ens ajuda a establir un límit en el nombre de camps de capçalera de la sol·licitud HTTP que s'acceptaran dels clients. El seu valor per defecte és 100. Es recomana reduir aquest valor si es produeixen atacs DDos com a resultat de tantes capçaleres de sol·licitud http.
  5. LimitRequestFieldSize: ens ajuda a establir un límit de mida a la capçalera de la sol·licitud HTTP.

12. Habiliteu el registre d'Apache

Apache us permet iniciar sessió independentment del registre del vostre sistema operatiu. És aconsellable habilitar el registre d'Apache, perquè proporciona més informació, com ara les ordres introduïdes pels usuaris que han interaccionat amb el vostre servidor web.

Per fer-ho, heu d'incloure el mòdul mod_log_config. Hi ha tres directrius principals relacionades amb el registre disponibles amb Apache.

  1. TransferLog: es crea un fitxer de registre.
  2. LogFormat: especificant un format personalitzat.
  3. Registre personalitzat: creació i format d'un fitxer de registre.

També podeu utilitzar-los per a un lloc web en concret que esteu fent Hosting virtual i per a això cal que ho especifiqueu a la secció d'amfitrió virtual. Per exemple, aquí teniu la configuració de l'amfitrió virtual del meu lloc web amb el registre activat.

<VirtualHost *:80>
DocumentRoot /var/www/html/example.com/
ServerName www.example.com
DirectoryIndex index.htm index.html index.php
ServerAlias example.com
ErrorDocument 404 /story.php
ErrorLog /var/log/httpd/example.com_error_log
CustomLog /var/log/httpd/example.com_access_log combined
</VirtualHost>

13. Assegurar Apache amb certificats SSL

Per últim, però no menys important, els certificats SSL, podeu protegir tota la vostra comunicació de manera xifrada a Internet amb el certificat SSL. Suposem que teniu un lloc web en què la gent inicie sessió demostrant les seves credencials d'inici de sessió o teniu un lloc web de comerç electrònic on la gent proporciona les seves dades bancàries o les dades de la targeta de dèbit/crèdit per comprar productes, de manera predeterminada, el vostre servidor web envia aquestes dades en simple text. però quan utilitzeu certificats SSL als vostres llocs web, Apache envia tota aquesta informació en text xifrat.

Podeu comprar certificats SSL de tants proveïdors SSL diferents com namecheap.com. Si teniu una empresa web molt petita i no voleu comprar un certificat SSL, encara podeu assignar un certificat autofirmat al vostre lloc web. Apache utilitza el mòdul mod_ssl per donar suport al certificat SSL.

# openssl genrsa -des3 -out example.com.key 1024
# openssl req -new -key example.com.key -out exmaple.csr
# openssl x509 -req -days 365 -in example.com.com.csr -signkey example.com.com.key -out example.com.com.crt

Un cop creat i signat el vostre certificat. Ara cal afegir-ho a la configuració d'Apache. Obriu el fitxer de configuració principal amb l'editor vim i afegiu les línies següents i reinicieu el servei.

<VirtualHost 172.16.25.125:443>
        SSLEngine on
        SSLCertificateFile /etc/pki/tls/certs/example.com.crt
        SSLCertificateKeyFile /etc/pki/tls/certs/example.com.key
        SSLCertificateChainFile /etc/pki/tls/certs/sf_bundle.crt
        ServerAdmin [email 
        ServerName example.com
        DocumentRoot /var/www/html/example/
        ErrorLog /var/log/httpd/example.com-error_log
        CustomLog /var/log/httpd/example.com-access_log common
</VirtualHost>

Obriu el vostre navegador, escriviu https://example.com i podreu veure el nou certificat autofirmat.

Aquests són alguns consells de seguretat que podeu utilitzar per assegurar la instal·lació del vostre servidor web Apache. Per obtenir consells i idees de seguretat més útils, consulteu la documentació oficial en línia del servidor HTTP Apache.