Ocultar banner para Apache, Postfix y Dovecot en Debian9

Existen distintos métodos para identificar qué versión corre un programa concreto que se encuentra instalado en un servidor. Si además este servidor tiene una conexión pública el riesgo al que se expone es muy elevado, sobre todo cuando no se sigue una política periódica de actualizaciones.

Alguno de estos método tienen como objetivo obtener el banner que se muestra al realizar una conexión TCP/IP, utilizando programas como Telnet, NetCat, OpenSSL, Wget,

Con esta información un atacante solo tendría que buscar el CVE correspondiente a la versión publicada en el servidor objetivo, y comenzar a explotar sus vulnerabilidades.

Una buena práctica es ocultar esta información, que además algunos programas publican por defecto tras su instalación. A continuación se muestra la manera de ocultarlo para programas tan populares como Postfix, Dovecot Apache corriendo bajo un servidor con Debian 9.


Tabla de contenidos

Postfix

Para ocultar el banner en Postfix debemos de editar el archivo /etc/postfix/main.cf y cambiar la configuración del parámetro smtpd_banner. Recuerda hacer un backup previo del archivo.

# sudo cp /etc/postfix/main.cf /etc/postfix/main.cf.orig
# sudo nano /etc/postfix/main.cf

Ocultamos cualquier información que nos exponga a un riesgo:

#smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
smtpd_banner = $myhostname ESMTP

Reiniciamos el servicio de Postfix:

# sudo systemctl restart postfix

Con el comando NetCat, nc, comprobamos que no se muestra información de software ni versiones instaladas:

# nc email.tiraquelibras.com 25
220 email.tiraquelibras.com ESMTP

Dovecot

Para ocultar el banner en Dovecot editamos el archivo /etc/dovecot/dovecot.conf y editamos el parámetro login_greeting. Recordar hacer un backup previo del archivo:

# sudo cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.orig
# sudo nano /etc/dovecot/dovecot.conf

Editamos el parámetro logging_greeting que muestra el banner al realizar una conexión:

# Greeting message for clients.
#login_greeting = Dovecot ready.
login_greeting = MailServer managed by Tiraquelibras.

Reiniciamos el servicio Dovecot:

# sudo systemctl restart dovecot

Si realizamos una conexión a uno de los puertos por los que escuche Dovecot observamos el nuevo banner:

# openssl s_client -connect 127.0.0.1:993
...
---
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE AUTH=PLAIN AUTH=LOGIN] MailServer managed by Tiraquelibras.

Apache

Para ocultar el banner publicado por Apache debemos de editar el archivo /etc/apache2/apache2.conf y agregar las siguientes líneas, previo backup del archivo:

# sudo cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf.orig
# sudo nano /etc/apache2/apache2.conf

Agregamos las siguientes líneas al final del documento, si no existieran:

# OCULTAR LA VERSION DE APACHE
ServerTokens Prod
ServerSignature Off

Y si ademas usamos PHP debemos de editar su archivo de configuración. En mi caso uso PHP7. Para obtener el archivo de configuración ejecutamos el siguiente comando:

# sudo php -i | grep "Loaded Configuration File"
Loaded Configuration File => /etc/php/7.0/cli/php.ini

Editamos el archivo resultante, previo backup:

# sudo cp /etc/php/7.0/cli/php.ini /etc/php/7.0/cli/php.ini.orig
# sudo nano /etc/php/7.0/cli/php.ini

Cambiamos la configuración del parámetro expose_php Off:

; Decides whether PHP may expose the fact that it is installed on the server
; (e.g. by adding its signature to the Web server header).  It is no security
; threat in any way, but it makes it possible to determine whether you use PHP
; on your server or not.
; http://php.net/expose-php
;;;expose_php = On
expose_php = Off

Reiniciamos el servicio de Apache:

# sudo systemctl restart apache2

Confirmamos el banner publicado:

# lynx -head -mime_header http://localhost
HTTP/1.1 200 OK
Date: Mon, 11 Nov 2019 12:54:01 GMT
Server: Apache
X-XSS-Protection: 1; mode=block
Expires: Mon, 26 Jul 1997 05:00:00 GMT
Last-Modified: Mon, 11 Nov 2019 12:54:01 GMT
Cache-Control: no-store, no-cache, must-revalidate, max-age=0
Cache-Control: post-check=0, pre-check=0
Pragma: no-cache
Connection: close
Content-Type: text/html; charset=utf-8

Antes se mostraba la versión, por ejemplo Server: Apache/x.x.xx (Debian).


Conclusión

Con estos sencillos pasos podemos securizar un poquito más nuestros servicios publicados en Internet, ocultando las pistas que los atacantes intentan obtener previamente con técnicas de Fingerprinting.