logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Linux Intrux Trustix - Błąd zapisu ustawień w panelu FIQS i komunikat o pliku

tommy999 12 Lut 2007 15:25 6515 26
REKLAMA
  • #1 3559994
    tommy999
    Poziom 22  
    Posty: 703
    Pomógł: 11
    Ocena: 79
    Witam
    Zakupiłem kiedys na allegro gotowy system do podziału internetu o nazwie "intrux, trustix" Wszystko poszło gładko i idealnie dzieli internet tylko, ze od jakiegoś czasu jak wchodze w panel fiqs to moge nim sterować np zmieniac ustawienia ale jak je chce później zapisać to wyskakuje taki komunikat: "Edycja zablokowana do chwili automatycznej aktualizacji i restartu firewalla. Maksymalny czas oczekiwania: 1 minuta."
    Czekalem nawet dwa dni i nadal to samo. Caly czas komunikat wystepuje. Pomaga dopiero całkowity reset komputera. Troszke to uciążliwe gdyż serwer stoi w piewnicy i jak chce komus dac jakis limit to musze schodzic i go resetować. Kiedyś było dobrze zapisywał i wszystko śmigało.

    Jeszcze jedno w lagach jak i podczas uruchamiania systemu wyskakuje komunikat: "etc/firewall/rc.fiqs: line 289: /proc/net/ipt_account/my network: Nie ma takiego pliku." Sprawdzalem i plik jest, a on wywala blad ze go nie ma :(

    Prosze o pomoc...

    Pozdrawiam
  • REKLAMA
  • REKLAMA
  • #3 3560175
    tommy999
    Poziom 22  
    Posty: 703
    Pomógł: 11
    Ocena: 79
    Dziwne bo jak teraz chcialem znalezc ten plik zeby mu nadac prawa to nie ma juz katalogu ipt_account.

    Jak chce utworzyć katalog to pokazuje, że katalog juz istnieje... ;/
  • #4 3560260
    gothye
    Poziom 33  
    Posty: 2421
    Pomógł: 183
    Ocena: 60
    katalog pojawia sie podczas ładowania modułu :
    modprobe ipt_account
  • #5 3565771
    tommy999
    Poziom 22  
    Posty: 703
    Pomógł: 11
    Ocena: 79
    Zaladowalem ten modul. Pokazał sie katalog ipt_account ale tego pliku co ma byc w nim nie ma :( Nadalem prawa temu katalogowi chmod 777

    Probowalem resetowac kompa i nadal to samo :(

    Prosze o pomoc...
  • #6 3566108
    gothye
    Poziom 33  
    Posty: 2421
    Pomógł: 183
    Ocena: 60
    pokaz skrypt gdzie jest ta regułka ,
  • Pomocny post
    #7 3567862
    jaroslawk
    Poziom 21  
    Posty: 634
    Pomógł: 30
    Ocena: 13
    Witam,
    Przeczytaj opis uruchomienia FiQS.
    Dodaj do crone:
    0-59/1 * * * * /etc/firewall/extra/panel/panel_cfg_update &> /dev/null
    Skrypt panel_cfg_update aktualizuje wprowadzone dane.
    Błąd w/w może wiązać się z błędną konfiguracją firewall'a.
  • REKLAMA
  • #8 3571594
    tommy999
    Poziom 22  
    Posty: 703
    Pomógł: 11
    Ocena: 79
    Znalazlem przyczyne blędu. Tak jak pisał "jaroslawk" bląd byl w konfiguracji firewalla. W pliku main.cfg pomylilem wpis "statipta" byl taki: 192.168.0.0/50 a powinno byc 192.168.1.0/50... Probelm rozwiazany fiqs tez dziala i zapisuje bez problemu :D

    Mam jeszcze dwa pytanka a nie bede zakladac nowego tematu.

    1. Chodzi mi o to jak skonfigurować ProFTPD tez na owym systemie... Chcialbym utworzyc urzytkownikow ktorzy by mieli swoje katalogi jak to zrobić ???

    2. Czy da sie postawić na tym serwerku serwer proxy. Chodzi mi o taki ktory bedzie zapisywać strony na dysku serwera ???
    W konfiguracji firewalla znalazlem tylko mozliwość przekierowania do innego serwera a ja chcialbym postawic to na tym...

    Prosze o pomoc

    Pozdrawiam
  • #9 3574250
    jaroslawk
    Poziom 21  
    Posty: 634
    Pomógł: 30
    Ocena: 13
    Konfiguracje serwera ProFTPD na pewno znajdziesz gdzieś w Internecie.
    Jeżeli chodzi o Proxy do już większa sprawa. Oczywiście może być na tym samym komputerze. Nie podałeś informacji o sprzęcie, a do Proxy wykorzystuje się raczej szybkie maszyny, dużo pamięci RAM i oczywiście szybkie i duże dyski twarde.
  • #10 3574495
    gothye
    Poziom 33  
    Posty: 2421
    Pomógł: 183
    Ocena: 60
    konfiguraja Proftpd ogranicza sie do pliku proftpd.conf w katalogu /usr/local/etc ,pobierasz paczkę z forum , rozpakowujesz poleceniem :

    tar -xvzf proftpd-1.2.9.tar.gz

    potem :

    make && make install


    ServerName			"www.twojasiec.pl"
    ServerType			standalone
    DefaultServer			on
    
    Port				21
    Umask				022
    
    MaxInstances			30
    
    User				ftpdemon
    Group				ftp
      TimeoutIdle			300
      TimeoutStalled		300
      TimeoutLogin			60
      TimeoutNoTransfer		300
    #  ExtendedLog                   /hda5/proftpd.log
      MaxClients			5  ">>>za duzo ludzi jednoczesnie, sprobuj ponownie za 15min<<<"
      MaxClientsPerHost		1 ">>>z jednego hosta tylko jedno polaczenie<<<"
    
    
    #zalecany katalog z ktorego nie wyjdzie uzytkownik ftp`a
    
    DefaultRoot /home	
    
      <Directory />
       AllowOverwrite		on
      </Directory>
    
    
    <anonymous ~ftpdemon>
    
    #nie wymaga hasla:
      AnonRequirePassword           off
      User				fidzio
      Group				ftp
    
    #ilosc uzytkownikow na raz
    
      MaxClients			10
    
      DisplayLogin			welcome.msg
      DisplayFirstChdir		.message
    
    #nie pozwala zapisywac
    #  <limit WRITE>
    #  DenyAll
    #  </limit>
    
    #ukrywa katalogi
      <limit READ DIRS>
      IgnoreHidden on
      </limit>
     </anonymous>
    
    UseReverseDNS off
    IdentLookups off
    

    Aby ftp uruchamiał sie przy starcie systemu do pliku:
    etc/init.d/rc dopisz na samym dole:
    /usr/local/sbin/@in.proftpd

    proxy instalujesz paczką squid to konfoguracja dla transparent proxy (uzytkownik w sieci nawet niewie ze z niego kozysta ;) )

    #ilosc ramu:
    cache_mem 128 MB
    #maksymalny plik zapisywany na dysku:
    store_avg_object_size 256 kB
    cache_access_log /var/log/squid/access.log
    ###########################################################
    #tutaj podajesz siec
    acl all src 192.168.0.0/255.255.255.0
    
    # tutaj wpisujesz wszystkich userow
    acl user1 src 192.168.0.2
    acl user2 src 192.168.0.3
    acl user3 src 192.168.0.4
    acl user4 src 192.168.0.5
    acl user5 src 192.168.0.6
    acl user5 src 192.168.0.7
    acl user6 src 192.168.0.8
    
    acl localhost src 127.0.0.1/255.255.255.255
    acl SSL_ports port 443 563
    acl Safe_ports port 21 70 80 210 443 563 1025-65535
    acl CONNECT method CONNECT
    #########################################################
    #tutaj wpisujesz userow ktorym chodza strony www
    http_access allow user1
    http_access allow user2
    http_access allow user3
    http_access allow user4
    http_access allow user5
    http_access allow user6
    ######################################################
    icp_access allow all
    miss_access allow all
    cache_mgr admin@domena.pl
    http_port 3128
    httpd_accel_host virtual
    httpd_accel_port 80
    httpd_accel_with_proxy on
    httpd_accel_uses_host_header on
    error_directory /usr/share/squid/errors/Polish
    visible_hostname www.domena.pl
    log_fqdn on
    log_mime_hdrs on
    ident_lookup_access allow all localhost SSL_ports Safe_ports CONNECT
    
    #1000 oznacza 1000mb dysku dla squida
    cache_dir ufs /var/spool/squid 1000 16 256
    
    


    proxy sam sie uruchamia przy starcie ;)
    Załączniki:
    • proftpd-1.2.9.tar.gz (972.02 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #11 3602489
    tommy999
    Poziom 22  
    Posty: 703
    Pomógł: 11
    Ocena: 79
    Dzieki bardzo "gothye"
    Narazie wszystko chodzi, ale nie wiem czy ten komp nie bedzie za slaby jak na proxy. Jest to komputer klasy pentium II procek 400Mhz dysk 40gb pamiec 194...

    Mam jeszcze jedno pytanko. Chciałbym zrobić dokładne logi wszystkiego co sie dzieje... Chodzi mi o cos takiego zeby pokazywało kiedy, kto i w jaka strone wchodzil

    Jesli da sie takie cos zrobic to jak ???
  • #12 3603010
    gothye
    Poziom 33  
    Posty: 2421
    Pomógł: 183
    Ocena: 60
    z pamiecią 196mb proxy dla małej scieci powinno chodzic (np 48mb RAM dla proxy ) w zaleznosci ile jest teraz zajętego ,z skompilowanym jajkiem 2.6 system zajmuje 20mb :D

    o do logowania mozesz uzyć tcpdump + mysql ,lub ulog oto regółka dla sieci :
    iptables -t nat -A PREROUTING -i eth1 -m state --state NEW -j ULOG


    pliki z logiem są w katalogu /var/log/ulog/

    dzienny log z sieci 180 osób to ok 500mb po kompresji 45mb ;)
  • #13 3603504
    tommy999
    Poziom 22  
    Posty: 703
    Pomógł: 11
    Ocena: 79
    Po wpisaniu regółki "iptables -t nat -A PREROUTING -i eth1 -m state --state NEW -j ULOG" Nie pokazał się katalog ulog nawet po restarcie systemu. Sa tylko "ulog-acctd" który jest pusty i "ulog-acctd-backup" w którym niby są katalogi z datami ale tez puste...
  • #14 3603656
    gothye
    Poziom 33  
    Posty: 2421
    Pomógł: 183
    Ocena: 60
    zainstaluj paczke ulogd i sprawdz czy wkompilowana jest w kernel usługa ulog
  • #15 3603701
    tommy999
    Poziom 22  
    Posty: 703
    Pomógł: 11
    Ocena: 79
    Sorka ze zawracam tak glowe ale czy mozesz wyjasnic mi to lopatologicznie tzn jak mam zainstalowac i sprawdzic cy jest wkompilowana w kernel ???
  • #16 3603824
    gothye
    Poziom 33  
    Posty: 2421
    Pomógł: 183
    Ocena: 60
    sprawdz w zródłach kernela zy jest włączona usługa ulog
    zródłą są w katalogu /usr/src/ jesli nikt ich nieusunął
    -->>Device Drivers
    [*] Network packet filtering debugging
    [M] ULOG target support

    lub:
    modprobe ulog

    sciągasz ipt_ulog :
    wget http://ftp.netfilter.org/pub/ulogd/ulogd-0.96.tar.gz
    rozpakowujesz
    tar zxf ulogd-0.96.tar.gz
    potem
    ./configure
    make && make install

    ;)
  • #17 3604161
    tommy999
    Poziom 22  
    Posty: 703
    Pomógł: 11
    Ocena: 79
    W katalogu usr/src mam tylko jeden plik rc.fiqs Załączam go nizej :D
    Pobrałem plik, dałem polecenie "tar zxf ulogd-0.96.tar.gz" i nie wiem gdzie on sie rozpakował i co dalej... Mozesz mi wytlumaczyc gdzie mam wejsc i co mam zrobic jak juz sie pobral i rozpakował...

    #!/bin/bash
    # FiQs 3.2 (C) 2006 by INTRUX - All Rights Reserved
    
    # Katalog roboczy dla skryptu i plikow konfiguracyjnych - nie zmieniaj!
    WKDIR="/etc/firewall/"
    
    # Zaladowanie konfiguracji z pliku main.cfg
    if [ ! -f ${WKDIR}main.cfg ] ; then echo "Brak pliku konfiguracji main.cfg!" ; exit 1
    else source ${WKDIR}main.cfg ; fi
    
    # Okreslenie plikow lub zaladowanie wartosci z plikow konfiguracyjnych do zmiennych
    CLIENT_FILE="${WKDIR}client.cfg"
    IPF_FILE="${WKDIR}ipf.cfg"
    IPFAST_FILE=`cat ${WKDIR}ipfast.cfg | cut -d'#' -f1`
    ISERV_FILE="${WKDIR}iserv.cfg"
    LAN_FILE="${WKDIR}lan.cfg"
    MAC_FILE="${WKDIR}mac.cfg"
    MSERV_FILE="${WKDIR}mserv.cfg"
    NOPORT_FILE="${WKDIR}noport.cfg"
    P2PT_FILE="${WKDIR}p2pt.cfg"
    PFAST_FILE="${WKDIR}pfast.cfg"
    PORTF_FILE="${WKDIR}portf.cfg"
    
    # Wlaczenie debugowania (a wyjscie najlepiej skierowac do pliku)
    if [ "$SCRIPT_DEBUG" == "yes" ] ; then set -x ; fi
    
    # Zaladowanie alternatywnej konfiguracji klientow z pliku podanego jako 2 parametr startowy
    if [ ! "$2" == "" ] ; then CLIENT_FILE="${WKDIR}$2" ; fi
    
    # Gdy IP na interfejsie internetowym jest zmienne... odczytaj aktualne z interfejsu
    if [ "$NAT_ON" == "masq" ] ; then INTERNET_IP=`ifconfig $INTERNET_DEV | grep "inet addr:" | cut -d':' -f2 | cut -d' ' -f1` ; fi
    
    # Wyczyszczenie wszystkich tablic iptables
    clear_table() {
        iptables -F
        iptables -X
        iptables -Z
        iptables -F -t nat
        iptables -X -t nat
        iptables -F -t mangle
        iptables -X -t mangle
    }
    
    # Ustawienie domyslnej polityki firewalla na DROP
    set_drop() {
        iptables -P INPUT DROP
        iptables -P OUTPUT DROP
        iptables -P FORWARD DROP
    }
    
    # Ustawienie domyslnej polityki firewalla na ACCEPT
    set_accept() {
        iptables -P FORWARD ACCEPT
        iptables -P INPUT ACCEPT
        iptables -P OUTPUT ACCEPT
    }
    
    # Ruch na interfejsie lo
    set_lo(){
        iptables -A INPUT -i lo -j ACCEPT
        iptables -A OUTPUT -o lo -j ACCEPT
    }
    
    # Zaladowanie modulow kernela
    modules(){
        modprobe ip_nat_ftp
        modprobe ip_nat_irc
        modprobe ip_nat_h323
        modprobe ip_conntrack_ftp
        modprobe ip_conntrack_irc
        modprobe ip_conntrack_h323
        if [ "$PSDLOG" == "yes" ] ; then
    	modprobe ipt_recent
    	modprobe ipt_psd
        fi
    }
    
    # Ustawienia zabezpieczen
    kernel_secure() {
        echo "1" >/proc/sys/net/ipv4/conf/all/rp_filter
        echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route
        echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
        echo "0" > /proc/sys/net/ipv4/conf/all/accept_redirects
        echo "1" > /proc/sys/net/ipv4/tcp_syncookies
        echo "1" > /proc/sys/net/ipv4/icmp_ignore_bogus_error_responses
        echo "1" > /proc/sys/net/ipv4/tcp_timestamps
        echo "0" > /proc/sys/net/ipv4/conf/all/send_redirects
        #logowanie "dziwnych" pakietow (spoofed, source routed, redirects...)
        if [ "$MARTIAN_LOG" == "yes" ] ; then echo "1" > /proc/sys/net/ipv4/conf/all/log_martians
        else echo "0" > /proc/sys/net/ipv4/conf/all/log_martians ; fi
        #nie odpowiadamy na ping
        if [ "$PING_OFF" == "yes" ] ; then echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_all
        else echo "0" > /proc/sys/net/ipv4/icmp_echo_ignore_all ; fi
        #wlaczenie przekazywania pakietow przez router
        echo "1" > /proc/sys/net/ipv4/ip_forward
        #ustawienia limitow dla sesji tcp
        echo "30" > /proc/sys/net/ipv4/tcp_fin_timeout
        echo "2400" > /proc/sys/net/ipv4/tcp_keepalive_time
        echo "0" > /proc/sys/net/ipv4/tcp_window_scaling
        echo "0" > /proc/sys/net/ipv4/tcp_sack
        echo "36000" > /proc/sys/net/ipv4/ip_conntrack_max
        echo "20" > /proc/sys/net/ipv4/ipfrag_time
        echo "1024" > /proc/sys/net/ipv4/tcp_max_syn_backlog
        echo "86400" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_established
        echo "60" > /proc/sys/net/ipv4/netfilter/ip_conntrack_tcp_timeout_close_wait
    }
    
    set_secure() {
        #unclean
        if [ "$UNCLEAN_ON" == "yes" ] ; then
    	if [ "$UNCLEAN_LOG" == "yes" ] ; then
    	    iptables -A INPUT -m unclean -m limit --limit 1/h -j LOG --log-prefix "INPUT UNCL: "
    	fi
    	iptables -A INPUT -m unclean -j DROP
    	if [ "$UNCLEAN_LOG" == "yes" ] ; then
    	    iptables -A FORWARD -m unclean -m limit --limit 1/h -j LOG --log-prefix "FORWD UNCL: "
    	fi
    	iptables -A FORWARD -m unclean -j DROP
        fi
        #syn flood (ochrona przed atakiem DoS)
        if [ "$TCPSYN_ON" == "yes" ] ; then
    	iptables -N syn_flood
    	iptables -A syn_flood -m limit --limit ${TCPSYN_LIMIT_S}/s --limit-burst $TCPSYN_LIMIT_BURST -j RETURN
    	iptables -A syn_flood -m limit --limit ${TCPSYN_LIMIT_S}/s --limit-burst $TCPSYN_LIMIT_BURST -j LOG --log-prefix "SYN FLOOD: "
    	iptables -A syn_flood -j DROP
    	if [ "$TCPSYN_DEV" == "" ] ; then TCPSYN_DEV="$INTERNET_DEV" ; fi
    	for x in $TCPSYN_DEV ; do
    	    iptables -A INPUT -i $x -p tcp --syn -j syn_flood
    	done
        fi	
        #blokowanie dostepu z/do okreslonych adresow IP
        for x in $BADHOSTS ; do
    	iptables -A INPUT -s $x -j DROP ; iptables -A FORWARD -s $x -j DROP ; iptables -A OUTPUT -d $x -j DROP
        done
        #blokowanie portow dla polaczen internetowych klientow z LAN
        cat $NOPORT_FILE | grep -v "#" | sed -e '/^$/d' | awk '{ print $1, $2, $3 }' | while read PROTO IP PORT ; do
        if [ ! `echo $PORT | grep ,` == "" ] ; then
    	iptables -A FORWARD -p $PROTO -s $IP -d 0/0 -m multiport --dport $PORT -j DROP
    	iptables -A FORWARD -p $PROTO -s 0/0 -d $IP -m multiport --sport $PORT -j DROP
        else
    	iptables -A FORWARD -p $PROTO -s $IP -d 0/0 --dport $PORT -j DROP
    	iptables -A FORWARD -p $PROTO -s 0/0 -d $IP --sport $PORT -j DROP
        fi
        done
        #blokowanie polaczen internetowych klientow z LAN przy pomocy modulu string
        #NOSTRING_FILE="${WKDIR}nostring.cfg"
        #    cat $NOSTRING_FILE | grep -v "#" | sed -e '/^$/d' | awk '{ print $1, $2 }' | while read IP STRING ; do
        #	iptables -A FORWARD -s 0/0 -d $IP -m string --string "$STRING" -j DROP
        #	iptables -A FORWARD -s $IP -d 0/0 -m string --string "$STRING" -j DROP
        #    done
        #blokowanie ruchu pryw. klas adres., netbios i innych "smieci" na interfejsie internetowym
        NOSMBIP="10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 224.0.0.0/4 240.0.0.0/5 127.0.0.0/8"
        if [ "$NOSMB" == "yes" ] ; then
    	for x in $NOSMBIP ; do
    	    iptables -A INPUT -i $INTERNET_DEV -s $x -j DROP
    	    iptables -A OUTPUT -o $INTERNET_DEV -d $x -j DROP
    	    iptables -A FORWARD -i $INTERNET_DEV -s $x -j DROP
    	    iptables -A FORWARD -o $INTERNET_DEV -d $x -j DROP
    	done
        fi
        #blokowanie ruchu na portach netbios - interfejs internetowy (zapobieganie wirusom)
        BPORTS="135-tcp 137-tcp 138-tcp 139-tcp 445-tcp 137-udp 138-udp 139-udp"
        if [ "$BADPORTS" == "yes" ] ; then
    	for x in $BPORTS ; do PORT=`echo $x | cut -d'-' -f1` ; PROT=`echo $x | cut -d'-' -f2`
    	    iptables -A FORWARD -i $INTERNET_DEV -p $PROT --dport $PORT -j DROP
    	    iptables -A FORWARD -o $INTERNET_DEV -p $PROT --dport $PORT -j DROP
    	done
        fi
        #powiazanie IP z MAC-adresem karty sieciowej klienta w LAN
        if [ ! "$MAC_CHECK" == "" ] && [ ! "$MAC_CHECK" == "no" ] ; then
    	iptables -N mac_check
    	iptables -A mac_check -j LOG
    	iptables -A mac_check -j DROP
    	cat $MAC_FILE | grep -v "#" | sed -e '/^$/d' | awk '{ print $1, $2, $3 }' | while read IP MAC DEV ; do
    	iptables -I mac_check 1 -m mac --mac-source $MAC -s $IP -j RETURN
    	iptables -A FORWARD -i $DEV -s $IP -j mac_check
    	if [ "$MAC_CHECK" == "yes" ] ; then
    	    iptables -A INPUT -i $DEV -s $IP -j mac_check
    	fi
    	done
    	if [ ! "$MAC_CHECK_ALL_DEV" == "" ] && [ ! "$MAC_CHECK_ALL_DEV" == "no" ] ; then
    	    for m in $MAC_CHECK_ALL_DEV ; do
    		iptables -A FORWARD -i $m -j mac_check
    		if [ "$MAC_CHECK" == "yes" ] ; then
    	    	    iptables -A INPUT -i $m -j mac_check
    		fi
    	    done
    	fi
        fi
    }
    
    set_misc_mtu() {
        iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
        iptables -A INPUT -f -j DROP
        iptables -A INPUT -m state --state INVALID -j DROP
        
        iptables -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP
        iptables -A FORWARD -f -j DROP
        iptables -A FORWARD -m state --state INVALID -j DROP
        #MTU
        iptables -A OUTPUT -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
        iptables -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
    }
    
    # Ustawienia dla polaczen p2p
    set_p2p() {
        #wykorzystujac modul ipp2p blokujemy proby dzialalnosci p2p na portach...
        if [ ! "$P2P_NO_PORT" == "" ] ; then
    	for x in $P2P_NO_PORT ; do
    	    iptables -I PREROUTING -t mangle -p tcp --sport $x -m ipp2p --ipp2p -j DROP
    	    iptables -I PREROUTING -t mangle -p udp --sport $x -m ipp2p --ipp2p -j DROP
    	    iptables -I POSTROUTING -t mangle -p tcp --dport $x -m ipp2p --ipp2p -j DROP
    	    iptables -I POSTROUTING -t mangle -p udp --dport $x -m ipp2p --ipp2p -j DROP
    	done
        fi
        #blokowanie ruchu p2p dla okreslonych IP lub calej sieci (modul ipp2p i p2p)
        if [ ! "$P2P_DENY" == "" ] ; then
    	for x in $P2P_DENY ; do
    	    iptables -I PREROUTING -t mangle -s $x -m ipp2p --ipp2p -j DROP
    	    iptables -I PREROUTING -t mangle -s $x -m p2p --p2p all -j DROP
    	    iptables -I POSTROUTING -t mangle -s $x -m ipp2p --ipp2p -j DROP
    	    iptables -I POSTROUTING -t mangle -s $x -m p2p --p2p all -j DROP
    	    #blokowanie przy pomocy layer7
    	    if [ "$P2P_L7" == "yes" ] && [ ! "$P2P_L7_PROTO" == "" ] ; then
    		for z in $P2P_L7_PROTO ; do
    		    iptables -I PREROUTING -t mangle -s $x -m layer7 --l7proto $z -j DROP
    		    iptables -I POSTROUTING -t mangle -s $x -m layer7 --l7proto $z -j DROP
    		    iptables -A FORWARD -s $x -m layer7 --l7proto $z -j DROP
    		    iptables -A FORWARD -d $x -m layer7 --l7proto $z -j DROP
    		done
    	    fi
    	done
    	iptables -N p2p_block
    	iptables -A FORWARD -j p2p_block
    	for x in $P2P_DENY ; do
    	    iptables -A p2p_block -s $x -m ipp2p --ipp2p -j DROP
    	    iptables -A p2p_block -d $x -m ipp2p --ipp2p -j DROP
    	    iptables -A p2p_block -s $x -m p2p --p2p all -j DROP
    	    iptables -A p2p_block -d $x -m p2p --p2p all -j DROP
    	done
        fi
        #calkowite blokowanie p2p w okreslonych porach dnia (modul ipp2p i p2p)
        if [ "$P2P_DENY_TIME" == "yes" ] ; then iptables -N p2p_time ; iptables -A FORWARD -j p2p_time
    	cat $P2PT_FILE | grep -v "#" | sed -e '/^$/d' | awk '{ print $1, $2, $3, $4 }' | while read IP HSTART HSTOP DAYS ; do
    	iptables -A p2p_time -s $IP -m time --timestart $HSTART --timestop $HSTOP --days $DAYS -m ipp2p --ipp2p -j DROP
    	iptables -A p2p_time -d $IP -m time --timestart $HSTART --timestop $HSTOP --days $DAYS -m ipp2p --ipp2p -j DROP
    	iptables -A p2p_time -s $IP -m time --timestart $HSTART --timestop $HSTOP --days $DAYS -m p2p --p2p all -j DROP
    	iptables -A p2p_time -d $IP -m time --timestart $HSTART --timestop $HSTOP --days $DAYS -m p2p --p2p all -j DROP
    	done
        fi
    }
    
    # Ustawienia limitow transferu oraz logowania i statystyk
    limit_log() {
        #limity transferu - przy wspolpracy z ipt_account
        if [ ! "$STATIPTA" == "" ] && [ ! "$DL_LIMIT_UNIT" == "" ] && [ ! "$DL_LIMIT_UNIT" == "no" ] ; then
    	iptables -N quota_check ; iptables -N quota_tbl ; iptables -A FORWARD -j quota_tbl
    	cat $CLIENT_FILE | grep -v "#" | sed -e '/^$/d' | awk '{ print $1, $7 }' | while read CLIENT TLIMIT ; do
    	    if [ ! "$TLIMIT" == "0" ] ; then
    		if [ "$DL_LIMIT_UNIT" == "MB" ] ; then TLIMITB=$[$TLIMIT*1024*1024] ; fi
    		if [ "$DL_LIMIT_UNIT" == "GB" ] ; then TLIMITB=$[$TLIMIT*1024*1024*1024] ; fi
    		QUOTA="-m quota --quota $TLIMITB"
    		if [ -f ${WKDIR}.mynetwork.save ] ; then
    		    AFILE="${WKDIR}.mynetwork.save"
    		    BD=`grep -w "$CLIENT" $AFILE | awk '{ print $12 }'`
    		    if [ "$TLIMITB" -gt "$BD" ] ; then TLIMITB=$[$TLIMITB-$BD] ; QUOTA="-m quota --quota $TLIMITB"
    		    else QUOTA="0" ; fi
    		fi		    
    	    fi		
    	    if [ ! "$QUOTA" == "" ] && [ ! "$TLIMIT" == "0" ] ; then
    		if [ ! "$QUOTA" == "0" ] ; then
    		    iptables -A quota_check -s 0/0 -d $CLIENT $QUOTA -j RETURN
    		    iptables -A quota_check -s 0/0 -d $CLIENT -j DROP
    		    iptables -A quota_tbl -s 0/0 -d $CLIENT -j quota_check
        		else
    		    iptables -A quota_tbl -s 0/0 -d $CLIENT -j DROP
    		fi
    	    fi
    	done
        fi
        #logowanie do statystyk przy uzyciu ipt_account
        for x in $STATIPTA ; do iptables -N statistics
    	iptables -A statistics -m account --aaddr $x --aname mynetwork --ashort
    	iptables -I FORWARD -j statistics
        done
        #zaladowanie licznikow account
        if [ ! "$STATIPTA" == "" ] ; then
    	if [ -f ${WKDIR}.mynetwork.save ] ; then
    	    while read line ; do echo $line > /proc/net/ipt_account/mynetwork ; done < ${WKDIR}.mynetwork.save
    	fi
        fi
        #logowanie ruchu internetowego
        for x in $LOGS_IP ; do
    	iptables -A POSTROUTING -t nat -s $x -d 0/0 -j LOG --log-level info --log-prefix "IP NAT: " -m state --state NEW -m limit --limit 1/s
        done
        #ULOG
        if [ "$ULOG_ON" == "yes" ] ; then
    	iptables -A FORWARD -j ULOG --ulog-nlgroup 1 --ulog-cprange 48 --ulog-qthreshold 50 --ulog-prefix "FORWARD"
    	ulog-acctd &> /dev/null
        fi
        #zliczanie ruchu internetowego dla potrzeb lstat
        if [ "$COUNT" == "yes" ] ; then iptables -N net_count_dl ; iptables -A FORWARD -s 0/0 -j net_count_dl
    	iptables -N net_count_ul ; iptables -A FORWARD -d 0/0 -j net_count_ul
    	if [ ! -f ${WKDIR}clinat.cfg ] ; then CLIENT_FILE_C="$CLIENT_FILE" ; else CLIENT_FILE_C="${WKDIR}clinat.cfg" ; fi
    	cat $CLIENT_FILE_C | grep -v "#" | sed -e '/^$/d' | awk '{ print $1 }' | while read IP ; do
    	    iptables -A net_count_dl -d $IP -j RETURN
    	    iptables -A net_count_ul -s $IP -j RETURN
    	done
        fi
    }
    
    # Ustawienia dostepu do serwera przez SSH
    ssh_allow() {
    if [ ! "$SSH_LIST" == "" ] && [ ! "$SSH_LIST" == "no" ] ; then
        for x in $SSH_LIST ; do INT=`echo $x | cut -d'-' -f1` ; PORT=`echo $x | cut -d'-' -f2`
    	iptables -A INPUT -i $INT -p tcp --dport $PORT -m state --state NEW -m recent --set
    	iptables -A INPUT -i $INT -p tcp --dport $PORT -m state --state NEW -m recent --update --seconds 60 --hitcount $SSH_LIST_LIMIT_M -j DROP
    	iptables -A INPUT -i $INT -p tcp --dport $PORT -j ACCEPT
        done
    else
        iptables -A INPUT -p tcp --dport 22 -j ACCEPT
    fi
    }
    
    # Ruch wychodzacy
    output() {
        iptables -A OUTPUT -j ACCEPT
    }
    
    # Ustawienia dostepu do serwera
    server() {
        #dostep do serwera od strony LAN - dokladnie
        if [ "$LIMIT_LAN" == "yes" ] ; then
    	cat $LAN_FILE | grep -v "#" | sed -e '/^$/d' | awk '{ print $1, $2, $3, $4, $5 }' | while read PROTO PORT SRC DST INT ; do
    	if [ ! "$PORT" == "all" ] ; then PORT_IN="--dport $PORT"
    	else PORT_IN="" ; fi
    	if [ ! "$SRC" == "all" ] ; then IP_SRC="-s $SRC"
    	else IP_SRC="" ; fi
    	if [ ! "$DST" == "all" ] ; then IP_DST="-d $DST"
    	else IP_DST="" ; fi
    	if [ ! `echo $PORT | grep ,` == "" ] ; then
    	    iptables -A INPUT -i $INT -p $PROTO $IP_SRC -m multiport $PORT_IN $IP_DST -j ACCEPT
    	else
    	    iptables -A INPUT -i $INT -p $PROTO $IP_SRC $PORT_IN $IP_DST -j ACCEPT
    	fi
    	done
        else
    	#dostep do serwera od strony LAN - uproszczony
    	for x in $LAN_LIST ; do INT=`echo $x | cut -d'-' -f1` ; CL_IP=`echo $x | cut -d'-' -f2`
    	    iptables -A INPUT -i $INT -s $CL_IP -j ACCEPT
    	    iptables -A INPUT -i $INT -s 0.0.0.0 -d 255.255.255.255 -p udp --dport 67 -j ACCEPT
    	done
        fi
        #ustawienia forwardingu pomiedzy sieciami LAN
        for x in $LAN_FORWARD ; do LAN1=`echo $x | cut -d'-' -f1` ; LAN2=`echo $x | cut -d'-' -f2`
    	iptables -A FORWARD -s $LAN1 -d $LAN2 -j ACCEPT ; iptables -A FORWARD -s $LAN2 -d $LAN1 -j ACCEPT
        done
        #ustawienia dla polaczen od strony internetu (uslugi serwera)
        cat $ISERV_FILE | grep -v "#" | sed -e '/^$/d' | awk '{ print $1, $2, $3 }' | while read PROTO PORT IP ; do
        if [ ! "$PORT" == "all" ] ; then PORT_IN="--dport $PORT" ; else PORT_IN="" ; fi
        if [ ! "$IP" == "all" ] ; then IP_IN="-s $IP" ; else IP_IN="" ; fi
        if [ ! `echo $PORT | grep ,` == "" ] ; then
    	iptables -A INPUT -i $INTERNET_DEV -p $PROTO $IP_IN -m multiport $PORT_IN -j ACCEPT
        else
    	iptables -A INPUT -i $INTERNET_DEV -p $PROTO $IP_IN $PORT_IN -j ACCEPT
        fi
        done
        #udostepnianie portow (port-forwarding)
        cat $PORTF_FILE | grep -v "#" | sed -e '/^$/d' | awk '{ print $1, $2, $3, $4, $5 }' | while read PROTO PORT_IN LOCAL_IP PORT_OUT FROM ; do
        if [ ! "$FROM" == "all" ] ; then SRC="-s $FROM" ; else SRC="" ; fi
        iptables -A FORWARD -i $INTERNET_DEV -p $PROTO $SRC --dport $PORT_OUT -d $LOCAL_IP -j ACCEPT
        iptables -A PREROUTING -t nat -p $PROTO -d $INTERNET_IP --dport $PORT_IN -j DNAT --to $LOCAL_IP:$PORT_OUT
        if [ "$LOCAL_PORTF_ON" == "yes" ] ; then
    	iptables -A POSTROUTING -t nat -o $LOCAL_DEV -j SNAT --to $INTERNET_IP
    	iptables -A POSTROUTING -t nat -p $PROTO $SRC -d $LOCAL_SERV_IP --dport $PORT_IN -j SNAT --to $LOCAL_IP:$PORT_OUT
        fi
        done
        #miniserv/vh apache forwarding - informacje dla klientow w LAN
        cat $MSERV_FILE | grep -v "#" | sed -e '/^$/d' | awk '{ print $1, $2, $3 }' | while read IP CEL LIMIT ; do
        iptables -A PREROUTING -t nat -s $IP -p tcp --dport 80 -j DNAT --to-destination $CEL -m limit --limit ${LIMIT}/h --limit-burst 1
        done
        #udostepnianie IP zewn. dla klienta w LAN (wymaga takze utworzenia aliasu na interfejsie WAN)
        if [ "$IPF_ALIAS_ON" == "yes" ] ; then
    	INTERNET_MASK=`ip address show $INTERNET_DEV | grep "$INTERNET_IP" | awk '{ print $2 }' | cut -d'/' -f2`
    	INTERNET_BRD=`ip address show $INTERNET_DEV | grep "$INTERNET_IP" | awk '{ print $4 }'`
        fi
        cat $IPF_FILE | grep -v "#" | sed -e '/^$/d' | awk '{ print $1, $2, $3, $4 }' | while read EXT_IP LOCAL_IP PROTO CLIMIT ; do
        if [ ! "$PROTO" == "all" ] ; then PROT="-p $PROTO" ; else PROT="" ; fi
        if [ ! "$CLIMIT" == "0" ] ; then
    	iptables -A FORWARD -p tcp --syn -s $LOCAL_IP -m connlimit --connlimit-above $CLIMIT -j REJECT
    	iptables -A FORWARD -p tcp --syn -d $LOCAL_IP -m connlimit --connlimit-above $CLIMIT -j REJECT
        fi
        iptables -A FORWARD $PROT -s 0/0 -d $LOCAL_IP -j ACCEPT
        iptables -A FORWARD $PROT -s $LOCAL_IP -d 0/0 -j ACCEPT
        iptables -A PREROUTING -t nat $PROT -s 0/0 -d $EXT_IP -j DNAT --to $LOCAL_IP
        iptables -A POSTROUTING -t nat $PROT -s $LOCAL_IP -d 0/0 -j SNAT --to $EXT_IP
        if [ "$IPF_ALIAS_ON" == "yes" ] ; then
    	ip addr del ${EXT_IP}/${INTERNET_MASK} broadcast $INTERNET_BRD dev $INTERNET_DEV &> /dev/null
    	ip addr add ${EXT_IP}/${INTERNET_MASK} broadcast $INTERNET_BRD dev $INTERNET_DEV
        fi
        done
        #icmp, polaczenia powrotne nawiazane
        iptables -A INPUT -p icmp -s 0/0 -m limit --limit 2/s --limit-burst 4 -j ACCEPT
        iptables -A INPUT -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT
        iptables -A FORWARD -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT
    
        iptables -A INPUT -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
        iptables -A FORWARD -p tcp -m state --state ESTABLISHED,RELATED -j ACCEPT
        
        iptables -A INPUT -p udp -m state --state ESTABLISHED -j ACCEPT
        iptables -A FORWARD -p udp -m state --state ESTABLISHED -j ACCEPT
        #zalogowanie i zablokowanie (15 min.) skanowania portow (moduly psd i recent)
        if [ "$PSDLOG" == "yes" ] ; then iptables -N portscan
    	iptables -A portscan -m recent --name portscan-allow --rcheck -j RETURN
    	iptables -A portscan -m recent --name portscan --set -j LOG --log-prefix "PORTSCAN: " --log-tcp-sequence --log-tcp-options --log-ip-options
    	iptables -A portscan -m limit --limit 1/h -j LOG --log-level info --log-prefix "PORTSCAN DROP: "
    	iptables -A portscan -j DROP
    	iptables -A INPUT -m recent --name portscan --rcheck --seconds 900 -j DROP
    	iptables -A INPUT -m psd -j portscan
        fi
        #a dla pozostalych reject
        iptables -A INPUT -p tcp -i $INTERNET_DEV -j REJECT --reject-with tcp-reset
        iptables -A INPUT -p udp -i $INTERNET_DEV -j REJECT --reject-with icmp-port-unreachable
        #vpn gre forward
        if [ "$VPN_GRE_FORWARD" == "yes" ] ; then
    	iptables -A FORWARD -p gre -j ACCEPT
        else
    	if [ ! "$VPN_GRE_FORWARD" == "no" ] ; then
    	    for v in $VPN_GRE_FORWARD ; do
    		iptables -A FORWARD -p gre -s 0/0 -d $v -j ACCEPT
    		iptables -A FORWARD -p gre -s $v -d 0/0 -j ACCEPT
    	    done
    	fi
        fi
    }
    
    # Ustawienia przekierowan
    set_proxy() {
        #transparentne proxy
        if [ ! "$PROXY_SERV" == "" ] ; then	IPS=`echo $PROXY_SERV | cut -d'-' -f1` ; PORT=`echo $PROXY_SERV | cut -d'-' -f2`
    	if [ "$IPS" == "REDIRECT" ] ; then
    	    for x in $PROXY_CLIENT ; do CLIENT=`echo $x | cut -d'-' -f1`
    	    if [ ! "$LOCAL_PROXY_SERV_IP" == "" ] ; then
    		iptables -A PREROUTING -t nat -p tcp -s $CLIENT -d ! $LOCAL_PROXY_SERV_IP --dport 80 -j REDIRECT --to-port $PORT
    	    else
    		iptables -A PREROUTING -t nat -p tcp -s $CLIENT -d 0/0 --dport 80 -j REDIRECT --to-port $PORT
    	    fi
    	    done
    	else
        	    for x in $PROXY_CLIENT ; do CLIENT=`echo $x | cut -d'-' -f1` ; GATEWAY=`echo $x | cut -d'-' -f2`
    	    if [ ! "$LOCAL_PROXY_SERV_IP" == "" ] ; then
    		iptables -A PREROUTING -t nat -p tcp -s $CLIENT -d ! $LOCAL_PROXY_SERV_IP --dport 80 -j DNAT --to ${IPS}:${PORT}
    	    else
    		iptables -A PREROUTING -t nat -p tcp -s $CLIENT -d 0/0 --dport 80 -j DNAT --to ${IPS}:${PORT}
    	    fi
    	    iptables -A POSTROUTING -t nat -s $CLIENT -d $IPS -j SNAT --to $GATEWAY
    	    done
    	fi
        fi
        #zaawansowane przekierowania
        for x in $REDIRECT ; do
    	KTO=`echo $x | cut -d'-' -f1`
    	CO=`echo $x | cut -d'-' -f2`
    	GDZIE=`echo $x | cut -d'-' -f3`
    	PORT=`echo $x | cut -d'-' -f4`
    	PROTO=`echo $x | cut -d'-' -f5`
    	if [ "$PORT" == "all" ] ; then
    	    if [ "$GDZIE" == "REDIRECT" ] ; then CEL="-j REDIRECT"
    	    else CEL="-j DNAT --to ${GDZIE}" ; fi
    	    iptables -A PREROUTING -t nat -s $KTO -d $CO $CEL
    	else
    	    if [ "$GDZIE" == "REDIRECT" ] ; then CEL="-j REDIRECT --to-port $PORT"
    	    else CEL="-j DNAT --to ${GDZIE}:${PORT}" ; fi
    	    iptables -A PREROUTING -t nat -p $PROTO -s $KTO -d $CO --dport $PORT $CEL
    	fi
        done
    }
    
    # Ustawienia nat - udostepnianie internetu klientom w LAN
    set_nat() {
        if [ ! "$NAT_ON" == "no" ] && [ ! "$NAT_ON" == "" ] ; then
    	if [ ! -f ${WKDIR}clinat.cfg ] ; then CLIENT_FILE_C="$CLIENT_FILE" ; else CLIENT_FILE_C="${WKDIR}clinat.cfg" ; fi
    	#stale IP
    	if [ "$NAT_ON" == "yes" ] ; then
    	    cat $CLIENT_FILE_C | grep -v "#" | sed -e '/^$/d' | awk '{ print $1, $6, $8 }' | while read KTO CLIMIT ACL ; do
    	    if [ ! "$CLIMIT" == "0" ] ; then
    		iptables -A FORWARD -p tcp --syn -s $KTO -m connlimit --connlimit-above $CLIMIT -j REJECT
    	    fi
    	    if [ ! "$USER_ACL_ON" == "yes" ] ; then
    		iptables -A FORWARD -s $KTO -d 0/0 -j ACCEPT
    	    fi
    	    if [ "$USER_ACL_ON" == "yes" ] && [ "$ACL" == "0" ] ; then
    		iptables -A FORWARD -s $KTO -d 0/0 -j ACCEPT
    	    fi
    	    iptables -A POSTROUTING -t nat -s $KTO -o $INTERNET_DEV -d 0/0 -j SNAT --to $INTERNET_IP
    	    done
    	fi
    	#zmienne IP
    	if [ "$NAT_ON" == "masq" ] ; then
    	    cat $CLIENT_FILE_C | grep -v "#" | sed -e '/^$/d' | awk '{ print $1, $6, $8 }' | while read KTO CLIMIT ACL ; do
    	    if [ ! "$CLIMIT" == "0" ] ; then
    		iptables -A FORWARD -p tcp --syn -s $KTO -m connlimit --connlimit-above $CLIMIT -j REJECT
    	    fi
    	    if [ ! "$USER_ACL_ON" == "yes" ] ; then
    		iptables -A FORWARD -s $KTO -d 0/0 -j ACCEPT
    	    fi
    	    if [ "$USER_ACL_ON" == "yes" ] && [ "$ACL" == "0" ] ; then
    		iptables -A FORWARD -s $KTO -d 0/0 -j ACCEPT
    	    fi
    	    iptables -A POSTROUTING -t nat -s $KTO -o $INTERNET_DEV -d 0/0 -j MASQUERADE
    	    done
    	fi
        fi
    }
    
    # Ustawienia TTL
    set_ttl() {
        for x in $TTL ; do IP=`echo $x | cut -d'-' -f1` ; TTL=`echo $x | cut -d'-' -f2`
    	iptables -A POSTROUTING -t mangle -p ! icmp -d $IP -j TTL --ttl-set $TTL
    	iptables -A OUTPUT -t mangle -p ! icmp -d $IP -j TTL --ttl-set $TTL
    	iptables -A FORWARD -t mangle -p ! icmp -d $IP -j TTL --ttl-set $TTL
        done
    }
    
    # Ustawienia TOS
    set_tos() {
        #typ                             dec     hex
        #Minimalize-delay                16      0x10
        #Maximalize-throughput           8       0x08
        #Maxymalize-Reliability          4       0x04
        #Minimalize-cost                 2       0x02
        #Normal-service                  0       0x00
        iptables -A PREROUTING -t mangle -p tcp --dport 20 -j TOS --set-tos 0x08 #ftp
        iptables -A PREROUTING -t mangle -p tcp --dport 21 -j TOS --set-tos 0x10 #ftp
        iptables -A PREROUTING -t mangle -p tcp --dport 22 -j TOS --set-tos 0x10 #ssh
        iptables -A PREROUTING -t mangle -p tcp --dport 25 -j TOS --set-tos 0x10 #smtp
        iptables -A PREROUTING -t mangle -p tcp --dport 53 -j TOS --set-tos 0x10 #dns
        iptables -A PREROUTING -t mangle -p udp --dport 53 -j TOS --set-tos 0x10 #dns
        iptables -A PREROUTING -t mangle -p tcp --dport 80 -j TOS --set-tos 0x08 #http
        iptables -A OUTPUT -t mangle -p tcp --dport 20 -j TOS --set-tos 0x08 #ftp
        iptables -A OUTPUT -t mangle -p tcp --dport 21 -j TOS --set-tos 0x10 #ftp
        iptables -A OUTPUT -t mangle -p tcp --dport 22 -j TOS --set-tos 0x10 #ssh
        iptables -A OUTPUT -t mangle -p tcp --dport 25 -j TOS --set-tos 0x10 #smtp
        iptables -A OUTPUT -t mangle -p tcp --dport 53 -j TOS --set-tos 0x10 #dns
        iptables -A OUTPUT -t mangle -p udp --dport 53 -j TOS --set-tos 0x10 #dns
        iptables -A OUTPUT -t mangle -p tcp --dport 80 -j TOS --set-tos 0x08 #http	
    }
    
    # Ustawienia QoS IMQ
    mark_qos() {
        if [ "$QOS_ON" == "yes" ] ; then
    	#prawie wszystko do interfejsow IMQ
    	#download (sciaganie) - imq0
    	if [ ! "$NO_QOS_ROUTER" == "" ] ; then
    	    for x in $NO_QOS_ROUTER ; do
    		iptables -A PREROUTING -t mangle -i $INTERNET_DEV -s $x -d $INTERNET_IP -j RETURN
    	    done
    	    iptables -A PREROUTING -t mangle -i $INTERNET_DEV -j IMQ --todev 0
    	else
    	    iptables -A PREROUTING -t mangle -i $INTERNET_DEV -j IMQ --todev 0
    	fi
    	if [ "$LOCAL_PROXY_DL_ON" == "yes" ] ; then
    	    for x in $LOCAL_DEV_P ; do    
    		iptables -A OUTPUT -t mangle -o $x -p tcp --sport $LOCAL_PORT_PROXY -m connmark --mark 0 -m string --string 'X-Cache: MISS from ' -j CONNMARK --set-mark 0x7
    		iptables -A OUTPUT -t mangle -o $x -p tcp --sport $LOCAL_PORT_PROXY -j CONNMARK --restore-mark
    		iptables -A OUTPUT -t mangle -o $x -p tcp --sport $LOCAL_PORT_PROXY -m mark --mark 0x7 -j IMQ --todev 0
    	    done
    	fi
    	#upload (wysylanie) - imq1
    	if [ ! "$NO_QOS_ROUTER" == "" ] ; then
    	    for x in $NO_QOS_ROUTER ; do
    		iptables -A POSTROUTING -t mangle -o $INTERNET_DEV -s $INTERNET_IP -d $x -j RETURN
    	    done
    	    iptables -A POSTROUTING -t mangle -o $INTERNET_DEV -j IMQ --todev 1
    	else
    	    iptables -A POSTROUTING -t mangle -o $INTERNET_DEV -j IMQ --todev 1
    	fi
    	#oznaczenie ruchu icmp (ping) - do szybkiej kolejki fast
    	iptables -A PREROUTING -t mangle -p icmp -j MARK --set-mark 1
    	iptables -A PREROUTING -t mangle -p icmp -j RETURN
    	iptables -A POSTROUTING -t mangle -p icmp -j MARK --set-mark 1
    	iptables -A POSTROUTING -t mangle -p icmp -j RETURN
    	#oznaczenie wybranego ruchu - do szybkiej kolejki fast
    	cat $PFAST_FILE | grep -v "#" | sed -e '/^$/d' | awk '{ print $1, $2 }' | while read PROTO PORT ; do
    	if [ ! `echo $PORT | grep ,` == "" ] ; then
    	    iptables -A PREROUTING -t mangle -p $PROTO -m multiport --sport $PORT -j MARK --set-mark 1
    	    iptables -A PREROUTING -t mangle -p $PROTO -m multiport --sport $PORT -j RETURN
    	    iptables -A POSTROUTING -t mangle -p $PROTO -m multiport --dport $PORT -j MARK --set-mark 1
    	    iptables -A POSTROUTING -t mangle -p $PROTO -m multiport --dport $PORT -j RETURN
    	else
    	    iptables -A PREROUTING -t mangle -p $PROTO --sport $PORT -j MARK --set-mark 1
    	    iptables -A PREROUTING -t mangle -p $PROTO --sport $PORT -j RETURN
    	    iptables -A POSTROUTING -t mangle -p $PROTO --dport $PORT -j MARK --set-mark 1
    	    iptables -A POSTROUTING -t mangle -p $PROTO --dport $PORT -j RETURN
    	fi
    	done
    	#rozpoznanie przy pomocy layer7 - do szybkiej kolejki fast
    	if [ "$FAST_L7" == "yes" ] && [ ! "$FAST_L7_PROTO" == "" ] ; then
    	    for x in $FAST_L7_PROTO ; do
    		iptables -A PREROUTING -t mangle -m layer7 --l7proto $x -j MARK --set-mark 1
    		iptables -A POSTROUTING -t mangle -m layer7 --l7proto $x -j RETURN
    	    done
    	fi
    	#oznaczenie do szybkiej kolejki fast dla polaczen ze wskazanymi IP
    	for x in $IPFAST_FILE ; do
    	    iptables -A PREROUTING -t mangle -s $x -d 0/0 -j MARK --set-mark 1
    	    iptables -A PREROUTING -t mangle -s $x -d 0/0 -j RETURN
    	    iptables -A POSTROUTING -t mangle -s 0/0 -d $x -j MARK --set-mark 1
    	    iptables -A POSTROUTING -t mangle -s 0/0 -d $x -j RETURN
    	done
    	#oznaczenie ruchu p2p
    	if [ ! "$P2P_LIMIT" == "" ] ; then
    	    iptables -A PREROUTING -t mangle -j CONNMARK --restore-mark
    	    	if [ "$P2P_IPP2P_PMARK" == "all" ] || [ "$P2P_IPP2P_PMARK" == "" ] ; then
    		    iptables -A PREROUTING -t mangle -m ipp2p --ipp2p -j MARK --set-mark 0x62
    		fi
    	    	if [ "$P2P_IPP2P_PMARK" == "tcp" ] ; then
    		    iptables -A PREROUTING -t mangle -p tcp -m ipp2p --ipp2p -j MARK --set-mark 0x62
    		fi
    	    iptables -A PREROUTING -t mangle -m p2p --p2p all -j MARK --set-mark 0x62
    	    #rozpoznanie przy pomocy layer7
    	    if [ "$P2P_L7" == "yes" ] && [ ! "$P2P_L7_PROTO" == "" ] ; then
    		for x in $P2P_L7_PROTO ; do
    		    iptables -A PREROUTING -t mangle -m layer7 --l7proto $x -j MARK --set-mark 0x62
    		done
    	    fi
    	    iptables -A PREROUTING -t mangle -m mark --mark 0x62 -j CONNMARK --save-mark
    	    if [ "$P2P_IPP2P_PMARK" == "tcp" ] ; then
    		iptables -A PREROUTING -t mangle -p udp -m ipp2p --ipp2p -j MARK --set-mark 0x62
    	    fi
    	    iptables -A POSTROUTING -t mangle -m mark --mark 0x62 -j RETURN
    	fi
    	#oznaczenie ruchu serwera-routera
    	    iptables -A POSTROUTING -t mangle -s $INTERNET_IP -j MARK --set-mark 0x61
    	    iptables -A POSTROUTING -t mangle -s $INTERNET_IP -j RETURN
    	#oznaczenie klientow w LAN
    	#zamiana spacji na przecinek (dla multiport, gdy sa 2 kolejki)
    	if [ "$USER_CL" == "2" ] ; then PR1TP=`echo $PR1_TCPPORT | awk '{gsub(/ /, ","); print}'` ;  fi
    	if [ "$P2P_CS_ON" == "yes" ] ; then
    	    iptables -N p2p_cs_limit
    	    iptables -I FORWARD -m ipp2p --ipp2p -j p2p_cs_limit
    	    if [ "$P2P_L7" == "yes" ] && [ ! "$P2P_L7_PROTO" == "" ] && [ "$P2P_CS_L7_ON" == "yes" ] ; then
    		for x in $P2P_L7_PROTO ; do
    		    iptables -I FORWARD -m layer7 --l7proto $x -j p2p_cs_limit
    		done
    	    fi
    	fi
    	NR=65
    	cat $CLIENT_FILE | grep -v "#" | sed -e '/^$/d' | awk '{ print $1 }' | while read IP ; do
    	if [ "$P2P_CS_ON" == "yes" ] ; then
    	    iptables -A p2p_cs_limit -p tcp -s $IP -m connlimit --connlimit-above $P2P_C_LIMIT -j DROP
    	    iptables -A p2p_cs_limit -p tcp -d $IP -m limit --limit ${P2P_S_LIMIT}/s -j ACCEPT
    	fi
    	if [ "$USER_CL" == "2" ] ; then
    	    if [ "$CL_MPORT_ON" == "yes" ] ; then
    		iptables -A POSTROUTING -t mangle -p tcp -s $IP -m multiport --dport $PR1TP -j MARK --set-mark 0x${NR}1
    		iptables -A POSTROUTING -t mangle -p tcp -s $IP -m multiport --dport $PR1TP -j RETURN
    	    else
    	    	for x in $PR1_TCPPORT ; do
    	    	    iptables -A POSTROUTING -t mangle -p tcp -s $IP --dport $x -j MARK --set-mark 0x${NR}1
    	    	    iptables -A POSTROUTING -t mangle -p tcp -s $IP --dport $x -j RETURN
    	    	done	
    	    fi
    	    iptables -A POSTROUTING -t mangle -s $IP -d 0/0 -j MARK --set-mark 0x${NR}2
    	    iptables -A POSTROUTING -t mangle -s $IP -d 0/0 -j RETURN
    	else
    	    iptables -A POSTROUTING -t mangle -s $IP -d 0/0 -j MARK --set-mark 0x${NR}
    	    iptables -A POSTROUTING -t mangle -s $IP -d 0/0 -j RETURN
    	fi
    	NR=$[$NR+1]
    	done
        fi
    }
    
    # Funkcje QoS
    stop_qos() {
        tc qdisc del root dev imq1 &> /dev/null
        tc qdisc del root dev imq0 &> /dev/null
        ip link set imq0 down &> /dev/null
        ip link set imq1 down &> /dev/null
        rmmod imq &> /dev/null
        echo -e "Stop QoS ($QOS_ALG)"
    }
    start_qos() {
        if [ "$QOS_ON" == "yes" ] ; then
    	echo -e "Start QoS ($QOS_ALG)"
    	#skroty...
    	TQDISC="tc qdisc add dev"
    	TCLASS="tc class add dev"
    	TFILTR="tc filter add dev"
    	#zaladowanie modulow i podnoszenie interfejsow imq
    	modprobe imq numdevs=2 &> /dev/null
    	ip link set imq0 up &> /dev/null
    	ip link set imq1 up &> /dev/null
    
    	#obliczenie wartosci dla kolejki PR2
    	PR1="$PR1_P"
    	PR2=$[100-$PR1]
    
    	#liczenie wartosci dla klas
    	
    	#download
    	#download - obliczenie wartosci dla rate
    	DL_RATE_P=$[$DOWNLOAD*$RATE_P/100]
    	Q_DL_RATE_P=$[$DL_RATE_P*10/100]
    	#download - wartosc dla kolejki priorytetowej
    	DL_PRIO=`echo $QOS_PRIO | cut -d';' -f1`
    	Q_DL_PRIO=$[$DL_PRIO*10/100]
    	if [ "$Q_DL_PRIO" -le 1 ] ; then Q_DL_PRIO="1" ; fi
    	#download - wartosc dla szybkiej kolejki fast
    	DL_FAST=`echo $QOS_FAST | cut -d';' -f1`
    	Q_DL_FAST=$[$DL_FAST*10/100]
    	if [ "$Q_DL_FAST" -le 1 ] ; then Q_DL_FAST="1" ; fi
    	#download - wartosc rate dla kolejki normalnej
    	DL_NORM=$[$DL_RATE_P-$DL_FAST]
    	Q_DL_NORM=$[$DL_NORM*10/100]
    	if [ "$Q_DL_NORM" -le 1 ] ; then Q_DL_NORM="1" ; fi
    	#download - obliczenie wartosci kolejki normalnej zaleznie od wagi kolejki fast
    	if [ ! `echo $QOS_FAST | cut -d';' -f3` == "1" ] ; then
    	    DL_FAST_N=$DOWNLOAD ; DL_NORM_N=$DOWNLOAD
    	else
    	    DL_FAST_N=`echo $QOS_FAST | cut -d';' -f1`
    	    DL_NORM_N=$[$DOWNLOAD-$DL_FAST_N]
    	fi
    	#download - obliczenia pomocnicze dla kolejki fast (hfsc)
    	if [ "$DL_FAST" -ge "$[$DL_RATE_P/2]" ] ; then
    	    DL_FAST_M1=$[$DL_RATE_P*75/100]
    	else
    	    DL_FAST_M1=$[2*$DL_FAST*85/100]
    	fi
    	#download - wartosci ceil i rate dla ruchu routera
    	DL_ROUTER=`echo $QOS_ROUTER | cut -d';' -f1`
    	Q_DL_ROUTER=$[$DL_ROUTER*10/100]
    	if [ "$Q_DL_ROUTER" -le 1 ] ; then Q_DL_ROUTER="1" ; fi
    	if [ ! `echo $QOS_ROUTER | cut -d';' -f2` == "auto" ] ; then
    	    DL_ROUTER_N=`echo $QOS_ROUTER | cut -d';' -f2`
    	else
    	    DL_ROUTER_N=$DL_NORM_N
    	fi
    
    	#upload
    	#upload - obliczenie wartosci dla rate
    	UL_RATE_P=$[$UPLOAD*$RATE_P/100]
    	Q_UL_RATE_P=$[$UL_RATE_P*10/100]
    	#upload - wartosc dla kolejki priorytetowej
    	UL_PRIO=`echo $QOS_PRIO | cut -d';' -f2`
    	Q_UL_PRIO=$[$UL_PRIO*10/100]
    	if [ "$Q_UL_PRIO" -le 1 ] ; then Q_UL_PRIO="1" ; fi
    	#upload - wartosc dla szybkiej kolejki fast
    	UL_FAST=`echo $QOS_FAST | cut -d';' -f2`
    	Q_UL_FAST=$[$UL_FAST*10/100]
    	if [ "$Q_UL_FAST" -le 1 ] ; then Q_UL_FAST="1" ; fi
    	#upload - wartosc rate dla kolejki normalnej
    	UL_NORM=$[$UL_RATE_P-$UL_FAST]
    	Q_UL_NORM=$[$UL_NORM*10/100]
    	if [ "$Q_UL_NORM" -le 1 ] ; then Q_UL_NORM="1" ; fi
    	#upload - obliczenie wartosci kolejki normalnej zaleznie od wagi kolejki fast
    	if [ ! `echo $QOS_FAST | cut -d';' -f3` == "1" ] ; then
    	    UL_FAST_N=$UPLOAD ; UL_NORM_N=$UPLOAD
    	else
    	    UL_FAST_N=`echo $QOS_FAST | cut -d';' -f2`
    	    UL_NORM_N=$[$UPLOAD-$UL_FAST_N]
    	fi
    	#upload - obliczenia pomocnicze dla kolejki fast (hfsc)
    	if [ "$UL_FAST" -ge "$[$UL_RATE_P/2]" ] ; then
    	    UL_FAST_M1=$[$UL_RATE_P*75/100]
    	else
    	    UL_FAST_M1=$[2*$UL_FAST*85/100]
    	fi
    	#upload - wartosci ceil i rate dla ruchu routera
    	UL_ROUTER=`echo $QOS_ROUTER | cut -d';' -f3`
    	Q_UL_ROUTER=$[$UL_ROUTER*10/100]
    	if [ "$Q_UL_ROUTER" -le 1 ] ; then Q_UL_ROUTER="1" ; fi
    	if [ ! `echo $QOS_ROUTER | cut -d';' -f4` == "auto" ] ; then
    	    UL_ROUTER_N=`echo $QOS_ROUTER | cut -d';' -f4`
    	else
    	    UL_ROUTER_N=$UL_NORM_N
    	fi
    
    	#liczniki pomocnicze
    	LICZ_USER_DL=0 ; LICZ_USER_UL=0 ; LICZ_RATE_DL=0 ; LICZ_RATE_UL=0
    
    	#wartosci dla ruchu p2p
    	if [ ! "$P2P_LIMIT" == "" ] ; then
    	    DL_P2P=`echo $P2P_LIMIT | cut -d';' -f1`
    	    UL_P2P=`echo $P2P_LIMIT | cut -d';' -f2`
    	    LICZ_USER_DL=1 ; LICZ_USER_UL=1
    	fi
    
    	#obliczenia pomocnicze dla userow
    	rm -f ${WKDIR}.tmp &> /dev/null
    	cat $CLIENT_FILE | grep -v "#" | sed -e '/^$/d' | awk '{ print $2, $4 }' | while read CLD CLU ; do
    	echo "${CLD}-${CLU}" >> ${WKDIR}.tmp
    	done
    	TMPF=`cat ${WKDIR}.tmp`
    	for x in $TMPF ; do
    	    if [ ! `echo $x | cut -d'-' -f1` == "auto" ] ; then
    	    RU=`echo $x | cut -d'-' -f1` ; LICZ_RATE_DL=$[$LICZ_RATE_DL+$RU]
    	    else LICZ_USER_DL=$[$LICZ_USER_DL+1] ; fi
    	    if [ ! `echo $x | cut -d'-' -f2` == "auto" ] ; then
                RU=`echo $x | cut -d'-' -f2` ; LICZ_RATE_UL=$[$LICZ_RATE_UL+$RU]
    	    else LICZ_USER_UL=$[$LICZ_USER_UL+1] ; fi
    	done
    	rm -f ${WKDIR}.tmp &> /dev/null
    
    	#obliczenie wartosci rate dla klientow z auto
    	if [ ! "$LICZ_USER_DL" == "0" ] ; then
    	    DL_USER_RATE=$[($DL_NORM-$DL_PRIO-$DL_ROUTER-$LICZ_RATE_DL)/$LICZ_USER_DL]
    	    if [ "$DL_USER_RATE" -le 1 ] ; then DL_USER_RATE="1" ; Q_DL_USER_RATE="1"
    	    else
    		if [ "$DL_USER_RATE" -ge 20 ] ; then
    		Q_DL_USER_RATE=$[$DL_USER_RATE*10/100]
    		else Q_DL_USER_RATE="2"
    		fi
    	    fi
    	fi
    	if [ ! "$LICZ_USER_UL" == "0" ] ; then
    	    UL_USER_RATE=$[($UL_NORM-$UL_PRIO-$UL_ROUTER-$LICZ_RATE_UL)/$LICZ_USER_UL]
    	    if [ "$UL_USER_RATE" -le 1 ] ; then UL_USER_RATE="1" ; Q_UL_USER_RATE="1"
    	    else
    		if [ "$UL_USER_RATE" -ge 20 ] ; then
    		Q_UL_USER_RATE=$[$UL_USER_RATE*10/100]
    		else Q_UL_USER_RATE="2"
    		fi
    	    fi
    	fi
    
    	#info
    	if [ "$QOS_INFO" == "yes" ] ; then
    	    echo " LICZ_RATE_DL = $LICZ_RATE_DL LICZ_USER_DL = $LICZ_USER_DL"
    	    echo " LICZ_RATE_UL = $LICZ_RATE_UL LICZ_USER_UL = $LICZ_USER_UL"
    	    echo " DL_USER_RATE = $DL_USER_RATE UL_USER_RATE = $UL_USER_RATE"
    	    echo " DL_NORM = $DL_NORM DL_NORM_N = $DL_NORM_N"
    	    echo " UL_NORM = $UL_NORM UL_NORM_N = $UL_NORM_N"
    	fi
    	
    	#kolejki
    	#          1:
    	#          /\
    	#         /  \
    	#        /    \
    	#      1:2    1:6
    	#     fast     |
    	#              |------1:60 prio (dns,ack)
    	#              |
    	#              |------1:61 router
    	#              |
    	#              |------1:62 p2p (opcja) <-okresla zmienna P2P_LIMIT
    	#              |
    	#              |------1:65 klient 1
    	#              |       /\
    	#              |      /  \     (opcja) <-gdy zmienna USER_CL=2
    	#              |     /    \
    	#              |  1:651   1:652
    	#              |
    	#              |------1:66 klient 2
    	#              |       /\
    	#              |      /  \
    	#              |     /    \
    	#              |  1:661   1:662
    	#              |
    	#              |------1:67 klient 3
    	#              |       /\
    	#                             itd.
    
    	#interfejsy
    	DL_VDEV="imq0"
    	UL_VDEV="imq1"
    	#tworzenie kolejek - sciaganie (download), imq0
    	#korzen kolejek
    	if [ "$QOS_ALG" == "hfsc" ] ; then
    	    $TQDISC $DL_VDEV root handle 1: hfsc default 61
    	    $TCLASS $DL_VDEV parent 1:0 classid 1:1 hfsc ls m2 ${DL_RATE_P}kbit ul m2 ${DOWNLOAD}kbit
    	else
    	    $TQDISC $DL_VDEV root handle 1: htb
    	    $TCLASS $DL_VDEV parent 1:0 classid 1:1 htb rate ${DL_RATE_P}kbit ceil ${DOWNLOAD}kbit quantum $Q_DL_RATE_P
    	fi
    	#ruch fast
    	if [ "$QOS_ALG" == "hfsc" ] ; then
    	    $TCLASS $DL_VDEV parent 1:1 classid 1:2 hfsc rt m1 ${DL_FAST_M1}kbit d 1s m2 ${DL_FAST}kbit ls m2 ${DL_FAST}kbit ul m2 ${DL_FAST_N}kbit
    	else
    	    $TCLASS $DL_VDEV parent 1:1 classid 1:2 htb rate ${DL_FAST}kbit ceil ${DL_FAST_N}kbit prio 1 quantum $Q_DL_FAST burst 15k
    	fi
    	if [ "$QOS_METHOD" == "esfq" ] ; then
    	    $TQDISC $DL_VDEV parent 1:2 handle 2:0 esfq perturb 5 hash dst
    	else
    	    $TQDISC $DL_VDEV parent 1:2 handle 2:0 sfq perturb 5
    	fi
    	$TFILTR $DL_VDEV parent 1:0 prio 2 protocol ip handle 0x1 fw flowid 1:2
    	#ruch normalny (priorytetowy, routera, p2p i klientow)
    	if [ "$QOS_ALG" == "hfsc" ] ; then
    	    $TCLASS $DL_VDEV parent 1:1 classid 1:6 hfsc ls m2 ${DL_NORM}kbit ul m2 ${DL_NORM_N}kbit
    	else
    	    $TCLASS $DL_VDEV parent 1:1 classid 1:6 htb rate ${DL_NORM}kbit ceil ${DL_NORM_N}kbit quantum $Q_DL_NORM
    	fi
    	    #ruch priorytetowy
    	    if [ "$QOS_ALG" == "hfsc" ] ; then
    		$TCLASS $DL_VDEV parent 1:6 classid 1:60 hfsc ls m2 ${DL_PRIO}kbit ul m2 ${DL_NORM_N}kbit
    	    else
    		$TCLASS $DL_VDEV parent 1:6 classid 1:60 htb rate ${DL_PRIO}kbit ceil ${DL_NORM_N}kbit prio 2 quantum $Q_DL_PRIO burst 10k
    	    fi
    	    if [ "$QOS_METHOD" == "esfq" ] ; then
    		$TQDISC $DL_VDEV parent 1:60 handle 60:0 esfq perturb 5 hash dst
    	    else
    		$TQDISC $DL_VDEV parent 1:60 handle 60:0 sfq perturb 5
    	    fi
    		#dns
    	    $TFILTR $DL_VDEV parent 1:0 prio 3 protocol ip u32 match ip protocol 17 0xff match ip sport 53 0xffff flowid 1:60
    	    #ruch routera
    	    if [ "$QOS_ALG" == "hfsc" ] ; then
    		$TCLASS $DL_VDEV parent 1:6 classid 1:61 hfsc ls m2 ${DL_ROUTER}kbit ul m2 ${DL_ROUTER_N}kbit
    	    else
    		$TCLASS $DL_VDEV parent 1:6 classid 1:61 htb rate ${DL_ROUTER}kbit ceil ${DL_ROUTER_N}kbit prio 4 quantum $Q_DL_ROUTER
    	    fi
    	    if [ "$QOS_METHOD" == "esfq" ] ; then
    		$TQDISC $DL_VDEV parent 1:61 handle 61:0 esfq perturb 10 hash dst
    	    else
    		$TQDISC $DL_VDEV parent 1:61 handle 61:0 sfq perturb 10
    	    fi
    	    $TFILTR $DL_VDEV parent 1:0 prio 4 protocol ip u32 match ip dst $INTERNET_IP flowid 1:61
    	    #ruch p2p
    	    if [ ! "$P2P_LIMIT" == "" ] ; then
    		if [ "$QOS_ALG" == "hfsc" ] ; then
    		    $TCLASS $DL_VDEV parent 1:6 classid 1:62 hfsc ls m2 ${DL_USER_RATE}kbit ul m2 ${DL_P2P}kbit
    		else
    		    $TCLASS $DL_VDEV parent 1:6 classid 1:62 htb rate ${DL_USER_RATE}kbit ceil ${DL_P2P}kbit prio 8 quantum $Q_DL_USER_RATE
    		fi	
    		if [ "$QOS_METHOD" == "esfq" ] ; then
    		    $TQDISC $DL_VDEV parent 1:62 handle 62:0 esfq perturb 10 hash dst
    		else
    		    $TQDISC $DL_VDEV parent 1:62 handle 62:0 sfq perturb 10
    		fi
    		$TFILTR $DL_VDEV parent 1:0 prio 1 protocol ip handle 0x62 fw flowid 1:62
    	    fi
    	    #ruch klientow
    	    NR=65
    	    if [ "$QOS_INFO" == "yes" ] ; then echo "Download" ; fi
    		cat $CLIENT_FILE | grep -v "#" | sed -e '/^$/d' | awk '{ print $1, $2, $3 }' | while read IP CL_DLR CL_DLC ; do
    		DO_USER_RATE="$DL_USER_RATE"
    		DO_USER_CEIL="$DL_NORM_N"
    		if [ ! "$CL_DLR" == "auto" ] ; then DO_USER_RATE="$CL_DLR" ; fi
    		if [ ! "$CL_DLC" == "auto" ] ; then DO_USER_CEIL="$CL_DLC" ; fi
    		if [ "$DO_USER_RATE" -ge "$DO_USER_CEIL" ] ; then DO_USER_RATE="$DO_USER_CEIL" ; fi
    		R_PR1="1" ; R_PR2="1"
    		if [ ! "$DO_USER_RATE" == "1" ] ; then R_PR1=$[$DO_USER_RATE*$PR1/100] ; fi
    		if [ ! "$DO_USER_RATE" == "1" ] ; then R_PR2=$[$DO_USER_RATE*$PR2/100] ; fi
    		if [ "$R_PR1" -le 1 ] ; then R_PR1="1" ; fi
    		if [ "$R_PR2" -le 1 ] ; then R_PR2="1" ; fi
    		Q_DO_USER_RATE=$[$DO_USER_RATE*10/100]
    		if [ "$Q_DO_USER_RATE" -le 1 ] ; then Q_DO_USER_RATE="1" ; fi
    		#info
    		if [ "$QOS_INFO" == "yes" ] ; then
    		    if [ "$USER_CL" == "2" ] ; then
    			echo " MARK = $NR IP = $IP DL_RATE = ${DO_USER_RATE}kbit (${R_PR1}:${R_PR2}) DL_CEIL = ${DO_USER_CEIL}kbit"
    		    else
    			echo " MARK = $NR IP = $IP DL_RATE = ${DO_USER_RATE}kbit DL_CEIL = ${DO_USER_CEIL}kbit"
    		    fi
    		fi
    		if [ "$QOS_ALG" == "hfsc" ] ; then
    		    $TCLASS $DL_VDEV parent 1:6 classid 1:${NR} hfsc ls m2 ${DO_USER_RATE}kbit ul m2 ${DO_USER_CEIL}kbit
    		    if [ "$USER_CL" == "2" ] ; then
    			$TCLASS $DL_VDEV parent 1:${NR} classid 1:${NR}1 hfsc ls m2 ${R_PR1}kbit ul m2 ${DO_USER_CEIL}kbit
    			$TCLASS $DL_VDEV parent 1:${NR} classid 1:${NR}2 hfsc ls m2 ${R_PR2}kbit ul m2 ${DO_USER_CEIL}kbit
    		    fi
    		else
        		    $TCLASS $DL_VDEV parent 1:6 classid 1:${NR} htb rate ${DO_USER_RATE}kbit ceil ${DO_USER_CEIL}kbit quantum $Q_DO_USER_RATE
    		    if [ "$USER_CL" == "2" ] ; then
        			$TCLASS $DL_VDEV parent 1:${NR} classid 1:${NR}1 htb rate ${R_PR1}kbit ceil ${DO_USER_CEIL}kbit prio 5 quantum $Q_DO_USER_RATE
        			$TCLASS $DL_VDEV parent 1:${NR} classid 1:${NR}2 htb rate ${R_PR2}kbit ceil ${DO_USER_CEIL}kbit prio 6 quantum $Q_DO_USER_RATE
    		    fi
    		fi
        		if [ "$QOS_USER_METHOD" == "esfq" ] ; then
    		    if [ "$USER_CL" == "2" ] ; then
        			$TQDISC $DL_VDEV parent 1:${NR}1 handle ${NR}1:0 esfq perturb 10 hash dst
        			$TQDISC $DL_VDEV parent 1:${NR}2 handle ${NR}2:0 esfq perturb 10 hash dst
    		    else
    		    	$TQDISC $DL_VDEV parent 1:${NR} handle ${NR}:0 esfq perturb 10 hash dst
    		    fi
        		else
    		    if [ "$USER_CL" == "2" ] ; then
        			$TQDISC $DL_VDEV parent 1:${NR}1 handle ${NR}1:0 sfq perturb 10
        			$TQDISC $DL_VDEV parent 1:${NR}2 handle ${NR}2:0 sfq perturb 10
    		    else
    			$TQDISC $DL_VDEV parent 1:${NR} handle ${NR}:0 sfq perturb 10
    		    fi
        		fi
    		if [ "$USER_CL" == "2" ] ; then
    		    for z in $PR1_TCPPORT ; do
    			$TFILTR $DL_VDEV parent 1:0 prio 5 protocol ip u32 match ip dst $IP match ip protocol 6 0xff match ip sport $z 0xffff flowid 1:${NR}1
    		    done		    
        		    $TFILTR $DL_VDEV parent 1:0 prio 6 protocol ip u32 match ip dst $IP flowid 1:${NR}2
        		else
    		    $TFILTR $DL_VDEV parent 1:0 prio 5 protocol ip u32 match ip dst $IP flowid 1:${NR}
    		fi
        		NR=$[$NR+1]
    		done
    
    	#tworzenie kolejek - wysylanie (upload), imq1
    	#korzen kolejek
    	if [ "$QOS_ALG" == "hfsc" ] ; then
    	    $TQDISC $UL_VDEV root handle 1: hfsc default 61
    	    $TCLASS $UL_VDEV parent 1:0 classid 1:1 hfsc ls m2 ${UL_RATE_P}kbit ul m2 ${UPLOAD}kbit
    	else
    	    $TQDISC $UL_VDEV root handle 1: htb
    	    $TCLASS $UL_VDEV parent 1:0 classid 1:1 htb rate ${UL_RATE_P}kbit ceil ${UPLOAD}kbit quantum $Q_UL_RATE_P
    	fi
    	#ruch fast
    	if [ "$QOS_ALG" == "hfsc" ] ; then
    	    $TCLASS $UL_VDEV parent 1:1 classid 1:2 hfsc rt m1 ${UL_FAST_M1}kbit d 1s m2 ${UL_FAST}kbit ls m2 ${UL_FAST}kbit ul m2 ${UL_FAST_N}kbit
    	else
    	    $TCLASS $UL_VDEV parent 1:1 classid 1:2 htb rate ${UL_FAST}kbit ceil ${UL_FAST_N}kbit prio 1 quantum $Q_UL_FAST burst 10k
    	fi
    	if [ "$QOS_METHOD" == "esfq" ] ; then
    	    $TQDISC $UL_VDEV parent 1:2 handle 2:0 esfq perturb 5 hash src
    	else
    	    $TQDISC $UL_VDEV parent 1:2 handle 2:0 sfq perturb 5
    	fi
    	$TFILTR $UL_VDEV parent 1:0 prio 2 protocol ip handle 0x1 fw flowid 1:2
    	#ruch normalny (priorytetowy, routera, p2p i klientow)
    	if [ "$QOS_ALG" == "hfsc" ] ; then
    	    $TCLASS $UL_VDEV parent 1:1 classid 1:6 hfsc ls m2 ${UL_NORM}kbit ul m2 ${UL_NORM_N}kbit
    	else
    	    $TCLASS $UL_VDEV parent 1:1 classid 1:6 htb rate ${UL_NORM}kbit ceil ${UL_NORM_N}kbit quantum $Q_UL_NORM
    	fi
    	    #ruch priorytetowy
    	    if [ "$QOS_ALG" == "hfsc" ] ; then
    		$TCLASS $UL_VDEV parent 1:6 classid 1:60 hfsc ls m2 ${UL_PRIO}kbit ul m2 ${UL_NORM_N}kbit
    	    else
    		$TCLASS $UL_VDEV parent 1:6 classid 1:60 htb rate ${UL_PRIO}kbit ceil ${UL_NORM_N}kbit prio 2 quantum $Q_UL_PRIO burst 5k
    	    fi
    	    if [ "$QOS_METHOD" == "esfq" ] ; then
    		$TQDISC $UL_VDEV parent 1:60 handle 60:0 esfq perturb 5 hash src
    	    else
    		$TQDISC $UL_VDEV parent 1:60 handle 60:0 sfq perturb 5
    	    fi
    		#dns
    	    $TFILTR $UL_VDEV parent 1:0 prio 3 protocol ip u32 match ip protocol 17 0xff match ip dport 53 0xffff flowid 1:60
    		#ack
    	    $TFILTR $UL_VDEV parent 1:0 prio 3 protocol ip u32 match ip protocol 6 0xff match u8 0x05 0x0f at 0 match u16 0x0000 0xffc0 at 2 match u8 0x10 0xff at 33 flowid 1:60
    	    #ruch routera
    	    if [ "$QOS_ALG" == "hfsc" ] ; then
    		$TCLASS $UL_VDEV parent 1:6 classid 1:61 hfsc ls m2 ${UL_ROUTER}kbit ul m2 ${UL_ROUTER_N}kbit
    	    else
    		$TCLASS $UL_VDEV parent 1:6 classid 1:61 htb rate ${UL_ROUTER}kbit ceil ${UL_ROUTER_N}kbit prio 4 quantum $Q_UL_ROUTER
    	    fi
    	    if [ "$QOS_METHOD" == "esfq" ] ; then
    		$TQDISC $UL_VDEV parent 1:61 handle 61:0 esfq perturb 10 hash src
    	    else
    		$TQDISC $UL_VDEV parent 1:61 handle 61:0 sfq perturb 10
    	    fi
    	    $TFILTR $UL_VDEV parent 1:0 prio 4 protocol ip handle 0x61 fw flowid 1:61
    	    #ruch p2p
    	    if [ ! "$P2P_LIMIT" == "" ] ; then
    		if [ "$QOS_ALG" == "hfsc" ] ; then
    		    $TCLASS $UL_VDEV parent 1:6 classid 1:62 hfsc ls m2 ${UL_USER_RATE}kbit ul m2 ${UL_P2P}kbit
    		else
    		    $TCLASS $UL_VDEV parent 1:6 classid 1:62 htb rate ${UL_USER_RATE}kbit ceil ${UL_P2P}kbit prio 8 quantum $Q_UL_USER_RATE
    		fi
    		if [ "$QOS_METHOD" == "esfq" ] ; then
    		    $TQDISC $UL_VDEV parent 1:62 handle 62:0 esfq perturb 10 hash src
    		else
    		    $TQDISC $UL_VDEV parent 1:62 handle 62:0 sfq perturb 10
    		fi
    		$TFILTR $UL_VDEV parent 1:0 prio 1 protocol ip handle 0x62 fw flowid 1:62
    	    fi
    	    #ruch klientow
    	    NR=65
    	    if [ "$QOS_INFO" == "yes" ] ; then echo "Upload" ; fi
    		cat $CLIENT_FILE | grep -v "#" | sed -e '/^$/d' | awk '{ print $4, $5 }' | while read CL_ULR CL_ULC ; do
    		UP_USER_RATE=$UL_USER_RATE
    		UP_USER_CEIL=$UL_NORM_N
    		if [ ! "$CL_ULR" == "auto" ] ; then UP_USER_RATE="$CL_ULR" ; fi
    		if [ ! "$CL_ULC" == "auto" ] ; then UP_USER_CEIL="$CL_ULC" ; fi
    		if [ "$UP_USER_RATE" -ge "$UP_USER_CEIL" ] ; then UP_USER_RATE="$UP_USER_CEIL" ; fi
    		R_PR1="1" ; R_PR2="1"
    		if [ ! "$UP_USER_RATE" == "1" ] ; then R_PR1=$[$UP_USER_RATE*$PR1/100] ; fi
    		if [ ! "$UP_USER_RATE" == "1" ] ; then R_PR2=$[$UP_USER_RATE*$PR2/100] ; fi
    		if [ "$R_PR1" -le 1 ] ; then R_PR1="1" ; fi
    		if [ "$R_PR2" -le 1 ] ; then R_PR2="1" ; fi
    		Q_UP_USER_RATE=$[$UP_USER_RATE*10/100]
    		if [ "$Q_UP_USER_RATE" -le 1 ] ; then Q_UP_USER_RATE="1" ; fi
    		#info
    		if [ "$QOS_INFO" == "yes" ] ; then
    		    if [ "$USER_CL" == "2" ] ; then
    			echo " MARK = $NR UL_RATE = ${UP_USER_RATE}kbit (${R_PR1}:${R_PR2}) UL_CEIL = ${UP_USER_CEIL}kbit"
    		    else
    			echo " MARK = $NR UL_RATE = ${UP_USER_RATE}kbit UL_CEIL = ${UP_USER_CEIL}kbit"
    		    fi
    		fi
    		if [ "$QOS_ALG" == "hfsc" ] ; then
    		    $TCLASS $UL_VDEV parent 1:6 classid 1:${NR} hfsc ls m2 ${UP_USER_RATE}kbit ul m2 ${UP_USER_CEIL}kbit
    		    if [ "$USER_CL" == "2" ] ; then
    			$TCLASS $UL_VDEV parent 1:${NR} classid 1:${NR}1 hfsc ls m2 ${R_PR1}kbit ul m2 ${UP_USER_CEIL}kbit
    			$TCLASS $UL_VDEV parent 1:${NR} classid 1:${NR}2 hfsc ls m2 ${R_PR2}kbit ul m2 ${UP_USER_CEIL}kbit
    		    fi
    		else
    		    $TCLASS $UL_VDEV parent 1:6 classid 1:${NR} htb rate ${UP_USER_RATE}kbit ceil ${UP_USER_CEIL}kbit quantum $Q_UP_USER_RATE
    		    if [ "$USER_CL" == "2" ] ; then
    			$TCLASS $UL_VDEV parent 1:${NR} classid 1:${NR}1 htb rate ${R_PR1}kbit ceil ${UP_USER_CEIL}kbit prio 5 quantum $Q_UP_USER_RATE
    			$TCLASS $UL_VDEV parent 1:${NR} classid 1:${NR}2 htb rate ${R_PR2}kbit ceil ${UP_USER_CEIL}kbit prio 6 quantum $Q_UP_USER_RATE
    		    fi
    		fi
        		if [ "$QOS_USER_METHOD" == "esfq" ] ; then
        		    if [ "$USER_CL" == "2" ] ; then
    			$TQDISC $UL_VDEV parent 1:${NR}1 handle ${NR}1:0 esfq perturb 10 hash src
        			$TQDISC $UL_VDEV parent 1:${NR}2 handle ${NR}2:0 esfq perturb 10 hash src
    		    else
    			$TQDISC $UL_VDEV parent 1:${NR} handle ${NR}:0 esfq perturb 10 hash src
    		    fi
        		else
    		    if [ "$USER_CL" == "2" ] ; then
        			$TQDISC $UL_VDEV parent 1:${NR}1 handle ${NR}1:0 sfq perturb 10
        			$TQDISC $UL_VDEV parent 1:${NR}2 handle ${NR}2:0 sfq perturb 10
    		    else
    			$TQDISC $UL_VDEV parent 1:${NR} handle ${NR}:0 sfq perturb 10
    		    fi
        		fi
    		if [ "$USER_CL" == "2" ] ; then
        		    $TFILTR $UL_VDEV parent 1:0 prio 5 protocol ip handle 0x${NR}1 fw flowid 1:${NR}1
        		    $TFILTR $UL_VDEV parent 1:0 prio 6 protocol ip handle 0x${NR}2 fw flowid 1:${NR}2
    		else
    		    $TFILTR $UL_VDEV parent 1:0 prio 5 protocol ip handle 0x${NR} fw flowid 1:${NR}
    		fi
        		NR=$[$NR+1]
    		done
        fi
    }
    
    # Funkcje pomocnicze
    startuj() {
    	echo "INTERNET IP:  $INTERNET_IP"
    	echo "DOWNLOAD:     $DOWNLOAD kbit"
    	echo "UPLOAD:       $UPLOAD kbit"
    	echo -e "Start firewall..."
    	echo -e "FiQs "$V" (C) by \033[1;41mINTRUX\033[0m"
    	clear_table
    	set_lo
    	echo -e " clear table  OK"
    	if [ ! "$ADMIN_HOST_IP" == "" ] ; then
    	    for a in $ADMIN_HOST_IP ; do
    		iptables -I INPUT -s $a -j ACCEPT
    		iptables -I OUTPUT -d $a -j ACCEPT
    	    done
    	    echo -e " admin ip     OK"
    	fi
    	ssh_allow
    	echo -e " ssh          OK"
    	set_drop
    	echo -e " set drop     OK"
    	modules
    	echo -e " modules      OK"
    	kernel_secure
    	set_secure
    	set_misc_mtu
    	echo -e " secure       OK"
    	set_p2p
    	echo -e " p2p          OK"
    	limit_log
    	echo -e " limit&log    OK"
    	output
    	server
    	echo -e " server       OK"
    	set_proxy
            set_nat
    	echo -e " nat          OK"
    	set_ttl
    	set_tos
    	echo -e " ttl&tos      OK"
    	mark_qos
    	if [ "$QOS_ON" == "yes" ] ; then
    	echo -e " mark qos     OK"
    	fi
    	echo -e "...firewall   OK"
    }
    
    # { start | stop | restart }
    case "$1" in
        start)
    	startuj
    	start_qos
    	if [ "$USER_ACL_ON" == "yes" ] ; then
    	    NatACL &> /dev/null
    	fi
    	;;
        stop)
    	killall NatACL &> /dev/null
        	#zapisanie stanu licznikow account
    	    if [ -f /proc/net/ipt_account/mynetwork ] ; then
    		cat /proc/net/ipt_account/mynetwork > ${WKDIR}.mynetwork.save
    	    fi
    	stop_qos
    	clear_table
    	set_accept
    	echo -e "Stop FIREWALL"
    	;;
        restart)
    	killall NatACL &> /dev/null
    	#zapisanie stanu licznikow account
    	    if [ -f /proc/net/ipt_account/mynetwork ] ; then
    		cat /proc/net/ipt_account/mynetwork > ${WKDIR}.mynetwork.save
    	    fi
    	stop_qos
    	clear_table
    	set_accept
    	echo -e "Stop FIREWALL"
    	sleep 1
    	startuj
    	start_qos
    	if [ "$USER_ACL_ON" == "yes" ] ; then
    	    NatACL &> /dev/null
    	fi
    	;;
        reset)
    	killall NatACL &> /dev/null
    	#usuniecie zapisanych licznikow account
    	    if [ -f ${WKDIR}.mynetwork.save ] ; then
    		rm -f ${WKDIR}.mynetwork.save
    	    fi
    	stop_qos
    	clear_table
    	set_accept
    	echo -e "Stop FIREWALL"
    	sleep 1
    	startuj
    	start_qos
    	if [ "$USER_ACL_ON" == "yes" ] ; then
    	    NatACL &> /dev/null
    	fi
    	;;
        *)
    	echo "Wymagany parametr: { start | stop | restart | reset }"
    	exit 1
    	;;
    esac
    exit 0
    
  • #18 3604232
    gothye
    Poziom 33  
    Posty: 2421
    Pomógł: 183
    Ocena: 60
    trzeba ruczyć głową pracując w linuxie

    jak rozpakowujesz to logoczne ze się pojawi nowyu katalog w miejscu rozpakowania pakietu


    w katalogu gdzie go rozpakowałeś
  • #19 3604252
    tommy999
    Poziom 22  
    Posty: 703
    Pomógł: 11
    Ocena: 79
    No spoko :)
    Ale co dalej ???
  • #20 3608556
    tommy999
    Poziom 22  
    Posty: 703
    Pomógł: 11
    Ocena: 79
    Poradziłem sobie z ulog...
    Wszystkie logi ładnie się zapisują :)
    Z squidem tez zadziałał
    Ale mam problem z proftpd. Zaisnatowalem, skonfigurowałem go...
    Wszystko niby ok ale jak chce sie polaczyc z innego pc to pisze ze nieprawidlowa nazwa uzytkownika lub haslo a anonymous to samo...

    Ja chciałbym poprostu zrobić jednego użytkownika np nikc ftp haslo ptf ktory by miał dostęp do katalogu home/httpd/html/ tylko jak to zrobić ???

    Prosze o pomoc !!!
  • #22 3608807
    tommy999
    Poziom 22  
    Posty: 703
    Pomógł: 11
    Ocena: 79
    wywala mi cos takiego:
    > addgroup ftp
    bash: line 1: addgroup: command not found
    > adduser --ingroup ftp ftpdemon
    adduser: invalid option -- -
    usage: adduser	[-u uid [-o]] [-g group] [-G group,...] 
    		[-d home] [-s shell] [-c comment] [-m [-k template]]
    		[-f inactive] [-e expire ] [-p passwd] [-M] [-r] name
           adduser	-D [-g group] [-b base] [-s shell]
    		[-f inactive] [-e expire ]
    


    Da się może jakoś edytować któryś plik i poprostu dopisac tego użytkownika ???
  • REKLAMA
  • #24 3800924
    ul1002

    Poziom 35  
    Posty: 2618
    Pomógł: 303
    Ocena: 137
    Witam , także posiadam taki system i mam problem z ssh mianowicie nie mogę się połączyć putty ani winscp z routerem - komunikat z putty "Network error . Connection refused " .

    W fiqs mam wpisy ssh_list eth1 i eth0 z podanymi portami oraz w ADMIN_HOST_IP mam podane ip , nie wiem czy nie trzeba coś jeszcze zrobić w sshd.conf .
    Konto firmowe:
    Almar Serwis Roland Piszczelok
    Gliwicka, Rybnik, 44-200 | Tel.: 506XXXXXX (Pokaż) | Strona WWW: www.almar-serwwis.pl
  • #25 3890179
    TMK_M
    Poziom 22  
    Posty: 670
    Pomógł: 38
    Ocena: 23
    A ktora masz wersje?
    Spróbuj sie polaczyc na porcie 21022
  • #26 3934960
    ul1002

    Poziom 35  
    Posty: 2618
    Pomógł: 303
    Ocena: 137
    Mam fiqs2 v 5.8, z tym już sobie poradziłem , miałem zły wpis w lini listen address .

    Mam pytanie , uruchomiłem ftp z dostępem z zewnątrz , chciałbym mieć jakieś statystyki tego ftp , połączenia, skąd , transfery itp da się zrobić ?
    Konto firmowe:
    Almar Serwis Roland Piszczelok
    Gliwicka, Rybnik, 44-200 | Tel.: 506XXXXXX (Pokaż) | Strona WWW: www.almar-serwwis.pl
  • #27 4539303
    space1
    Poziom 14  
    Posty: 88
    Pomógł: 2
    Ocena: 3
    stare ale napisze...

    zobacz w logi serwera proftpd ... tam masz bardzo duzo.

