Squid: Delaypools für angemeld. User

hobby

#man women
Squid: Erzwungene Authtentifizierung und Bandbreitenlimitierung (Delaypools)

Squid: Erzwungene Authtentifizierung und Bandbreitenlimitierung (Delaypools)

****************************************
Einleitung:

Vorraussetzung:

Ausgangssituation:

Version:

-01- Installation des Squid aus den Ports

-02- Konfiguration des Squid

-03- Forwarding beim Paketfilter

****************************************

Einleitung:
In diesem Howto werde ich beschreiben, wie man seine Squid-User zwingen kann, sich anzumelden, bevor sie surfen können... Des Weiteren wird eine Bandbreitenregulierung für untersch. Benutzer erstellt (Delaypools)



Vorraussetzung:
- dein FBSD Server ist bereits Router (PPP Einwahl, NAT usw...)
- Grundkenntnisse mit Paketfilterung (hier: "pf")
- Apache ist installiert (weil wir htpasswd benötigen (NCSA), aber es ginge auch anstelle des Apache ein Samba oder LDAP...)



Ausgangssituation:
FreeBSD 5.3-RELEASE-p2
squid-2.5.7_4
apache+mod_ssl-1.3.33+2.8.22



Version:
1.0



-01- Installation des Squid aus den Ports

Zu erst installieren wir mit folgendem Befehl squid mit der entsprechenden Option für Delaypools
Code:
# cd /usr/ports/www/squid
# make SQUID_CONFIGURE_ARGS="--enable-delay-pools" install

Falls du Squid bereits installiert hast, musst du vorher ein
Code:
# cd /usr/ports/www/squid
# make deinstall
und dann den befehl von oben



-02- Konfiguration des Squid


Um näheres über Punkte NACH der Installation und VOR dem aktivieren des Squid zu erfahren, verweise ich auf ein meiner Meinung nach sehr gutes Howto von [moR-pH-euS]

Link 1 (Forum)
Link 2 (Wiki)

Da unser Squid ja automatisch beim Systemstart ausgeführt werden soll, fügen wir folgende Zeile in die /etc/rc.cond ein:
Code:
squid_enable="YES"

Da wir ja ausschließlich authentifizierte User über den Squid surfen lassen wollen, müssen wir zuerste mit dem Apache-Tool "htpasswd" eine User-/Passwort Datei generieren...

In meinem Beispiel soll diese Datei unter als "/etc/proxy_users" erstellt werden:
Code:
# htpasswd /etc/proxy_users admin
danach fragt das Tool automatisch nach einem Passwort... (die Option "-c" steht für create, also zum Anlegen eines Neuen Files...( siehe "#man htpasswd"))

um weitere User hinzuzufügen oder um ein Passwort eines bereits vorhandenen Users zu editieren genügt folgender Befehl:

Code:
# htpasswd /etc/proxy_users admin
<-- da wir oben ja bereits "admin" angelegt haben, würde nun dessen Passwort geändert werden

Code:
# htpasswd /etc/proxy_users user1
# htpasswd /etc/proxy_users user2
<-- da diese beiden User nocht nicht im File vorhanden sind, würden sie dadurch neu erstellt werden

Ferner sollte beachtet werden, dass auf diese neu erstellte File der User "Squid" Leserechte benötigt.

nun wollen wir mal die Konfigurationsdatei unseres mächtigen Tintenfisches bearbeiten:
Code:
# vi /usr/local/etc/squid/squid.conf

diese könnten dann wie folgt ausschauen:

Abschnitt Allgemein:
Code:
#####
#basic settings
#####
http_port 10.0.0.1:8080

cache_mem 8 MB
cache_dir ufs /var/squid/cache 256 32 320
cache_access_log /var/log/squid/access.log
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
pid_filename /var/log/squid/squid.pid
cache_effective_user squid
cache_effective_group squid

error_directory /usr/local/etc/squid/errors/German

quick_abort_min 0 KB
quick_abort_max 0 KB
quick_abort_pct 100


