Amarre Squid + Dhcp + Iptables + Mac

Publicado por firecold, Mayo 20, 2014, 12:53:11 PM

Tema anterior - Siguiente tema

firecold

Antes que nada espero que este tema les sea de utilidad y que de antemano hayan leido este post: http://www.alterserv.com/foros/index.php?topic=1356.0, en el cual explica varios detalles que omitire en este, el objetivo de este post es amarrar MAC Address con una ip en especifico, proporcionada por dhcp y autorizar su uso con iptables, permitiendo la navegacion solamente si usan las macs descritas en squid.

Para esto asumire que tiene instalado squid en cualquiera de sus versiones, iptables viene por defecto en todo distribucion GNU/Linux e instalaremos desde cero el servidor DHCP para entregar de forma automatica las ips y no tener que estar configurando cliente por cliente.

INSTALACION Y CONFIGURACION ISC-DHCP-SERVER

Primero instalaremos el servidor dhcp teclenado en consola o terminal:
Código (bash) [Seleccionar]
apt-get install isc-dhcp-server

Y editamos el archivo /etc/default/isc-dhcp-server, en el cual buscamos una linea INTERFACES=" ", dejando entre los parentesis la interface de red de su Lan, en mi caso; INTERFACES="eth0".

Despues hacemos una copia del segundo archivo que configuraremos, por si cometemos algun error podemos volverlo a su estado original y lo hacemos con:
Código (bash) [Seleccionar]
cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.original

Como parte de una buena integracion entre el servidor DNS y el DHCP, se coloca al principio del archivo la clave o key de bind9, debemos hacer cat /etc/bind/rndc.key y la obtendremos, pegandolo al principio de nuestro archivo, esto nos permitira saber o sincronizar con el servidor DNS si hubiera algun cambio.

Parametros de Configuracion o Significado de los parámetros:

Para un mayor entendimiento de cada una de las directivas o parametros de configuracion:
Citarserver-identifier – indica al servidor cual es el interface por el cual debe escuchar.

ddns-update-style <tipo> - Define el método de actualización automática de las DNS. Los valores pueden ser ad-hoc, interim y none.

ddns-updates <on|off> - Activa la actualización DNS mediante los valores asignados por DHCP.

ddns-domainname <nombre> - Mediante el uso de este parámetro, se añadirá <nombre> al final del nombre de la máquina cliente, para formar un nombre de dominio totalmente cualificado (FQDN).

ignore|allow client-updates - Permite la actualización de las asignaciones (allow) de un cliente a requerimiento de este, o bien las asignaciones se actualizan cuando el servidor así lo requiera (ignore).

authoritative - La configuración correcta para la red es la definida en el servidor DHCP. Poner este parámetro al comienzo del archivo de configuración supone que el servidor DHCP reasignará direcciones a los clientes mal configurados por el motivo que sea, incluída una configuración nueva del servidor.

option domain-name <nombre> - Nombre de dominio que usará el cliente en una resolución de nombres vía DNS. Normalmente, será el nombre de dominio que se añadirá al host que realiza la petición de asignación.

option ntp-server <IP, [IP ...]> - Define los servidores horarios de NTP disponibles. Se listan en oreden de preferencia.

subnet - Declaración de Subred.

option netbios-name-servers <IP, [IP ...]> - Especifica un listado con los servidores WINS disponibles para los clientes.

option domain-name-servers <IP, [IP ...]> - Define el nombre de los servidores DNS.

option routers <IP, [IP ...]> - Se definen una serie de routers (en la práctica, puertas de enlace), listadas en orden de preferencia, disponibles para el acceso al exterior por parte del cliente.

range ip-menor ip-mayor - En una declaración de subred, este parámetro define el rango de direcciones que serán asignadas. Pueden darse dos instrucciones range seguidas del modo:

range 192.168.0.11 192.168.0.100;
range 192.168.0.125 192.168.0.210;

fixed-address <direcciones> - Esta opción aparece únicamente en una declaración de host. Define las direcciones estática a asignar a un host determinado.

hardware <tipo dirección> - Especifica el hardware de un cliente BOOTP para que éste sea reconocido por el servidor de DHCP. tipo puede ser ethernet o token-ring y dirección será una serie de octetos hexadecimales inequívocos de la tarjeta (por ejemplo, hardware ethernet 00:50:b3:c5:60:23).

Al saber cada uno de estos parametros podremos configurar adecuadamente nuestro servidor DHCP, siendo en mi caso este y tecleamos en consola para editarlo:

Código (bash) [Seleccionar]
nano /etc/dhcp/dhcpd.conf
Pudiendo configurarlo de muchas maneras pero en mi caso:

##### cat /etc/bind/rndc.key ######
## Permite sincronizar con BIND9 ####
key "rndc-key" {
algorithm hmac-md5;
secret "yN2qt4sgWa951mgyM58j/g==";
};
########################
server-identifier ns1.leondejuda.gt;       # identificando mi host
ddns-update-style interim;                  # permite actualizaciones automaticas
ddns-updates on;                              # permite actualizaciones automaticas
ddns-domainname "leondejuda.gt";        # Zona Directa de BIND9
ddns-rev-domainname "in-addr.arpa.";   # Zona Inversa de Bind9
ignore client-updates;
authoritative;
option domain-name "leondejuda.gt";
#option ntp-servers 192.168.1.1;

##################
## ZONA DIRECTA#####
zone leondejuda.gt. {                   
        primary 192.168.1.1;
        key rndc-key;
        }
##################
## ZONA INVERSA #####
zone 1.168.192.in-addr.arpa. {
        primary 192.168.1.1;
        key rndc-key;
        }

################################
##### Declaracion de Subred ###########
subnet 192.168.1.0 netmask 255.255.255.0 {    # Decalro mi Red y mi mascara de SUBRED
        option netbios-name-servers 192.168.1.1; # Declaro que soy el servidor WINS ya que tengo funcioanando SAMBA
        option netbios-node-type 8;
        option domain-name-servers 192.168.1.1;  # IP del Servidor DNS BIND9
        option routers 192.168.1.1;                     # Puerta de Enlace
        range 192.168.1.2 192.168.1.8;               # Rango de Red, de preferencia el mas corto posible.
        }

####################################
## Asignacion de IP dependiendo cual es su MAC ##
       
host MAQUINA1 {
hardware ethernet 00:11:XX:XX:XX:XX;
fixed-address 192.168.1.2;
}

host MAQUINA2 {
hardware ethernet 00:0b:XX:XX:XX:XX;
fixed-address 192.168.1.3;
}

host MAQUINA4 {
hardware ethernet 00:25:XX:XX:XX:XX;
fixed-address 192.168.1.5;
}


Asignando desde ya una ip a cierta mac empezamos desde ya el filtrado, esto quiere decir que solo tendra esa ip, si y solo si tiene la mencionada MAC, ahora procederemos a usar iptables, para esto nuestro amigo MARAVENTO nos facilito un script de iptables que sustraye todas las ips y las mac de nuestro archivo de configuracion dhcpd.conf, para hacer el filtrado de mac, solo si esta relatado en el dhcpd.conf y lo que no este relatado sera bloqueado por iptables, el script esta asi:

Código (bash) [Seleccionar]
#!/bin/bash
R=`echo "\033[01;31m"` # Rojo
N=`echo "\033[m"`      # Normal
echo -e "$R IPTABLES FIREWALL START...$N"
adminMAC="60:a4:XX:XX:XX:XX"
internet=eth0
lan=eth1
local=192.168.1.0
iptables=/sbin/iptables
route=/home/
proxyport=3128
netmask=255.255.255.0
modprobe=/sbin/modprobe

# RUTA dhcpd.conf
#dhcp_conf=/etc/dhcp3/dhcpd.conf # para dhcp v3.x
dhcp_conf=/etc/dhcp/dhcpd.conf # para dhcp v4.x
#
mac2ip=$(sed -n '/^\s\+hardware\|^\s\+fixed/ s:hardware ethernet \|fixed-address ::p' $dhcp_conf | sed 's/;//')

# RUTA ips_dhcp/macs_dhcp
path_ips=/home/ips_dhcp
path_macs=/home/macs_dhcp
# alias
alias cat="sed '/#.*/d'"

echo -e "$R Borrando las Cadenas existentes...$N"

###############
# FLUSH RULES #
###############
# Delete all
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X
# Zero all packets and counters.
iptables -Z
iptables -t nat -Z
iptables -t mangle -Z

# CREANDO ACL MACS/IPS
create_acl() {
    ips="# ips"
    macs="# macs"
    while [ "$1" ]; do
        mac="$1"
        shift
        ip="$1"
        shift
        $iptables -t mangle -A PREROUTING -i $lan -m mac --mac-source $mac -s $ip -j ACCEPT
        ips="$ips\n$ip"
        macs="$macs\n$mac"
    done
    echo -e $ips > $path_ips
    echo -e $macs > $path_macs
   
}

echo -e "$R ok $N"
#####################
### KERNEL RULES ###
#####################

echo -e "$R Load Kernel Rules...$N"
modprobe ip_conntrack_ftp
modprobe ip_conntrack_irc