Podsumowanie tematu

✨ Użytkownik posiada system Intrux Trustix do podziału internetu z panelem FiQS, który od pewnego czasu nie zapisuje ustawień, wyświetlając komunikat o blokadzie edycji do automatycznej aktualizacji i restartu firewalla, który jednak nie następuje. Problemem okazała się błędna konfiguracja firewalla w pliku main.cfg (niepoprawny zakres adresów IP). Dodatkowo pojawia się błąd dotyczący braku pliku w katalogu /proc/net/ipt_account/my network, który jest generowany przez moduł jądra ipt_account – jego załadowanie przywraca katalog, lecz plik nadal nie istnieje. Rozwiązaniem jest poprawne załadowanie modułu ipt_account oraz konfiguracja crona uruchamiającego skrypt panel_cfg_update, który aktualizuje dane panelu FiQS.

W dyskusji poruszono także konfigurację serwera ProFTPD na tym systemie, w tym tworzenie użytkowników FTP z ograniczonym dostępem do katalogów. Podano przykładową konfigurację pliku proftpd.conf oraz instrukcje dodawania grup i użytkowników w systemie Linux. Wystąpiły problemy z poleceniami adduser i addgroup, które wynikają z różnic w dystrybucji systemu, sugerowano ręczną edycję plików konfiguracyjnych.

Poruszono również temat uruchomienia serwera proxy (np. Squid) na komputerze klasy Pentium II 400 MHz z 194 MB RAM, co jest możliwe dla małej sieci, oraz szczegółowego logowania ruchu sieciowego za pomocą narzędzi tcpdump, ulog i iptables z modułem ulogd. Podano instrukcje instalacji i konfiguracji ulogd oraz załadowania modułu ulog w jądrze systemu.

Dodatkowo pojawiły się pytania o statystyki połączeń FTP, które można uzyskać z logów serwera ProFTPD. Wątek SSH dotyczył problemów z połączeniem, które wynikały z błędnej konfiguracji adresu nasłuchu w pliku sshd.conf oraz sugestii zmiany portu na 21022.

Podsumowując, główne problemy dotyczyły błędnej konfiguracji firewalla i modułów jądra, konfiguracji serwera FTP i proxy oraz logowania ruchu sieciowego w systemie Intrux Trustix z panelem FiQS.
Wygenerowane przez model językowy.
REKLAMA