|
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.pldoc.pisz.plpdf.pisz.plminister.pev.pl
|