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

Podobne dokumenty