witam. przesylam info dla korzystajacych ze skryptu lms-makemacs (lms w wersji 1.9.8 Idos).
odpalilem go sobie w preroutingu, prawie na samym poczatku drogi pakietu, za pomoca polecen:
lms-makemacs -q /usr/sbin/iptables -t nat -N MACS > /dev/null /usr/sbin/iptables -t nat -I PREROUTING -j MACS > /dev/null /etc/rc.d/rc.macs > /dev/null
efekt jak na rysunku: http://img528.imageshack.us/img528/8125/macsyi1.jpg
dziala poprawnie, gdy cos nie gra z macami/ip, to juz na samym poczatku user jest blokowany. niestety pojawil sie problem. domyslnie generowane przez srypt regulki iptables nie uwzgledniaja interfejsu wejsciowego (opcja -i dla iptables), co owocuje brakiem dostepu z poziomu interfejsu zewnetrznego. wiadomo, ze nikt nie bedzie wpisywal wszystkich mozliwych miejsc, z ktorych moze sie polaczyc z zewnatrz serwerem i macow komputerow, wiec zmodyfikowalem lekko skrypt aby, bez zbednego dlubania, wyciagal z bazy interfejs lokalny (wartosc 'interface' z tabeli 'networks') i zawieral go w generowanych regulkach, tak by brane byly pod uwage powiazania mac/ip jedynie dla userow z sieci lokalnej. moze sie komus przyda, ponizej patch:
--- lms-makemacs-org 2007-10-08 17:05:07.000000000 +0200 +++ lms-makemacs 2007-10-08 17:08:57.000000000 +0200 @@ -238,6 +238,17 @@
$dbq->finish();
+$dbq = $dbase->prepare("SELECT interface FROM networks"); +$dbq->execute(); +my $iface; + +while (my $row = $dbq->fetchrow_hashref()) +{ + $iface = $row->{'interface'}; +} + +$dbq->finish(); + foreach my $key (@networks) { my $dbq = $dbase->prepare("SELECT address, mask FROM networks WHERE name = UPPER('$key')"); @@ -267,7 +278,7 @@ { if(!$lock_na || ($accesslist{$ipaddr} eq 1)) { - print MACSFILE $ipbin." -t nat -A ".$chain." -s ".$ipaddr." -m mac --mac-source ".$maclist{$ipaddr}." -j RETURN\n"; + print MACSFILE $ipbin." -t nat -A ".$chain." -i ".$iface." -s ".$ipaddr." -m mac --mac-source ".$maclist{$ipaddr}." -j RETURN\n"; } } } @@ -277,9 +288,9 @@ }
$dbase->disconnect(); -print MACSFILE $ipbin." -t nat -A ".$chain." -p tcp --dport 80 -j DNAT --to ".$redir."\n"; -print MACSFILE $ipbin." -t nat -A ".$chain." -p tcp --dport 8080 -j DNAT --to ".$redir."\n"; -print MACSFILE $ipbin." -t nat -A ".$chain." -j DROP\n"; +print MACSFILE $ipbin." -t nat -A ".$chain." -i ".$iface." -p tcp --dport 80 -j DNAT --to ".$redir."\n"; +print MACSFILE $ipbin." -t nat -A ".$chain." -i ".$iface." -p tcp --dport 8080 -j DNAT --to ".$redir."\n"; +print MACSFILE $ipbin." -t nat -A ".$chain." -i ".$iface." -j DROP\n"; close(MACSFILE); chown $cuid, $cgid, $cfile or print "Warning! Unable to set owner of $cfile to $cuid.$cgid.\n"; chmod oct($cperm), $cfile or print "Warning! Unable to set permission $cperm to $cfile.\n";
_______________________________________________ lms mailing list lms@lists.lms.org.pl http://lists.lms.org.pl/mailman/listinfo/lms