Odpalanie firewalla

Ogólne pytania dotyczące systemu
Rad
Member
Posty: 1208
Rejestracja: 28 czerwca 2006, 15:05

Odpalanie firewalla

Post autor: Rad »

W jaki sposób powinno się poprawnie uruchamiać skrypt z firewallem? Teraz u siebie mam po prostu wrzucony skrypt (który nawet nie jest w formacie skryptu startowego - po prostu kolejne linijki iptables) do /etc/init.d/ i dodany przez update-rc.d defaults. Czy to jest dobry sposób, czy też robi się to jakoś lepiej, bardziej elegancko? :)
Maciek_Rutecki
Posty: 93
Rejestracja: 28 czerwca 2006, 20:31
Lokalizacja: Koluszki

Post autor: Maciek_Rutecki »

Ja zrobiłem coś takiego, plik /etc/init.d/piecuch:

Kod: Zaznacz cały

#! /bin/sh
# zmienne srodowiskowe
IPT=/sbin/iptables
export INTERFEJS="eth0"
echo $INTERFEJS
export MOJE_IP="`/sbin/ifconfig $INTERFEJS | grep inet | cut -d ':' -f 2 | cut -d ' ' -f 1`"
echo $MOJE_IP

case "$1" in
 	start)
		echo 'Rozpoczecie ustawiania regul firewalla.'
		echo 'Usuwam istniejace reguly filtra pakietow...' 
		$IPT -v -F
		echo 'Akceptuje ruch po interfejsie lokalnym...' 
		$IPT -A INPUT -i lo -j ACCEPT
		$IPT -A OUTPUT -o lo -j ACCEPT
		echo 'Akceptuje ruch istniejacy i potomny...' 
		$IPT  -A INPUT -m state --state ESTABLISHED -j ACCEPT
		$IPT  -A INPUT -m state --state RELATED -j ACCEPT

		############WYCHODZACE################
		
		echo 'Akceptuje ruch wychodzacy...'
		$IPT -A OUTPUT -j ACCEPT	

		############PRZYCHODZACE##############
		
		echo 'Akceptuje/blokuje ruch przychodzacy...'
		#blokuj te IP
# czarna lista adresów IP
#		wget -t 5 -N -r -O /etc/lista.txt [url]http://unixy.pl/maciek/black_ip/lista.txt[/url]  #pobierz plik

		chown root:root /etc/lista.txt	#tylko root ma dostep do pliku
		chmod 600 /etc/lista.txt
		for i in `cat /etc/lista.txt | cut -d ' ' -f 1`; do		#czytaj liste
			$IPT -A INPUT --source $i -j DROP	#blokuj dane ip
		done;
			
		# weryfikacja adresu zrodlowego
		# zabezpieczenie przed falszowaniem adresu pakietow przychodzacych
		$IPT -A INPUT -i $INTERFEJS --source $MOJE_IP -j DROP
		# PING
		$IPT -A INPUT -p icmp -j ACCEPT
		# FTP
		$IPT -A INPUT -p tcp --dport 20:21 -j ACCEPT
		$IPT -A INPUT -p tcp --dport 30000:40000 -j ACCEPT
		# DHCP
		$IPT -A INPUT -p udp --dport 68 -j ACCEPT
		# SSH
		$IPT -A INPUT -p tcp --dport 22 -j ACCEPT
		#jabber przesyl plikow
		$IPT -A INPUT -p tcp --dport 8010 -j ACCEPT
		#gg przesylanie plikow
		$IPT -A INPUT -p tcp --dport 1550 -j ACCEPT
		#VoIP
		$IPT -A INPUT -p udp --dport 5060 -j ACCEPT
		$IPT -A INPUT -p udp --dport 5004 -j ACCEPT
		$IPT -A INPUT -p udp --dport 8000 -j ACCEPT
		$IPT -A INPUT -p udp --dport 10000 -j ACCEPT

		######################################
		
