Spis treści:
- A.Wprowadzenie.
- 1. Założenia.
2.Co wypada wiedzieć/umieć/przeczytać ?
- 1. Krótki komentarz odautorski do skryptu.
2. Skrypt.
3.Uruchomienie.
- 1. Skrypt.
2. Przekazywanie pakietów a działanie internetu na komputerach za natem.
- 1. Założenia.
A. Wprowadzenie.
1.Założenia.
Prezentowany opis tematu ma ułatwić konstrukcję własnych firewalli dla osób początkujących ze szczególnym uwzględnieniem posiadaczy popularnej i taniej neostrady. Mając na uwadze fakt, że sporej liczbie tych osób nie zależy na zbytnim zagłębianiu się w temat, opracowanie ograniczy się do zagadnień uważanych za podstawowe tak w dziedzinie przekazywania pakietów jak i filtrowania ruchu przychodzącego do procesów lokalnych. Dodatkowym założeniem skryptu jest jego forma, która ma utrudnić dzikie kopiowanie skryptu bez zastanowienia (i nawet czytania) dlatego poszczególne części kodu skryptu pisane są w różnych znacznikach code.
2.Co wypada wiedzieć/umieć/przeczytać ?
a) konieczna jest umiejętność pracy w konsoli oraz opanowanie jakiegoś edytora tekstowego (proponuję mcedit)
b) wypada mieć pojęcie o protokole ip , wiedzieć jakie sie ma interfejsy , gdzie mamy jaką sieć itp
c) wypada oswoić się z http://www.docum.org/docum.org/kptd/
d) naprawdę warto przeczytać interesujące dokumenty zamieszczone na http://netfilter.org/documentation/inde ... tation-faq
e) skoro już czytasz ten dokument to chyba nie muszę wspominać o korzystaniu z „faq” i „propozycji do faq” oraz pytaniu Wujka http://google.pl :)
Oczywiście realizacja wymienionych tu kroków zależy od naszego zaangażowania i tego co chcemy w osiągnąć.
B. No to do dzieła !
1. Krótki komentarz odautorski do skryptu.
a) zakładam że masz odpowiednie moduły załadowane. Prawdopodobnie jako użytkownik początkujący masz standardowy kernel slackware dlatego załaduj te moduły:
Kod: Zaznacz cały
#!/bin/bash
modprobe ip_conntrack
modprobe ip_conntrack_ftp
modprobe ip_conntrack_irc
modprobe ip_nat_ftp
modprobe ip_nat_irc
modprobe ip_tables
modprobe ipt_MASQUERADE
modprobe ip_state
modprobe iptable_filter
modprobe iptable_mangle
modprobe iptable_nat
b) jak wspomniałem skrypt jest dedykowany dla łącza typu neostrada czyli łącza ze zmiennym ip dlatego uczulam :
- po rozłączeniu się neostrady zawsze warto przeładować skrypt firewalla (ja to robiłem zawsze integrując z rp-pppoe)
- opisuję tylko cel MASQUERADE jednak należy pamiętać o istnieniu SNAT !
2. Skrypt
a) należy całkowicie usunąć pozostałości po starym skrypcie gdy takowy był. Gdy już nie mamy żadnego innego skryptu z firewallem (patrz zawartość rc.masq , rc.local , rc.firewall) to tworzymy plik w którym będzie on sobie siedział :
Kod: Zaznacz cały
touch /etc/rc.d/rc.firewall
Kod: Zaznacz cały
chmod 700 /etc/rc.d/rc.firewall
b) edytujemy skrypt w ulubionym edytorze (od tej pory zawartość pól "kod" jest zawartością naszego pliku /etc/rc.d/rc.firewall )
c) pora przygotować skrypt i zafundować czyszczenie poprzednich ustawień iptables
Kod: Zaznacz cały
#!/bin/bash
iptables -F
iptables -F -t nat
iptables -X -t nat
iptables -F -t mangle
iptables -X -t mangle
iptables -F -t filter
iptables -X -t filter
- ochrona przed atakami syn-flood
- włączenie przekazywania pakietów pomiędzy interfejsami
Kod: Zaznacz cały
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
echo "1" > /proc/sys/net/ipv4/ip_forward
Kod: Zaznacz cały
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
Kod: Zaznacz cały
iptables -A INPUT -i lo -j ACCEPT
Kod: Zaznacz cały
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Kod: Zaznacz cały
iptables -N SPRAWDZ
iptables -A SPRAWDZ -m state --state NEW -j ACCEPT
iptables -A SPRAWDZ -j DROP
Kod: Zaznacz cały
iptables -A INPUT -p tcp --dport 21 -i eth0 -j SPRAWDZ
iptables -A INPUT -p tcp --dport 80 -j SPRAWDZ
Kod: Zaznacz cały
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
k) pora zająć się przekazywaniem pakietów. Podobnie jak dla łańcucha INPUT przepuszczamy połączenia nawiązane i związane z innymi
Kod: Zaznacz cały
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
- globalnie. Pozwalamy całej podsieci (przykładowo 192.168.0.0/24) na korzystanie z przekazywania pakietów oraz z maskaradowania na interfejsie ppp0 na którym mamy internet.
Kod: Zaznacz cały
iptables -A FORWARD -s 192.168.0.0/24 -m state --state NEW -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o ppp0 -j MASQUERADE
Kod: Zaznacz cały
iptables -A FORWARD -s 192.168.0.5 -m state --state NEW -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.0.5 -o ppp0 -j MASQUERADE
Kod: Zaznacz cały
iptables -A FORWARD -p tcp --dport 4000 -d 192.168.0.10 -m state -- state NEW -j ACCEPT
iptables -t nat -A PREROUTING -i ppp0 --dport 4000 -j DNAT --to-destination 192.168.0.10:4000
Kod: Zaznacz cały
Kod: Zaznacz cały
/etc/rc.d/rc.firewall
C. Wskazówki!
1. Skrypt
a) zachowując kolejność regułek jak w artykule i stosując się do komentarzy (także tych o opcjonalności regułek) masz pewność że firewall ruszy i będzie działał prawidłowo
b) modyfikacji dokonuj z głową pamiętając w szczególności o kolejności regułek
c) w razie problemów z działaniem własnych modyfikacji stosuj # iptables -vL NAZWA_ŁAŃCUCHA | less , pozwoli to zaobserwować gdzie wpadają pakiety a gdzie nie
d) gdy "c" nie pomaga możesz użyć celu LOG , (man iptables)
2. Przekazywanie pakietów a działanie internetu na komputerach za natem
Do poprawnego działania przekazywania pakietów i maskarady potrzeba sprawnych sieci : dostarczającej internet oraz tej lokalnej. Komputery w sieci lokalnej musza mieć oprócz poprawnego adresu i maski ustawiony dodatkowo : serwer dns oraz trasę domyślną tzw. bramę, która jest niczym innym jak tylko adresem ip naszego routera od sieci lokalnej.
Działanie maskarady w pierwszej sprawdzamy narzędziami do tego stworzonymi a nie odpalaniem klienta gg. Dopiero potem gdy mamy ping , dns działa to sprawdzamy czy stronki chodzą , ftp działa , etc...
Lista poleceń , które mogą pomóc:
- man iptables
iptables -vL oraz pochodne
nmap
ping
arping
arp
ifconfig
ip
route
nslookup
Jednym z problemów spotykanych na neostradzie jest sprawa MTU - maximum transmission unit. Neostrada jest typem łącza wykorzystującym w swoim działaniu tunelowanie co powoduje konieczność zmniejszenia maksymalnej jednostki transmisji. Gdy miałem neostradę to musiałem zmieniać mtu na wszystkich interfejsach serwera oraz u klientów. Robi się to względnie prosto. Na serwerze , dla każdego interfejsu, można wykonać :
Kod: Zaznacz cały
ifconfig interfejs mtu 1412
Gdy idzie o konfigurację klienta windowsowego należałoby przegrzebać rejestr lecz istnieje program cmtutool.exe który ustawia mtu na zadaną wartość. Podajemy więc mtu 1412 i dalej aby uniknąć konieczności restartu wchodzimy do „Połączeń sieciowych” i wyłączamy interfejs a następnie włączamy (opcja „Napraw” nie daje rady).
D. Posłowie
Zaleca sią zapoznanie również z dokumentem Firewall (iptables) - typowe rozwiązania
Autor: bojleros
Specjalne podziękowania dla Skyscrapera.