Strona 1 z 1

Bash - skrypt blokujący i odblokowujący porty

: 20 października 2008, 16:33
autor: darkmanek
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:

Kod: Zaznacz cały

#!/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. Obrazek
Pozdrawiam!

: 20 października 2008, 17:56
autor: grzesiek
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:

Kod: Zaznacz cały

#!/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

Kod: Zaznacz cały

...
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

: 20 października 2008, 18:25
autor: darkmanek
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!

: 20 października 2008, 18:47
autor: grzesiek
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:

Kod: Zaznacz cały

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.

: 20 października 2008, 23:31
autor: darkmanek
Witam ponownie.
niestety, ale

Kod: Zaznacz cały

#!/bin/bash 
sudo /etc/init.d/firewall dcon 
linuxdcpp 
sudo /etc/init.d/firewall dcoff
nie mam zainstalowanego linuxdcpp:

Kod: Zaznacz cały

Program linuxdcpp nie jest obecnie zainstalowany.  Można go zainstalować wpisując:
sudo apt-get install linuxdcpp
bash: linuxdcpp: polecenie nieodnalezione
a odnośnie
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.
to można jaśniej, "łopatologiczniej"? ;-)
tutaj:

Kod: Zaznacz cały

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

Kod: Zaznacz cały

/etc/init.d/firewall
tak?
Pozdrawiam

: 21 października 2008, 19:31
autor: grzesiek
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.