#		echo 'Wlaczam logowanie...'
#		$IPT  -A INPUT -j LOG --log-prefix "FROM INPUT: "
		echo 'Blokuje reszte...'
		$IPT  -A INPUT -j DROP
		$IPT  -A FORWARD -j DROP
		echo 'Zakonczono ustawianie regul firewalla.'
		$IPT -L -n
		;;
	stop)
		echo 'Rozpoczecie ustawiania regul firewalla.'
		echo 'Usuwam istniejace reguly filtra pakietow...' 
		$IPT  -F
		echo 'Akceptuje ruch po interfejsie lokalnym...' 
		$IPT  -A INPUT -i lo -j ACCEPT
		echo 'Akceptuje ruch istniejacy i potomny...' 
		$IPT  -A INPUT -m state --state ESTABLISHED -j ACCEPT
		$IPT  -A INPUT -m state --state RELATED -j ACCEPT
		echo 'Akceptuje ruch wychodzacy...'
		$IPT  -A OUTPUT -j ACCEPT 
		echo 'Akceptuje ruch przychodzacy...'
		$IPT  -A INPUT -j ACCEPT 
		echo 'Akceptuje ruch przechodzacy...'
		$IPT  -A FORWARD -j ACCEPT 
		echo 'Zakonczono ustawianie regul firewalla.'
		$IPT -L -n
		;;
  *)
    echo "Usage: /etc/init.d/piecuch {start|stop}"
    exit 1
    ;;
esac

exit 0 
Witek Baryluk
Beginner
Posty: 207
Rejestracja: 26 czerwca 2006, 01:49
Lokalizacja: Kraków za firewallem

Re: Odpalanie firewalla

Post autor: Witek Baryluk »

Jabber pisze:W jaki sposób powinno się poprawnie uruchamiać skrypt z firewallem? Teraz u siebie mam po prostu wrzucony skrypt (który nawet nie jest w formacie skryptu startowego - po prostu kolejne linijki iptables) do /etc/init.d/ i dodany przez update-rc.d defaults. Czy to jest dobry sposób, czy też robi się to jakoś lepiej, bardziej elegancko? :)
Bardzo dobrze, tylko powinien rozpoznawać argumenty start stop restart. to się przydaje. Jeśli ilość linijek tego iptables jest jakaś olbrzymia to lepiej zeby ten skrypt odpał jakiś inny powiedzmy w /etc/firewall/ albo wczytywał reguły zapisane w pliku np. /etc/default/firewall.iptables

ja mam coś takiego:

Kod: Zaznacz cały

#!/bin/bash

[ -f /etc/default/firewall.iptables ] || exit 1

case "$1" in
        start)
                $0 stop
                echo -ne "Starting firewall: "

                /sbin/iptables-restore < /etc/default/firewall.iptables
                echo -ne "iptables "

                /sbin/arptables -P FORWARD DROP
                /sbin/arptables -A FORWARD --source-mac 00:50:ba:bf:8c:03 -j ACCEPT
                /sbin/arptables -A FORWARD --destination-mac 00:50:ba:bf:8c:03 -j ACCEPT
                echo -ne "arptables.\n"
                ]
linijki z arptables można wywalić.

a plik /etc/default/firwall.iptables wygląda powiedzmy tak:
[code]
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]

... regulki

COMMIT

*nat
:PREROUTING DROP [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]

... regulki

COMMIT

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]

....regulik tak jak w iptables, tyle ze bez nazwy programu np.
-A OUTPUT -m ipp2p --ipp2p -j DROP

COMMIT
Bardzo szybkie. Nawet jeśli masz jakąś olbrzymią sieć, to lepiej żeby Twoje skrypt najpierw wygenerowały ten plik (albo część odpowiadającą jakiemuś łancuchowi/tablicy, poczytaj dokumentacje iptables-restore -save) i dopiero go odpaliły, dodatkowo zapewnia to atomowość (normalnie trzeba uważać, aby np. w czasie wstawiania regułek, nie pojawił się moment (ułamek sekundy) że sieć może być narażona na atak, można to robić recznie, wstawiając odpowiednie blokady na początku łańcucha, na czas dodawania reszty reguł, ale tak jest łatwiej) i jeśli zależy Tobie na tym, można dopisać aby zapisywał stan firewalla (wraz z licznikami) do pliku. To pozwala na eksperymenty na firewallu bezpośrednio, poprostu z konsoli, zamiast co chwile przeładowywać go, a kiedy efekt Ciebie zadowla, poprostu zrobić iptables-save .
Rad
Member
Posty: 1208
Rejestracja: 28 czerwca 2006, 15:05

Post autor: Rad »

Wielkie dzięki, chodziło mi głównie o to, czy właśnie warto sobie zrobić start i stop oraz gdzie wrzucić skrypt. Mój firewall to raptem kilka linijek (natowanie kompa w drugim pokoju), ale informacje na pewno mi się przydadzą, gdy będę robił jakiś ruter lub po prostu poznawał netfiltera.
Zablokowany