Freesco, NND, CDN, EOS http://forum.freesco.pl/ |
|
Ograniczenie netu przy za dużej liczbie połączeń http://forum.freesco.pl/viewtopic.php?f=35&t=10726 |
Strona 1 z 1 |
Autor: | Kipa [ sobota, 14 stycznia 2006, 17:19 ] |
Tytuł: | Ograniczenie netu przy za dużej liczbie połączeń |
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. |
Autor: | szmajso [ sobota, 28 stycznia 2006, 14:36 ] |
Tytuł: | Pytanie - Ograniczenie netu przy za dużej liczbie połączeń |
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. |
Autor: | aruro [ piątek, 22 grudnia 2006, 13:09 ] |
Tytuł: | |
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 |
Autor: | Kipa [ piątek, 22 grudnia 2006, 16:40 ] |
Tytuł: | |
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 |
Strona 1 z 1 | Strefa czasowa UTC+2godz. |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |