#!/bin/sh # Script cte ze standartniho vstupu dvojice IP a MAC adresy, # pokud není MAC adresa uvedena povoluje se IP s jakoukoli MAC # adresou, naopak pokud je IP ALL je mac povoleno # jakekoli IP. Standartni pouziti je rc.maclist < rc.maclist.conf # kde soubor rc.maclist.conf obsahuje zminene dvojice # struktura zadavani (soubor rc.maclist.conf) je nasledujici # IP_adresa MAC_adresa komentar # IP_adresa - musi byt vzdy vyplnena a muze take nabyvat hodnoty ALL # MAC_adresa - musi byt vzdy vyplnena, pokud je uveden komentar, # muze take nabyvat hodnoty ALL, nebo nemusi byt uvedena vubec # komentar - muze byt libovolne dolouhy s mezerami # kazdy radek (koncici entrem) je jeden zaznam # priklad: # 192.168.1.7 00:00:e2:56:7a:67 # povolena IP s MAC # 192.168.1.8 ALL # IP s jakoukoli MAC # ALL 00:00:56:f7:af:00 # jakakoli IP s MAC # 192.168.1.11 # totez jako kdyby MAC byla ALL # ALL ALL # povoluje vse #V=1 IPTABLES="/usr/sbin/iptables" PRAVIDLO_N="$IPTABLES -N MACLIST" PRAVIDLO_D="$IPTABLES -F MACLIST" PRAVIDLO_F="$IPTABLES -F MACLIST" PRAVIDLO_L="$IPTABLES -L MACLIST" PRAVIDLO_M="$IPTABLES -A MACLIST -m mac --mac-source" PRAVIDLO_I="$IPTABLES -A MACLIST -s" PRAVIDLO_G="$IPTABLES -A MACLIST -j LOG --log-level notice --log-prefix Zakazana_MAC:" PRAVIDLO_E="$IPTABLES -A MACLIST -j DROP" PRAVIDLO_A="$IPTABLES -A MACLIST -j ACCEPT" #funkce pro definici pravidel table_midle() { if [ $V ]; then echo "$0: Definuji pravidla povolenych IP a MAC" fi # tady zacina cteni ze standartniho vstupu while read -u 0 IP MAC COMM do if [ ! $MAC ] || [ $MAC == "ALL" ]; then # neni zadana mac adresa if [ $IP == "ALL" ]; then $PRAVIDLO_A; else $PRAVIDLO_I $IP -j ACCEPT ; fi if [ $V ]; then echo $COMM; fi else if [ $IP == "ALL" ]; then # IP ja nastaveno na ALL $PRAVIDLO_M $MAC -j ACCEPT ; if [ $V ]; then echo $COMM; fi else # nastavuji dvojci IP a MAC $PRAVIDLO_M $MAC -s $IP -j ACCEPT ; if [ $V ]; then echo $COMM; fi fi fi done } table_create() { if [ $V ]; then echo "$0: Vytvarim tabulku"; fi $PRAVIDLO_N } table_end() { if [ $V ]; then echo "$0: Definuji logovani a zahazovani nepovolenych IP a MAC" fi $PRAVIDLO_G $PRAVIDLO_E } table_delete() { if [ $V ]; then echo "$0: Mazu tabulku" fi $PRAVIDLO_D } table_flush() { if [ $V ]; then echo "$0: Rusim tabulku" fi $PRAVIDLO_F } table_list() { if [ $V ]; then echo "$0: Vypisuji pravidla" fi $PRAVIDLO_L } case "$1" in 'create') table_create table_midle table_end ;; 'flush') table_flush ;; 'restart') table_delete table_midle table_end ;; 'list') table_list ;; *) echo "usage $0 create|flush|restart|list" esac