miércoles, 5 de junio de 2013

proxy transparente con squid en debian

http://parbaedlo.wordpress.com/2013/03/08/configurar-proxy-squid-transparente-en-linux-debian-squeeze/

configurar proxy squid transparente en linux debian squeeze

Ahora configuraremos proxy transparente pero para poder comenzar previamente tenemos que configurar las tarjetas de red y el DHCP.
para configurar las tarjetas de red editar el archivo /etc/network/interfaces para que quede de la siguiente manera

auto lo eth0 eth1
iface lo inet loopback

#Configuracion para interfaz con red eth0 con internet
allow-hotplug eth0
iface eth0 inet static
  address 172.16.2.111
  netmask 255.255.255.0
  gateway 172.16.2.1
  network 172.16.2.0
  broadcast 172.16.2.255
  dns-nameservers 8.8.8.8 #esto también se puede configurar en /etc/resolv.conf

#Configuracion para interfaz eth1 con red lan interna privada
allow-hotplug eth1
  iface eth1 inet static
  address 192.168.2.1
  netmask 255.255.255.0
  network 192.168.2.0
  broadcast 192.168.2.255
Ahora instalamos y configuramos el servidor DHCP que nos servira para proporcionar ips automaticos a las pc’s de la red lan
 # aptitude install isc-dhcp-server 
Configuramos el servicio de DHCP para que este disponible en la red interna y acepte las conexiones en dicha red, en este caso es la interfaz eth1, esto se configura en el archivo /etc/default/isc-dhcp-server
INTERFACES="eth0"
Ahora tenemos que modificar algunas lineas el archivo /etc/dhcpd.conf para especificar rango de ips y tiempo que se le proporcionara el ip a la maquina cliente
option domain-name "example.org";
option domain-name-servers 8.8.8.8, 4.4.4.4;
default-lease-time 600;
max-lease-time 7200;

#SubNet red lan.
subnet 192.168.2.0 netmask 255.255.255.0 {
  range 192.168.2.101 192.168.2.199;
  #option domain-name-servers 8.8.8.8;  #similar a la parte superior
  #option domain-name "example.org";  #similar a la parte superior
  option routers 192.168.2.1;
  option broadcast-address 192.168.2.255;
  #default-lease-time 86400;  #similar a la parte superior
  #max-lease-time 172800;   #similar a la parte superior
} 
Con el servidor DHCP se puede asignar un ip especifica a una determinada mac-address, estas direcciones fijas no deben estar en la gama de las direcciones reservadas para la distribución dinámica.
host desktop {
  hardware ethernet 01:23:45:67:89:10;
  fixed-address 192.168.2.2;
}
host laptop {
  hardware ethernet 01:23:45:67:89:11;
  fixed-address 192.168.2.3;
}
Reiniciar el servicio de dhcp:
# /etc/init.d/isc-dhcp-server restart
Ahora el ultimo paso instalación y configuración de squid, procedemos a la instalacion con el siguiente comando
 # aptitude install squid
Ahora vamos a hacer unos cambios en el fichero de configuración de squid (/etc/squid/squid.conf). Primero localizamos la línea con el puerto de entrada de squid (por defecto http_port 3128) y añadimos el parámetro transparente. Debe de quedarnos algo así:
http_port 3128 transparent 
A continuación de esto, y en el mismo fichero, añadimos las siguientes líneas:
acl redlan src 192.168.2.0/24
http_access allow redlan 
Ahora sólo nos queda configurar la máquina como router y direccionar el tráfico web (puerto 80) que recibe por el interfaz interno (eth1) al puerto 3128 que es el que usa squid. Esto lo hacemos gracias a IPtables (que vienen instaladas en Debian por defecto) el script que se detalla a continuación, se debe configurar para que se ejecute de forma automática.
#!/bin/sh
# squid server IP
SQUID_SERVER="192.168.2.1"
# Interface connected to Internet
INTERNET="eth0"
# Interface connected to LAN
LAN_IN="eth1"
# Squid port
SQUID_PORT="3128"
# DO NOT MODIFY BELOW
# Clean old firewall
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
# Load IPTABLES modules for NAT and IP conntrack support
modprobe ip_conntrack
modprobe ip_conntrack_ftp
# For win xp ftp client
#modprobe ip_nat_ftp
echo 1 > /proc/sys/net/ipv4/ip_forward
# Setting default filter policy
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
# Unlimited access to loop back
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
# Allow UDP, DNS and Passive FTP
iptables -A INPUT -i $INTERNET -m state --state ESTABLISHED,RELATED -j ACCEPT
# set this system as a router for Rest of LAN
iptables --table nat --append POSTROUTING --out-interface $INTERNET -j MASQUERADE
iptables --append FORWARD --in-interface $LAN_IN -j ACCEPT
# unlimited access to LAN
iptables -A INPUT -i $LAN_IN -j ACCEPT
iptables -A OUTPUT -o $LAN_IN -j ACCEPT
# DNAT port 80 request comming from LAN systems to squid 3128 ($SQUID_PORT) aka transparent proxy
iptables -t nat -A PREROUTING -i $LAN_IN -p tcp --dport 80 -j DNAT --to $SQUID_SERVER:$SQUID_PORT
# if it is same system
iptables -t nat -A PREROUTING -i $INTERNET -p tcp --dport 80 -j REDIRECT --to-port $SQUID_PORT
# DROP everything and Log it
iptables -A INPUT -j LOG
iptables -A INPUT -j DROP 
Para guarde el anterior script nos creamos la carpeta /etc/iptables-script y dentro de ahi colocamos el script con el nombre de proxy.sh, de damos permisos de ejecución:
 # chmod +x /etc/iptables-script/proxy.sh 
Y le indicamos al SO que ejecute dicho script al iniciar el sistema para esto editamos el archivo /etc/rc.local, y antes de exit colocamos la siguiente linea:
sh /etc/iptables-script/proxy.sh
 

1 comentario: