En esta ocasión veremos la instalación de un servidor Bind/Named
bajo FreeBSD
, esta configuración corresponde a mi setup local necesario para evitar los problemas que causa el
HairPinning
en equipos internos cuando intentan conectar a servicios LAN
pero que resuelven a IPs
públicas.
Este problema se puede resolver de varias maneras:
- Retocar el
/etc/hosts
en todos los equipos afectados, el inconveniente es que a veces se trata de equipos empotrados o teléfonos móviles por no mencionar que el mantenimiento es completamente manual. - Si tenemos acceso al router y se trata de
Linux
, podemos optar por configurarIPTables
. - Si las dos opciones anteriores no son viables, siempre podremos montar un servidor
DNS
en modo DNS-RPZ.
El tutorial se compone de los siguientes pasos:
- Jail e instalación de herramientas básicas
- Instalación de Bind
- Configuración de Bind
- Habilitar query_log
- Reglas de firewall
- Pruebas funcionamiento
Jail e instalación de herramientas básicas:
Creamos la jail
y le asignamos una IP
via
Bastille
:
bastille create -T RosettaStone 14.3-RELEASE 192.168.69.22/24 nfe0
Instalamos las herramientas básicas mediante el sistema de templates :
bastille template RosettaStone datadyne.alfaexploit.com/bastille-basicconfiguration
Instalación de Bind:
Instalamos Bind
y algunas herramientas útiles de diagnóstico:
pkg install -y bind920 bind-tools
El pripio instalador nos advierte que debemos generar una key para
rndc
:
BIND requires configuration of rndc, including a "secret"key. The easiest, and most secure way to configure rndc is
to run 'rndc-confgen -a' to generate the proper conf file,with a new random key, and appropriate file permissions.
Procedemos tal como nos indica:
rndc-confgen -a
Habilitamos el servicio y lo arrancamos:
service named enable
service named start
Configuración de Bind:
Cambiamos el socket de escucha, habilitamos el DNS-RPZ
y configuramos los forwarders para el resto de las queries:
vi /usr/local/etc/namedb/named.conf
options {
...
listen-on { 192.168.69.22; };
response-policy { zone "rpz.zone"; };
forwarders {
8.8.8.8;
1.1.1.1;
};
...
};
// DNS RPZ (Response Policy Zone)
zone "rpz.zone" {
type master;
file "/usr/local/etc/namedb/db.rpz.local";
allow-query { any; };
allow-update { none; };
};
Configuramos las entradas de la zona DNS-RPZ
:
vi /usr/local/etc/namedb/db.rpz.local
$TTL 604800
@ IN SOA localhost.local. hostmaster.local. (
9 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
@ IN NS localhost.local.
poudriere.alfaexploit.com IN A 192.168.69.2
goaccess.alfaexploit.com IN A 192.168.69.2
mightymax.alfaexploit.com IN A 192.168.69.2
paperstreet.alfaexploit.com IN A 192.168.69.4
hellstorm.alfaexploit.com IN A 192.168.69.17
baikal.alfaexploit.com IN A 192.168.69.19
grafana.alfaexploit.com IN A 192.168.69.19
alfaexploit.com IN A 192.168.69.19
www.alfaexploit.com IN A 192.168.69.19
atlas.alfaexploit.com IN A 192.168.69.19
metacortex.alfaexploit.com IN A 192.168.69.20
rosettastone.alfaexploit.com IN A 192.168.69.22
minibeast.alfaexploit.com IN A 192.168.69.205
Comprobamos que la configuración sea correcta, si no sale nada, todo está en orden:
named-checkconf
Reiniciamos el servicio:
service named restart
Habilitar query_log:
En un momento dado puede resultar útil habilitar el log de las queries para comprobar que todo esté funcionando correctamente:
vi /usr/local/etc/namedb/named.conf
logging {
channel query_log {
file "/var/log/named/queries.log" versions 3 size 50m;
severity info;
print-time yes;
print-category yes;
print-severity yes;
};
category queries { query_log; };
};
Creamos el directorio de logs y asignamos permisos:
mkdir -p /var/log/named
chown bind:bind /var/log/named
chmod 750 /var/log/named
Reiniciamos el servicio:
service named restart
Reglas de firewall:
Si fuese necesario configurar
PF
estas serÃan las ACLs
, en mi caso solo quiero permitir el tráfico desde la red interna:
# LAN DNS-RPZ:
pass in proto udp from 192.168.69.0/24 to 192.168.69.22 port 53
pass in proto tcp from 192.168.69.0/24 to 192.168.69.22 port 53
Pruebas funcionamiento:
Comprobamos que funcione correctamente:
dig @192.168.69.22 baikal.alfaexploit.com +short
192.168.69.19
dig @8.8.8.8 baikal.alfaexploit.com +short
alfaexploit.com.
79.112.0.29