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.

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