Freesco, NND, CDN, EOS

http://www.freesco.pl
Dzisiaj jest czwartek, 28 marca 2024, 22:34

Strefa czasowa UTC+2godz.




Nowy temat Odpowiedz w temacie  [ Posty: 4 ] 
Autor Wiadomość
Post: sobota, 14 stycznia 2006, 17:19 
Offline
MODERATOR

Rejestracja: czwartek, 11 lipca 2002, 09:39
Posty: 822
Lokalizacja: Bytom
Napisałem taki skrypcik, aby dać szansę normalnym użytkownikom sieci na korzystanie z internetu.

Tym którzy nie liczą się z innymi, net jest czasowo blokowany, więc po pewnym czasie zmieniają ustawienia swoich programów P2P.

Na początek skrypcik który zamieni nazwę użykownika na IP wg hosts
nazwa: f_ip <nazwa_kompa>
: [/] [] ()
# by KIPA :-)
# Jakie IP ma dany komputer na podstawie hosts.
#
# zwraca IP

i=8   # --- nr linii od której zaliczać hosts
s=3   # --- ile pustych lini na stop

. /etc/system.cfg

f=$s  # --- liczenie pustych lini od nowa
while [ "$f" -gt 0 ]; do   # --- do odczytu tylu pustych ile podaje stop
  i=$(expr $i + 1)   # --- nastepna linia
  l=`sed -n $i,//l /etc/hosts`   # --- czytaj linie
  [ "$l" ] || f=$(expr $f - 1)   # --- zalicz pusta
  ii=0  # --- wyzeruj licznik wyrazow
  for w in $l; do   # --- wyrazy w linii
    ii=$(expr $ii + 1)  # --- kolejny wyraz
    case $ii in
    1)
      # --- nr IP
      [ "$w" = "#" ] && ii=3  # --- przeskocz komentarz
      if [ "$w" -eq "$NETWORK1" ]; then else ii=3; fi  # --- przeskocz inne IP
      komp=$w
      ;;
    2)
      # --- nazwa kompa
      if [ "$1" = $w ]; then
        echo $komp
      fi
      f=$s  # --- pełna wartosc stop, linia niepusta
      ;;
    esac
  done
done

Jak mamy IP możemy policzyć ile dane IP ma otwartych połączeń, jest to wrtość chwilowa, ale wg mnie wystarczy.
nazwa: f_ilesock <IP_kompa>
: [/] [] ()
# by KIPA :-)
# Ile dany komputer ma otwartych połączeń w sieci.
#
# zwraca ilosc_połączeń

if [ $1 ]; then
 ii=0
 l_komp=0
 for i in `ipfwadm -Mln`; do
   ii=$(expr $ii + 1)
   case $ii in
     3)
       if [ "$i" = $1 ]; then
         l_komp=$(expr $l_komp + 1)
       fi
       ii=0
       ;;
   esac
 done

 # wynik sprawdzenia $l_komp
 echo $l_komp
else
  echo "Brak IP lub nazwy komputera"
fi

No to przyda się test ile który komp pootwierał połączeń (produkt uboczny)
nazwa: f_lsock <nazwa_kompa>
: [/] [] ()
# --- Wyświetla na podstawie /etc/hosts
# czytanego linijka po linijce
# ilość otwartych połączeń w danej chwili
# by Kipa :-)

i=8   # --- nr linii od której zaliczać hosts
s=3   # --- ile pustych lini na stop

. /etc/system.cfg

f=$s  # --- liczenie pustych lini od nowa
while [ "$f" -gt 0 ]; do   # --- do odczytu tylu pustych ile podaje stop
  i=$(expr $i + 1)   # --- nastepna linia
  l=`sed -n $i,//l /etc/hosts`   # --- czytaj linie
  [ "$l" ] || f=$(expr $f - 1)   # --- zalicz pusta
  ii=0  # --- wyzeruj licznik wyrazow
  for w in $l; do   # --- wyrazy w linii
    ii=$(expr $ii + 1)  # --- kolejny wyraz
    case $ii in
    1)
      # --- nr IP
      [ "$w" = "#" ] && ii=3  # --- przeskocz komentarz
      if [ "$w" -eq "$NETWORK1" ]; then else ii=3; fi  # --- przeskocz inne IP
      ls=`f_ilesock $w`
      ;;
    2)
      # --- nazwa kompa
      komp=$w
      if [ "$ls" -gt 0 ]; then
        echo "$komp    - $ls połączeń"
      fi
      f=$s  # --- pełna wartosc stop, linia niepusta
      ;;
    esac
  done
done

