ďťż
 
 
   Bash - skrypt blokujący i odblokowujący porty
 
 

Tematy

 
    
 

 

 

 

Bash - skrypt blokujący i odblokowujący porty





darkmanek - 20-10-2008 16:33
Witam.
Próbuję napisać skrypt, który przy uruchomieniu rtorrent będzie odblokowywał, a przy kończeniu blokowywał porty. Ponieważ nie jestem w tym (bash) dobry, proszę Was o pomoc.
Co w tym skrypcie jest źle:
#!/bin/bash
#skrypt poprosi o hasło root
echo "Podaj hasło"
  read -s nazwa_zmiennej
#weryfikacja hasła
if $nazwa_zmiennej = $PASSWD then
#jeśli hasło się zgadza, skrypt dopisze te dwie linijki do /etc/init.d/firewall
        echo "iptables -A INPUT -s 0/0 -p tcp --dport (_numer portu_) -j ACCEPT" >> /etc/init.d/firewall
        echo "iptables -A INPUT -s 0/0 -p udp --dport (_numer portu_) -j ACCEPT" >> /etc/init.d/firewall
#i wyrzuci mi na kosolę tekst i uruchomi rtorrent:
        echo "porty odblokowane, uruchamiam rtorrent" && screen /usr/bin/rtorrent       
#jeżeli hasło się nie zgadza
    else [ -n $nazwa_zmiennej !=$PASSWD ] then
#wypluje komunikat
 echo "przerywam, pewnie podałeś złe hasło"
    fi
#i zakończy pracę
done; oraz jak i gdzie tu wstawić polecenie, aby po wyjściu z rtorrent na powrót zablokował porty?
Proszę o pomoc łopatologiczną, gdyż jak pisałem wyżej, nie jestem w pisaniu skryptów dobry, a to mój pierwszy jakiś poważniejszy skrypt z instrukcjami warunkowymi. http://debian.linux.pl/templates/deo...con/icon12.gif
Pozdrawiam!



grzesiek - 20-10-2008 17:56
No nie wiem, no nie wiem, co prawda w bashu też nie pisałem ale na programowaniu to ja się znam i od razu coś mi tu nie gra.
Ja to bym zrobił inaczej. Po pierwsze w skrypcie firewall napisał funkcje, która będzie włączać wyłączać porty, Czyli taki podział zadań, że portami zajmuje się firewall np. firewall torrenton/firewall torrentoff - i takie polecania skryptu firewall dopiero wywoływać w tym skrypcie co ma uruchomić dany program.

Coś takiego napisałem
dc.sh:
#!/bin/bash
sudo /etc/init.d/firewall dcon
linuxdcpp
sudo /etc/init.d/firewall dcoff sudo trzeba tylko ustawić żeby mogło a nie tylko chciało i napisać funkcje w firewall
...
dcon () {
        iptables -A INPUT  -i eth0 -p tcp  -s 123.123.111.216 --sport 1411 -j ACCEPT
        iptables -A OUTPUT          -p tcp  -d 123.123.111.216 --dport 1411 -j ACCEPT
        iptables -A INPUT  -i eth0 -p udp  -s 123.123.111.216 --sport 1411 -j ACCEPT
        iptables -A OUTPUT          -p udp  -d 112.112.111.216 --dport 1411 -j ACCEPT
        iptables -A OUTPUT          -p tcp  -d 11.46.0.0/255.255.0.0  -j ACCEPT
        iptables -A OUTPUT          -p tcp  -d 22.45.0.0/255.255.0.0  -j ACCEPT
}

dcoff () {
        iptables -A INPUT  -i eth0 -p tcp  -s 123.111.131.246 --sport 1411 -j DROP
        iptables -A OUTPUT          -p tcp  -d 123.111.131.246 --dport 1411 -j DROP
        iptables -A INPUT  -i eth0 -p udp  -s 123.111.131.246 --sport 1411 -j DROP
        iptables -A OUTPUT          -p udp  -d 123.111.131.246 --dport 1411 -j DROP
        iptables -A OUTPUT          -p tcp  -d 11.46.0.0/255.255.0.0  -j DROP
        iptables -A OUTPUT          -p tcp  -d 12.45.0.0/255.255.0.0  -j DROP
}

...

# ================== MAIN() ====================
case "$1" in
        start)
                start ;;
        stop)
                stop ;;
        dcon)
                dcon ;;
        dcoff)
                dcoff ;;
        *)
                echo $"  Uzyj: $0 {stary, stop, dcon, dcoff}"
                echo "@@@ Firewall by grzesiek ;) @@@"
                exit 1
esac



darkmanek - 20-10-2008 18:25
Dzięki @grzesiek za zainteresowanie.
ÂŻe yyyy..o co chodzi z tymi funkcjami? ÂŻe do pliku konfiguracyjnego firewalla, czy po prostu skrypty dodatkowe firewall_on i firewall_off?
Pozdrawiam!



grzesiek - 20-10-2008 18:47
Tam był błąd właśnie przetestowałem i reguły były dodawane na koniec, a jak pierwsza była dcon to potem zawsze będzie ją znajdował, a teraz tak: dcon () {
        iptables -A INPUT    -i eth0 -p tcp  -s 123.122.131.246 --sport 1411 -j ACCEPT
        iptables -A OUTPUT          -p tcp  -d 123.126.131.246 --dport 1411 -j ACCEPT
        iptables -A INPUT  -i eth0 -p udp  -s 123.126.131.246 --sport 1411 -j ACCEPT
        iptables -A OUTPUT          -p udp  -d 123.126.131.246 --dport 1411 -j ACCEPT
        iptables -A OUTPUT          -p tcp  -d 11.46.0.0/255.255.0.0  -j ACCEPT
        iptables -A OUTPUT          -p tcp  -d 11.45.0.0/255.255.0.0  -j ACCEPT
}

dcoff () {
        iptables -D INPUT    -i eth0 -p tcp  -s 123.122.131.246 --sport 1411 -j ACCEPT
        iptables -D OUTPUT          -p tcp  -d 123.126.131.246 --dport 1411 -j ACCEPT
        iptables -D INPUT  -i eth0 -p udp  -s 123.126.131.246 --sport 1411 -j ACCEPT
        iptables -D OUTPUT          -p udp  -d 123.126.131.246 --dport 1411 -j ACCEPT
        iptables -D OUTPUT          -p tcp  -d 11.46.0.0/255.255.0.0  -j ACCEPT
        iptables -D OUTPUT          -p tcp  -d 11.45.0.0/255.255.0.0  -j ACCEPT
} Reszta bez zmian.
Do pliku firewall dodaj funkcje, chodzi o to aby twój firewall miał takie funkcje: włącz te porty, tamte.
Potem te funkcje będziesz mógł wywoływać w wielu innych skryptach, w moim przypadku dc.sh.



darkmanek - 20-10-2008 23:31
Witam ponownie.
niestety, ale
#!/bin/bash
sudo /etc/init.d/firewall dcon
linuxdcpp
sudo /etc/init.d/firewall dcoff nie mam zainstalowanego linuxdcpp:
Program linuxdcpp nie jest obecnie zainstalowany.  Można go zainstalować wpisując:
sudo apt-get install linuxdcpp
bash: linuxdcpp: polecenie nieodnalezione a odnośnie
to można jaśniej, "łopatologiczniej"? ;-)
tutaj:
dcon () {
    iptables -A INPUT    -i eth0 -p tcp  -s 123.122.131.246 --sport 1411 -j ACCEPT
    iptables -A OUTPUT          -p tcp  -d 123.126.131.246 --dport 1411 -j ACCEPT
    iptables -A INPUT  -i eth0 -p udp  -s 123.126.131.246 --sport 1411 -j ACCEPT
    iptables -A OUTPUT          -p udp  -d 123.126.131.246 --dport 1411 -j ACCEPT
    iptables -A OUTPUT          -p tcp  -d 11.46.0.0/255.255.0.0  -j ACCEPT
    iptables -A OUTPUT          -p tcp  -d 11.45.0.0/255.255.0.0  -j ACCEPT
}

dcoff () {
    iptables -D INPUT    -i eth0 -p tcp  -s 123.122.131.246 --sport 1411 -j ACCEPT
    iptables -D OUTPUT          -p tcp  -d 123.126.131.246 --dport 1411 -j ACCEPT
    iptables -D INPUT  -i eth0 -p udp  -s 123.126.131.246 --sport 1411 -j ACCEPT
    iptables -D OUTPUT          -p udp  -d 123.126.131.246 --dport 1411 -j ACCEPT
    iptables -D OUTPUT          -p tcp  -d 11.46.0.0/255.255.0.0  -j ACCEPT
    iptables -D OUTPUT          -p tcp  -d 11.45.0.0/255.255.0.0  -j ACCEPT
} jak rozumiem porty do zablokowania wpisać (adresów ip nie mam) i dodać do
/etc/init.d/firewall tak?
Pozdrawiam



grzesiek - 21-10-2008 19:31
Mój skrypt był tylko przykładem, schematem, nie masz linuxdcpp? to wpisz inną komendę.
ÂŁopatologicznie mówisz?
więc tak firewall to komórka - możesz miec tam pozapisywane telefony do znajomych
Twoja ręka to skrypt, który coś wykonuje.

Różnica między twoją wersją a moją jest taka, że używając w swoich rękach (skryptu do uruchamiania "czegoś" - nie koniecznie linuxdcpp) komórki wybieram tylko zaprogramowany numer do znajomego, dzięki temu równie użytecznie będzie mógł go użyć twój np. brat (inny skrypt), Twój skrypt każe twoim pięknym dłoniom samemu wpisywać nr tel. Ale to tylko tak od strony metodologii programowania. druga strona jest znajomość iptables - tam możesz napisać wszystko co ci jest potrzebne. Potrzebne cie blokowanie portów, to pisz, ja musiałem tak.
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • minister.pev.pl

  •  

     


     

     
    Copyright 2003. MĂłj serwis