Als historischen record stelle ich hier mein Howto zur Proxy-Zwangsseite für den IPCop ein.
Da ich IpCop mitlerweile weder bei mir noch bei Kunden einsetze, kann ich leider keinen Support mehr für dieses Howto übernehmen.
Dennoch ist IPCop eine sehr ausgereifte und professionelle Firewall-Distribution mit einer hervorragenden Community, die ich jedem ans Herz legen kann.
Link zum deutschen IPCop Forum: klick
Originalbeitrag im IPCop-Forum: klick
Hinweis: Wer Rechtschreibfehler findet, darf sie behalten 🙂
——Begin Howto——
Proxy (Squid) Zwangs-/Portalseite – HowTo
Was is das ?
Bei dem ersten Verbinden mit dem unter Ipcop nutzbarem Squid-Proxy-Server
bekommt jeder Client eine definierte Startseite als Zwangsseite (nur HTTP).
Die Zwangsseite kann dann bei Bedarf zu verschiedenen Zeiten wieder erscheinen
(einstellbar von einmal in der Minute bis zu xx Jahren).
Wozu soll das gut sein ?
Die Seite kann sicher zu verschiedenen Zwecken genutzt werden, bei mir nutze ich sie um
die Richtlinien für die Nutzung meines frei zugänglichen Wlans vorzuschalten (rechtliche Absicherung).
Sie kann aber z.B. auch genutzt werden um den Usern die Seite einer Institution etc. in der sie sich
befinden anzuzeigen.
Wie funktioniert das ?
Jeder Client Rechner, welcher sich mit dem Cop verbindet verfügt ja über eine eigene Ip Adresse,
genau diese wird vom Proxy abgefragt und geschaut, ob diese IP in einem bestimmte Zeitraum schon mal
angemeldet war, ist dem nicht so, wird die Seite angezeigt. Danach kann wie gewohnt weiter gesurft werden.
Technisch:
Eine Squid ACL die auf ein Perl-Script verweisst prüft die Ip.
Ist von der Ip Heute schon gesurft worden, wird nichts vorgeschaltet.
Ist von der Ip Heute noch nicht gesurft worden, wird die Seite vorgeschaltet.
Bisher getestet mit:
Getestet wurde diese Lösung bisher unter den folgenden Konfigurationen
– IPCop 1.4.10
– IPCop 1.4.10 + AdvProxy 2.0 + URLFilter
– IPCop 1.4.12
– IPCop 1.4.13
– IPCop 1.4.13 + Copfilter + diverse Addons
– IPCop 1.4.13 + AdvProxy 2.0
– IPCop 1.4.15 + Adv. Proxy 2.1.1
– IPCop 1.4.15 + Copfilter + diverse Addons
BITTE teilt mir nach erfolgreicher Installation Eure IPCop-Version mit, damit ich das hier aufnehmen kann !
Es sollte allerdings mit jedem IP-Cop funktionieren, der einen Squid installiert hat.
Installation
————
Es gibt mehrere Möglichkeiten die Nachfolgende Installationsanleitung zu nutzen:
– Zwangsseite auf BLUE + GREEN
– Zwangsseite nur auf BLUE
– Zwangsseite nur auf GREEN
– Nutzung unter Advanced Proxy ( https://www.advproxy.net )
Ob der Proxy dafür transparent arbeitet oder nicht ist unerheblich.
Zwangsseite auf BLUE und GREEN:
——————————–
– Site anlegen (welche vorab angezeigt werden soll)
Z.B. hiermit: https://www.nvu-composer.de/
– ssh Verbindung zum Ipcop aufbauen
(vorher im Webinterface unter System -> SSH-Zugriff erlauben ! )
– Script erstellen:
vi /var/ipcop/proxy/session.pl
mit folgen Einträgen:
#!/usr/bin/perl $|=1; my %logged_in; while(<>) { if (!defined($logged_in{$_})) { $logged_in{$_} = 1; print "ERR\n"; } else { print "OK\n"; } }
– Script ausführbar machen:
chmod 755 /var/ipcop/proxy/session.pl
– Squids ACLs editieren:
vi /var/ipcop/proxy/acl
über „##Access to squid“ folgendes eintragen:
# Welcome-Page external_acl_type session ttl=-2 %SRC /var/ipcop/proxy/session.pl acl session external session https_access deny !session deny_info https://deineseite.de session
Wobei https://deineseite.de natürlich durch die anzuzeigende Seite ersetzt werden muss !
Diese Seite kann z.B. auf einem Webserver in der DMZ (ORANGE) laufen, kann aber auch
irgendwo im Internet z.B. bei einem der zahlreichen Freehoster etc.liegen.
– Eintrag in Crontab erstellen, damit die Rechner (Ips) jeden Tag neu die Seite angezeigt bekommen:
fcrontab -e
# Squid neu starten 01 0 * * * /usr/local/bin/restartsquid > /dev/null 2>&1
Hinweis:
Durch fcrontab -e wird die Crontab automatisch im Editor VI(M) geöffnet.
Um den Editor zu schliessen und alle Änderungen abzuspeichern:
Escape-Taste drücken dann :wq + Enter
Hier gibt es eine super Anleitung zu VI(M):
https://www.ipcop-forum.de/forum/viewtopic.php?t=4085
Dieser Eintrag ist natürlich individuell, sicher kann man das auch jede Stunde neu starten,
man sollte allerdings dabei beachten, das die User dann sicher schnell genervt sind.
Für mich reicht jedenfalls einmal am Tag. Wie man die Zeit einstellen kann steht z.B.
hier: https://www.newbie-net.de/anleitung_cron.html
Nun nur noch Squid neu starten:
restartsquid
……geschafft 🙂 !!!
Zwangsseite auf BLUE oder GREEN:
———————————
Einfach statt des angegebene Perl-Scripts (session.pl), dieses als session.pl speichern:
#!/usr/bin/perl use Socket; use IO::Socket; $|=1; my %networksettings; my %logged_in; &readhash("/var/ipcop/ethernet/settings", \%networksettings); while(<>) { if ( (!defined($logged_in{$_})) && (&IpInSubnet($_,$networksettings{'BLUE_NETADDRESS'},$networksettings{'BLUE_NETMASK'})) ) { $logged_in{$_} = 1; print "ERR\n"; } else { print "OK\n"; } } #---------------------------------------------------------------------- sub readhash { my $filename = $_[0]; my $hash = $_[1]; my ($var, $val); if (-e $filename) { open(FILE, $filename) or die "Unable to read file $filename"; while () { chop; ($var, $val) = split /=/, $_, 2; if ($var) { $val =~ s/^\'//g; $val =~ s/\'$//g; # Untaint variables read from hash $var =~ /([A-Za-z0-9_-]*)/; $var = $1; $val =~ /([\w\W]*)/; $val = $1; $hash->{$var} = $val; } } close FILE; } } #---------------------------------------------------------------------- sub IpInSubnet { my $ip = unpack('N', &Socket::inet_aton(shift)); my $start = unpack('N', &Socket::inet_aton(shift)); my $mask = unpack('N', &Socket::inet_aton(shift)); $start &= $mask; # base of subnet... my $end = $start + ~$mask; return (($ip >= $start) && ($ip <= $end)); } #----------------------------------------------------------------------
Es werden die Werte BLUE_NETADDRESS und BLUE_NETMASK aus /var/ipcop/ethernet/settings
abgefragt d.h. diese Lösung ist für die Zwangsseite auf BLUE eingestellt.
Soll die Zwangsseite auf GREEN genutzt werden, einfach BLUE_NETADDRESS und BLUE_NETMASK
durch GREEN_NETADDRESS und GREEN_NETMASK ersetzen.
Nutzung unter Advanced Proxy ( https://www.advproxy.net )
——————————————————–
Zwangsseite auf BLUE + GREEN Anleitung befolgen. Allerdings muss die ACL durch folgende ersetzt
und zur Datei /var/ipcop/proxy/advanced/acls/include.acl also nicht zu /var/ipcop/proxy/acl
hinzugefügt werden.
# Welcome-Page external_acl_type session ttl=-2 %SRC /var/ipcop/proxy/session.pl acl session external session acl erlaubt dst 192.168.2.10 https_access allow erlaubt https_access deny !session deny_info https://192.168.2.10/index.html session
Unter Advanced Proxy muss der Zugriff auf die Seite explizit erlaubt werden, folglich müssen die Zeilen
acl erlaubt dst 192.168.2.10
und
deny_info https://192.168.2.10/index.html session
an die zu nutzende Seite angepasst werden.
„acl erlaubt dst 192.168.2.10“ erlaubt eine Seite von 192.168.2.10.
„deny_info https://192.168.2.10/index.html“ session zeigt die Seite an,
wobei hier /index.html nur der Pfad direkt zur Seite ist, das könnte
z.B. auch /zwangsseite/index.html oder was auch immer sein, jenachdem
wo sich die Seite halt real befindet.
Diese Seite kann z.B. auf einem Webserver in der DMZ (ORANGE) laufen, kann aber auch
irgendwo im Internet z.B. bei einem der zahlreichen Freehoster etc.liegen.
Achtung!!!!
Damit die Änderungen im Advanced-Proxy wirsam werden
Advanced Proxy über das Webinterface „Speichern & Neustart“ neu starten !
Sonstiges zum Umgang mit Squid und zur Fehlerdiagnose:
——————————————————
Zeigt „live“ abgerufene Seiten und die Benutzer (beenden mit [Strg]+[c] :
tail -f /var/log/squid/access.log
Welcher Benutzer hat eine bestimmte Seiten abgerufen ? :
grep benutzername /var/squid/logs/squid/access.log
Wer hat die Seite wasauchimmer abgerufen ? :
grep wasauchimmer /var/squid/logs/squid/access.log
Alternativen zu dieser Lösung:
——————————
Eine Andere Lösung, die aber etwas Geld für neue Hardware voraussetzt ist ein Linksys WRT54G mit OpenWRT,
darauf kann man dann z.B. NoCatSplash ( https://nocat.net/ ) installieren.
Weitere Alternativen und Infos:
Freie WLan Vereinigung: https://www.freifunk.net/
Kommerzielle WLan Vereinigung: https://www.fon.com/
Portalsoftware: https://wiki.personaltelco.net/index.cgi/PortalSoftware
Eine Portalsoftware kann auf einem alten ausgedienten Rechner laufen und lässt zusätzlich eine
Authentifizierung der User zu (meist mit Accounting, Zugangszeitensteuerung etc.).
Zum Testen gibt es Live CD´s z.B. diese hier: https://www.publicip.net/
Vielen Dank an:
—————
marco s. (Ipcopforum)
Snirf (GEB)
vayu (GEB)
Lob, Kritk und Verbesserungsvorschläge für dieses Tutorial nehme ich gerne entgegen !!!
Der Passende Threat ist hier:
https://www.ipcop-forum.de/forum/viewtopic.php?t=12744&start=0
Hier hat jemand das Ganze wesentlich verfeinert und mit M0n0wall umgesetzt.
https://www.administrator.de/wissen/wlan-oder-lan-gastnetz-einrichten-mit-einem-captive-portal-hotspot-funktion-91413.html