Firewall w Slackware
Artykuł ten jest kontynuacja tematów związanych z bezpieczeństwem sieciowym i
dotyczy firewalla dla pojedyńczej stacji (bez podsieci).
Firewall oparty jest na programie iptables i dystrybucji
Slackware. Po zaznajomieniu się z dokumentacją i różnymi opisami w
czasopismach i w internecie stworzyłem zbiór reguł filtrujących ruch pakietów w
sieci. Przy standardowej instalacji Slackware w pliku /etc/rc.d/rc.inet2
jest wpis o uruchomieniu naszego firewalla o treści:
if [ -x /etc/rc.d/rc.firewall ]; then
/etc/rc.d/rc.firewall start
fi
oraz wpis o uruchomieniu w jądrze filtrowania pakietów:
IPV4_FORWARD=1
if [ -f /proc/sys/net/ipv4/ip_forward ]; then
if [ "$IPV4_FORWARD" = "1" ]; then
echo "Activating IPv4 packet forwarding."
echo 1 > /proc/sys/net/ipv4/ip_forward
else
echo "Disabling IPv4 packet forwarding."
echo 0 > /proc/sys/net/ipv4/ip_forward
fi
fi
Po utworzeniu w katalogu /etc/rc.d pliku o nazwie rc.firewall i nadaniu
mu praw wykonywalności wstawiłem do niego reguły filtrujące ten ruch pakietów. W moim
przypadku są to reguły, które opiszę po kolei:
#!/bin/sh
#--------------------------
#załadowanie modułów śledzenia pakietów
/sbin/modprobe ip_conntrack
/sbin/modprobe ip_conntrack_ftp
#--------------------------
#wyczyszczenie reguł zapory
iptables -F
iptables -F -t nat
#--------------------------
#zakazanie wszelkich działań
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
#--------------------------
#akceptowanie wszystkich połączeń dotyczących pętli loopback
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A FORWARD -o lo -j ACCEPT
#--------------------------
#informowanie o nieosiągalności portów dla PROXY (1080)
iptables -A INPUT -p tcp --dst 0/0 --dport 1080 -j REJECT --reject-with icmp-port-unreachable
#-------------------------
#odpowiadanie na zapytania z sieci wewnętrznej
iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
iptables -A FORWARD -p icmp --icmp-type echo-request -j ACCEPT
#-------------------------
#akceptowanie już nawiązanych połączeń
iptables -A INPUT -p tcp -j ACCEPT -m state --state ESTABLISHED
iptables -A INPUT -p udp -j ACCEPT -m state --state ESTABLISHED
iptables -A INPUT -p icmp -j ACCEPT -m state --state ESTABLISHED
iptables -A INPUT -p icmp -j ACCEPT -m state --state RELATED
#--------------------------
iptables -A FORWARD -p tcp -j ACCEPT -m state --state ESTABLISHED
iptables -A FORWARD -p udp -j ACCEPT -m state --state ESTABLISHED
iptables -A FORWARD -p icmp -j ACCEPT -m state --state ESTABLISHED
iptables -A FORWARD -p tcp -j ACCEPT -m state --state RELATED
iptables -A FORWARD -p icmp -j ACCEPT -m state --state RELATED
#--------------------------
iptables -A OUTPUT -p tcp -j ACCEPT -m state --state ESTABLISHED
iptables -A OUTPUT -p udp -j ACCEPT -m state --state ESTABLISHED
iptables -A OUTPUT -p icmp -j ACCEPT -m state --state ESTABLISHED
iptables -A OUTPUT -p tcp -j ACCEPT -m state --state RELATED
iptables -A OUTPUT -p icmp -j ACCEPT -m state --state RELATED
#--------------------------
#dostęp do usługi ssh z internetu
iptables -A INPUT -i eth0 -p tcp -j ACCEPT -m state --state NEW -d 80.58.72.50 --destination-port 22
#--------------------------
#dostęp do usługi http - serwer z internetu
iptables -A INPUT -i eth0 -p tcp -j ACCEPT -m state --state NEW -d 80.58.72.50 --destination-port 80
#--------------------------
#dostęp do usługi ftp - serwer z internetu
iptables -A INPUT -i eth0 -p tcp -j ACCEPT -m state --state NEW -d 80.58.72.50 --destination-port 21
#--------------------------
#uprawnianie użytkowników do korzystania z internetu (otwarte porty usług)
TCP_OUT_ALLOW=20,21,22,25,53,80,110,119,443,1110,1550,6346,8074,8080
UDP_OUT_ALLOW=20,21,22,25,53,110,119,123,1110,6346
#--------------------------
iptables -A OUTPUT -o eth0 -p tcp -j ACCEPT -m state --state NEW -m multiport --destination-port $TCP_OUT_ALLOW
iptables -A OUTPUT -o eth0 -p udp -j ACCEPT -m state --state NEW -m multiport --destination-port $UDP_OUT_ALLOW
iptables -A FORWARD -o eth0 -p tcp -j ACCEPT -m state --state NEW -m multiport --destination-port $TCP_OUT_ALLOW
iptables -A FORWARD -o eth0 -p udp -j ACCEPT -m state --state NEW -m multiport --destination-port $UDP_OUT_ALLOW
#--------------------------
#zapisywanie do logów innnych prób połączeń niż w/w
iptables -A INPUT -j LOG -m limit --limit 15/hour
iptables -A OUTPUT -j LOG -m limit --limit 15/hour
iptables -A FORWARD -j LOG -m limit --limit 15/hour
Zmienne TCP_OUT_ALLOW oraz UDP_OUT_ALLOW przyjmują wartości portów tych
usług. Wykaz portów i usług jest zamieszczony w plikach /etc/services i
/etc/protocols. Dla usługi ftp są to porty o mumerach: 20/tcp, 20/udp,
21/tcp i 21/udp. O tym jakie numery portów należy wpisać decydujemy przez
wpisywanie pojedyńczego numeru usługi i próbowanie, czy ona zadziała. W ten sposób
zapewnimy minimalną (ale konieczną) ilość otwartych portów. Porty o numerach podanych
w listingu firewalla zapewniają obsługę poczta - klient, grupy dyskusyjne -
klient, www - klient i serwer, ftp - klient i serwer, ssh - klient i serwer oraz
gtk-gnutelli i kadu. Firewall oparty na tym skrypcie pracuje poprawnie i nie
mam powodów do narzekań. Ze względu na fakt, że internet mam przez łącze sieci
telewizji kablowej, firewall został sprawdzony na stałym numerze IP
zewnętrznym i wewnętrznym oraz na zmiennym wewnętrznym z DHCP. We wszystkich
przypadkach pracował dobrze. I jeszcze jedna uwaga na koniec. Zwiększa się ilość
ładowanych modułów i rośnie zajętość pamięci, co widać poniżej. Aby móc korzystać z
irc należy dopisać na początku skryptu polecenie załadowania modułu:
/sbin/modprobe ip_conntrack_irc. Dodatkowo należy dodać numer portu irc- a
(194) do zmiennej TCP_OUT_ALLOW i jeżeli jest to konieczne do
UDP_OUT_ALLOW. Ilość wpisów do każdej z tych zmiennych nie może przekraczać
piętnastu. Przy większej ilości wpisów należy dopisywać osobne łańcuchy.
Stąd można
pobrać przykładowy plik
firewalla dla
pojedyńczego komputera pracującego w sieci telewizji kablowej.
Przy instalowaniu firewalla na laptopie i sieci przez
wifi zmienił się u mnie numer urządzenia sieciowego z
eth0 na
eth2, co wymusza korekty w pliku z programem.
do góry 2004/2007.10.07