Squid
Squid wird weitergehend entsprechend der Standardkonfiguration verwendet. Es
werden z.Z. keine Sperrlisten eingesetzt, da diese sich als problematisch
erwiesen haben. Vielmehr wird eine anonymes Surfen im Internet verhindert.
Schüler müssen sich gegenüber dem Proxy-Server authentifizieren, somit kann
im Log-File festgestellt werden, wer wann welche Dateien geladen hat. Da
IP-Masquarading abgeschaltet ist, stellt der Proxy-Server den einzigen Zugang
zum Internet dar. Für Lehrer wird ein Sammeraccount benutzt, da nicht
beabsichtigt ist, die Kollegen bei ihren Aktivitäten im Netz zu kontrollieren.
Squid protokolliert nach Einloggen den Benutzernamen bei jeder Seite im
access.log mit, so dass mit dem grep-Befehl relativ leicht eine Kontrolle
durchgeführt werden kann. Es existieren auch Programme, die im Browser
anzeigen, wo gerade gesurft wird.
In der Konfigruationsdatei squid.conf wurde ein externes Programm zur
Authentifizierung eingebunden:
authenticate_program /usr/sbin/mysql_auth
acl domainusers proxy_auth REQUIRED
http_access allow domainusers |
Das Programm mysql_auth wurde aus dem folgenden Quelltext
erzeugt und muss geringfügig den eigenen Bedürfnissen angepasst werden. Dies
betrifft die Squid-Pfade bei SuSE 6.4, die sich von dem im Programm angegebenen
unterscheiden.
*
* mysql_auth.c
*
* Copyright 1998 Frank Liu (frank@ctcqnx4.ctc.cummins.com)
* Distributed under the GPL
*
* 26 Sep 1999, version 2:
* 1. fixed a bug where A_TABLE is defined but never used.
* (thanks to luciano.ghezzi@linux.it)
* 2. now you can choose to use either clear text password or
* encrypted password in the MySQL table.
* 13 Nov 1998, version 1:
* initial release
* Needs to be compiled/linked with MySQL libs.
* Assuming MySQL header files are installed in /usr/local/mysql/include
* and MySQL libs in /usr/local/mysql/lib
*
* On my Linux box:
*
* cc -I /usr/local/mysql/include -O -o mysql_auth mysql_auth.c \
-L /usr/local/mysql/lib -lmysqlclient -lm
*
* Then modify the squid.conf to use this external auth program:
*
* authenticate_program /usr/local/squid/bin/mysql_auth
*
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "mysql.h"
/* comment out next line if you use clear text password in MySQL DB */
/* #define ENCRYPTED_PASS */
/* can use NULL for localhost, current user, or no password */
#define DBHOST "localhost"
#define DBUSER "root"
#define DB "Benutzer"
#define DBPASSWORD NULL
/* table for the user database for the squid authentication,
column names for auth username and auth password */
#define A_TABLE "user"
#define A_USERNAME "login"
#define A_PASSWORD "kennwort"
#define BUFSIZE 256
void main(int argc, char *argv[])
{
char buf[BUFSIZE], qbuf[BUFSIZE];
char *p;
MYSQL mysql,*sock;
MYSQL_RES *res;
/* make standard output line buffered */
if (setvbuf(stdout, NULL, _IOLBF, 0) != 0)
return;
while (1) {
if (fgets(buf, BUFSIZE, stdin) == NULL)
break;
if ((p = strchr(buf, '\n')) != NULL)
*p = '\0'; /* strip \n */
if ((p = strchr(buf, ' ')) == NULL) {
(void) printf("ERR\n");
continue;
}
*p++ = '\0';
/* buf is username and p is password now */
if (!(sock = mysql_connect(&mysql, DBHOST, DBUSER, DBPASSWORD)))
{
/* couldn't connect to database server */
(void) printf("ERR\n");
continue;
}
if (mysql_select_db(sock, DB))
{
/* couldn't use the database */
(void) printf("ERR\n");
mysql_close(sock);
continue;
}
sprintf(qbuf, "select " A_USERNAME " from " A_TABLE " where "
"internet = 'Y' and " A_USERNAME "='%s' and " A_PASSWORD
#ifdef ENCRYPTED_PASS
"=password('%s')", buf, p);
#else
"='%s'", buf, p);
#endif
if(mysql_query(sock,qbuf) || !(res=mysql_store_result(sock)))
{
/* query failed */
(void) printf("ERR\n");
mysql_close(sock);
continue;
}
if ( res->row_count !=0 )
(void) printf("OK\n");
else
(void) printf("ERR\n");
mysql_free_result(res);
mysql_close(sock);
}
exit(0);
}
|
|