Antes que nada les comento, a modo de advertencia, que esta no es la forma mas indicada, ni la mas segura, ni la mas eficiente para montar un servidor. Solo decidí hacerlo aprovechando los materiales que tenia (hardware / software) para probar, aprender y compartir con ustedes.
Les comento que hace un tiempo que vivo en un pueblo en el cual la mejor conexión (en cuanto a precio/calidad) es de 256K y además tengo montada una pequeña red para compartir internet con algunos vecinos.
Por lo tanto, había días en los cuales navegar por internet era imposible. Por esta misma razón decidí montar un servidor Proxy Caché.
¿Qué hace un Proxy Caché?
Bueno, básicamente lo que hace es almacenar en una “cache” los/alguno de los contenidos de los sitios web, para que estén disponibles en el servidor de Proxy (en este caso es un servidor local).
Con esto se logra que no se necesite descargar desde internet todo el contenido de un sitio web cada vez que un cliente accede al mismo. Sino que esos contenidos (imagenes, videos, etc) se descargan la primera vez al cache del servidor y luego son mostrados desde el servidor local sin tener que descargarlos nuevamente desde internet.
Esto acelera mucho la navegación y reduce muchísimo el consumo de ancho de banda.
¿Como funciona?
Simple, todos los clientes de la red local acceden al servidor Proxy en lugar de acceder directamente a internet, el servidor se encarga de procesar las páginas solicitadas por los clientes y de regresarles la información que solicitaron de una forma eficiente.
¿Como se hace?
Como ya dije antes, esta no es la forma adecuada, pero les puede servir para aprender y hacer pruebas.
Primero que nada se necesita alguna compu libre para utilizarla como servidor y acceso total a la red (ser propietario de un router es fundamental)
¿Ingredientes?
Para hacerlo he utilizado:
-Servidor: Pentium IV / 4GB en disco / 1GB de ram / 1 placa de red on-board.
-Router: Marca Pichichu con soporte para wireless.
-Distribucion GNU/Linux: Debian Squeeze.
-Tiempo.
¿Es necesario que sea en Linux?
En realidad se puede hacer en cualquier SO y sin tantas complicaciones. Ya que existe software mas amigable y preconfigurado para hacer esto con tan solo apretar dos botones.
En mi caso, decidí hacerlo con un sistema Debian Squeeze porque es lo que uso desde hace casi diez años. Además podemos instalar un sistema base en Debian lo suficientemente liviano para no ocupar tanto espacio en disco y para no consumir recursos en cosas que no necesitamos.
Sin contar que configurando las cosas a mano siempre se llega a un resultado final mucho mas pulido y preciso (y aprendiendo un montón de cosas).
Bueno, para empezar he decidido realizarlo de esta manera:
Nuestro router que hace de Punto de Acceso a internet solo va a permitir acceso a la WAN a nuestro servidor.
El servidor va a compartir su conexión a internet a los demás clientes conectados a la LAN. Para esto montaremos un pequeño firewall en el servidor.
El servidor además va a redirigir todas las peticiones de acceso web al proxy para reducir el consumo de ancho de banda, va a denegar el acceso a otros servicios como P2P, Clientes Torrents, Msn.
Por otro lado se crearan dos subredes, una contará con acceso total a la red y la otra con un acceso limitado.
La subred con acceso total será utilizada por el servidor y por los clientes que nosotros decidamos.
Nuestra red puede ser 192.168.1.0/24 en la cual vamos a tener dos subredes:
Red con acceso total: 192.168.1.0/26 Mascara de subred: 255.255.255.192.
Rango de IP's: 192.168.1.0 – 192.168.1.63
Red con acceso limitado: 192.168.1.128/25 Mascara de subred: 255.255.255.128
Rango de IP's: 192.168.1.128 – 192.168.1.255
En la cual tendremos 2 IP's reservadas:
192.168.1.1 para el Servidor
192.168.1.2 para el Router
Para asignar las IP's podemos utilizar el servidor DHCP de nuestro router, pero para hacerlo mas divertido utilizaremos un servidor DHCP que instalaremos y configuraremos en nuestro servidor.
También instalaremos un servidor DNS en el servidor y un servidor SSH para acceder al servidor de forma remota.
Instalación del SO:
Desde el menu de instalación de Debian elegimos la opción “Expert Install” con esto podemos saltear o agregar distintas fases de instalación para obtener un sistema mas comodo.
Lo recomendado es solo tener un sistema base (Sin servidor X y sin entorno de escritorio) y despues agregar lo que necesitemos. Una instalación mínima de Debian solo debería ocupar unos 400-500mb en disco.
Configuración del Router:
Esto varía de router en router. Pero no creo que tengan problemas en hacer lo siguiente.
Primero configuramos el router para que su IP sea 192.168.1.2
Podría ser en: Network → LAN → IP Address → 192.168.1.2
Segundo seteamos el firewall del router para que solo permita acceder a la WAN a nuestro servidor.
Podemos establecer una regla por MAC y por IP.
Para saber la MAC del servidor solo ponemos el comando “ifconfig eth0 | grep Hwaddr” (cambiando eth0 por nuestra interfaz de red).
Por lo tanto el router solo debería permitir el acceso a internet al host con IP 192.168.1.1y con la MAC de nuestro servidor.
Por último desactivamos el servidor DHCP del router, ya que vamos a montar uno en el servidor.
Puede estar en : Advanced Settings → DHCP → Disable
Configurando la Red del servidor:
Luego de instalar configuraremos los parámetros de red del servidor. Para eso nos vamos a modificar el archivo de configuración de la red:
nano /etc/network/interfaces
Nos deberia quedar así:
auto lo eth0
iface lo inet loopback
iface eth0 inet static
address 192.168.1.1
netmask 255.255.255.0
gateway 192.168.1.2
Donde “address” es la ip statica de nuestro servidor y el “gateway” es nuestro router.
Lo guardamos con Ctrl+x y reiniciamos el demonio de red:
ifconfig eth0 down
/etc/init.d/networking restart
Instalación del servidor DHCP
Para que los clientes que se conecten a la red local no necesiten configurar manualmente los datos de conexión es necesario que exista un servidor DHCP que asignará de forma automática una IP, un Gateway, Servidor DNS y la Mascara de Red. Como deshabilitamos el servidor DHCP del router, vamos a instalar uno en el servidor.
Hay varias alternativas yo utilicé “udhcp”. Para instalarlo solo ejecutamos lo siguiente:
apt-get install udhcpd
Luego configuramos el servidor dhcp editando el archivo /etc/udhcp.conf consiguiendo que los clientes que se conecten sean asignados a la red limitada y estableciendo los clientes que formarán parte de la red con acceso libre.
Nos debería quedar así:
start 192.168.1.128 # inicio del rango de IP's dinamicas
end 192.168.1.254 # fin del rango de IP's dinamicas
opt dns 192.168.1.1 192.168.1.1 # Servidores de nombre de dominio
opt router 192.168.1.1 # Gateway apuntando a nuestro servidor
Tambien podemos hacer que se asigne una ip estatica a nuestra computadora (que por conveniencia va a formar parte de la red libre).
Por ejemplo:.
static_lease xx:xx:xx:xx:xx:xx 192.168.1.60 # solo cambiamos las x por la MAC de nuestra PC
Guardamos los cambios y abrimos el archivo /etc/default/udhcp y comentamos la linea que dice:
DHCPD_ENABLED="no"
Guardamos y reiniciamos el demonio:
/etc/init.d/udhcp restart
Instalación del DNS
Este paso es prácticamente inútil, pero necesario. En realidad podríamos haber seteado los DNS en la configuración del servidor DHCP. Pero ya que estamos vamos a instalar un DNS que redirija las peticiones al DNS utilizado por el router (únicamente para jorobar).
Para esto vamos a utilizar Bind9
apt-get install bind9
Luego lo configuramos para que consulte al dns brindado por nuestro proveedor de internet.
Esta informacion la podemos obtener desde el router. Ej: Setup → Network → WAN
Anotamos las IP's de los DNS que aparecen ahí y las ponemos en el archivo /etc/bind9/named.conf.options
Debería quedar así (reemplazando DNS1 y DNS2 por las IP's correspondientes):
options {
directory "/var/cache/bind";
forwarders {
DNS1;
DNS2;
};
auth-nxdomain no;
listen-on-v6 { any; };
};
Guardamos y reiniciamos el servidor.
/etc/init.d/bind9 restart
Nota: Si quieren pueden poner como dns al router. En ese caso sería 192.168.1.2
Instalación del servidor Proxy
Primero que nada debemos instalar un servidor proxy. Para eso utilizaremos Squid:
apt-get install squid
Ahora debemos configurarlo. Podemos encontrar el archivo de configuracion de Squid en /etc/squid/squid.conf.
Si lo abrimos, veremos todas las opciones de configuracion de squid con cada una de sus descripciones en los comentarios. El archivo en si es largo y pesado para trabajar sobre el, asi que vamos a crear uno desde cero.
Primero renombramos el archivo de configuracion (es preferible tenerlo a mano ya que contiene informacion muy util):
mv /etc/squid/squid.conf /etc/squid/squid.old
Creamos uno nuevo en el cual añadiremos nuestra configuracion
nano /etc/squid/squid.conf
Empecemos:
Necesitamos que squid trabaje de forma "transparente", es decir que no va a requerir a los clientes ningún tipo de configuración en sus navegadores. Por lo que cuando los clientes accedan a un determinado sitio, el servidor va a redirigir esa informacion al puerto del Squid de forma automatica.
En este caso utilizaremos el puerto 3128 para nuestro proxy transparente. Para eso añadimos lo siguiente al archivo de configuración:
http_port 192.168.1.1:3128 transparent
Añadimos el tamaño de cache en ram:
cache_mem 64 MB
cache_swap_low 90
cache_swap_high 95
Seteamos el tamaño de la cache en disco. En este caso utilizaremos 512mb y solo guardaremos archivos con un maximo de 4194240KB
cache_dir aufs /var/spool/squid 512 16 256
maximum_object_size 4194240 KB
Definimos la ruta de los archivos donde se almacenarán los logs:
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
Definimos la taza de refresco de los archivos en caché (el tiempo que estarán disponibles en el servidor antes de volverse a descargar):
# Paquetes Debian y RedHat 1 dia
refresh_pattern -i .deb$ 1440 100% 1440
refresh_pattern -i .rpm$ 1440 100% 1440
# Actualizaciones de windows 10 a 20 dias
refresh_pattern -i .cab$ 14400 80% 28800
# Ejecutables 10 a 30 dias
refresh_pattern -i .exe$ 14400 80% 43200
# Imagenes minimo 1 dia maximo 3 antes de descargar
refresh_pattern -i .gif$ 1440 80% 4320
refresh_pattern -i .tiff?$ 1440 80% 4320
refresh_pattern -i .bmp$ 1440 80% 4320
refresh_pattern -i .jpe?g$ 1440 80% 4320
refresh_pattern -i .xbm$ 1440 80% 4320
refresh_pattern -i .png$ 1440 80% 4320
refresh_pattern -i .wrl$ 1440 80% 4320
refresh_pattern -i .ico$ 1440 80% 4320
refresh_pattern -i .pnm$ 1440 80% 4320
refresh_pattern -i .pbm$ 1440 80% 4320
refresh_pattern -i .pgm$ 1440 80% 4320
refresh_pattern -i .ppm$ 1440 80% 4320
refresh_pattern -i .rgb$ 1440 80% 4320
refresh_pattern -i .ppm$ 1440 80% 4320
refresh_pattern -i .rgb$ 1440 80% 4320
refresh_pattern -i .xpm$ 1440 80% 4320
refresh_pattern -i .xwd$ 1440 80% 4320
refresh_pattern -i .pict?$ 1440 80% 4320
# Video minimo 10 dias, maximo 30
refresh_pattern -i .mov$ 14400 80% 43200
refresh_pattern -i .mpe?g?$ 14400 80% 43200
refresh_pattern -i .avi$ 14400 80% 43200
refresh_pattern -i .qtm?$ 14400 80% 43200
refresh_pattern -i .viv$ 14400 80% 43200
refresh_pattern -i .swf$ 14400 80% 43200
refresh_pattern -i .flv$ 14400 80% 43200
# Sonido idem que video
refresh_pattern -i .wav$ 14400 80% 43200
refresh_pattern -i .aiff?$ 14400 80% 43200
refresh_pattern -i .au$ 14400 80% 43200
refresh_pattern -i .ram?$ 14400 80% 43200
refresh_pattern -i .snd$ 14400 80% 43200
refresh_pattern -i .mid$ 14400 80% 43200
refresh_pattern -i .mp2$ 14400 80% 43200
refresh_pattern -i .mp3$ 14400 80% 43200
refresh_pattern -i .ogg$ 14400 80% 43200
#Default
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
Establecemos las reglas de acceso:
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
acl localnet1 src 192.168.1.128/25 # Red con pools de retardo
acl localnet2 src 192.168.1.0/26 # Red sin pools de retardo
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
http_access allow manager localhost
cachemgr_passwd entraralcgi all
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localnet
http_access allow localnet2
http_access allow localhost
http_access deny all
Y por último vamos a controlar el ancho de banda para las distintas redes. En mi caso puse una subred sin limite de descarga y otra con un limite de 10 KiB por segundo (si, es poco pero mi conexion no es la mejor).
Para esto vamos a utilizar 2 Delay Pools de squid:
delay_pools 2
Definimos el primer delay para la red ilimitada. Si se fijan arriba se darán cuenta que definimos en "localnet1" y "localnet2" nuestras subredes, entonces quedaría algo así:
delay_class 1 2 # Primer pool de retardo de clase 2
delay_parameters 1 -1/-1 -1/-1 # El -1/-1 nos dice que no limita el ancho de banda
delay_access 1 allow localnet2 # Asignamos la red 2 al pool de retardo
Para la otra subred ponemos lo siguiente:
delay_class 2 2 # Segundo pool de retardo de clase 2
delay_parameters 2 10000/10000 10000/10000 # Se le asigna 10000 Bytes por segundo por cada 10000 Bytes descargados
delay_access 2 allow localnet1 # Asignamos la red 1 al pool
Guardamos el archivo /etc/squid/squid.conf e iniciamos el servidor squid:
/etc/init.d/squid restart.
Compartiendo la conexion a internet
Hasta ahora solo el servidor puede aceder a internet, asi que vamos a compartir nuestra conexion con los clientes de la LAN. Tambien vamos a redireccionar el trafico dirigido al puerto 80 (HTTP) al 3128 (el puerto de nuestro Proxy). Y ya que estamos vamos a cerrar los demás puertos para que los clientes de la red limitada no puedan utilizar programas P2P o clientes Torrent.
Para esto vamos a setear unas cuantas reglas en iptables en un script que crearemos nosotros. Por ejemplo: "/etc/firewall"
nano /etc/firewall
Agregamos lo siguiente para limpiar las reglas existentes:
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
Permitimos el acceso a "todo" por defecto (luego iremos puliendo esto):
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
Aceptamos conexiones locales en la interfaz lo y las conexiones de la red local (siempre cambien eth0 por su interfaz de red):
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -i eth0 -j ACCEPT
Ahora redirigimos las peticiones http a nuestro proxy:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
Aceptamos las solicitudes al puerto 443 (ssl) para permitir conexiones cifradas (https, msn, etc..)
iptables -A FORWARD -s 192.168.1.0/24 -i eth0 -p tcp --dport 443 -j ACCEPT
Podemos habilitar el puerto utilizado por el msn para la red limitada.
iptables -A FORWARD -s 192.168.1.0/24 -i eth0 -p tcp --dport 1836 -j ACCEPT
Permitimos SSH
iptables -A FORWARD -s 192.168.1.0/24 -i eth0 -p udp --dport 22 -j ACCEPT
Aceptamos las consultas de DNS de la red local
iptables -A FORWARD -s 192.168.1.0/24 -i eth0 -p tcp --dport 53 -j ACCEPT
iptables -A FORWARD -s 192.168.1.0/24 -i eth0 -p udp --dport 53 -j ACCEPT
Puertos para Samba y Netbios
iptables -A FORWARD -s 192.168.1.0/24 -i eth0 -p tcp --dport 139 -j ACCEPT
iptables -A FORWARD -s 192.168.1.0/24 -i eth0 -p tcp --dport 445 -j ACCEPT
iptables -A FORWARD -s 192.168.1.0/24 -i eth0 -p tcp --dport 1836 -j ACCEPT
iptables -A FORWARD -s 192.168.1.0/24 -i eth0 -p tcp --dport 1000 -j ACCEPT
Denegamos el resto de los servicios para la red limitada
iptables -A FORWARD -s 192.168.1.128/25 -i eth0 -j REJECT
Enmascaramos
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
Guardamos el archivo y le damos permisos de ejecución:
chmod +x /etc/firewall
Ahora agregamos la siguiente linea al archivo /etc/rc.local para que nuestro script se ejecute al inicio de forma automática.
Nos deberia quedar así:
sh /etc/firewall
exit 0
Nota: Tambien pueden establecer reglas con filtrado de IPs y MAC para incrementar la seguridad. Hay muchisima informacion sobre iptables dando vueltas en el mundo (google.com), solo es cuestión de buscar y ponerle ganas.
Instalación del servidor SSH
Para no tener que estar frente al servidor podemos instalar un servidor ssh para administrarlo de forma remota y de paso podremos recuperar el monitor del servidor.
Para esto instalamos OpenSSh-server:
apt-get install openssh-server
Luego lo configuramos para que escuche en el puerto 22, para eso editamos el archivo /etc/ssh/sshd_config.
Guardamos y reiniciamos el servidor ssh:
/etc/init.d/ssh restart
Ahora podemos acceder al servidor desde nuestra PC ejecutando el comando:
ssh 192.168.1.1 -l root -X
Y bueno, eso sería todo. Como ya les dije, esta no es la forma adecuada de hacerlo. Muchos pasos son innecesarios ya que un buen router puede hacerlos sin problemas. Pero les puede servir para aprender algo, incluso pueden ocuparlo para montar un servidor que se ajuste a sus necesidades.
Acepto comentarios y sugerencias. Los comentarios que no esten relacionados con el post van a ser borrados.
Les comento que hace un tiempo que vivo en un pueblo en el cual la mejor conexión (en cuanto a precio/calidad) es de 256K y además tengo montada una pequeña red para compartir internet con algunos vecinos.
Por lo tanto, había días en los cuales navegar por internet era imposible. Por esta misma razón decidí montar un servidor Proxy Caché.
¿Qué hace un Proxy Caché?
Bueno, básicamente lo que hace es almacenar en una “cache” los/alguno de los contenidos de los sitios web, para que estén disponibles en el servidor de Proxy (en este caso es un servidor local).
Con esto se logra que no se necesite descargar desde internet todo el contenido de un sitio web cada vez que un cliente accede al mismo. Sino que esos contenidos (imagenes, videos, etc) se descargan la primera vez al cache del servidor y luego son mostrados desde el servidor local sin tener que descargarlos nuevamente desde internet.
Esto acelera mucho la navegación y reduce muchísimo el consumo de ancho de banda.
¿Como funciona?
Simple, todos los clientes de la red local acceden al servidor Proxy en lugar de acceder directamente a internet, el servidor se encarga de procesar las páginas solicitadas por los clientes y de regresarles la información que solicitaron de una forma eficiente.
¿Como se hace?
Como ya dije antes, esta no es la forma adecuada, pero les puede servir para aprender y hacer pruebas.
Primero que nada se necesita alguna compu libre para utilizarla como servidor y acceso total a la red (ser propietario de un router es fundamental)
¿Ingredientes?
Para hacerlo he utilizado:
-Servidor: Pentium IV / 4GB en disco / 1GB de ram / 1 placa de red on-board.
-Router: Marca Pichichu con soporte para wireless.
-Distribucion GNU/Linux: Debian Squeeze.
-Tiempo.
¿Es necesario que sea en Linux?
En realidad se puede hacer en cualquier SO y sin tantas complicaciones. Ya que existe software mas amigable y preconfigurado para hacer esto con tan solo apretar dos botones.
En mi caso, decidí hacerlo con un sistema Debian Squeeze porque es lo que uso desde hace casi diez años. Además podemos instalar un sistema base en Debian lo suficientemente liviano para no ocupar tanto espacio en disco y para no consumir recursos en cosas que no necesitamos.
Sin contar que configurando las cosas a mano siempre se llega a un resultado final mucho mas pulido y preciso (y aprendiendo un montón de cosas).
Bueno, para empezar he decidido realizarlo de esta manera:
Nuestro router que hace de Punto de Acceso a internet solo va a permitir acceso a la WAN a nuestro servidor.
El servidor va a compartir su conexión a internet a los demás clientes conectados a la LAN. Para esto montaremos un pequeño firewall en el servidor.
El servidor además va a redirigir todas las peticiones de acceso web al proxy para reducir el consumo de ancho de banda, va a denegar el acceso a otros servicios como P2P, Clientes Torrents, Msn.
Por otro lado se crearan dos subredes, una contará con acceso total a la red y la otra con un acceso limitado.
La subred con acceso total será utilizada por el servidor y por los clientes que nosotros decidamos.
Nuestra red puede ser 192.168.1.0/24 en la cual vamos a tener dos subredes:
Red con acceso total: 192.168.1.0/26 Mascara de subred: 255.255.255.192.
Rango de IP's: 192.168.1.0 – 192.168.1.63
Red con acceso limitado: 192.168.1.128/25 Mascara de subred: 255.255.255.128
Rango de IP's: 192.168.1.128 – 192.168.1.255
En la cual tendremos 2 IP's reservadas:
192.168.1.1 para el Servidor
192.168.1.2 para el Router
Para asignar las IP's podemos utilizar el servidor DHCP de nuestro router, pero para hacerlo mas divertido utilizaremos un servidor DHCP que instalaremos y configuraremos en nuestro servidor.
También instalaremos un servidor DNS en el servidor y un servidor SSH para acceder al servidor de forma remota.
Instalación del SO:
Desde el menu de instalación de Debian elegimos la opción “Expert Install” con esto podemos saltear o agregar distintas fases de instalación para obtener un sistema mas comodo.
Lo recomendado es solo tener un sistema base (Sin servidor X y sin entorno de escritorio) y despues agregar lo que necesitemos. Una instalación mínima de Debian solo debería ocupar unos 400-500mb en disco.
Configuración del Router:
Esto varía de router en router. Pero no creo que tengan problemas en hacer lo siguiente.
Primero configuramos el router para que su IP sea 192.168.1.2
Podría ser en: Network → LAN → IP Address → 192.168.1.2
Segundo seteamos el firewall del router para que solo permita acceder a la WAN a nuestro servidor.
Podemos establecer una regla por MAC y por IP.
Para saber la MAC del servidor solo ponemos el comando “ifconfig eth0 | grep Hwaddr” (cambiando eth0 por nuestra interfaz de red).
Por lo tanto el router solo debería permitir el acceso a internet al host con IP 192.168.1.1y con la MAC de nuestro servidor.
Por último desactivamos el servidor DHCP del router, ya que vamos a montar uno en el servidor.
Puede estar en : Advanced Settings → DHCP → Disable
Configurando la Red del servidor:
Luego de instalar configuraremos los parámetros de red del servidor. Para eso nos vamos a modificar el archivo de configuración de la red:
nano /etc/network/interfaces
Nos deberia quedar así:
auto lo eth0
iface lo inet loopback
iface eth0 inet static
address 192.168.1.1
netmask 255.255.255.0
gateway 192.168.1.2
Donde “address” es la ip statica de nuestro servidor y el “gateway” es nuestro router.
Lo guardamos con Ctrl+x y reiniciamos el demonio de red:
ifconfig eth0 down
/etc/init.d/networking restart
Instalación del servidor DHCP
Para que los clientes que se conecten a la red local no necesiten configurar manualmente los datos de conexión es necesario que exista un servidor DHCP que asignará de forma automática una IP, un Gateway, Servidor DNS y la Mascara de Red. Como deshabilitamos el servidor DHCP del router, vamos a instalar uno en el servidor.
Hay varias alternativas yo utilicé “udhcp”. Para instalarlo solo ejecutamos lo siguiente:
apt-get install udhcpd
Luego configuramos el servidor dhcp editando el archivo /etc/udhcp.conf consiguiendo que los clientes que se conecten sean asignados a la red limitada y estableciendo los clientes que formarán parte de la red con acceso libre.
Nos debería quedar así:
start 192.168.1.128 # inicio del rango de IP's dinamicas
end 192.168.1.254 # fin del rango de IP's dinamicas
opt dns 192.168.1.1 192.168.1.1 # Servidores de nombre de dominio
opt router 192.168.1.1 # Gateway apuntando a nuestro servidor
Tambien podemos hacer que se asigne una ip estatica a nuestra computadora (que por conveniencia va a formar parte de la red libre).
Por ejemplo:.
static_lease xx:xx:xx:xx:xx:xx 192.168.1.60 # solo cambiamos las x por la MAC de nuestra PC
Guardamos los cambios y abrimos el archivo /etc/default/udhcp y comentamos la linea que dice:
DHCPD_ENABLED="no"
Guardamos y reiniciamos el demonio:
/etc/init.d/udhcp restart
Instalación del DNS
Este paso es prácticamente inútil, pero necesario. En realidad podríamos haber seteado los DNS en la configuración del servidor DHCP. Pero ya que estamos vamos a instalar un DNS que redirija las peticiones al DNS utilizado por el router (únicamente para jorobar).
Para esto vamos a utilizar Bind9
apt-get install bind9
Luego lo configuramos para que consulte al dns brindado por nuestro proveedor de internet.
Esta informacion la podemos obtener desde el router. Ej: Setup → Network → WAN
Anotamos las IP's de los DNS que aparecen ahí y las ponemos en el archivo /etc/bind9/named.conf.options
Debería quedar así (reemplazando DNS1 y DNS2 por las IP's correspondientes):
options {
directory "/var/cache/bind";
forwarders {
DNS1;
DNS2;
};
auth-nxdomain no;
listen-on-v6 { any; };
};
Guardamos y reiniciamos el servidor.
/etc/init.d/bind9 restart
Nota: Si quieren pueden poner como dns al router. En ese caso sería 192.168.1.2
Instalación del servidor Proxy
Primero que nada debemos instalar un servidor proxy. Para eso utilizaremos Squid:
apt-get install squid
Ahora debemos configurarlo. Podemos encontrar el archivo de configuracion de Squid en /etc/squid/squid.conf.
Si lo abrimos, veremos todas las opciones de configuracion de squid con cada una de sus descripciones en los comentarios. El archivo en si es largo y pesado para trabajar sobre el, asi que vamos a crear uno desde cero.
Primero renombramos el archivo de configuracion (es preferible tenerlo a mano ya que contiene informacion muy util):
mv /etc/squid/squid.conf /etc/squid/squid.old
Creamos uno nuevo en el cual añadiremos nuestra configuracion
nano /etc/squid/squid.conf
Empecemos:
Necesitamos que squid trabaje de forma "transparente", es decir que no va a requerir a los clientes ningún tipo de configuración en sus navegadores. Por lo que cuando los clientes accedan a un determinado sitio, el servidor va a redirigir esa informacion al puerto del Squid de forma automatica.
En este caso utilizaremos el puerto 3128 para nuestro proxy transparente. Para eso añadimos lo siguiente al archivo de configuración:
http_port 192.168.1.1:3128 transparent
Añadimos el tamaño de cache en ram:
cache_mem 64 MB
cache_swap_low 90
cache_swap_high 95
Seteamos el tamaño de la cache en disco. En este caso utilizaremos 512mb y solo guardaremos archivos con un maximo de 4194240KB
cache_dir aufs /var/spool/squid 512 16 256
maximum_object_size 4194240 KB
Definimos la ruta de los archivos donde se almacenarán los logs:
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
Definimos la taza de refresco de los archivos en caché (el tiempo que estarán disponibles en el servidor antes de volverse a descargar):
# Paquetes Debian y RedHat 1 dia
refresh_pattern -i .deb$ 1440 100% 1440
refresh_pattern -i .rpm$ 1440 100% 1440
# Actualizaciones de windows 10 a 20 dias
refresh_pattern -i .cab$ 14400 80% 28800
# Ejecutables 10 a 30 dias
refresh_pattern -i .exe$ 14400 80% 43200
# Imagenes minimo 1 dia maximo 3 antes de descargar
refresh_pattern -i .gif$ 1440 80% 4320
refresh_pattern -i .tiff?$ 1440 80% 4320
refresh_pattern -i .bmp$ 1440 80% 4320
refresh_pattern -i .jpe?g$ 1440 80% 4320
refresh_pattern -i .xbm$ 1440 80% 4320
refresh_pattern -i .png$ 1440 80% 4320
refresh_pattern -i .wrl$ 1440 80% 4320
refresh_pattern -i .ico$ 1440 80% 4320
refresh_pattern -i .pnm$ 1440 80% 4320
refresh_pattern -i .pbm$ 1440 80% 4320
refresh_pattern -i .pgm$ 1440 80% 4320
refresh_pattern -i .ppm$ 1440 80% 4320
refresh_pattern -i .rgb$ 1440 80% 4320
refresh_pattern -i .ppm$ 1440 80% 4320
refresh_pattern -i .rgb$ 1440 80% 4320
refresh_pattern -i .xpm$ 1440 80% 4320
refresh_pattern -i .xwd$ 1440 80% 4320
refresh_pattern -i .pict?$ 1440 80% 4320
# Video minimo 10 dias, maximo 30
refresh_pattern -i .mov$ 14400 80% 43200
refresh_pattern -i .mpe?g?$ 14400 80% 43200
refresh_pattern -i .avi$ 14400 80% 43200
refresh_pattern -i .qtm?$ 14400 80% 43200
refresh_pattern -i .viv$ 14400 80% 43200
refresh_pattern -i .swf$ 14400 80% 43200
refresh_pattern -i .flv$ 14400 80% 43200
# Sonido idem que video
refresh_pattern -i .wav$ 14400 80% 43200
refresh_pattern -i .aiff?$ 14400 80% 43200
refresh_pattern -i .au$ 14400 80% 43200
refresh_pattern -i .ram?$ 14400 80% 43200
refresh_pattern -i .snd$ 14400 80% 43200
refresh_pattern -i .mid$ 14400 80% 43200
refresh_pattern -i .mp2$ 14400 80% 43200
refresh_pattern -i .mp3$ 14400 80% 43200
refresh_pattern -i .ogg$ 14400 80% 43200
#Default
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern . 0 20% 4320
Establecemos las reglas de acceso:
acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
acl localnet1 src 192.168.1.128/25 # Red con pools de retardo
acl localnet2 src 192.168.1.0/26 # Red sin pools de retardo
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
http_access allow manager localhost
cachemgr_passwd entraralcgi all
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localnet
http_access allow localnet2
http_access allow localhost
http_access deny all
Y por último vamos a controlar el ancho de banda para las distintas redes. En mi caso puse una subred sin limite de descarga y otra con un limite de 10 KiB por segundo (si, es poco pero mi conexion no es la mejor).
Para esto vamos a utilizar 2 Delay Pools de squid:
delay_pools 2
Definimos el primer delay para la red ilimitada. Si se fijan arriba se darán cuenta que definimos en "localnet1" y "localnet2" nuestras subredes, entonces quedaría algo así:
delay_class 1 2 # Primer pool de retardo de clase 2
delay_parameters 1 -1/-1 -1/-1 # El -1/-1 nos dice que no limita el ancho de banda
delay_access 1 allow localnet2 # Asignamos la red 2 al pool de retardo
Para la otra subred ponemos lo siguiente:
delay_class 2 2 # Segundo pool de retardo de clase 2
delay_parameters 2 10000/10000 10000/10000 # Se le asigna 10000 Bytes por segundo por cada 10000 Bytes descargados
delay_access 2 allow localnet1 # Asignamos la red 1 al pool
Guardamos el archivo /etc/squid/squid.conf e iniciamos el servidor squid:
/etc/init.d/squid restart.
Compartiendo la conexion a internet
Hasta ahora solo el servidor puede aceder a internet, asi que vamos a compartir nuestra conexion con los clientes de la LAN. Tambien vamos a redireccionar el trafico dirigido al puerto 80 (HTTP) al 3128 (el puerto de nuestro Proxy). Y ya que estamos vamos a cerrar los demás puertos para que los clientes de la red limitada no puedan utilizar programas P2P o clientes Torrent.
Para esto vamos a setear unas cuantas reglas en iptables en un script que crearemos nosotros. Por ejemplo: "/etc/firewall"
nano /etc/firewall
Agregamos lo siguiente para limpiar las reglas existentes:
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
Permitimos el acceso a "todo" por defecto (luego iremos puliendo esto):
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
Aceptamos conexiones locales en la interfaz lo y las conexiones de la red local (siempre cambien eth0 por su interfaz de red):
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -i eth0 -j ACCEPT
Ahora redirigimos las peticiones http a nuestro proxy:
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
Aceptamos las solicitudes al puerto 443 (ssl) para permitir conexiones cifradas (https, msn, etc..)
iptables -A FORWARD -s 192.168.1.0/24 -i eth0 -p tcp --dport 443 -j ACCEPT
Podemos habilitar el puerto utilizado por el msn para la red limitada.
iptables -A FORWARD -s 192.168.1.0/24 -i eth0 -p tcp --dport 1836 -j ACCEPT
Permitimos SSH
iptables -A FORWARD -s 192.168.1.0/24 -i eth0 -p udp --dport 22 -j ACCEPT
Aceptamos las consultas de DNS de la red local
iptables -A FORWARD -s 192.168.1.0/24 -i eth0 -p tcp --dport 53 -j ACCEPT
iptables -A FORWARD -s 192.168.1.0/24 -i eth0 -p udp --dport 53 -j ACCEPT
Puertos para Samba y Netbios
iptables -A FORWARD -s 192.168.1.0/24 -i eth0 -p tcp --dport 139 -j ACCEPT
iptables -A FORWARD -s 192.168.1.0/24 -i eth0 -p tcp --dport 445 -j ACCEPT
iptables -A FORWARD -s 192.168.1.0/24 -i eth0 -p tcp --dport 1836 -j ACCEPT
iptables -A FORWARD -s 192.168.1.0/24 -i eth0 -p tcp --dport 1000 -j ACCEPT
Denegamos el resto de los servicios para la red limitada
iptables -A FORWARD -s 192.168.1.128/25 -i eth0 -j REJECT
Enmascaramos
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
echo 1 > /proc/sys/net/ipv4/ip_forward
Guardamos el archivo y le damos permisos de ejecución:
chmod +x /etc/firewall
Ahora agregamos la siguiente linea al archivo /etc/rc.local para que nuestro script se ejecute al inicio de forma automática.
Nos deberia quedar así:
sh /etc/firewall
exit 0
Nota: Tambien pueden establecer reglas con filtrado de IPs y MAC para incrementar la seguridad. Hay muchisima informacion sobre iptables dando vueltas en el mundo (google.com), solo es cuestión de buscar y ponerle ganas.
Instalación del servidor SSH
Para no tener que estar frente al servidor podemos instalar un servidor ssh para administrarlo de forma remota y de paso podremos recuperar el monitor del servidor.
Para esto instalamos OpenSSh-server:
apt-get install openssh-server
Luego lo configuramos para que escuche en el puerto 22, para eso editamos el archivo /etc/ssh/sshd_config.
Guardamos y reiniciamos el servidor ssh:
/etc/init.d/ssh restart
Ahora podemos acceder al servidor desde nuestra PC ejecutando el comando:
ssh 192.168.1.1 -l root -X
Y bueno, eso sería todo. Como ya les dije, esta no es la forma adecuada de hacerlo. Muchos pasos son innecesarios ya que un buen router puede hacerlos sin problemas. Pero les puede servir para aprender algo, incluso pueden ocuparlo para montar un servidor que se ajuste a sus necesidades.
Acepto comentarios y sugerencias. Los comentarios que no esten relacionados con el post van a ser borrados.