Wracając do tematu coś co okresowo blokuje, czyli wywołuje funkcję f_blok <nazwa_kompa> [on] wraz z zapisem w logach.
nawa: fork f_tblok <nazwa_kompa> [<sek>]
: [/] [] ()
# by KIPA :-)
# czasowo blokuje kompa - ochrona sieci.
# parametr $1 - nazwa kompa
# parametr $2 - czas blokowania
# parametr $3 - ile połączeń

# ustalenie wartości domyślnych
if [ "$2" ]; then
  t_user=$2
else
  t_user=360
fi

if [ $1 ]; then
 T=`/bin/date +%X"  "%d.%m.%Y`

 echo "$T   $1       $3 połączeń     blok na $2 sek.">>/mnt/router/log/blok
 f_blok $1 on 2>/dev/null

 sleep $2
 f_blok $1 2>/dev/null

fi

Teraz okresowo uruchomiony taki skrypt i zadanie wykonane. Komputery do sprawdzenie wg listy w pliku /etc/kaza.komp gdzie 50 to limit połączeń. Można to wsadzić do parametru i wartość domyśłną, ale powyżej są takie przykłdy więc każdy może przerobić i nazwać procedurę. Ja to wsadziłem do swich rules więc ma taką postać.
: [/] [] ()
for komp in `cat /etc/kaza.komp`; do
  ip=`f_ip $komp`
  ls=`f_ilesock $ip`
  if [ "$ls" -gt 50 ]; then
    fork f_tblok $komp 360 $ls  2>/dev/null
  fi
done


Napisałem, bo kiedyś ktoś pytał, więc może się przyda.

_________________
Zawsze znajdzie się ktoś, kto nie wie, że tego się nie da zrobić - I to zrobi :!:

Obrazek Kipa
http://www.FreeSCO.w.pl


Na górę
 Wyświetl profil  
 
Post: sobota, 28 stycznia 2006, 14:36 
Offline

Rejestracja: sobota, 28 stycznia 2006, 14:24
Posty: 2
Lokalizacja: Łask
Witam

Wygląda na to, że Twoje rozwiązanie pomogłoby mi ograniczyć "pazernych" userów. Niestety moja wiedza na temat Freesco ogranicza się do instalacji gotowych pakietów.
Prosiłbym o instrukcję "krok po kroku" jak bałwan jestem podane skrypty (gdzie je umieścić, jakie nazwy nadać, jakie uprawnienie na plikach).
Ewentualnie gdybyś miał odrobinę czasu, czy nie mógłbyś zrobić z tego paczki.

Z góry dziękuje.


Na górę
 Wyświetl profil  
 
 Tytuł:
Post: piątek, 22 grudnia 2006, 13:09 
Offline

Rejestracja: środa, 15 września 2004, 14:42
Posty: 2
Witam

Chciałem zastosować to w praktyce ale utknąłem przy komendzie f_blok - której opisu nie mogę znaleźć w tym poście

pozdr
aruro


Na górę
 Wyświetl profil  
 
 Tytuł:
Post: piątek, 22 grudnia 2006, 16:40 
Offline
MODERATOR

Rejestracja: czwartek, 11 lipca 2002, 09:39
Posty: 822
Lokalizacja: Bytom
Ja stosuję przekirowanie z skrypt wygląda tak:
: [/] [] ()
#
# Przekierowanie pakietów z podanego IP na port servera 85.
# w celu wyświetlenia komunikatu.
#
blokuj() {
  if [ "$2" ];then
    par="-i"
  else
    par="-d"
  fi
  # $1 oznacza IP lub nazwe kompa
    ipfwadm -I $par accept -b -S $1 -P tcp -r 85  2>/dev/null
    # jeżeli ma być jakaś zewnętrzna sieć dostępna
    ipfwadm -I $par accept -b -S $1 -P tcp -D <adres_dostępnej_sieci>/<nr_maski>  2>/dev/null
}

if [ $1 ]; then
  blokuj $1
  if [ $2 ]; then
    blokuj $1 $2
    echo "Zablokowano $1 z komunikatem"
  else
    echo "Odblokowano $1 po ostrzeżeniu"
  fi
else
  echo "Brak IP lub nazwy komputera"
fi

_________________
Zawsze znajdzie się ktoś, kto nie wie, że tego się nie da zrobić - I to zrobi :!:

Obrazek Kipa
http://www.FreeSCO.w.pl


Na górę
 Wyświetl profil  
 
Wyświetl posty nie starsze niż:  Sortuj wg  
Nowy temat Odpowiedz w temacie  [ Posty: 4 ] 

Strefa czasowa UTC+2godz.


Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 27 gości


Nie możesz tworzyć nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Przejdź do:  
cron
Technologię dostarcza phpBB® Forum Software © phpBB Group
Hosting: Compus-Net
RobertKonik.pl