Bloquear conexiones HTTPS usando DNS

En este caso ejemplificaremos el bloqueo del sitio facebook.com. Existen muchas formas validas de bloquear conexiones https, en este caso explicaremos este método.

En teoría este método consiste en otorgarle al cliente cuando solicite la dirección facebook.com una IP no válida ó bloqueada, con esto rechazaremos las conexiones hacia ese dominio.

Pero si lo que queremos es controlar quienes pueden acceder, podemos controlar que IP publica válida resolver para el dominio ya que el servicio facebook.com posee un balanceo de carga de peticiones, esto significa que cada que hacemos una petición al dominio nos es otorgado diferentes IPs, esto nos hace casi imposible bloquear efectivamente a facebook.com desde el firewall.

  • Este método requiere que tengamos en DNS interno (BIND) en la red LAN previamente configurado. En este ejemplo nuestro servidor tiene asignado la IP 192.168.0.1
  • Que los clientes tengan configurado nuestra dirección IP del DNS interno (192.168.0.1) para que resuelvan IPs en nuestro servidor. Si tienes un servicio de DHCP es necesario agregar la IP 192.168.0.1 como DNS.
  • El servicio shorewall previamente configurado, pero bastaría con bloquear en su firewall los puertos e IPs que se mencionaran mas adelante.

Configurando en el servicio DNS (Bind)

Obtenemos una IP válida al servicio facebook.com.

Con el comando nslookup resolvemos el dominio y la respuesta fue la IP 173.252.110.27

$ nslookup facebook.com
Server:         192.168.0.1
Address:        192.168.0.1#53

Name:   facebook.com
Address: 173.252.110.27

Creamos la zona para el dominio facebook.com

En nuestro directorio de configuración de BIND creamos el siguiente archivo de configuración de la zona y este resolverá todas las peticiones con la IP 173.252.110.27

$ vim facebook.zone                                     
$TTL 1W
@               IN SOA  dns   root      (
    2014012401  ; serial  (year, month, day, count)
    2W          ; refresh
    1H          ; retry
    6W          ; expiry
    1W          ; minimum
    )

                 IN NS         dns
                 IN MX     10  mailserver

@                IN A          173.252.110.27
*                IN A          173.252.110.27

Habilitamos la zona facebook.com

En nuestra configuración de BIND habilitamos la zona de la siguiente manera.

$ vim named.conf
## Zona falsa
zone "facebook.com" IN {
        type master;
        file "facebook.zone";
        allow-update { none; };
};

Reiniciamos el servicio para aplicar cambios.

$ service named restart

Bloqueando en el firewall

Suponiendo que nuestro servicio shorerall tenemos las zonas de red ’lan’ que hace referencia obviamente a nuestra red LAN y que la zona ’net’ hace referencia a la red Internet, teniendo esto en cuenta realizamos la siguiente configuración.

En nuestro archivo de reglas de shorewall /etc/shorewall/rules configuramos la siguiente regla según sea el caso que deseemos aplicar:

Si queremos bloquear las peticiones de la red LAN.

$ vim /etc/shorewall/rules
REJECT  lan  net:173.252.110.27  tcp  443

Determinando un rango de IPs bloqueadas.

$ vim /etc/shorewall/rules
REJECT  lan:192.168.0.5-192.168.0.29  net:173.252.110.27  tcp  443

Reiniciamos el servicio para aplicar cambios.

$ service shorewall restart

Como configuración extra podríamos agregar una regla al firewall que solo permita para la red LAN el puerto 53 TCP/UDP peticiones hacia la IP de nuestro servidor DNS interno. Con esto evitaríamos que un luser astuto quiera usar un servicio dns ajeno al nuestro.

Armando Uch

An Accidental Engineer
• Lazy #Programmer • #TacOps 🌮 • #BOFH
🎸⚾️🍺☕️


2014-01-28