Tema:
Squid nos permite crear los denominados helpers de autenticación para validar bajo nuestras propias reglas a los usuarios que requieren de autorización para acceder a ciertas páginas.
El presente post demuestra como crear un helper usando PHP y PEAR para autenticar Squid mediante POP3.
- IMPORTANTE: Estoy partiendo del hecho de que tengo instalado un Squid (Version 2.7.STABLE9) sobre un Debian 6.0.1.
Procedimiento:
Instalar (sino los tenemos ya) los paquetes de línea de comandos para php y de los componentes base de pear:
apt-get install php5-cli php-pear
Instalar a través del cliente pear el paquete Net_POP3 para interactuar con servidores POP3:
pear install pear/Net_POP3
Creamos el archivo del helper en el directorio de configuración de squid (esto es por comodidad, puede ir en cualquier lado):
nano /etc/squid/auth_pop3.php
Colocamos dentro el siguiente código:
<?php
include('Net/POP3.php');
$host='mail.midominio.com.ec';
$port="110";
$pop3 =& new Net_POP3();
while (!feof(STDIN)) {
$line = trim(fgets(STDIN));
$fields = explode(' ', $line);
$username = rawurldecode($fields[0]);
$password = rawurldecode($fields[1]);
if($pop3->connect($host , $port ) ) {
if(PEAR::isError( $pop3->login($username , $password,'USER' ) ) ) {
fwrite(STDOUT, "ERR\n");
}
else {
fwrite(STDOUT, "OK\n");
}
}
else {
fwrite(STDOUT, "ERR\n");
}
}
$pop3->disconnect();
?>
Editamos el archivo de configuración squid.conf
nano /etc/squid/squid.conf
Y agregamos las siguientes líneas en la sección "OPTIONS FOR AUTHENTICATION":
auth_param basic program /usr/bin/php /etc/squid/auth_pop3.php
auth_param basic children 20
auth_param basic realm Usuario y Password
auth_param basic credentialsttl 5 hours
En donde:
- program: Cómo se ejecuta el helper. En este caso es a través del interprete de PHP.
- children: Número de procesos para atender autenticaciones concurrentes para todos los clientes.
- realm: Es el texto que se mostrará al usuario en la ventana de autenticación.
- credentialsttl: Tiempo de vigencia de las credenciales de autenticación. Pasado este lapso se pedirá nuevamente al usuario que se autentique.
En el mismo archivo creamos unas ACL's de prueba:
acl client30 src 192.168.3.204/255.255.255.255
acl usuarios_auth proxy_auth REQUIRED
Y agregamos una regla que las use:
http_access allow client30 usuarios_auth
Guardamos los cambios y Reiniciamos el servicio respectivo:
/etc/init.d/squid restart
Listo, con esto cada vez que quiera acceder a internet desde el equipo client30 se me pedirá autenticarme con las credenciales que uso para el correo electrónico ;)
PD: El código del helper puede ser mejorado, se me ocurre por ejemplo que puede recibir como parámetros el nombre del servidor y el puerto.
Referencias:
Comentarios
qué curioso.. bestial, yo he
qué curioso.. bestial, yo he usado los helpers pero jamás se me hubiera ocurrido hacerlo por pop3, tremenda idea! felicidades.
Saludos

epe
EcuaLinux.com
+(593) 9 9924 6504
Servicios en Software Libre
La necesidad
La necesidad es la madre de los inventos. Y yo necesitaba autenticarme contra un zimbra, pero como el puerto ldap no estaba publicado al exterior, me tocó inventarme lo del pop3.
"Transporta un puñado de tierra todos los días y construirás una montaña" - Confucio
floss.iknaxio.net