Ubuntu Server - asso-zs1
Transkrypt
Ubuntu Server - asso-zs1
UbuntuServer12.04LTS Założenia wstępne Serwer pełnił będzie funkcję routera, posiada dwa interfejsy sieciowe: eth0 (WAN, połączenie z Internetem) adresowany przez DHCP, oraz eth1 (LAN, połączenie z siecią lokalną), adresowany statycznie. Na interfejsie WAN uruchomiona zostanie usługa NAT (translacja adresów). Na interfejsie LAN uruchomione zostaną następujące usługi: serwer DHCP, serwer DNS, transparentne proxy z filtracją treści WWW (Squid + Dansguardian). Konfiguracja taka może zostać zastosowana np. w szkolnych pracowniach. • Instalacja • Interfejsy sieciowe • Dnsmasq (serwer DHCP i DNS) • Routing i firewall • Squid (serwer proxy) • Dansguardian (filtrowanie) • Monitoring • Dokumentacja (linux jako serwer) InstalacjaUbuntuServer12.04LTS Pobranie obrazu i przygotowanie nośnika instalacyjnego Z podanego adresu: http://releases.ubuntu.com/12.04 pobieramy obraz iso płyty instalacyjnej, przy czym zalecana jest wersja 64-bitowa (AMD64). Wypalamy na płycie DVD lub przygotowujemy bootowalny klucz USB. Instalacja Po uruchomieniu komputera instalacja przebiega w następujących krokach (por. zrzuty z instalacji): 1. Wybór języka, wybranie opcji "Instalacja Ubuntu Server" i potwierdzenie chęci instalacji mimo nieukończonego tłumaczenia instalatora. 2. Wybór lokalizacji ("Polska") oraz układu klawiatury (pomijamy wykrywanie, wybieramy kraj i układ "Polski"). 3. Wskazanie podstawowego interfejsu sieciowego, czyli karty sieciowej podłączonej do internetu, oraz podanie nazwy serwera. Nazwy wykrytych kart warto zanotować. 4. Utworzenie konta użytkownika: podanie pełnej nazwy, loginu oraz dwukrotnie hasła (najlepiej minimum 8znakowego). 5. Odmówienie szyfrowania katalogu domowego. 6. Ustawienia strefy czasowej: zatwierdzenie domyślnie wybranej strefy "Europe/Warsaw". 7. Przygotowania partycji (zobacz niżej) i zapisanie zmian na dysku. 8. Zainstalowanie pakietów na twardym dysku. 9. Wprowadzenie danych ewentualnego serwera proxy (zazwyczaj po prostu przechodzimy dalej). 10. Określenia sposobu aktualizacji. Najlepiej zatwierdzić wybór domyślny, czyli "Brak aktualizacji automatycznych". 11. Wybór zestawów (ról) oprogramowania serwerowego. Wybieramy tylko "OpenSSH Server". 12. Zainstalowanie boot menedżera GRUB. Potwierdzamy propozycję zainstalowania w MBR (master boot record) najprościej i najlepiej. 13. Ponowne uruchomienie komputera. Cały proces prześledzić warto na zrzutach. Przygotowanie dysku Z powyższych kroków najtrudniejsze niewątpliwie jest przygotowanie dysku, czyli podział na partycje. Przede wszystkim na instalację serwera Ubuntu najlepiej przeznaczyć cały dysk o pojemności np. 160 GB lub większej. Wszystko zależy od tego, z jakich usług będziemy chcieli korzystać. Jeżeli mamy do dyspozycji dwa dyski, drugi możemy przeznaczyć na katalog /srv, w którym można umieścić zasoby Samby, serwera www czy cache proxy. Podczas instalacji na początku jako sposób parycjonowania można wybrać opcję "Przewodnik - cały dysk". Po wskazaniu dysku instalator zaproponuje usunięcie wszelkich istniejących partycji i - na podstawie rozmiaru dysku - utworzenie co najmniej jednej partycji podstawowej dla katalogu głównego (/) oraz co najmniej jednej partycji logicznej na przestrzeń wymiany (swap). Tak czy inaczej w oknie podglądu układ warto przejrzeć i dostosować. Po wybraniu partycji mamy możliwość usunięcia jej, określenia systemu plików, wskazania katalogu montowania, określenia etykiery czy ustawienia flagi rozruchu. Jeżeli usuniemy jakąś partycję możemy utworzyć nową podająć jej rozmiar w MB. Warto rozważyć utworzenie partycji dla następujących katalogów (zob. zrzut poniżej): • • • • • • katalog główny / - partycja podstawowa, wystarczy 10 GB, partycję można ustawić flagę rozruchu przestrzeń wymiany swap - partycja podstawowa, 2 razy ilość dostępnej pamięci w serwerze /home - partycja logiczna, jeżeli chcielibyśmy korzystać z udostępnianych przez NFS katalogów domowych użytkowników, to jak najwięcej z pozostałego po podziale miejsca, w przeciwnym razie wystarczy np. 20 GB /tmp - partycja logiczna, pliki tymczasowe, wystarczy np. 6 GB /var - partycja logiczna, logi systemowe, wystarczy np. 6 GB w omawianych tu zastosowaniach (!) /srv - partycja logiczna, np. 80-100 GB, katalog cache proxy, ogólnodostępne zasoby sieciowe (samba, ftp, serwer www) Oczywiście podane rozmiary są dobrane dla stosunkowo niedużego dysku (ok. 200 GB) i małej bądź średniej sieci (kilkadziesiąt maszyn), powinny więc proporcjonalnie zostać dostosowane. Ponadto są dopasowane do przedstawionej dalej konfiguracji serwera szkolnego. W praktyce konfiguracja na jednym dysku 160 GB bez problemu wystarcza do obsługi pracowni komputerowej (15 jednostek), natomiast konfiguracja dwóch dysków 500 GB + 200 GB działa jako serwer dostępowy dla szkolnej sieci składającej się z 80 jednostek bardzo dobrze i w zasadzie jest nadmiarowa. Generlanie od czegoś trzeba wyjść, żeby po obserwacji obciążenia serwera dokonać korekt. Jeżeli partycja /srv miałaby się znaleźć na drugim dysku, można ją utworzyć i zamontować po zainstalowaniu systemu. Konfiguracjainterfejsó wsieciowych Po instalacji może okazać się, że nazwy interfejsów niekoniecznie odpowiadają przyjętym wyżej założeniom, tzn. eth0 to WAN, a eth1 - LAN. Po wydaniu komendy # ip addr, należy sprawdzić, jakie adresy (jeśli w ogóle) otrzymały karty sieciowe. Zakładając, że nasz serwer podłączony jest np. do routera udostępniającego internet, co najmniej jedna karta powinna otrzymać adres z DHCP. Po zidentyfikowaniu interfejsów można przystąpić do konfiguracji, której dokonuje się w pliku /etc/network/interfaces: auto lo iface lo inet loopback # WAN interface auto eth0 iface eth0 inet dhcp # LAN interface auto eth1 iface eth1 inet static address 192.168.19.1 network 192.168.19.0 netmask 255.255.255.0 broadcast 192.168.19.255 dns-nameservers 192.168.19.1 dns-search mojadomena.org dns-domain mojadomena.org Adres interfejsu eth0 nie musi być konfigurowany dynamicznie, można ustawić go na stałe wzorując się na konfiguracji interfejsu eth1. Jeżeli zachodzi potrzeba zmiany nazw przypisanych interfejsom, można to zrobić w pliku /etc/udev/rules.d/70-persistent-net.rules, w którym wpisujemy właściwe nazwy w ciągu: NAME="eth0". Po zapisaniu ustawień serwer trzeba zrestartować, a następnie sprawdzić, czy oba interfejsy otrzymały poprawne adresy (ip addr). Dnsmasq(serwerDHCPiDNS) Instalacja sudo apt-get install dnsmasq Konfiguracja Wszystkie ustawienia znajdują się w pliku /etc/dnsmasq.conf, chociaż moglibyśmy umieścić je w osobnych plikach w katalogu /etc/dnsmasq.d. Konfiguracja funkcjonalności serwera DHCP i DNS (cache) dla sieci lokalnej na interfejsie eth1 o adresie 192.168.19.1 przedstawia się następująco: domain-needed bogus-priv filterwin2k # nie korzystaj z pliku /etc/resolv.conf no-resolv # serwery Open DNS (lub naszego ISP) server=208.67.222.222 server=208.67.220.220 # nasza domena local=/mojadomena.org/ # nasłuchuj na interfejsie interface=eth1 expand-hosts domain=mojadomena.org # zakres adresów dhcp-range=192.168.19.100,192.168.19.200,255.255.255.0,12h # przykład rezerwacji adresów stałych dhcp-host=00:1E:33:49:0E:C2,stacja1,192.168.19.14,12h # dodatkowe opcje dhcp-option=3,192.168.19.1 # adres routera # Opcje dla Samby w roli PDC jeżeli korzystamy #dhcp-option=19,0 # opcja ip-forwarding off #dhcp-option=44,0.0.0.0 # WINS server(s) #dhcp-option=45,0.0.0.0 # netbios datagram distribution server #dhcp-option=46,8 # netbios node type (hybrid) dhcp-option=vendor:MSFT,2,1i # zwalnianie przydzielonego adresu DHCP # serwer autorytatywny dhcp-authoritative cache-size=200 W opcjach server podano adresy serwerów Open DNS, ale można podać oczywiście inne. Pozostałe ustawienia są bardzo dobrze opisane w oryginalnym pliku konfiguracyjnym (warto zrobić jego kopię). Aby wszystko działało, trzeba jeszcze pamiętać o dwóch rzeczach. W pliku /etc/dhcp/dhclient.conf: supersede domain-name "mojadomena.org"; prepend domain-name-servers 127.0.0.1; Natomiast w pliku /etc/hosts, który dnsmasq propaguje do wszystkich klientów, powinna znaleźć się linia definiująca adres naszego routera (i ewentualnie serwera Samby): #127.0.1.1 mojserwer.mojadomena.org mojserwer #to zakomentowujemy 192.168.19.1 mojserwer.mojadomena.org mojserwer Dnsmasq zużywa o wiele mniej zasobów niż tandem ISC DHCP + ISC Bind, jest też, jak widać, prostszy w konfiguracji. Przydzielone adresy przejrzymy za pomocą polecenia: cat /var/lib/misc/dnsmasq.leases Usługę uruchamiamy standardowo, tzn. sudo service dnsmasq start. Routingifirewall Routing, a zarazem firewall zrealizowane zostaną za pomocą iptables. Ponieważ będziemy korzystać z usługi NAT, w pliku /etc/sysctl.conf trzeba odkomentować opcję: net.ipv4.ip_forward=1. Zanim uruchomimy pełną konfigurację firewalla, warto utworzyć prosty skrypt testowo-awaryjny. W pliku /etc/mojserwer/testf.sh (nazwy katalogu i pliku można zmienić) wpisujemy: #!/bin/bash INTIF="eth1" INTNET="192.168.19.0/24" INTIP="192.168.19.254" EXTIF="eth0" EXTIP="`/sbin/ifconfig $EXTIF | grep 'inet addr' | awk '{print $2}' | sed -e 's/.*://'`" UNIVERSE="0.0.0.0/0" iptables iptables iptables iptables iptables iptables iptables -P -F -P -F -P -F -F INPUT ACCEPT INPUT OUTPUT ACCEPT OUTPUT FORWARD ACCEPT FORWARD -t nat if [ "`iptables -L | grep droplog`" ]; then iptables -F droplog fi iptables -X iptables -Z # Włączenie routowania iptables -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE iptables -A FORWARD -i $EXTIF -o $INTIF -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT Nadajemy plikowi prawo do wykonania: sudo chmod a+x /etc/mojserwer/testf.sh. Teraz możemy uruchomić firewall: sudo sh /etc/mojserwer/testf.sh – i sprawdzić, czy hosty podpięte do interfejsu LAN mogą połączyć się z internetem. Powyższy skrypt zezwala na każdy ruch sieciowy, należy więc wykorzystywać go tylko do testów lub w sytuacjach awaryjnych (ewentualne problemy z firewallem). Właściwy firewall zapiszmy w pliku /etc/mojserwer/firewall.sh (nazwę pliku można zmienić): #!/bin/bash echo -e "Reguły iptables...\n\n" # Nazwa interfejsu LAN, adres sieci LAN i adres IP interfejsu LAN INTIF="eth1" INTNET="192.168.19.0/24" INTIP="192.168.19.1" # Nazwa interfejsu WAN i jego adres IP EXTIF="eth0" EXTIP="`/sbin/ifconfig $EXTIF | grep 'inet addr' | awk '{print $2}' | sed -e 's/.*://'`" UNIVERSE="0.0.0.0/0" # Odkomentowana opcja w /etc/sysctl.conf, więc tu może być zakomentowane #echo 1 > /proc/sys/net/ipv4/ip_forward # Wyczyszczenie wszystkich łańcuchów i reguł, określenie domyślnej polityki odrzucania pakietów (DROP). iptables -P INPUT DROP iptables -F INPUT iptables -P OUTPUT DROP iptables -F OUTPUT iptables -P FORWARD DROP iptables -F FORWARD iptables -F -t nat if [ "`iptables -L | grep drop-and-log-it`" ]; then iptables -F drop-and-log-it fi iptables -X iptables -Z # Utworzenie łańcucha drop-and-log-it. iptables -N drop-and-log-it iptables -A drop-and-log-it -j LOG --log-level info iptables -A drop-and-log-it -j REJECT # Reguły INPUT # Wszystkie połączenia z localhost iptables -A INPUT -i lo -j ACCEPT # Odrzucenie połączeń podszywających się pod lokalne iptables -A INPUT -i $EXTIF -s $INTNET -d $UNIVERSE -j drop-and-log-it # Protokół ICMP iptables -A INPUT -i $INTIF -p icmp -s $INTNET -d $UNIVERSE -j ACCEPT iptables -A INPUT -i $EXTIF -p icmp -s $UNIVERSE -d $EXTIP -j ACCEPT # Połączeń zwrotne do serwera maskarady na interfejsie LAN iptables -A INPUT -i $INTIF -s $INTNET -d $INTIP -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # Komunikaty ICMP: ping i echo iptables -A INPUT -i $INTIF -p tcp -s $INTNET -d $UNIVERSE --dport 7 -j ACCEPT iptables -A INPUT -i $INTIF -p udp -s $INTNET -d $UNIVERSE --dport 7 -j ACCEPT # Zapytania DNS iptables -A INPUT -i $INTIF -p tcp -s $INTNET -d $UNIVERSE --dport 53 -j ACCEPT iptables -A INPUT -i $INTIF -p udp -s $INTNET -d $UNIVERSE --dport 53 -j ACCEPT # Usługi Samby (jeżeli korzystamy, odkomentować) # iptables -A INPUT -i $INTIF -p tcp -s $INTNET -d $UNIVERSE --dport 135 -j ACCEPT # iptables -A INPUT -i $INTIF -p tcp -s $INTNET -d $UNIVERSE --dport 139 -j ACCEPT # iptables -A INPUT -i $INTIF -p tcp -s $INTNET -d $UNIVERSE --dport 445 -j ACCEPT # iptables -A INPUT -i $INTIF -p udp -s $INTNET -d $UNIVERSE --dport 137 -j ACCEPT # iptables -A INPUT -i $INTIF -p udp -s $INTNET -d $UNIVERSE --dport 138 -j ACCEPT # Protokół SSH iptables -A INPUT -i $INTIF -p tcp -s $INTNET -d $UNIVERSE --dport 22 -j ACCEPT # Serwer proxy Squid na interfejsie LAN, port 3128 # iptables -A INPUT -i $INTIF -p tcp --dport 3128 -j ACCEPT # Squid3 transparent bez Dansguardiana # iptables -t nat -A PREROUTING -i $INTIF -p tcp --dport 80 -j REDIRECT --to-ports 3128 # Dansguardian + Squid3 transparent proxy iptables -A INPUT -i $INTIF -p tcp --dport 8080 -j ACCEPT iptables -t nat -A PREROUTING -i $INTIF -p tcp --dport 80 -j REDIRECT --to-ports 8080 # Połączenia przychodzące na interfejs WAN # Połączenia zwrotne do serwera maskarady na interfejsie WAN iptables -A INPUT -i $EXTIF -s $UNIVERSE -d $EXTIP -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # Komunikaty ICMP: ping i echo. iptables -A INPUT -i $EXTIF -p tcp -s $UNIVERSE -d $EXTIP --dport 7 -j ACCEPT iptables -A INPUT -i $EXTIF -p udp -s $UNIVERSE -d $EXTIP --dport 7 -j ACCEPT # Odrzucanie i logowanie wszystkich innych połączeń przychodzących iptables -A INPUT -s $UNIVERSE -d $UNIVERSE -j drop-and-log-it # Reguły OUTPUT # Odrzucanie połączeń do sieci LAN z WAN iptables -A OUTPUT -o $EXTIF -s $UNIVERSE -d $INTNET -j drop-and-log-it # Wszystkie połączenia localhost iptables -A OUTPUT -o lo -j ACCEPT # Zezwolenie dla LAN iptables -A OUTPUT -o $INTIF -d $INTNET -j ACCEPT # Zezwolenie na DHCP reply typu broadcast - dla MS Visty iptables -A OUTPUT -o $INTIF -p udp -s $INTIP --sport 67 -d $UNIVERSE --dport 68 -j ACCEPT # Zezwolenie dla WAN iptables -A OUTPUT -o $EXTIF -j ACCEPT # Odrzucanie i logowanie wszystkie innych połączeń wychodzących iptables -A OUTPUT -s $UNIVERSE -d $UNIVERSE -j drop-and-log-it # FORWARD: Włączenie routowania, tj. usługi NAT, zwanej maskaradą, czyli IMPASQ. # Routing na interfejsie WAN iptables -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE # Routowanie ustanowionych połączeń iptables -A FORWARD -i $EXTIF -o $INTIF -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # Odblokowanie poszczególnych usług # Protokół ICMP iptables -A FORWARD -i $INTIF -p icmp -j ACCEPT # Porty wysokie iptables -A FORWARD -i $INTIF -p tcp --dport 1024:65535 -j ACCEPT iptables -A FORWARD -i $INTIF -p udp --dport 1024:65535 -j ACCEPT # Komunikaty ICMP: ping, echo iptables -A FORWARD -i $INTIF -p tcp --dport 7 -j ACCEPT iptables -A FORWARD -i $INTIF -p udp --dport 7 -j ACCEPT # Usługa DNS iptables -A FORWARD -i $INTIF -p tcp --dport 53 -j ACCEPT iptables -A FORWARD -i $INTIF -p udp --dport 53 -j ACCEPT # Protokół SSH iptables -A FORWARD -i $INTIF -p tcp --dport 22 -j ACCEPT iptables -A FORWARD -i $INTIF -p udp --dport 22 -j ACCEPT # # # # HTTP-FORWARD-OK HTTP -- jeżeli nie korzystamy ze squida i dansguardiana, trzeba odkomentować: iptables -A FORWARD -i $INTIF -p tcp --dport 80 -j ACCEPT iptables -A FORWARD -i $INTIF -p udp --dport 80 -j ACCEPT # HTTPS iptables iptables # FTP iptables iptables # Poczta: iptables iptables iptables iptables iptables iptables iptables -A FORWARD -i $INTIF -p tcp --dport 443 -j ACCEPT -A FORWARD -i $INTIF -p udp --dport 443 -j ACCEPT -A FORWARD -i $INTIF -p tcp --dport 20:21 -j ACCEPT -A FORWARD -i $INTIF -p udp --dport 21 -j ACCEPT smtp, pop3, imap, legacy secure SMTP, smtp Submission, imap ssl, pop3s -A FORWARD -i $INTIF -p tcp --dport 25 -j ACCEPT -A FORWARD -i $INTIF -p tcp --dport 110 -j ACCEPT -A FORWARD -i $INTIF -p tcp --dport 143 -j ACCEPT -A FORWARD -i $INTIF -p tcp --dport 465 -j ACCEPT -A FORWARD -i $INTIF -p tcp --dport 587 -j ACCEPT -A FORWARD -i $INTIF -p tcp --dport 993 -j ACCEPT -A FORWARD -i $INTIF -p tcp --dport 995 -j ACCEPT # Odrzucanie i logowanie wszystkich pozostałych połączeń. iptables -A FORWARD -j drop-and-log-it echo -e "Zakończono!\n\n" Plikowi należy nadać prawa do wykonywania: chmod a+x /etc/mojserwer/firewall.sh. Aby reguły były wczytywane podczas startu systemu w pliku /etc/rc.local dopisujemy: cd /etc/mojserwer/ ./init_firewall.sh Nie jest to metoda optymalna, ale skuteczna. Firewall można też zrestartować np. po zmianach) czy uruchomić ręcznie: sh /etc/rc.local. W przedstawionej koniguracji zdefiniowany został dodatkowy łańcuch "drop-and-log-it", do którego trafiają pakiety niepasujące do reguł połączenia. Domyślnie wszystkie te wpisy trafiają do logu systemowego /var/log/syslog poprzedzone przedrostkiem "droplog:". Lepiej jednak zapisywać je w osobnym pliku, co ułatwia ewentualną póxniejszą analizę. Torzymy więc plik /etc/rsyslog.d/20-iptables.conf i wpisujemy: :msg, contains, "droplog: " -/var/log/iptables.log & ~ – dzięki czemu usługa rsyslog odpowiedzialna za logowanie przekieruje wpisy do pliku /var/log/iptables.log. Pozostaje jeszcze utworzenie pliku /etc/logrotate.d/iptables z zawartością: /var/log/iptables.log { daily rotate 4 compress delaycompress missingok } – co zabezpieczy nas przed niekontrolowanym rozrastaniem się logu firewalla. Raz na dzień log zostanie zachowany w spakowanej kopii, po czym utworzony zostanie nowy pusty plik. Squid(serwerproxy) Instalacja Squid ma bardzo wiele zastosowań, my użyjemy go w roli serwera proxy, który wykorzystując cache przyśpiesza pobieranie danych z internetu. Instalujemy odpowiedni pakiet: sudo apt-get install squid3 Konfiguracja Przed utworzeniem pliku konfiguracyjnego warto zmienić nazwę oryginalnego pliku, który zawiera opis wszystkich opcji, natomiast właściwy plik utworzyć od początku: sudo mv /etc/squid3/squid.conf /etc/squid3/squid.conf.org sudo touch /etc/squid3/squid.conf Do utworzonego pliku (squid.conf) wpisujemy: acl acl acl acl acl acl acl acl acl acl all src manager proto cache_object localhost src 127.0.0.1/32 ::1 to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1 localnet src 192.168.19.0/24 #Opis sieci LAN LAN src 192.168.19.0/24 #Opis sieci LAN safeports port 21 70 80 210 280 443 488 563 591 631 777 873 901 81 3128 1025-65535 sslports port 443 563 81 873 2087 10000 purge method PURGE connect method CONNECT follow_x_forwarded_for allow localhost http_access http_access http_access http_access http_access http_access http_access http_access http_access http_access allow manager localhost deny manager allow purge localhost deny purge deny !safeports deny CONNECT !sslports allow localhost allow localnet allow LAN deny all icp_access allow localnet icp_access deny all # Normalny proxy # http_port 3128 # Transparent proxy http_port 3128 intercept # Rozmiar cache'u cache_mem 256 MB # rozmiar dodatkowej(!) pamięci dla squida maximum_object_size_in_memory 512 KB memory_replacement_policy heap GDSF cache_replacement_policy heap LFUDA cache_dir aufs /srv/cache 8000 14 256 maximum_object_size 16 MB cache_swap_low 93 cache_swap_high 97 # Logi access_log /var/log/squid3/access.log cache_log /var/log/squid3/cache.log cache_store_log none logfile_rotate 5 log_icp_queries off # TIMEOUTS forward_timeout 240 second connect_timeout 30 second peer_connect_timeout 5 second read_timeout 600 second request_timeout 60 second shutdown_lifetime 10 second Bliżej przyjrzeć się trzeba opcji cache_dir. Dwie pierwsze ustawienia to ścieżka do katalogu cache i rozmiar tego katalogu w MB. Najlepsze efekty można osiągnąć umieszczając ten katalog na drugim dysku, na specjalnie wydzielonej partycji. W takim wypadku trzeba później do pliku /etc/fstab dopisać polecenie zamontowania tej partycji, np. w lokalizacji /home/cache. Prostszym, ale zadowalającym rozwiązaniem jest utworzenie katalogu cache na tym samym dysku co system, najlepiej na wydzielonej parycji, np.: /srv, którą utworzono podczas instalacji. Można również utworzyć cache w katalogu /home, np.: sudo mkdir /home/cache sudo chmod 777 /home/cache # uprawnienia do zapisu sudo chown proxy:proxy /home/cache # ustawienia właściciela i grupy Niezależnie od przyjętej lokalizacji, pamiętać trzeba, żeby squid miał do niej pełne uprawnienia (uprawnienia 777 w powyższym przykładzie są nawet nadmiarowe). Katalog cache trzeba następnie zainicjować: sudo squid3 -z. Domyślnie squid nasłuchuje na porcie 3128, jeżeli więc chcemy przetestować działanie usługi w skrypcie firewalla musi znaleźć się linia: iptables -A INPUT -i $INTIF -p tcp --dport 3128 -j ACCEPT Wtedy można ręcznie wpisać do przeglądarki na maszynie z LANu adres serwera proxy, czyli w naszym przypadku 192.168.19.1 i sprawdzić, czy można przeglądać internet. Jeżeli wszystko działa i mamy zamiar zainstalować Dansguardiana, wpis w firewalla można zakomentować i cały ruch przekierować do niego. Zarządzanie usługą: sudo service squid3 start [restart/stop]. Dansguardian(filtrowanietreś ci) Instalacja sudo apt-get install dansguardian Konfiguracja W pliku /etc/dansguardian/dansguardian.conf zmieniamy niewiele: language = 'polish' filterip =192.168.19.1 #ip, na którym ma nasłuchiwać dansguardian # zakomentowujemy linie zaczynającą się: #accessdeniedaddress = 'http://YOURSERVER.YOURDOMAIN...' forwardedfor = on Ostatnia opcja umożliwia wgląd w źródłowe IP klienta. W pliku /etc/dansguardian/dansguardianf1.conf opisującym domyślną grupę użytkowników (czyli wszystkich) ustalamy reguły filtrowania: naughtynesslimit = 150 #ustawienie wrażliwości filtra Dansguardian domyślnie nasłuchuje na porcie 8080, możemy więc konfigurować proxy ręcznie w przeglądarkach wybranych klientów. Wygodniejszym rozwiązaniem jest jednak puszczenie całego ruchu przez filtr automatycznie. W skrypcie firewalla muszą się wtedy znaleźć dwie linie: iptables -A INPUT -i $INTIF -p tcp --dport 8080 -j ACCEPT iptables -t nat -A PREROUTING -i $INTIF -p tcp --dport 80 -j REDIRECT --to-ports 8080 – które przekierowują cały ruch http do Dansguardiana. Dodatkowo można zablokować, tzn. nie otwierać w omawianej konfiguracji portu 3128, na którym nasłuchuje Squid, żeby uniemożliwić użytkownikom obchodzenie filtra. Dostrojenia blokowanych treści dokonujemy w listach zawartych w katalogu /etc/dansguardian/lists. Już na początku warto zmienić kilka ustawień: • • • • • • • • warto odblokować (czyli zakomentować) rozszerzenia występujące w plikach często pobieranych z sieci, np.: .exe, .js, .jse, .msi, .doc, .xls, .ppt, .gz, .tgz, .bz2, .zip, .rar, .mp3, .iso, .ogg, .wmf bannedmimetypelist – odblokować (czyli zakomentować) zawartość archiwów: application/gzip, #application/x-gzip, application/zip bannedsitelist – tu dopisujemy strony, które chcemy w całości zablokować, np.: facebook.com bannedurllist – strony, które chcemy zablokować częściowo, np.: members.home.net/uporn exceptionfilesitelist – strony, z których można pobierać pliki, np. serwery obsługujące aktualizacje Windows: windowsupdate.microsoft.com, download.windowsupdate.com itp. exceptioniplist – tu można dopisać adresy IP komputerów z sieci LAN, których nie należy filtrować, np. komputery z księgowości itp. exceptionsitelist – strony, na które w całości zezwalamy, np.: update.microsoft.com, watson.microsoft.com, archive.ubuntu.com, ftp.pl.debian.org, archlinux.org greysitelist – w listach "grey" wpisujemy strony, dla których wyłączamy filtrowanie URL, ale zachowujemy filtrowanie treści, czyli można je przeglądać pod warunkiem, że dany zasób nie zawiera czegoś niedozwolonych, np.: wp.pl, onet.pl, interia.pl, gazeta.pl bannedextensionlist – Uruchomienie usługi: sudo service dansguardian start. Monitoring Uwaga: większość z omawianych tu poleceń wymaga uprawnień administratora, w systemie Ubuntu polecenia poprzedzamy sudo, w Debianie przechodzimy na konto rootai uzywamy czystych poleceń lub konfigurujemy sudo. Zarządzanie usługami W systemach Ubuntu, Debian: • • • sudo service dansmasq start [restart, stop] sudo service squid3 start [restart, stop] sudo service dansguardian start [restart, stop] Można też używać skryptu invoke-rc.d lub wywoływać ręcznie skrypty z katalogu /etc/init.d. Logi • • • • • sudo tail -f /var/log/squid/iptables.log sudo tail -f /var/log/squid/access.log sudo tail -f /var/log/dansguardian/access.log sudo tail -f /var/log/squid/syslog cat /var/misc/dnsmasq.leases - podgląd dzierżaw DHCP Zamiast śledzenia logów (tail -f), można wyświetlić koniec logu: sudo tail -n100 /var/log/..., cały log podglądniemy używając polecenia cat: cat /var/log/.... Możemy też przeszukać log i wyświetlić tylko linie zawierające interesujące nas słowo: cat /var/log/syslog | grep error. Narzędzia Podstawowe • • • • ps -ef [-eF, axf, aux] - wyświetlenie procesów w różnych formatach lsof -i -n -P - wyświetlenie połączeń sieciowych netstat -tuap - wyświetlenie połączeń sieciowych vmstat 5 - wyświetlanie statystyk użycia pamięci, przestrzeni wymiany itd. w odstępach 5-sekundowych Zaawansowane Przedstawione poniżej narzędzia wymagają znajomości zagadnień funkcjonownia sieci, m. in. wiedzy na temat wykorzystywanych protokołów (model TCP/IP), pojęć (np. pakiet, gniazdo, port) i technik (np. skanowanie portów, przechwytywanie pakietów) itp. Co do zasady należy uruchamiać je z uprawnieniami administratora, czyli w Ubuntu Server przez sudo, w Debianie jako root. Instalacja: sudo apt-get install iptraf vnstat tcpdump tshark nmap Iptraf Narzędzie pokazujące ruch i statystyki na wybranych interfejsach. Vnstat Usługa mierząca ruch sieciowy, wyświetla różnego rodzaju statystyki pozwalające ocenić stopień użycia łącza, np. vnstat -h[-d|-w|-m] - statystyki godzinne, dzienne, tygodniowe, miesięczne. Tcpdump Pozwala przechwytywać i analizaować pakiety sieciowe. Bardzo przydatny w rozwiązywani problemów z niedziałajacymi usługami sieciowymi. • • • • • • tcpdump -D - lista interfejsów tcpdump [-A] -i eth1 tcp port 80 [-w plik] - nasłuchiwanie na wskazanym interfejsie pakietów http, opcja -A pokaże zawartość pakietów, opcja -w plik zapisuje pakiety do pliku, z którego można je później wczytać (-r), plik taki może być również analizowany w programie Wireshark. tcpdump -i eth1 host mojhost and mojserwer - śledzenie ruchu między wskazanymi hostami tcpdump -i eth1 src 192.168.1.2 and tcp dst port 80 - logowanie pakietów z podanego hosta kierowanych na port 80 tcpdump -i eth1 src 192.168.1.2 and dst port 80 and tcp\[13\] == 2 sudo tcpdump -i eth1 src 192.168.1.2 and dst port 80 and tcp\[tcpflags\]=tcp-syn - przechwytywanie pakietów z ustawioną flagą SYN, poprzedni przykład prezentuje możliwość badania wskazanych bitów w nagłówkach warstwy tcp • • • • • tcpdump -i eth1 -w zrzut.dmp \(tcp or udp\) and \(dst port 137 or dst port 138 or dst port 139\) - logowanie, tym razem do pliku (-w plik) pakietów NetBIOS tcpdump -i eth1 icmp - logowanie komunikacji protokołu icmp tcpdump -i eth1 icmp[0]=0 - logowanie tylko komunikatów echo replay -v, -vv, -vvv - przełączniki zwiększające szczegółowość informacji logowanych przez tcpdump -xX - pokazywanie zawartości pakietu w formacie heksadecymalnym Tshark TShark - czyli konsolowa wersja programu Wireshark. Narzędzie podobne do tcpdump, ale przyjaźniejsze, jeśli chodzi o analizowanie przechwyconych danych. • • tshark -D - lista interfejsów tshark -i eth1 tcp port 80 and host 192.168.1.4 - nasłuchiwanie na wskazanym interfejsie pakietów http od wskazanego hosta W Ubuntu Server po instalacji TSharka można umożliwić uruchamianie go z konta zwykłego użytkownika. W tym celu wydajemy następujące polecenia: sudo sudo sudo sudo sudo sudo groupadd wireshark usermod -a -G wireshark nasz_user dpkg-statoverride --add root wireshark 750 /usr/bin/dumpcap chgrp wireshark /usr/bin/dumpcap chmod 750 /usr/bin/dumpcap #ewentualnie setcap CAP_NET_RAW,CAP_NET_ADMIN,CAP_DAC_OVERRIDE+eip /usr/bin/dumpcap Po przelogowaniu się nasz_user może uruchamiać TSharka bez sudo. Nmap Bardzo przydatny w sieci lokalnej skaner otwartych portów czy uruchomionych usług. • nmap -v -sT localhost [192.168.1.0/24] - wykrywanie otwartych portów na lokalnym hoście albo w • całej sieci Inne opcje: -v -sS - skanowanie TCP SYN; -v -sF - skanowanie TCP FIN; -v -O - skanowanie UDP; -v -sR skanowanie TCP RPC