ftp_user eine@emailadres.se
ftp_passive on
cache_mgr deine@emailadresse.domain



#####
# ACLs
#####
acl all src 0.0.0.0/0.0.0.0
acl NETZ src 10.0.0.0/24

acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl FTP proto FTP
acl SSL_ports port 443 563
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 777 # multiling http

acl CONNECT method CONNECT

Abschnitt Authentifizierung
Code:
#####
# Authentication
#####
auth_param basic program /usr/local/libexec/squid/ncsa_auth /etc/proxy_users
auth_param basic children 5
auth_param basic realm ***Internetzugang***
auth_param basic credentialsttl 3 hours
acl auth proxy_auth REQUIRED

Hier ist hauptsächlich die erste Zeile interessant; sie beschreibt, auf welche Art und Weise der Auth durchgeführt werden soll-in unserem Fall über htpasswd NCSA Datei. Des Weiteren enthält sie die Pfadangabe zu jener Authdatei


Abschnitt Delaypools
Code:
#####
# ACLs for DelayPools
#####
acl admin       proxy_auth      admin
acl users-slow  proxy_auth    user1 user2



#####
# DelayPools  
#####
delay_pools 2

# users-slow (max. 32kByte/s)
delay_class 1 1
delay_access 1 allow users-slow
delay_access 1 deny all
delay_parameters 1 32000/32000 

# admin-fast (max. 96kByte/s)
delay_class 2 1
delay_access 2 allow admin
delay_access 2 deny all
delay_parameters 2 96000/96000

Im ersten Unterabschnitt dieses Abschnitts ;-) definieren wir zwei verschiedene Benutzergruppen (schellen Internetzugang und langsamen) mit den Benutzernamen (aus unserer "proxy_users" Datei), welche zu welcher Gruppe gehören.

Im zweiten Unterabschnitt ist der eigentliche Delay definiert.... Um bspw. den User nicht 32kB/s, sondern "nur" 16kB/s, muss anstatt "32000/32000" in diesem Falle "16000/16000" eingetragen werden.

Mehr zu den Einstellungsmöglichkeiten dieser Section findest du -hier-

Abschnitt Access
Code:
#####
# Access
#####
http_access allow auth
always_direct allow FTP
http_access deny all

-03- Forwarding beim Paketfilter
Zwar könnten wir unseren Squid mittels
Code:
# squid
schon testen (und er sollte an dieser Stelle auch schon brav seine Dienste verrichten) jedoch wäre es für den User noch immer möglich, nicht über den Squid, sondern direkt ins Internet zu gelangen (in dem er einfach keinen Proxy einstellt...).

Auf Grund dessen sagen wir nun unserem Paketfilter (in meinem Falle ist es "pf") er möge bitte allen Port 80 Traffic (also http) an unseren Squid weiterleiten, welcher auf Port 8080 fleißig wartet.

Im Fall von pf genügt dazu folgender Eintrag in der "pf.conf":
Code:
rdr on $Int proto tcp from any to any port 80 -> $RouterIP port 8080
..wobei "$Int" die Bezeichnung deiner LAN-Netzwerkkarte und "$RouterIP" die lokale IP deines Servers ist.

Wenn nun ein User versucht, den Proxy zu umgehen, wird er eine Fehlermeldung erhalten und er ist dazu gezwungen, über den Tintenfisch zu gehen :-)



Ich hoffe, dass diese Howto vielleicht einigen Leuten hilfreich gewesen ist und freue mich über eventuell aufkommende Kritik! (auch gerne Hinweise auf Unvollständigkeit und / oder Rechtschreibfehler)
:-)


PS.: Falls Interesse besteht, kann ich dieses Howto gerne um den Punkt der Passwortänderung durch den User selbst erweitern...

PPS.: Könnte bitte Saintjoe oder ein Mod. den Titel des Threads in "Squid: Erzwungene Authtentifizierung und Bandbreitenlimitierung (Delaypools)" ändern??? -Danke! :-)
 
Zuletzt bearbeitet:
Zurück
Oben