Estoy tratando de crear un acl helper externo para squid3 para (con suerte) cortar algunas líneas de configuración de mi servidor squid3 y escribí un simple script de python para ello:
#!/usr/bin/python
import sys
import logging
import time
logger = logging.getLogger( 'squid_auth' )
logger.setLevel( logging.DEBUG )
fh = logging.FileHandler( 'spam.log' )
fh.setLevel( logging.DEBUG )
formatter = logging.Formatter( '%(asctime)s - %(name)s - %(levelname)s - %(message)s' )
fh.setFormatter( formatter )
logger.addHandler( fh )
def grant ():
sys.stdout.write( 'OK\n' )
sys.stdout.flush()
def deny ():
sys.stdout.write( 'ERR\n' )
sys.stdout.flush()
while True:
line = sys.stdin.readline().strip()
if line:
logger.info( line )
grant()
else:
time.sleep( 1 )
y lo agregué a mi squid.conf:
external_acl_type custom_acl %SRC %LOGIN %DST /etc/changemyip/squid/config/acl.py
acl CustomAcl external custom_acl
http_access allow CustomAcl
La ruta al script es correcta (puedo ejecutarlo en shell), el programa tiene derechos de ejecución y todo, pero, cuando vuelvo a cargar el calamar, aparece este error unas 5-6 veces y luego el calamar se bloquea:
Aug 17 14:08:52 server7 (squid): The custom_acl helpers are crashing too rapidly, need help!
Aug 17 14:08:52 server7 squid[28233]: Squid Parent: child process 28290 exited with status 1
Aug 17 14:08:52 server7 squid[28233]: Exiting due to repeated, frequent failures
Como puede ver, el script solo se imprime OK\n
en el stdout para otorgar a todos. Ni siquiera he comenzado a implementar ninguna lógica.
Probado con la versión de calamar: 3.1.19
Respuestas:
Tuve un problema similar. Logré solucionarlo cambiando la propiedad del script al usuario de squid y moviendo el archivo desde mi directorio de inicio a algún lugar del sistema de archivos raíz.
fuente
Todavía tenía el mismo problema incluso después de seguir las instrucciones útiles de @tyrells.
¿La solución?
Necesitamos hacer que el script de Python sea ejecutable ejecutando el siguiente comando.
sudo chmod u+x /path/to/external-acl.py
Para resumir, aquí hay instrucciones paso a paso.
/usr/share/acl.py
sudo chown proxy:proxy /usr/share/acl.py
sudo chmod u+x /usr/share/acl.py
sudo service squid restart
fuente