Hidden Bridge mit MySQL Unterstützung
Als nächstes will ich Dokumentiren wie wir die Bridge mit MySQL Unterstützung aufgesetzt haben.
Dafür wird die Datenbank benötigt die ich schon für den DHCP Server verwendet habe.
Wichtig! Für mein Script wird das "Comand Line Interface" für PHP, das man einfach über apt-get install php5_cli installieren kann, benötigt.
Dann das Eigentlich Script. Es wird nur ausgeführt wenn Änderungen an der Datenbank Tabelle vorgenommen wurden. Löscht dann zuerst alle Filterregeln und setzt alle wieder. Wenn der Datenbank Server einmal nicht erreichbar sein sollte bleibt alles so wie es ist.
/usr/local/sbin/brieg.php
#!/usr/bin/php5 <?php $server = "dhcp.server"; $user = ""; $password = ""; //DB $link = mysql_connect($server,$user,$password); $db_selected = mysql_select_db("address", $link); if (!$db_selected) { die ('Kann Adresse nicht benutzen : ' . mysql_error()); } $conf = "/usr/local/sbin/ebt.sh"; $EBTABLES="/sbin/ebtables"; $ETHFH = "eth3"; # <- Anpassen $ETHBA = "eth2"; # <- Anpassen $sql = "SELECT mac FROM mac WHERE UNIX_TIMESTAMP(zeit) >= ". fileatime($conf) .""; if(!file_exists($conf) || mysql_num_rows(mysql_query($sql,$link)) > 0) { $data = "#!/bin/bash $EBTABLES -F "; $sql = "SELECT mac,ip FROM mac WHERE status='activ' ORDER BY host"; $q = mysql_query($sql, $link) or die(mysql_error($link)); for(;$ds = mysql_fetch_array($q);) { if (preg_match("/[0-9a-f][0-9a-f][:][0-9a-f][0-9a-f][:][0-9a-f][0-9a-f][:][0-9a-f][0-9a-f][:][0-9a-f][0-9a-f][:][0-9a-f][0-9a-f]/i", $ds['mac'])) { $data .= " $EBTABLES -A FORWARD -p IPv4 -i $ETHBA -o $ETHFH -s ". $ds['mac'] ." --ip-src ". $ds['ip'] ." -j ACCEPT $EBTABLES -A FORWARD -p IPv4 -i $ETHFH -o $ETHBA -d ". $ds['mac'] ." --ip-dst ". $ds['ip'] ." -j ACCEPT $EBTABLES -A FORWARD -p ARP -i $ETHBA -o $ETHFH --arp-opcode 2 --arp-ip-src ". $ds['ip'] ." --arp-mac-src ". $ds['mac'] ." -j ACCEPT $EBTABLES -A FORWARD -p ARP -i $ETHFH -o $ETHBA --arp-opcode 2 --arp-ip-dst ". $ds['ip'] ." --arp-mac-dst ". $ds['mac'] ." -j ACCEPT "; } } $data .= " $EBTABLES -A FORWARD -p ARP -i $ETHBA -o $ETHFH --arp-opcode ! 2 -j ACCEPT $EBTABLES -A FORWARD -p ARP -i $ETHFH -o $ETHBA --arp-opcode ! 2 -j ACCEPT $EBTABLES -A FORWARD -p IPv4 -i $ETHBA -o $ETHFH -j DROP $EBTABLES -A FORWARD -p IPv4 -i $ETHFH -o $ETHBA -j DROP "; $date .= "exit 0 "; $fp = fopen($conf, 'w+'); fwrite($fp, $data); fclose($fp); system("chmod u+x " . $conf); system($conf); } system("exit 0"); ?>
Anschließend mit crontab -e einen Minütlichen Cronjob erstellen.
# m h dom mon dow command
* * * * * /usr/local/sbin/brieg.php