"Doskonałe" narzędzie aby okiełznać iptables w prosty i przejżysty sposób naszego śp. guru,
Szkoba, że nie będzie następnej wersji, ale któż to wie może kiedyś...
Ktoś kto nie widział tego narzędzia w akcji to nie wie o czym piszę!
!Firewall i udostępnianie internetu
Jeśli chcesz zabezpieczyć swoją maszynkę i/lub udostępnić internet komputerom w sieci lokalnej, możesz do tego wykorzystać pakiet lfirewall
Co umożliwia ten pakiet? Wszystko to co iptables :) (wymaga więc, aby było zainstalowane jądro w wersji 2.4 lub nowsze oraz pakiet iptables). Pakiet pozwala na:
Zaleta to stosowanie pliku konfiguracyjnego =/etc/lfirewall/lfirewall.conf=, w którym są zapisywane makropolecenia - dzięki czemu łatwiej jest tak opisany firewall modyfikować. Makropolecenia mogą być wpisywane po angielsku, polsku, lub w dowolnym innym języku (o ile komuś zechce się utworzyć odpowiedni plik =/usr/lib/lfirewall/aliases.*=).
!Uwaga Wersja 0.7 i nowsze zostały przepisane od nowa w perlu - startuje dużo szybciej (poprzednie wersje działały koszmarnie wolno) - czas startu na celeronie 333 wersji 0.5 - 260s, dla wersji 0.7 to 3,3s.
Po ściągnięciu pakietu http://wonder.pl/pub/debian/deby/lfirewall/lfirewall_0.8.3_all.deb należy go zainstalować poleceniem:
dpkg -i lfirewall*deb
lub dopisać linię do pliku =/etc/apt/sources.list=
deb http://asterix.wonder.pl/pub/debian/deby/lfirewall/ ./
i wykonać:
apt-get update apt-get install lfirewall
Można też skorzystać z svn: svn co https://www.wonder.pl/svn/lfirewall/current
Opis zmian, przeglądanie projektu: https://www.wonder.pl/lfirewall/
Firewall nie zostanie uruchomiony, jeśli plik konfiguracyjny =/etc/lfirewall/lfirewall.conf= jest pusty (lub posiada jedynie puste linie/linie rozpoczynające się znakiem komentarza).
Może na początek najprostszy firewall:
use pl usun_reguly usun_lancuchydomyslnie_ignoruj domyslnie_akceptuj OUTPUTakceptuj_nawiazane akceptuj_powiazaneakceptuj lo
Powyższe polecenia zrobią z naszej maszyny w miarę ;) bezpieczny firewall. Wszystkie połączenia przez nas zainicjowane i związane z nimi będą przepuszczane, pozostałe pakiety będą ignorowane.
Polecenie lfirewall może zostać wywołane z parametrami:
LiNiO firewall v 0.8 :: Robert Litwiniec linio@gnu.pl lfirewall --debug]|[-q|--quiet? [-c|--config config_file] [[-v|--version]|stop|status|start|restart|reload]-d|--debug -c|--config config_file -q|--quiet -v|--version stop status start|restart|reload
Polecenia pakietu lfirewall, które mogą być umieszczone w pliku konfiguracyjnym:
Polecenie | Przykład polecenia | Opis | ------------ | :-----------: | :-----------: | use język| use pl| pozwala na stosowanie polskich nazw dla makropoleceń | policy ALL| policy ALL DROP| pozwala na określenie domyślnej reguły (ACCEPT, DROP) dla podanego jako parametr, lub (gdy poda się słowo ALL dla wszystkich wbudowanych łańcuchów) policy_accept| policy_accept OUTPUT| domyślnie akceptuje pakiety przechodzące przez podany łańcuch (lub jeśli nie podano - przez wszystkie) policy_drop| policy_drop INPUT| domyślnie ignoruje pakiety przechodzące przez podany (lub wszystkie) łańcuchy policy_reject| policy_reject INPUT| domyślnie odrzuca pakiety przechodzące przez podany (lub wszystkie) łańcuchy flush_rule| usun_regule| usuwa reguły z podanego łańcucha (lub wszystkich, jeśli bez parametrów) flush_rules| usun_reguly| usuwa reguły z wszystkich łańcuchów delete_chain| usun_lancuch| usuwa łańcuch o podanej nazwie (lub wszystkie, jeśli nie podano nazwy łańcucha) delete_chains| usun_lancuchy| usuwa wszystkie łańuchy accept| akceptuj lo| akceptuje podaną regułkę accept_new| akceptuj_nowe tcp ssh| akceptuje nowe pakiety accept_established| akceptuj_nawiazane| akceptuj pakiety należące do już nawiązanych połączeń accept_related| akceptuj_powiazane| akceptuje pakiety należące do pakietów powiązanych z nawiązanymi połączeniami accept_invalid| akceptuj_bledne| akceptuje pakiety błędne accept_untracked| akceptuj_untracked| akceptuje pakiety nie należące do śledzonych połączeń accept_rpc| akceptuj_rpc| akceptuje pakiety należące do rpc queue| kolejkuj| przesłanie pakietów do przestrzeni użytkownika (target QUEUE) queue_new| | ... queue_established| | ... queue_related| | ... queue_invalid| | ... queue_untracked| | ... queue_rpc| | ... drop| ignoruj eth0 tcp 8080| Ignoruje pakiety (przychodzące na eth0 port tcp 8080) drop_new| | ... drop_established| | ... drop_related| | ... drop_invalid| | ... drop_untracked| | ... drop_rpc| | ... reject| odrzuc| odrzucenie pakietu reject_new| odrzuc_nowe| odrzucenie nowych pakietów reject_established| odrzuc_nawiazane| odrzucenie pakietów należących do nawiązanych połączeń reject_related| odrzuc_powiazane| odrzucenie powiązanych pakietów reject_invalid| odrzuc_bledne| odrzucenie błędnych pakietów reject_untracked| odrzuc_untracked| odrzucenie nieśledzonych pakietów reject_rpc| odrzuc_rpc| odrzucenie pakietów związanych z rpc log| loguj| loguje pakiety. log_new| loguj_nowe tcp ssh| loguje nowe pakiety (tutaj skierowane na port ssh) log_established| loguj_nawiazane| loguje pakiety należące do nawiązanych połączeń log_related| loguj_powiazane| loguje pakiety powiązane z nawiązanymi połączeniami log_invalid| loguj_bledne| loguje pakiety błędne log_untracked| loguj_untracked| loguje pakiety nieśledzone masquerade| maskarada 192.168.0.0/24| włącza maskaradę dla sieci 192.168.0.0 (i jeśli nie była wcześniej podana domyślna polityka dla ruchu przekazywanego - FORWARD - ustawia ją na ACCEPT) redirect| przekieruj eth0 tcp www 192.168.0.1:8080| Przekierowanie pakietów przychodzących na interfejs eth0 będących pakietami tcp, które są skierowane na port ww na maszynę 192.168.0.1 na port 8080 echo| echo "Cześć. Startuję firewall."| Wypisuje tekst iptables| iptables -t nat -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu| Wykonuje polecenie iptables
~[nazwa_łańcucha] ~[interfejs_wejściowy ~[interfejs_wyjściowy]] ~[adres_źródła ~[adres_MAC] ~[adres_celu]] ~[protkół ~[typ_protkołu_ICMP | port_docelowy | port źródłowy ~[port_docelowy]
Udostępnienie internetu (dla wszystkich maszyn z sieci 192.168.0.0):
use pl maskarada 192.168.0.0/24
A teraz troszkę bardziej rozbudowany przykład: Uwaga! W poniższym przykładzie przy maskaradzie musi zostać ustawiona polityka dla łańcucha FORWARD na ACCEPT (ponieważ wcześniej polityka domyślna dla INPUT, OUTPUT i FORWARD została ustawiona na DROP przez wywołanie domyslnieignoruj_ . W następnej linijce ustawione jest zezwolenie dla łańcucha wyjściowego - domyslnieakceptuj OUTPUT_
use pl usun_reguly usun_lancuchy
domyslnie_ignoruj domyslnie_akceptuj OUTPUT
akceptuj_nawiazane akceptuj_powiazane
akceptuj lo akceptuj eth0
akceptuj ppp0 tcp auth,domain,smtp,www,https,nntp akceptuj ppp0 udp domain
PBS="ppp0 123.456.789.000" akceptuj $PBS tcp ssh,57000
VIZ="ppp0 234.567.890.111" akceptuj $VIZ tcp ssh
TKGKP="ppp0 345.678.900.111" akceptuj $TKGKP tcp ssh
odrzuc ppp0
maskarada 192.168.0.11 192.168.0.21 192.168.0.22 domyslnie_akceptuj FORWARD
przekieruj eth0 tcp www 192.168.0.1:8080
Maskarada - zezwolenie na dostęp wybranym maszynom do wybranych portów konkretnych ip - pozostałe nie mają dostępu:
# ustawienia maskarady maskarada 192.168.10.2/32 maskarada 192.168.10.13/32 maskarada 192.160.10.25/32 maskarada 192.168.10.150/32 akceptuj_nawiazane FORWARD akceptuj_powiazane FORWARD akceptuj FORWARD 192.168.10.2 tcp smtp,pop3,pop3s,imap2,imap3,imaps,domain akceptuj FORWARD 192.168.10.13 tcp smtp,pop3,pop3s,imap2,imap3,imaps,domain akceptuj FORWARD 192.168.10.150 tcp smtp,pop3,pop3s,imap2,imap3,imaps,domain akceptuj FORWARD 192.168.10.2 udp domain akceptuj FORWARD 192.168.10.13 udp domain akceptuj FORWARD 192.168.10.150 udp domain #setbs - dostęp stacji 192.168.10.25 do konkretnych portów maszyny X.X.X.X akceptuj FORWARD 192.168.10.25 X.X.X.X tcp 500,264,18264 akceptuj FORWARD 192.168.10.25 X.X.X.X tcp 500,264 akceptuj FORWARD 192.168.10.25 X.X.X.X udp odrzuc FORWARD
Autor: [LiNiO|AutorLinio]. %%%Wersja 1.07 2002.08.26 %%%Wersja 1.08 2004.10.24 - dopisanie apt-get update, apt-get install, przykład bardziej restrykcyjnej maskarady %%%Wersja 1.09 2005.09.24 - aktualizacja linka do najnowszej wersji, aktualizacja tabelki %%%Wersja 1.10 2005.09.25 - aktualizacja linka do najnowszej wersji, aktualizacja opisu