ITjes en datjes

Dingen uit dagelijks IT werk

Portal voor gratis internet op Debian

Voor een klant een internet portal opgezet zodat de campinggasten hier gebruik van kunnen maken. Een aantal bekendere oplossingen voldeden niet en uiteindelijk de portal gebaseerd op deze van Andy Beverly.

Voor de server is een HP Proliant Microserver gebruikt met extra netwerkkaart en remote access kaart.
Software is Debian Linux Squeeze met de volgende packages;
-squid 3.x
-nagios 3.x
-apache 2.x
-bind 9.x
-PHP5-xsl
-PHP5-xmlrpc
-conntrack
-iptraf
-dhcp3-server
-sudo
-ipset
-ipset-source
-module-assistant

Installatie is uitgevoerd volgens de beschrijving van Andy met uitzondering van het ADSL, firewall en sudo gedeelte. Er wordt alleen gebruik gemaakt van ethernet en filtering werkt op IP adres i.p.v. MAC adres. Verbindingen van de clients lopen over een bridge waarbij gebruik wordt gemaakt van MAC NAT zodat de registratie gebeurt met het MAC adres van de bridge i.p.v. de client.

In index.php wordt het stuk van controle mac adres gedeeltelijk vervangen;

global $mac;
global $ipadd;
$mac = shell_exec(“$arp -a “.$_SERVER[‘REMOTE_ADDR’]);
$ipadd = $_SERVER[‘REMOTE_ADDR’];
preg_match(‘/..:..:..:..:..:../’,$mac);
preg_match(‘/^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}/’,$ipadd,$matches);
@$mac = $matches[0];
@$ipadd = $matches[0];
//if (!isset($mac)) { exit; }
if (!isset($ipadd)) { exit; }

In users.php de wijziging voor iptables;

// validate any inputs
if (isset($_GET[‘ipadd’])) {
if (preg_match(‘/^([1-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(\.([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])){3}\*?$/’,$_GET[‘ipadd’])) {
$ipadd = $_GET[‘ipadd’];
} else {
echo “<font color=’red’>Invalid IP address</font><br><br>”;
}
}

$userfile = “/var/lib/users”;

if (isset($_GET[‘action’]) && $ipadd) {
$ipadd = trim($ipadd,’*’);
if ($_GET[‘action’]==”block”) {
$users = file_get_contents($userfile);
if (!strpos($users,”$ipadd*”)) {
$users = str_replace($ipadd,$ipadd.”*”,$users);
file_put_contents($userfile,$users,LOCK_EX);
}
exec(“sudo iptables -D internet -t nat -s $ipadd -j RETURN”);
} elseif ($_GET[‘action’]==”unblock”) {
$users = file_get_contents($userfile);
if (strpos($users,”$ipadd*”)) {
$users = str_replace($ipadd.”*”,$ipadd,$users);
file_put_contents($userfile,$users,LOCK_EX);
exec(“sudo iptables -I internet 1 -t nat -s $ipadd -j RETURN”);
}
} elseif ($_GET[‘action’]==”delete”) {
$users = file_get_contents($userfile);
$users = preg_replace(“/\n.+$ipadd.*\n/”,”\n”,$users);
file_put_contents($userfile,$users,LOCK_EX);
exec(“sudo iptables -D internet -t nat -s $ipadd -j RETURN”);
} else {
echo “<font color=’red’>Invalid action requested</font><br><br>”;
}
}

In dit bestand moeten de verwijzingen naar $field[3] voor registratie in bestand /var/lib/users ook vervangen worden naar $field[2].

De wijziging voor sudo;

www-data ALL = NOPASSWD: /sbin/iptables -I internet 1 -t nat -s [0-9]*.[0-9]*.[0-9]*.[0-9]* -j RETURN
www-data ALL = NOPASSWD: /sbin/iptables -D internet -t nat -s [0-9]*.[0-9]*.[0-9]*.[0-9]* -j RETURN
www-data ALL = NOPASSWD: /usr/bin/rmtrack [0-9]*.[0-9]*.[0-9]*.[0-9]*

In het firewallscript wordt voor elk wireless netwerk apparaat de toegang opengezet;

$IPTABLES -t filter -A INPUT -i eth0 -s xxx.xxx.xxx.xxx -j ACCEPT

En het vullen van de internet chain gebeurt nu via de volgende regel;

awk ‘BEGIN { FS=”\t”; } { if ($3 !~ /\*/) { system(“‘$IPTABLES’ -t nat -A internet -s “$3″ -j RETURN”); } }’ /var/lib/users

Met deze portal kan op een simpele manier (draadloze) internet toegang worden gegeven aan gasten van o.a. campings, hotels, supermarkten met grotere parkeerplaatsen, festival terrreinen, etc..
(iPad is eventueel een uitzondering aangezien deze geen DHCP adres over een MAC bridge kan opvragen ten tijde van schrijven van deze post)

Meer info over onze modulaire opzet van draadloze netwerken zodat deze makkelijker uit te breiden zijn is te vinden op http://www.mbitz.nl/aanleg_wifi.html.

MBitZ modulaire wifi mast

MBitZ modulaire wifi mast

Written by mnystrom

2011/06/22 bij 14:59

%d bloggers op de volgende wijze: