IPCop – Portalseite – HowTo

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

Kommentieren