Autor deambulando | en Linux | el 29-05-2006
Buenas!!
Este es el primer artículo técnico que escribo en el blog.
Voy a intentar explicarme lo mejor que yo pueda, y si os surge cualquier duda la posteis y ayudamos que para esso estamos xD
Bien explicaré el problema, explicaré una posible solución, y luego daré todos los comandos que debéis usar. mola??? jeje
Veamos caso ficticio:
Tenemos una sala de bichos(usuarios con pcs), que en vez de ponerse a trabajar no tienen nada mejor que hacer que ponerse a ver las paginas de youtube(genial), pero claro eso genera unos grandes problemas:
- gastan el ancho de banda de mi emule(o del compañero)
- generan trafico de red innecesario
- no trabajan, pierden tiempo
- llenan los bichos de mierda(literalmente y técnicamente)
- asi justificamos nuestro puesto de trabajo de una forma genial :D
Entonces es cuando dices….esto no puede seguir así….vamos a cortarles inernés. Y tu dices vale, eso ya lo se hace tiempo pero comoooool?? si necesitan rellenar formularios de unas websss?? y no voy a ir pc por pc limitando las paginas del IE(Internet Explorer) si luego lo quitan!!
Pues bien ahí va sale el listo de turno y estornuda aaachis!!, noooo ha dicho Squid!
aaaaaaaaaaaa ahora queda todo mas claro Squid, es un servidor proxy!!! de este modo haremos una lista con las paginas permitidas, uauuuuuuuuuuu, pero como lo hacemos eso??
Yo pensé que tal Debian?? y dije pues debian mismo, pero como ese dia me llegaron los cd´s de ubuntu a casa….
Bueno explico un poco Ubuntu es una versión de Debian que esta subvencionada por el africano ese que vendió verisign por un huevo y luego se fue pa la luna.
La idea es la siguiente, pillas un Pc que aya por ahí, no hace falta ningún pepino, yo lo monte sobre un 800 con 196mb y 20gb, y funciona perfecto, es importante que según el trafico que vaya a haber que la tarjeta de red sea mas o menos decente, pones el cd de instalación de Ubuntu, haces que el pc bootee desde el CD, y cuando te salga una línea que pone boot: ponemos server, de este modo realizamos una instalación limpia para instalar lo que nosotros deseemos. Le damo pa'lante a to personalizando lo que nos convenga hasta haber finalizado, luego seguimos estos comandos siempre teniendo en cuenta que se ha de adaptar a nuestra red.
#configuracion servidor proxy squid
#objetivo: limitar el acceso a internet, solo a paginas permitidas
#SO: ubuntu breezy server-configuration
#realizamos la instalacion base del sistema
#para seguir en linea de comandos una vez instalado
#actualizamos la lista de paquetes
vi /etc/apt/sources.list
coger de aqui:http://www.ubuntu-es.org/node/9043
#actualizamos el apt
aptitude update
#confguramos la interface de red
vi /etc/network/interfaces
# The loopback interface
auto lo
iface lo inet loopback
# The first network card – this entry was created during the Debian installation
# (network, broadcast and gateway are optional)
auto eth0
iface eth0 inet static
address 172.16.0.1
netmask 255.255.255.0
network 172.16.0.0
broadcast 172.16.0.255
gateway 172.16.0.10
#le damos el dns de resolucion
vi /etc/resolv.conf
nameserver TUDNSAKI
#reiniciamos la red
/etc/init.d/networking restart
#instalamos xinetd
aptitude install xinetd
#intsalamos los paquetes que usaremos, ssh para la administracion remota usamos putty, squid proxy,iptables (routing firewall) aptitude install ssh squid iptables
#configuramos el squid
vi /etc/squid/squid.conf
http_port 8080
cache_mem 16 MB#memoria que usara
cache_dir ufs /var/spool/squid 100 16 256#esto es la cache
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_single_host off
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
offline_mode on
ie_refresh on
acl all src 0.0.0.0/0.0.0.0
acl localhost src 127.0.0.1/255.255.255.255
acl redlocal src 172.16.0.0/255.255.255.0
acl per url_regex "/etc/squid/permitidos"
http_access allow per
http_access allow localhost
http_access deny all
#creamos el fichero de permitidos
vi permitidos
akivan las paginas le das al enter para cada web, si lo deseas no pongas la extension
#reiniciamos squid
squid restart
#configuramos el firewall para el routing de puertos, de este modo lo haremos transparente
vi /etc/init.d/firewall.sh
iptables -t nat -A PREROUTING -i eth0 -p tcp –dport 80 -j REDIRECT –to-port 8080
#hacemos que arranque como servicio
update-rc.d firewall.sh defaults
#instalamos webmin para la administracion de la maquina y configuramos
aptitude install webmin
vi /etc/webmin/miniserv.conf
allow= all
/etc/init.d/webmin start
#instalamos samba para la comparticion del fichero de permitidos, recuerda crear el usuarioooo
aptitude install samba
smbpasswd -a root
vi /etc/samba/smb.conf
[global]
server string = servidor del proxy squid
hosts allow = 172.16.0.0/24
[squid]
path = /etc/squid
valid users = root
write list = root
#editamos el xinetd activando el servicio(sino no ira ni samba ni na)
vi /etc/xinetd.conf
(quitamos los comentarios)
/etc/init.d/xinetd restart
/etc/init.d/samba restart
#ahora podemos entrar asis: \\172.16.0.1
#instalamos administracion para los servicios via web
aptitude install webmin-squid webmin-xinetd webmin-firewall
#instalamos samba para administracion de samba
aptitude install swat
#el swat(samba) funciona en el puerto 901, y el webmin en el 10000, para acceder http://172.16.0.1:puerto
Una vez hecho todo esto os preguntareis vale muy bonito pero….como lo pongo en los Bichos?? pues tienes dos opciones:
- En propiedades de la conexión de tu navegador web pones como proxy 172.16.0.1 y puerto el 8080, el problema es q lo pueden deshabilitar
- Esta es la mejor! pones el servidor 172.16.0.1 como puerta de enlace!!! uauuuuu ni se darán cuenta!!!
Encima tenemos la ventaja de que todo es administrable via web, y el fichero de permitidos lo podemos modificar a nuestro antojo gracias a Samba.
FIN
Espero que os haya sido de gran utilidad
Recomendados:

hola jose a ver si te entendido…
la cosa es que las iptables redirigen al puerto 80 del router, pero antes pasan por el proxy.
que es lo que quieres que algunas maquinas no pasen por el proxy?
creo que puedes hacer una lista de mac address excluidas….habría que leerse la documentacion ;)
La verdad es que lei mucho sobre iptables para intentar hacer esto, pero tengo poca experiencia con iptables y no logro entender del todo como anda.
Lo que proponia era era lo siguiente:
El gateway, para todos los esquipos, seria el router. Todos los equipos, cuando quieran acceder a internet, enviaran sus paquetes al router. Si existiera una regla en la iptables del router que redirija todos los paquetes que reciba, destinados a puerto 80, hacia el proxy (para que este se encargue), no seria una situacion similar a la que tu propones?
La diferencia esta en que en vez de usar el proxy como gateway (y hacer los redireccionamientos en forma interna), estaria usando otro router como gateway.
mmmm
la verdad esto nunca me lo había planteado así…
pero tu crees es correcto accedan al router directamente?
bueno no se comentanos como lo arreglas o que haces!
gracias!
Estimados amigos:
soy nuevo en esto y he seguido el manual paso a paso, la diferencia es que yo uso dos conexiones a red uno para la lan y otro para el Internet,
he tratado de configurar el iptables y he tenido muchos problemas, pero buscando por hay encontré un script que aplique y supuestamente resulto, digo supuestamente ya que pude verificar que no esta trabajando con el proxy, el proxy tiene como ip y puerto 192.168.2.4 8080, he puesto como puerta de entrada y los clientes si pueden ingresar a internet pero las políticas de restricciones del squid no funkan eso me hace creer que no esta funcionando el proxy, pero si configuro en los navegadores el proxy, recién hay si funcionan, como indique se supone que basta con la puerta e enlace, ya que es un proxy transparente, aca les dejo el script para que lo verifique y me indique que esta mal.
#!/bin/sh
##################################################
## SCRIPT de IPTABLES ##
###################################################
# ipchains e iptables son modulos del kernel que
# NO pueden convivir juntos
# DENY ahora es DROP
# Los LOG se guardan de otra forma
echo -n Aplicando Reglas de Firewall…
## Instalando modulos
modprobe ip_tables
modprobe ip_nat_ftp
modprobe ip_conntrack_ftp
## Variables
EXTIF=”eth1″ # La que va al router
INTIF=”eth0″ # La que va a la LAN
## Primeras reglas
iptables -P INPUT ACCEPT # INPUT se acepta por defecto MAL HECHO
iptables -F INPUT
iptables -P OUTPUT ACCEPT # OUTPUT se acepta por defecto, weno..
iptables -F OUTPUT
iptables -P FORWARD ACCEPT # FORWARD se acepta por defecto buf
iptables -F FORWARD
iptables -t nat -F
## se deniega 80 y se guarda log (ejemplo)
iptables -A INPUT -i $INTIF -s 0.0.0.0/0 -p TCP –dport www -j LOG –log-prefix “IPTablesFW> ”
iptables -A INPUT -i $INTIF -s 0.0.0.0/0 -p TCP –dport www -j DROP
## Acceso al 3128 (proxy squid) desde LAN
iptables -A INPUT -i $INTIF -s 192.168.2.0/24 -p TCP –dport 8080 -j ACCEPT
# El resto se tira
iptables -A INPUT -i $INTIF -s 0.0.0.0/0 -p TCP –dport 8080 -j DROP
## Acceso al 143 desde LAN
iptables -A INPUT -i $INTIF -s 192.168.2.0/24 -p TCP –dport 143 -j ACCEPT
## Acceso al ssh desde la LAN
iptables -A INPUT -i $EXTIF -s 192.168.1.0/24 -p TCP –dport 22 -j ACCEPT
## Acceso al ssh un rango externo
iptables -A INPUT -i $EXTIF -s 192.168.1.0/24 -p TCP –dport 22 -j ACCEPT
# el resto se tira
iptables -A INPUT -i $EXTIF -s 0.0.0.0/0 -p TCP –dport 22 -j DROP
## Acceso al puerto 25
iptables -A INPUT -i $EXTIF -s 192.168.1.0/24 -p TCP –dport 25 -j ACCEPT
iptables -A INPUT -i $INTIF -s 192.168.2.0/24 -p TCP –dport 25 -j ACCEPT
iptables -A INPUT -i $EXTIF -s 0.0.0.0/0 -p TCP –dport 25 -j DROP
## iptables -t nat -A PREROUTING -i eth1 -p tcp –dport 80 -j REDIRECT –to-port 8081
## FORWARD
# Que me haga log de todo el forward
iptables -A FORWARD -j LOG
## He aqui el forward para la LAN, una regla mágica
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
# Ese peazo de bit que hay que habilitar
echo 1 > /proc/sys/net/ipv4/ip_forward
PD: como dije este script lo copie e tantas web que buscaba
saludos y gracias
Hola, tengo el siguiente problema estoy vendiendo INTERNET WIFI. y lo que deseo
que solo puedan conectarte a mi WIFI los usuarios que estan su MAC en el Server(UBUNTU). y
administrar el ancho de banda por igual a todos. solo eso deseo. y si deseo quitarle la
señal a uno. poder bloquearlo en el server. (NO DESEO USAR EL FILTRADO DE MAC DEL AP QUE
TENGO POR QUE COMO SON MUCHOS CLIENTES EL AP SUFRIRA USO UN EDIMAX 7209. POR FAVOR ESPERO
SU COLABORACION O IDEAS PARA ESTE CASO. GRACIAS.
hola martin suerte en tu busqueda! ;)
hola!
Muy buen tutorial, lo voy a poner a probar. He de admitir que estaba escéptico por la situación de que era una sóla tarjeta de red pero lo voy a probar. Si quisiera cambiar al servidor con dos tarjetas lo monto como un NAT dinámico no? y que los 200 usuarios salgan por el servidor hacia el router de internet.
Te dejo comentario cuando lo tenga para ver que tal jala, porque podría plantearlo para un ambiente real de trabajo de más de 200 equipos.
prueba y comentas, funciona perfecto!
hola de nuevo,
Lo he probado y funciona para la configuración del navegador. Donde encuentro el problema es al momento de indicar como puerta de enlace predeterminada, ya que ahí no me reliza ninguna conexión.
Debo suponer que lo único que cambias es la puerta de enlace, o algo más?
la puerta de enlace del cliente nada mas! ;)
Hola a todos, tengo una pregunta, la cuestion es mas al lado del cliente.
Resulta que hay un servidor proxy con autenticacion, para el lado del cliente tambien hay linux pero hay aplicaciones que se conectan a internet pero no tienen la opcion de configurar , proxy, usuario y contraseña. en un cliente, linux claro esta, que debo instalar para que el programa salga autenticado a internet, es decir algun servicio en el cliente lo autentique con el servidor proxy y pueda salir a internet.
no se si me explique bien.
muchas gracias.
poner de puerta de enlace el proxy squid…y ya esta!
Gracias por responder, pero creo que no me entendio bien. Esta el servidor proxy con autenticacion para navegar, al cual yo no tengo acceso para configurarle nada, yo no soy el administrador, yo soy un usuario con s.o. linux tambien, la pregunta es que puedo montar en mi maquina para que un programa que tengo corriendo en una maquina virtual en mi misma maquina pueda navegar en internet, que salga por el proxy con mi usuario y clave. intente un programa en la maquina virtual que se llama proxycap, que lo que hacia era como un tunel en el que yo le configuraba la direccion del proxy, usuario y clave y los programas saldrian a internet directamente, el problema es que no me funciono. la idea es montar algo en el linux y que dirrecione todo el trafico hacia el proxy directamente con autenticacion y todo.
muchas gracias
Disculpa tanta ingnorancia, entiendo que tu soluciòn funcionarà con una sola tarjeta de RED, esto no lentea la navegaciòn?, en seguida estas direcciones iface eth0 inet static
address 172.16.0.1
netmask 255.255.255.0
network 172.16.0.0
broadcast 172.16.0.255
gateway 172.16.0.10
Son esas las que hay que poner o las de mi ambiente?
Gracias por tu respuesta.
La misma pregunta tengo para estos otros paràmetros:
acl all src 0.0.0.0/0.0.0.0
acl localhost src 127.0.0.1/255.255.255.255
acl redlocal src 172.16.0.0/255.255.255.0
Una preguna, en los navegadores de las maquinas clientes se debe poner “Sin proxy” o “Autodetectar proxy”???
Gracias.
depende como configuraras tu proxy, si es la puerta de enlace de los clientes no es necesario
Hola a todos.
Estoy empezando con linux, el trabajo es agobiante cuando los usuarios saturan el ancho de mi banda ademas de acceder a lugares o aplicaciones no permitadas. Los usuario se han vuelto expertos en utilizar y habilitar aplicaciones no poermitidas.
Es por eso que decidi montar mi server proxi.. pero aun no tengo exito estoy checando todos los tutoriales para lograr un buen trabajo gracias por lod documentos citados.. :):)
Buen dia