# Activar ip forward rules
echo 1 > /proc/sys/net/ipv4/ip_forward

echo -e "$R OK$N"

####################
# DEFAULT POLICIES #
####################

echo -e "$R Apply Default Policies...$N"

# LOOPBACK
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

echo -e "$R ok $N"

##########################
# LOCAL NETWORK POLICIES #
##########################
echo -e "$R Apply Local Network Policies...$N"
create_acl $mac2ip
$iptables -t mangle -A PREROUTING -i $lan -j DROP
chmod 777 $path_ips $path_macs
echo -e "$R Redireccionamos las peticiones de www hacia Squid Proxy$N"
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 3128
echo -e "$R Terminando la Configuracion del Firewall.$N"


Explicare algunos parametros:
CitaradminMAC="60:a4:XX:XX:XX:XX"  # Su mAC
internet=eth0                            # Interface de red que recibe Internet
lan=eth1                                  # Interface de red que comparte Internet
local=192.168.1.0                      # Declarando su red
iptables=/sbin/iptables                # Iptables
route=/home/                            # ruta donde se creara o buscara los archivos creados
proxyport=3128                         # Declara el puerto de Squid
netmask=255.255.255.0              # Mascara de Subred

# RUTA dhcpd.conf
#dhcp_conf=/etc/dhcp3/dhcpd.conf # para dhcp v3.x  # si usa DHCP v3 lo descomentas
dhcp_conf=/etc/dhcp/dhcpd.conf # para dhcp v4.x      # si usa DHCP v4 lo descomentas

Ya que tenemos configurado DHCP + Iptables, es momento de declararlo en Squid ya que si no esto no servira de nada, ya que el procedimiento anterior garantiza que las ips seran asignadas a dichas macs y que iptables no les impedira el paso y para esto crearemos una acl en squid:

acl mired arp "/home/macs_dhcp"
http_access allow mired


estando en macs_dhcp relatadas las macs que permites y permitiendoles pasar por squid, todo aquel que no tenga dicha mac relatada en squid sera denegada y no le sera posible acceder a internet e igualmente iptables no le permitira acceder, espero que les sea de utilidad, es un poco extenso pero interesante para todo aquel que se quiera proteger.

Como dato extra si deseas encontrar la MAC address de cada equipo lo puedes hacer con nmap, la cual es una herramienta muy util tambien al hacer un firewall, pero ahora solo queremos los MAC de nuestros clientes, siendo asi:

Código (bash) [Seleccionar]
nmap -sP 192.168.0.0/24

O

Código (bash) [Seleccionar]
nmap -sP -n 192.168.0.0/24

Cambiando siempre el rango de red por el nuestro, Saludos

NOTA: Todo archivo puede ser editados con nano, por lo menos para los que no poseen entorno grafico, haciendo saber que se guarda un archivo con CTRL + O y para cerrar CTRL + X, para los que posean entorno grafico hay muchas opciones, gedit, kate, leafpad, etc.

luistec

Excelente tutorial amigo firecold, seguro que les será de ayuda a muchos, haber si hacemos un tuto de iptables y así ampliar el tema del firewall del servidor.

Saludos.

firecold

Cita de: luistec en Mayo 20, 2014, 03:00:32 PM
Excelente tutorial amigo firecold, seguro que les será de ayuda a muchos, haber si hacemos un tuto de iptables y así ampliar el tema del firewall del servidor.

Saludos.

Seria un excelente idea hacer un tutorial de iptables, Gracias por el apoyo, Saludos

07350286

El amarre Ip/mac se puede hacer con mikrotik tambien..

firecold

Cita de: 07350286 en Mayo 20, 2014, 10:02:54 PM
El amarre Ip/mac se puede hacer con mikrotik tambien..

La verdad amigo no te podria decir,  ya que nunca lo he usado en mi vida, pero me imagino que si se puede, ya que dicen que es una herramienta muy completa, Saludos

luistec

Cita de: 07350286 en Mayo 20, 2014, 10:02:54 PM
El amarre Ip/mac se puede hacer con mikrotik tambien..
Claro que se puede hacer amarre con mikrotik, pero este tutorial va dirigido para hacer ese procedimiento desde el mismo servidor, ya que no todos utilizan mikrotik.

Saludos.

firecold

Cita de: luistec en Mayo 20, 2014, 10:21:02 PM
Claro que se puede hacer amarre con mikrotik, pero este tutorial va dirigido para hacer ese procedimiento desde el mismo servidor, ya que no todos utilizan mikrotik.

Saludos.

Gracias por disipar la duda Luistec, Saludos