Hola amigos quiero compartir con ustedes ésta publicación en la que les mostraré las configuraciones necesarias para la implementación de un servidor de DNS con BIND, mas un servidor de DCHP, mas un servidor de Firewall con IPTABLES y un servidor de PROXY con SQUID, todo en uno, en la distribución de GNU/Linux CENTOS en su versión 6.3.
Debo asumir que tiene instalado Centos y además conoce los conceptos básicos de DNS, FIREWALL, DHCP Y PROXY.
Básicamente el esquema de trabajo es el siguiente:
Veamos los procedimientos.
CONFIGURANDO LAS TARJETAS DE RED DEL SERVIDOR
- Configurando la tarjeta eth1
[root@dns sysconfig]#vim /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE="eth1" BOOTPROTO="static" HWADDR="08:00:27:55:EC:A5" NM_CONTROLLED="yes" ONBOOT="yes" TYPE="Ethernet" UUID="d91dad38-6944-4ddf-a95e-df6cf0dfce57" IPADDR="192.168.10.100" NETMASK="255.255.255.0" GATEWAY="192.168.10.1"
- Configurando la tarjeta eth0
[root@dns sysconfig]#vim /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE="eth0" BOOTPROTO="static" HWADDR="08:00:27:33:77:55" NM_CONTROLLED="yes" ONBOOT="yes" TYPE="Ethernet" UUID="fcc61d29-c371-4420-bfb8-af7bf3ddf0a4" IPADDR="192.168.20.1" NETMASK="255.255.255.0" GATEWAY="192.168.20.1"
- Agregamos en servidor de DNS en archivo resolv.conf
[root@dns sysconfig]# vim /etc/resolv.conf
agregamos
nameserver 192.168.10.1
- Reiniciamos los servicios de red.
[root@dns sysconfig]#/etc/init.d/network restart
- Ping a Google
[root@dns sysconfig]# ping google.com PING google.com (173.194.37.101) 56(84) bytes of data. 64 bytes from mia05s17-in-f5.1e100.net (173.194.37.101): icmp_seq=1 ttl=249 time=88.1 ms 64 bytes from mia05s17-in-f5.1e100.net (173.194.37.101): icmp_seq=2 ttl=249 time=87.7 ms 64 bytes from mia05s17-in-f5.1e100.net (173.194.37.101): icmp_seq=3 ttl=249 time=88.2 ms 64 bytes from mia05s17-in-f5.1e100.net (173.194.37.101): icmp_seq=4 ttl=249 time=88.4 ms 64 bytes from mia05s17-in-f5.1e100.net (173.194.37.101): icmp_seq=5 ttl=249 time=88.4 ms
INSTALACIÓN Y CONFIGRACIÓN DEL SERVIDOR DE DNS CON BIND
- Actualizamos el Sistema e instalamos BIND
[root@dns sysconfig]#yum -y update [root@dns sysconfig]#yum -y upgrade [root@dns sysconfig]#yum -y install bind
- Configurando BIND
[root@dns sysconfig]# vim /etc/named.conf
Modificamos:
listen-on port 53 { 127.0.0.1; 192.168.20.1; };
allow-query { any; };
y agregamos:
forwarders{ 192.168.0.1; };
forward first;
Tal como se muestra a continucación:
// options { listen-on port 53 { 127.0.0.1; 192.168.20.1; }; /*listen-on-v6 port 53 { ::1; };*/ directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { any; }; recursion yes; forwarders{ 192.168.10.1; }; forward first; dnssec-enable yes; dnssec-validation yes; dnssec-lookaside auto; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";
- Reiniciamos BIND
[root@dns sysconfig]# vim /etc/init.d/named restart
- Agregamos como servidor de DNS el propio equipo
[root@dns sysconfig]# vim /etc/resolv.conf
Agregamos:
nameserver 192.168.20.1
- Reinciamos el servidor de DNS (BIND)
[root@dns sysconfig]# /etc/init.d/named restart
- Verificamos que tenemos acceso a internet
[root@dns sysconfig]# ping google.com PING google.com (74.125.134.101) 56(84) bytes of data. 64 bytes from gg-in-f101.1e100.net (74.125.134.101): icmp_seq=1 ttl=249 time=99.6 ms 64 bytes from gg-in-f101.1e100.net (74.125.134.101): icmp_seq=2 ttl=249 time=101 ms 64 bytes from gg-in-f101.1e100.net (74.125.134.101): icmp_seq=3 ttl=249 time=100 ms
- Vemos que nuestro servidor de DNS esta OK, ahora procedemos a instalar el servidor de DHCP
INSTALACIÓN Y CONFIGURACIÓN DEL SERVIDOR DE DHCP
- Instalación del servidor de DHCP
[root@dns sysconfig]# yum -y install dhcp
- Configuración del servidor DHCP
[root@dns sysconfig]# vim /etc/dhcp/dhcpd.conf
Agregamos lo siguiente:
ddns-update-style interim; ignore client-updates; authoritative; subnet 192.168.20.0 netmask 255.255.255.0 { option routers 192.168.20.1; option subnet-mask 255.255.255.0; option domain-name "192.168.20.1"; option domain-name-servers 192.168.20.1; range dynamic-bootp 192.168.20.50 192.168.20.60; default-lease-time 3600; max-lease-time 7200; #Dirección IP fija basada en MAC ID host l311-mg55pcckvj { hardware ethernet 08:00:27:89:96:a7; fixed-address 192.168.20.11; } }
- Reiniciamos nuestro servidor de DHCP
[root@dns sysconfig]# /etc/init.d/dhcpd restart Iniciando dhcpd: [ OK ]
- Si conectamos una PC a nuestra LAN, obtendremos una IP automática designada por nuestro servidor de DCHP
- Pues bien ahora lo que queremos es que las PCs de nuestra LAN tengan acceso a Internet y ¿Como hacemos esto? para esto vamos a instalar nuestro servidor de FIREWALL con IPTABLES
INSTALACIÓN Y CONFIGURACIÓN DEL SERVIDOR DE FIREWALL CON IPTABLES
- Instalación de IPTABLES
[root@dns sysconfig]# yum -y install iptables
- Configuración, editamos el archivo:
[root@dns sysconfig]# vim /etc/sysconfig/iptables
- Borramos todo y agregamos la siguiente regla, esta regla es personalizada lo he probado y funciona
#PRUEBA PARA EL SERVIDOR DE FIREWALL - ESTE SERVIDOR FUNCIiONA COMO FIREWALL + DNS + PROXY + DHCP ## Generated by iptables-save v1.4.7 on Sat Feb 16 23:54:44 2013 ## Mi servidor tiene dos targetas de red eth0(lan) y eth1(wan) *nat : PREROUTING ACCEPT [0:0] : POSTROUTING ACCEPT [0:0] : OUTPUT ACCEPT [0:0] #Para proxy transparante, primero defina la regla 10 de *filter # Esta comentada, sera activado cuando configuremos en servidor de PROXY #-A PREROUTING -p tcp -s 0.0.0.0/0 --dport 80 -j REDIRECT --to-port 3128 #-A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.100:3128 #1era - permite dar internet a mi LAN de Red 20 -A POSTROUTING -s 192.168.20.0/24 -o eth1 -j MASQUERADE #-A POSTROUTING -s 192.168.20.0/24 -o eth1 -j SNAT --to 192.168.10.100 (funciona como la 1era) #-A POSTROUTING -o eth1 -s 192.168.20.0/24 -j SNAT --to 192.168.10.100 (funciona como la 1era) # #2da-supongamos que en la red interna la PC de ip 192.168.20.51 es servidor web -A PREROUTING -p tcp --dport 80 -i eth1 -j DNAT --to 192.168.20.51 COMMIT ################################################################################## *filter :INPUT DROP [0:0] :FORWARD ACCEPT [0:0] :OUTPUT DROP [0:0] #Para proxy no transaparente, funciona agregando la 10ma regla ##-A INPUT -s 0.0.0.0/0 -p tcp --dport 3128 -j ACCEPT #-A INPUT -s 192.168.20.0/24 -p tcp --dport 3128 -j ACCEPT #Regla Cero - reglas de loopback - valido para que le servidor se conecte a internet usando su propio DNS -A INPUT -i lo -j ACCEPT -A OUTPUT -o lo -j ACCEPT ##1era- Permite a clientes conectarse al servidor por medio del ssh (2 formas) -A INPUT -i eth1 -p tcp --dport 22 -j ACCEPT # -A INPUT -p tcp --dport 22 -j ACCEPT -A OUTPUT -o eth1 -p tcp --sport 22 -j ACCEPT # -A OUTPUT -p tcp --sport 22 -j ACCEPT ##2da-permite a clientes conectarse al servidor usando el puerto 80 (Apache) #suponiendo que esta PC es el servidor - borrar la regla 2 de NAT para que funcione #-A INPUT -i eth1 -p tcp --dport 80 -j ACCEPT #-A OUTPUT -o eth1 -p tcp --sport 80 -j ACCEPT ##3era-Permite conectar desde el servidor hacia cliente por el protocolo ssh -A OUTPUT -o eth1 -p tcp --dport 22 -j ACCEPT -A INPUT -i eth1 -p tcp --sport 22 -j ACCEPT ##4ta-permite conectar mi servidor al internet, depende de servicio de DNS -A OUTPUT -o eth1 -p tcp --dport 80 -j ACCEPT -A INPUT -i eth1 -p tcp --sport 80 -j ACCEPT ##5ta-Permite al servidor conectarse a otros servidores de DNS, util para la regla 4ta. -A OUTPUT -o eth1 -p udp --dport 53 -j ACCEPT -A INPUT -i eth1 -p udp --sport 53 -j ACCEPT #6ta-perimitir hacer ping desde el servidor #"Aceptamos ICMP request hacia fuera" -A OUTPUT -o eth1 -p icmp --icmp-type echo-request -j ACCEPT #"Aceptamos ICMP reply hacia dentro" -A INPUT -i eth1 -p icmp --icmp-type echo-reply -j ACCEPT #8va- permite conectar via SSH desde mi red LAN al servidor de firewall -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT -A OUTPUT -o eth0 -p tcp --sport 22 -j ACCEPT #9na- Permitir hacer ping desde los clientes(RED LAN) al servidor de firewall #-A INPUT -p icmp --icmp-type echo-request -j ACCEPT -A INPUT -i eth0 -p icmp --icmp-type echo-request -j ACCEPT #-A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT -A OUTPUT -o eth0 -p icmp --icmp-type echo-reply -j ACCEPT #10ma - permite que mi LAN se conecte al puerto 3128 # Esta comentada, sera activado cuando configuremos en servidor de PROXY #-A INPUT -i eth0 -p tcp --dport 3128 -j ACCEPT #-A OUTPUT -o eth0 -p tcp --sport 3128 -j ACCEPT #11va - permite todas las conexiones que se dan a través de eth0(LAN) - ping Servidor-->LAN y LAN-->DNS -A INPUT -i eth0 -j ACCEPT -A OUTPUT -o eth0 -j ACCEPT COMMIT
- Algunas reglas fueron comentadas, ya que se activarán cuando configuremos el servidor PROXY, mas adelante.
- La regla mágica que permite que mi red LAN tenga acceso a internet es:
#1era - permite dar internet a mi LAN de Red 20 -A POSTROUTING -s 192.168.20.0/24 -o eth1 -j MASQUERADE
- Bien ahora reiniciamos nuetro servidor de firewall
[root@dns sysconfig]# /etc/init.d/iptables restart iptables: Aplicando reglas del cortafuegos: [ OK ]
- Ahora si es posible acceder a internet desde nuestra RED LAN.
- OK, amigos ahora solo nos falta configurar nuestro servidor PROXY, para restringir el acceso a algunas webs.
INSTALACIÓN Y CONFIGURACIÓN DEL SERVIDOR PROXY CON SQUID
- Instalando squid
[root@dns sysconfig]# yum -y install squid
- Vamos a configurar squid de modo transparente para no tener que ir a cada PC de nustra Red LAN y configurar el Proxy.
[root@dns sysconfig]# vim /etc/squid/squid.conf
# # Recommended minimum configuration: # acl manager proto cache_object acl localhost src 127.0.0.1/32 ::1 acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1 # Example rule allowing access from your local networks. # Adapt to list your (internal) IP networks from where browsing # should be allowed #acl localnet src 10.0.0.0/8 # RFC1918 possible internal network #acl localnet src 172.16.0.0/12 # RFC1918 possible internal network #acl localnet src 192.168.0.0/16 # RFC1918 possible internal network acl localnet src fc00::/7 # RFC 4193 local private network range acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines acl localnet mired 192.168.20.0/24 acl denegado url_regex "/etc/squid/listas/denegado" #acl permitido dstdomain "/etc/squid/listas/permitido" acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT # # Recommended minimum Access Permission configuration: # # Only allow cachemgr access from localhost http_access allow manager localhost http_access deny manager # Deny requests to certain unsafe ports http_access deny !Safe_ports #http_access allow Safe_ports # Deny CONNECT to other than secure SSL ports http_access deny CONNECT !SSL_ports #http_access allow SSL_ports # We strongly recommend the following be uncommented to protect innocent # web applications running on the proxy server who think the only # one who can access services on "localhost" is a local user #http_access deny to_localhost # # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS # # Example rule allowing access from your local networks. # Adapt localnet in the ACL section to list your (internal) IP networks # from where browsing should be allowed http_access allow localnet http_access allow localhost http_access allow mired !denegado # And finally deny all other access to this proxy http_access deny all # Squid normally listens to port 3128 #http_port 3128 http_port 3128 intercept # We recommend you to use at least the following line. hierarchy_stoplist cgi-bin ? #dns_nameservers 192.168.0.96 #visible_hostname dns # Uncomment and adjust the following to add a disk cache directory. #cache_dir ufs /var/spool/squid 100 16 256 # Leave coredumps in the first cache dir coredump_dir /var/spool/squid # Add any of your own refresh_pattern entries above these. refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern . 0 20% 4320
- Hemos agregado lo siguiente:
#Definimos la red que estara proxiado. acl localnet mired 192.168.20.0/24 # importamos las listas denegadas acl denegado url_regex "/etc/squid/listas/denegado" #Hace que nuestra RED LAN tendra acceso a internet menos a las webs que se encuentre en denegado http_access allow mired !denegado #Para que el proxy escuche el puerto 3128 y intercept para que sea transparente http_port 3128 intercept
- Creamos y editamos el archivo denegados ya que en ella de colocarán las webs restringidas.
[root@dns sysconfig]# touch /etc/squid/listas/denegado [root@dns sysconfig]# vim /etc/squid/listas/denegado
- Por ejemplo podemos agregar para restringir en ingreso a facebook, youtube, etc.
.*facebook.* .*youtube.*
- Reiniciamos el servicio de proxy
[root@dns sysconfig]# /etc/init.d/squid restart
- Ahora vamos a modificar algunas reglas del FIREWALL o mejor dicho a descomentar algunas reglas que definimos en el firewall que de no tener un Proxy no eran necesario.
#Para proxy transparante, primero defina la regla 10 de *filter #-A PREROUTING -p tcp -s 0.0.0.0/0 --dport 80 -j REDIRECT --to-port 3128 -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.100:3128 #10ma - permite que mi LAN se conecte al puerto 3128 -A INPUT -i eth0 -p tcp --dport 3128 -j ACCEPT -A OUTPUT -o eth0 -p tcp --sport 3128 -j ACCEPT
- Quedando las reglas del FIREWALL como sigue:
#PRUEBA PARA EL SERVIDOR DE FIREWALL - ESTE SERVIDOR FUNCIiONA COMO FIREWALL + DNS + PROXY + DHCP ## Generated by iptables-save v1.4.7 on Sat Feb 16 23:54:44 2013 ## Mi servidor tiene dos targetas de red eth0(lan) y eth1(wan) *nat : PREROUTING ACCEPT [0:0] : POSTROUTING ACCEPT [0:0] : OUTPUT ACCEPT [0:0] #Para proxy transparante funciona, primero defina la regla 10 de *filter #-A PREROUTING -p tcp -s 0.0.0.0/0 --dport 80 -j REDIRECT --to-port 3128 -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.100:3128 #1era-permite dar internet a mi lan de red 20 -A POSTROUTING -s 192.168.20.0/24 -o eth1 -j MASQUERADE #-A POSTROUTING -s 192.168.20.0/24 -o eth1 -j SNAT --to 192.168.10.100 (funciona como la 1era) #-A POSTROUTING -o eth1 -s 192.168.20.0/24 -j SNAT --to 192.168.10.100 (funciona como la 1era) # #2da-supongamos que en la red interna la PC de ip 192.168.20.51 es servidor web -A PREROUTING -p tcp --dport 80 -i eth1 -j DNAT --to 192.168.20.51 COMMIT ################################################################################## *filter :INPUT DROP [0:0] :FORWARD ACCEPT [0:0] :OUTPUT DROP [0:0] #Para proxy, funciona agregando la 10ma regla ##-A INPUT -s 0.0.0.0/0 -p tcp --dport 3128 -j ACCEPT #-A INPUT -s 192.168.20.0/24 -p tcp --dport 3128 -j ACCEPT #Regla Cero - reglas de loopback - valido para que le servidor se conecte a internet usando su propio DNS -A INPUT -i lo -j ACCEPT -A OUTPUT -o lo -j ACCEPT ##1era- Permite a clientes conectarse al servidor por medio del ssh (2 formas) -A INPUT -i eth1 -p tcp --dport 22 -j ACCEPT # -A INPUT -p tcp --dport 22 -j ACCEPT -A OUTPUT -o eth1 -p tcp --sport 22 -j ACCEPT # -A OUTPUT -p tcp --sport 22 -j ACCEPT ##2da-permite a clientes conectarse al servidor usando el puerto 80 (Apache) #suponiendo que esta PC es el servidor - borrar la regla 2 de NAT para que funcione #-A INPUT -i eth1 -p tcp --dport 80 -j ACCEPT #-A OUTPUT -o eth1 -p tcp --sport 80 -j ACCEPT ##3era-Permite conectar desde el servidor hacia cliente por el protocolo ssh -A OUTPUT -o eth1 -p tcp --dport 22 -j ACCEPT -A INPUT -i eth1 -p tcp --sport 22 -j ACCEPT ##4ta-permite conectar mi servidor al internet, depende de servicio de DNS -A OUTPUT -o eth1 -p tcp --dport 80 -j ACCEPT -A INPUT -i eth1 -p tcp --sport 80 -j ACCEPT ##5ta-Permite al servidor conectarse a otros servidores de DNS, util para la regla 4ta. -A OUTPUT -o eth1 -p udp --dport 53 -j ACCEPT -A INPUT -i eth1 -p udp --sport 53 -j ACCEPT #6ta-perimitir hacer ping desde el servidor #"Aceptamos ICMP request hacia fuera" -A OUTPUT -o eth1 -p icmp --icmp-type echo-request -j ACCEPT #"Aceptamos ICMP reply hacia dentro" -A INPUT -i eth1 -p icmp --icmp-type echo-reply -j ACCEPT #8va- permite conectar via SSH desde mi red LAN al servidor de firewall -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT -A OUTPUT -o eth0 -p tcp --sport 22 -j ACCEPT #9na- Permitir hacer ping desde los clientes(RED LAN) al servidor de firewall #-A INPUT -p icmp --icmp-type echo-request -j ACCEPT -A INPUT -i eth0 -p icmp --icmp-type echo-request -j ACCEPT #-A OUTPUT -p icmp --icmp-type echo-reply -j ACCEPT -A OUTPUT -o eth0 -p icmp --icmp-type echo-reply -j ACCEPT #10ma - permite que mi LAN se conecte al puerto 3128 -A INPUT -i eth0 -p tcp --dport 3128 -j ACCEPT -A OUTPUT -o eth0 -p tcp --sport 3128 -j ACCEPT #11va - permite todas las conexiones que se dan a través de eth0(LAN) - ping Servidor-->LAN y LAN-->DNS -A INPUT -i eth0 -j ACCEPT -A OUTPUT -o eth0 -j ACCEPT COMMIT
- Reinicamos todos los servicios
[root@dns sysconfig]# /etc/init.d/iptables restart [root@dns sysconfig]# /etc/init.d/named restart [root@dns sysconfig]# /etc/init.d/squid restart [root@dns sysconfig]# /etc/init.d/dhcpd restart
- Finalmente si vamos a una computadora de nuestra Red LAN e intentamos ingresar a youtube, veremos que estará bloqueado por nuestro servidor proxy.
- Es todo amigos espero que le sea de utilidad.
5 comentarios
Jaime Perdomo · 30/05/2013 a las 6:27 pm
Excelente manual, pero una consulta como haría en el caso de que a ciertas ip les quiera dar acceso completo y a ciertas internet con restricciones ¿como hago esto con las ip que son dhcp como las designo a ciertos usuarios y equipos, ojo no quiero cambiar el dhcp por que es muy bueno pero quiero a ciertos usuarios darles las prioridades antes mencionadas
Javier Salazar Carlos · 04/06/2013 a las 4:35 am
Para hacer cosas mas complejas te sugiero que uses alguna solución open sources que te facilite el trabajo, como por ejemplo Endian Firewall o sino Zentyal, ambos son muy buenos.
raul · 03/09/2013 a las 8:26 pm
Excelente, tengo una consulta, como quedaría con tres tarjetas de red, eth0 tengo para el acceso al internet, eth1 con dhcp para mi red local, y eth2 para para compartir Internet con unos amigos que están a unas cuantas cuadras, pero ésta sin dhcp, son ip´s fijas.
Grcias por la ayuda
maria · 26/06/2017 a las 1:19 am
Una consulta..he intentado configurar las tarjetas de red tal cual esta esta pagina con los mismos parametros pero al parecer algo esta mal, empezando que al reiniciar me sale *fallo* parametros como HWADDR y UUID se los puede configurar asi como uds muestran? no deberia ser eso algo que se obtenga por default? mi tarjeta en si por default es enp0s3 y quiero configurar eth0 y eth1 ayuda porfavor
Miguel Guaramato · 24/03/2020 a las 7:44 am
Estoy trabajando en el montaje de un servidor DHCP+PROXY para navegar y establecer un filtro que restrija algunos sitios no deseados. Pero viene la wan de un puerto de una VLAN y quiero saber como se hace alli