Firewall w SlackwareArtykuł 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 fioraz 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.
|