Użytkownik pegass napisał:
mam taki problem do blokowania ludzi czasowego blokowania docelowo ma byc dostepny w lms chce zrobic, ze np gosc ma net od 18 do 20 w pozostale godziny nie ma blokada na zasadzie routingu
ma ktos pomysł
Gotowiec na 2 sposoby: niżej i w załączeniu. Skrypt z crona wykonywany jest co godzinę.
#!/bin/bash
# Zezwolenie na internet w okreslonych godzinach wybranym komputerom. # # --------------------------------------------------------- # Skrypt zezwala na dostep do internetu komputerom z katalogu # BANDIR w godzinach okreslonych indywidualnie dla każdego # oddzielnie w plkach 'options'. # Uwaga, w katalogu BANDIR powinny byc tylko podkatalogi # o nazwach IP a w nich pliki o nazwie "options" z przykladowa # zawartoscia jak nizej: # 16 20 # oznaczajacej dostep do Internetu w godzinach 16:00 - 20:00. # # Autorzy: Romuald Piotr Rabiega prabiega@wp.pl # Sylwester Ryszard Szady sszady@own.pl # # Zamo¶ć, 17.10.2004 r. # Wersja 1.0 # Licencja: GPL # --------------------------------------------------------
# --------- p o c z a t e k u s t a w i e ń ----------- # BANDIR - katalog w ktorym IP klientow tworza podkatalogi # zawierajace pliki "option" z okreslonym zakresm # godzin dostępu do internetu. BANDIR=/root/_SME/bannuser/ # zmiana_tablic - pomocnicza dla oszczedzenia miejsca w logu, # oraz dla zbednego restartowania sharped'a - jezeli # nie zmieniono zawarto¶ci tablic iptables zmiana_tablic=NIE # SYSTEMDATE - zmienna ustalana na podstawie daty systemowej, # zawiera tylko godzinę. SYSTEMDATE=`date +%H`
IPTABLES=/sbin/iptables log=/var/log/checker.log # --------- k o n i e c u s t a w i e ń ---------------
# BEGIN... # =============== o b s z a r f u n k c j i ============== # Modelowanie systuacji poczatkowej. czysc2() { $IPTABLES -F $IPTABLES -t nat -F # $IPTABLES -t mangle -F $IPTABLES -X $IPTABLES -A INPUT -s 10.1.1.50 -j ACCEPT $IPTABLES -A FORWARD -s 10.1.1.4 -j ACCEPT $IPTABLES -A INPUT -s 10.1.1.54 -j DROP $IPTABLES -A FORWARD -s 10.1.1.3 -j DROP }
czysc(){ # Czyscimy lancuchy
$IPTABLES -F $IPTABLES -t nat -F # $IPTABLES -t mangle -F $IPTABLES -X #$IPTABLES -Z }
# Wyszukiwanie w tablicach POZYCJI ż±danego komputera # klienckiego wraz z polityk± (DENY, ACCEPT) dla niego. # sprawdzaj_INPUT() { LANCUCH_INPUT=`$IPTABLES -L -n --line-number | awk -v kto=$BANNED ' { if ( $0 ~ "INPUT" ) { co_robic = "rob" } if ( $0 ~ "FORWARD" ) { co_robic = "nic" } if ( co_robic == "rob" && $5 == kto ) { print $1, $2 } }'` }
sprawdzaj_FORWARD() { LANCUCH_FORWARD=`$IPTABLES -L -n --line-number | awk -v kto=$BANNED '{ \ if ( $0 ~ "FORWARD" ) { co_robic = "rob" } if ( $0 ~ "OUTPUT" ) { co_robic = "nic" } if ( co_robic == "rob" && $5 == kto ) { print $1, $2 } }'` }
# # =============== przetwarzanie główne ============== # if [ ! -d $BANDIR ] then echo "110: Brak katalogu konfiguracyjnego" >> $log exit 1 else #czysc #czysc2 echo "================ Przed zabiegiem ===============" >> $log echo `date` `pwd` >> $log # echo "================================================" >> $log # $IPTABLES -L -n --line-numbers >> $log $IPTABLES -L -n --line-numbers >> /tmp/ip_old # echo "================================================" >> $log fi
for BANNED in `ls $BANDIR` do if [ -f $BANDIR$BANNED/options ] then file_name=$BANDIR$BANNED/options while read line do set $line echo "010: $SYSTEMDATE - internet od $1 - $2 dla IP= $BANNED" >> $log if [ $SYSTEMDATE -ge "$1" ] && [ $SYSTEMDATE -le "$2" ]; then # ---------------------------------- # Tutaj klient ma otrzymać internet. # ---------------------------------- sprawdzaj_INPUT if [ "$LANCUCH_INPUT" ]; then set $LANCUCH_INPUT if [ "$2" != "ACCEPT" ]; then echo "020: $1 $2 $BANNED jest w tablicy input " >> $log $IPTABLES -D INPUT $1 >> $log $IPTABLES -I INPUT -s $BANNED -j ACCEPT >> $log zmiana_tablic=TAK fi else $IPTABLES -I INPUT -s $BANNED -j ACCEPT zmiana_tablic=TAK fi sprawdzaj_FORWARD if [ "$LANCUCH_FORWARD" ]; then set $LANCUCH_FORWARD if [ "$2" != "ACCEPT" ]; then echo "030: $1 $2 - pozycja forward istnieje dla $BANNED" >> $log $IPTABLES -D FORWARD $1 >> $log $IPTABLES -I FORWARD -s $BANNED -j ACCEPT >> $log zmiana_tablic=TAK fi else $IPTABLES -I FORWARD -s $BANNED -j ACCEPT zmiana_tablic=TAK fi # Podsumowanie ZEZWALANIA. if [ "$zmiana_tablic" = "TAK" ]; then echo "040: Zezwolono na internet dla $BANNED" >> $log fi else # ------------------------------ # Tutaj klient ma być wył±czony. # ------------------------------ sprawdzaj_INPUT if [ "$LANCUCH_INPUT" ]; then set $LANCUCH_INPUT if [ "$2" != "DROP" ]; then echo "050: $1 $2 - pozycja istnieje w input dla $BANNED" >> $log $IPTABLES -D INPUT $1 >> $log $IPTABLES -I INPUT -s $BANNED -j DROP >> $log zmiana_tablic="TAK" fi else # Nie znaleziono regoly dla danego IP więc blokujemy echo "060: Odcinamy $BANNED w łańcuchu INPUT" >> $log $IPTABLES -I INPUT -s $BANNED -j DROP >> $log zmiana_tablic=TAK fi sprawdzaj_FORWARD if [ "$LANCUCH_FORWARD" ]; then set $LANCUCH_FORWARD if [ "$2" != "DROP" ]; then echo "070: $1 $2 - pozycja forward istnieje dla $BANNED" >> $log $IPTABLES -D FORWARD $1 >> $log $IPTABLES -I FORWARD -s $BANNED -j DROP >> $log zmiana_tablic=TAK fi else echo "080: Odcinamy $BANNED w łańcuchu FORWARD" >> $log $IPTABLES -I FORWARD -s $BANNED -j DROP >> $log fi # Podsumowanie BLOKOWANIA. if [ "$zmiana_tablic" = "TAK" ]; then echo "090: Zablokowano internet dla $BANNED" >> $log fi fi done < $file_name else echo "100: Zapomniales utworzyc pliku "options" dla $BANNED" >> $log # exit 1 fi done
# END... # zmiana_tablic=TAK # tutaj dla testów if [ "$zmiana_tablic" = "TAK" ]; then echo "------------------- Po zabiegu ---------------------" >> $log # $IPTABLES -L -n --line-numbers >> $log $IPTABLES -L -n --line-numbers >> /tmp/ip_new # diff /tmp/ip_old /tmp/ip_new >> $log
# Przeładowanie shaperd'a, tak: # /etc/init.d/shaperd restart # lub tak: exec /etc/init.d/shaperd restart
fi #EOF
Z poważaniem, Sylwek