Pokazywanie postów oznaczonych etykietą dhcp. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą dhcp. Pokaż wszystkie posty

czwartek, 10 stycznia 2013

Problemy z Dnsmasq

Opis konfiguracji Dnsmasq na serwerze Ubuntu 12.04 LTS znajduje się tutaj. Czasem jednak nie wszystko do końca działa, jak trzeba. Dobrze skonfigurowany Dnsmasq powinien zapewniać rozwiązywanie nazw hostów podpiętych do lokalnej sieci. Można to osiągnąć stosując adresowanie statyczne IP oraz dopisując aliasy hostów w pliku /etc/host na serwerze. Plik ten jest następnie propagowany do hostów w sieci lokalnej. Jeżeli jednak chcemy korzystać z adresowania dynamicznego (co nie przeszkadza oczywiście adresować wybranych hostów statycznie) i mieć możliwość rozwiązywania lokalnych nazw, musimy sprawdzić kilka rzeczy, na co zwraca uwagę m.in. FAQ Dnsmasqa.
  1. Upewniamy się, że na interfejsie, na którym nasłuchujemy żądań z sieci lokalnej jest dobrze ustawiony adres broadcast, który w systemach opartych na debianie ustawiamy w /etc/network/interfaces; polecenie sudo ip addr pozwoli sprawdzić poprawność ustawień.
  2. Porty 67 i 68 dla protokołu UDP oraz ruch dla pakietów broadcast z adresem źródłowym 0.0.0.0 i adresem przeznaczenia 255.255.255.255 powinny być odblokowane w firewallu na interfejsie lokalnym. Jeżeli w sieci mamy MS Vistę, to do firewalla dodajemy:
    iptables -A OUTPUT -o $INTIF -p udp -s $INTIP --sport 67 -d $UNIVERSE --dport 68 -j ACCEPT
    - gdzie $INTIF to nazwa interfejsu LAN, np. eth1, $INTIP - adres IP naszego serwera DHCP, $UNIVERSE - dowolny adres, czyli 0.0.0.0/0 (zobacz przykładową konfigurację firewalla).
  3. W przypadku systemów Windows XP zaleca się we właściwościach lokalnego połączenia sieciowego podać nazwę lokalnej domeny, czyli Panel sterowania / Połączenia sieciowe, prawy klik na połączeniu lokalnym i Właściwości / Protokół internetowy TCP/IP / Właściwości / Zaawansowane / DNS / Sufiks DNS dla tego połączenia: .mojadomena.org.
  4. Dystrybucje linuksa korzystają zazwyczaj z dwóch różnych klinetów dhcp. Jest to albo dhcpcd - z nim nie ma problemu, tzn. domyślnie wysyła do serwera nazwę hosta, albo dhclient, który jest również domyślnie wykorzystywany przez ostatnie wersje Network Managera, np. w Archu. W tym ostatnim przypadku musimy utworzyć plik /etc/dhclient.conf i wpisać w nim linię: send host-name = pick-first-value(gethostname(), "ISC-dhclient"); lub po prostu: send host-name = mojhost;.
  5. Warto dodać, że Network Manager na stacjach roboczych z Archem, podpiętych do sieci lokalnej za pomocą kabla, nie jest potrzebny. Możemy go odinstalować za pomocą polecenia: pacman -Rns networkmanager network-manager-applet. Pamiętać tylko trzeba, żeby uruchamiać domyślnie usługę dhcpcd, czyli: systemctl enable dhcpcd@eth0.service.

czwartek, 9 sierpnia 2012

Ubuntu Server 12.04 LTS - Dnsmasq

Usługi DHCP i DNS są zazwyczaj realizowane przez wyspecjalizowane oprogramowanie, takie jak odpowiednio ISC DHCP i ISC Bind, niemniej w małych sieciach, gdzie ta sama maszyna pełni funkcję routera, serwera DHCP i DNS etc. można pomyśleć o alternatywnym rozwiązaniu, czyli Dnsmasq.

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 192.168.19.1 (zobacz post nt. konfiguracji Ubuntu Server 12.04 LTS) przedstawia się następująco:
domain-needed
bogus-priv
filterwin2k
# nie korzystaj z pliku /etc/resolv.conf
no-resolv
# serwery DNS, np. 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,hostwlanie,192.168.19.14,1h
#
dhcp-option=3,192.168.19.1 # adres routera
# Opcje dla Samby w roli PDC
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 podajemy adresy naszych serwerów DNS, w przykładzie powyżej mamy serwery Open DNS, pozostałe opcje 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 opcja prepend domain-name-servers 127.0.0.1; powinna być odkomentowana. Natomiast w pliku /etc/hosts, który dnsmasq propaguje do wszystkich klientów, powinna znaleźć się linia definiująca adres naszego routera i serwera Samby (bardzo ważne, jeżeli Samba jest serwerem PDC i korzystamy z profili wędrujących):
#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 zapisywane są w pliku:
cat /var/lib/misc/dnsmasq.leases

Usługę uruchamiamy standardowo, tzn. sudo service dnsmasq start, oczywiście jeżeli wcześniej skonfigurowaliśmy ISC Dhcp i Binda, trzeba je wyłączyć: sudo service isc-dhcp-server stop && sudo service bind9 stop. Żeby ISC Dhcp i Bind nie były uruchamiane podczas startu systemu (załóżmy, że chcemy wypróbować Dnsmasq nie odinstalowując niczego), można zrobić tak:
# poniższe da błędy podczas startu, które można pominąć
sudo chmod a-x /etc/init.d/bind9
# przenosimy linki uruchamiajce isc-dhcp do swojego katalogu domowego
sudo mv /etc/init.d/isc-dhcp-* ./
Po restarcie powinien uruchomić się Dnsmasq.

środa, 1 sierpnia 2012

Ubuntu Server 12.04 LTS - dynamiczna aktualizacja DNS przez DHCP

Chodzi nam o to, aby serwer DHCP na bieżąco aktualizował bazę usługi DNS. Obydwie usługi zainstalowane są na tej samej maszynie i obsługują sieć lokalną (zobacz poprzedni post).
Sieć LAN: 192.168.19.0/24
Adres serwera: 192.168.19.1

Ponieważ serwer Bind9 musi mieć prawo zapisu do plików definiujących naszą strefę lokalną, przenosimy pliki konfiguracyjne i nadajemy odpowiednie uprawnienia, następnie generujemy klucz zabezpieczający dla usługi DHCP:

sudo cp /etc/bind/db.* /var/lib/bind
sudo chown bind:bind /var/lib/bind/*
sudo dnssec-keygen -r /dev/urandom -a HMAC-MD5 -b 128 -n USER DHCP_UPDATER
sudo cat Kdhcp_updater.*.private|grep Key

Ostatnie polecenie wyświetli wygenerowany klucz na ekranie, np. Key: 5FROo2v0qrs5qS3pKL8pS2==, to co po dwukropku, należy skopiować do schowka.
Zmieniamy plik /etc/bind/named.conf.local:

key DHCP_UPDATER {
  algorithm HMAC-MD5.SIG-ALG.REG.INT;
  # Poniżej wklej skopiowany wcześniej klucz
  secret "5FROo2v0qrs5qS3pKL8pS2==";
};
# W definicjach stref zmieniamy opcje file oraz dodajemy
# opcje allow-update
zone "lo1cg.org" {
  type master;
  file "/var/lib/bind/db.lo1cg.org";
  allow-update { key DHCP_UPDATER; };
};

zone "19.168.192.in-addr.arpa" {
  type master;
  notify no;
  file "/var/lib/bind/db.192";
  allow-update { key DHCP_UPDATER; };
};

Trzeba jeszcze skonfigurować usługę DHCP. Modyfikujemy plik /etc/dhcp/dhcpd.conf:
# Na początku pliku dodajemy:
ddns-update-style interim;
ignore client-updates;
update-static-leases on;
ddns-domainname "mojadomena.org.";
ddns-rev-domainname "in-addr.arpa.";

# Przed definicją podsieci dodajemy:
key DHCP_UPDATER {
  algorithm HMAC-MD5.SIG-ALG.REG.INT;
  # Poniżej wklej skopiowany wcześniej klucz
  secret "5FROo2v0qrs5qS3pKL8pS2==";
};

zone lo1cg.org. {
  primary 127.0.0.1;
  key DHCP_UPDATER;
}

zone 19.168.192.in-addr.arpa. {
  primary 127.0.0.1;
  key DHCP_UPDATER;
}

Reszta bez zmian. Na uwagę zasługuje opcja update-static-leases, którą powyżej włączyliśmy. Odpowiada ona za dopisanie do bazy DNS rekordów dla wszystkich hostów, którym przypisujemy statyczne adresy IP poprzez usługę DHCP. Manual dhcpd.conf ostrzega, że może to generować dużo ruchu wewnątrz sieci, więc trzeba zwrócić uwagę na opcje min-lease-time i max-lease-time oraz przeglądać log systemowy.
Na koniec restartujemy obie usługi i sprawdzamy, czy poprawnie się uruchomiły:
sudo service bind9 restart
sudo service isc-dhcp-server restart
sudo tail -n 50 /var/log/syslog

Po uruchomieniu jakiejś maszyny w sieci LAN (mojhost), możemy sprawdzić, czy baza DNS została zaktualizowana:
host 192.168.19.100 #adres IP mojegohosta
100.19.168.192.in-addr.arpa domain name pointer mojhost.mojadomena.org.

wtorek, 24 lipca 2012

Ubuntu Serwer 12.04 LTS - konfiguracja

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, Samba jako PDC (Primary Domain Controller), transparentne proxy z filtracją treści WWW (Squid + Dansguardian). Konfiguracja taka może zostać zastosowana np. w szkolnych pracowniach, czy po modyfikacjach uwzględniających w większym stopniu zagadnienia bezpieczeństwa w małych firmach.

Konfiguracja interfejsów

Zmian dokonujemy 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 zewnętrzny (WAN, połączenie z Internetem) przyznawany będzie więc dynamicznie, natomiast wewnętrzny (LAN, połączenie z siecią lokalną) ustawiony został na 192.168.19.1. Użyteczne polecenia:
  • sudo nohup sh -c "ifdown eth0 && ifup eth0" - restart interfejsu eth0 ("sudo service networking restart" zostało odrzucone);
  • sudo ip addr - informacja o wszystkich interfejsach
  • sudo ifconfig - informacja o wszystkich interfejsach (obszerniejsza)


Konfiguracja routera i firewalla

Routing, a zarazem firewall zrealizowane zostanie za pomocą iptables. Ponieważ będziemy korzystać z usługi NAT, w pliku /etc/sysctl.conf trzeba odkomentować opcję: net.ipv4.ip_forward=1

W pliku /etc/mojserwer/firewall.sh (nazwa katalogu i pliku dowolna) tworzymy skrypt ładujący odpowiednie reguły:
#!/bin/bash
echo -e "Ładowanie reguł iptables...\n\n"
#Nazwa interfejsu LAN
INTIF="eth1"
# Adres sieci LAN
INTNET="192.168.19.0/24"
# Adres IP interfejsu LAN
INTIP="192.168.19.1"

# Nazwa interfejsu WAN
EXTIF="eth0"
# Adres IP interfejsu WAN (wykryty)
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.
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
 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 - trzeba wtedy odkomentować
#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śli wyłączony jest squid i dansguardian, poniższe 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 -A FORWARD -i $INTIF -p tcp --dport 443 -j ACCEPT
 iptables -A FORWARD -i $INTIF -p udp --dport 443 -j ACCEPT
# FTP
 iptables -A FORWARD -i $INTIF -p tcp --dport 20:21 -j ACCEPT
 iptables -A FORWARD -i $INTIF -p udp --dport 21 -j ACCEPT
# Poczta
 iptables -A FORWARD -i $INTIF -p tcp --dport 25 -j ACCEPT # smtp
 iptables -A FORWARD -i $INTIF -p tcp --dport 110 -j ACCEPT # pop3
 iptables -A FORWARD -i $INTIF -p tcp --dport 143 -j ACCEPT # imap
 iptables -A FORWARD -i $INTIF -p tcp --dport 465 -j ACCEPT # legacy secure SMTP
 iptables -A FORWARD -i $INTIF -p tcp --dport 587 -j ACCEPT # smtp Submission
 iptables -A FORWARD -i $INTIF -p tcp --dport 993 -j ACCEPT # imap ssl
 iptables -A FORWARD -i $INTIF -p tcp --dport 995 -j ACCEPT # pop3s
# Odrzucanie i logowanie wszystkich pozostałych połączeń. 
 iptables -A FORWARD -j drop-and-log-it
echo -e "Ładowanie reguł iptables zakończone!\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 umieszczamy wywołanie skryptu:

# Start firewalla
cd /etc/mojserwer/
./init_firewall.sh
#


Użyteczne polecenia:
  • sh /etc/rc.local - uruchomienie (restart) firewalla i routingu;

Serwer DHCP

Uzupełnienie: tandem isc-dhcp-server + bind można zastąpić usługą Dnsmasq.
Instalacja (wersja 4.1): apt-get install isc-dhcp3-server

Konfiguracja

W pliku /etc/default/isc-dhcp-server ustawiamy interfejs, na którym ma działać serwer: INTERFACES="eth1"

W pliku /etc/dhcp/dhcpd.conf definiujemy ustawienia globalne i podsieci:
ddns-update-style none;
option domain-name "mojadomena.org";
option domain-name-servers mojserwer.mojadomena.org;
default-lease-time 600;
max-lease-time 7200;
authoritative;
log-facility local7;
subnet 192.168.19.0 netmask 255.255.255.0 {
  range 192.168.19.100 192.168.19.200;
  option subnet-mask 255.255.255.0;
  option broadcast-address 192.168.19.255;
  option routers 192.168.19.1;
# DNS server
  option domain-name-servers 192.168.19.1;
  option domain-name "mojadomena.org";
# WINS server
  option netbios-name-servers 192.168.19.1;
}


Jak widać zdefiniowano podsieć LAN 192.168.19.0/24, w której serwer będzie przyznawał adresy w zakresie 192.168.19.100-192.168.19.200. Określono też domyślny adres naszego serwera, czyli 192.168.19.1, udostępniającego usługi routera, DNS i WINS. Uwaga: dopóki nie skonfigurujemy usługi DNS na serwerze, stacje nie będą mogły łączyć się z Internetem przy użyciu nazw domenowych. Na czas konfiguracji usługi DNS można podać adresy zewnętrznych serwerów DNS (np. swojego ISP lub open DNS), np.:

option domain-name-servers 208.67.222.222,208.67.220.220;

Użyteczne polecenia:
  • sudo service isc-dhcp-server start (restart) - uruchomienie (restart) serwera dhcp

Squid

Instalacja: 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


Zawartość pliku:

acl all src
acl manager proto cache_object
acl localhost src 127.0.0.1/32 ::1
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
acl localnet src 192.168.19.0/24 #Opis sieci LAN
acl LAN src 192.168.19.0/24 #Opis sieci LAN
acl safeports port 21 70 80 210 280 443 488 563 591 631 777 873 901 81 3128 1025-65535
acl sslports port 443 563 81 873 2087 10000
acl purge method PURGE
acl connect method CONNECT

follow_x_forwarded_for allow localhost

http_access allow manager localhost
http_access deny manager
http_access allow purge localhost
http_access deny purge
http_access deny !safeports
http_access deny CONNECT !sslports
http_access allow localhost
http_access allow localnet
http_access allow LAN
http_access 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 8 MB
maximum_object_size_in_memory 512 KB
memory_replacement_policy heap GDSF
cache_replacement_policy heap LFUDA
cache_dir aufs /home/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

Przygotowanie katalogu cache:
sudo mkdir /home/cache
sudo chmod 777 /home/cache
sudo chown proxy:proxy /home/cache


Utworzenie katalogu cache: sudo squid3 -z - nie powinno być żadnych błędów.

Użyteczne polecenia:
  • sudo service squid3 start (restart) - uruchomienie (restart) squida;

Dansguardian

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
#accessdeniedaddress = 'http://YOURSERVER.YOURDOMAIN/cgi-bin/dansguardian.pl'
forwardedfor = on

Jak widać, linię accessdeniedaddress zakomentowujemy, 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, proxy możemy więc konfigurować ręcznie w przeglądarkach wybranych klientów. Jeżeli jednak cały ruch ma przechodzić przez filtr automatycznie (bez wiedzy użytkoników), w skrypcie firewalla (patrz wyżej) muszą znaleźć się wpisy:

 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ć port 3128, na którym nasłuchuje Squid, żeby uniemożliwić użytkownikom obchodzenie filtra.

Użyteczne polecenia:
  • sudo service dansguardian start (restart) - uruchomienie (restart) usługi;
  • sudo dansguardian -g - polecenie ponownego wczytania konfiguracji, np. po dokonaniu poprawek w listach;

Bind - serwer DNS

Instalacja i konfiguracja Binda jako lokalnego serwera DNS jest opcjonalna. Jeżeli ją pominiemy, pamiętać trzeba o umieszczeniu poprawnych adresów zewnętrznych serwerów DNS w konfiguracji usługi DHCP. Minusem będzie brak możliwości odwoływania się do innych komputerów w sieci lokalnej za pomocą ich nazw. Warto więc rozważyć ewentualne zastąpienie tandemu Bind + ISC DHCP alternatywą, czyli usługą Dnsmasq.

Instalacja: sudo apt-get install bind9

Konfiguracja

Ustawień dokonujemy w plikach zawartych w katalogu /etc/bind. Podstawowe opcje ustawiamy w /etc/bind/named.conf.options:

options {
 directory "/var/cache/bind";
 forwarders {
  208.67.222.222;
  208.67.220.220;
 };
 dnssec-validation yes;
 auth-nxdomain no;
 listen-on { 192.168.19.1; 127.0.0.1; };
 listen-on-v6 { any; };
};


W pliku /etc/bind/named.conf.local definiujemy naszą domenę lokalną:

zone "mojadomena.org" {
  type master;
  file "/etc/bind/db.mojadomena.org";
};

zone "19.168.192.in-addr.arpa" {
  type master;
  notify no;
  file "/etc/bind/db.192";
};


W zdefiniowanych powyżej plikach konfiguracyjnych trzeba wprowadzić odpowiednie rekordy DNS. W pliku /etc/bind/db.mojadomena.org opisujemy naszą domenę:

$TTL 604800
@    IN     SOA     mojserwer.mojadomena.org.    admin.mojadomena.org. (
                    3 ; Serial
                    604800 ; Refresh
                    86400 ; Retry
                    2419200 ; Expire
                    604800 ); Negative Cache TTL 

@           IN      NS    mojserwer.mojadomena.org.
localhost   IN      A     127.0.0.1
mojserwer   IN      A     192.168.19.1
dns1        IN      CNAME mojserwer


W pliku /etc/bind/db.192 konfigurujemy domenę odwrotną:

$TTL 604800
@    IN     SOA     mojserwer.mojadomena.org.    admin.mojadomena.org. (
                    3 ; Serial
                    604800 ; Refresh
                    86400 ; Retry
                    2419200 ; Expire
                    604800 ); Negative Cache TTL 

@    IN     NS      mojserwer.
1    IN     PTR     mojserwer.mojadomena.org.


Powyższa konfiguracja ma zapewniać serwer autorytatywny dla domeny lokalnej z funkcją buforowania zapytań, dlatego trzeba jeszcze zadbać, aby wszystkie zapytania DNS na serwerze kierowane były do serwera lokalnego (buforującego). W pliku /etc/dhcp/dhclient.conf powinniśmy mieć wpisy:
supersede domain-name "mojadomena.org";
prepend domain-name-servers 127.0.0.1;
- dzięki czemu w pliku /etc/resolv.conf znajdzie się właściwy wpis: nameserver 127.0.0.1 oraz search mojadomena.org.

Użyteczne polecenia:
  • sudo service bind9 start (restart) - uruchomienie (restart) serwera DNS;
  • named-checkzone example.com /etc/bind/db.mojadomena.org - sprawdzenie poprawności konfiguracji domeny lokalnej;
  • named-checkzone 1.168.192.in-addr.arpa /etc/bind/db.192 - sprawdzenie poprawności konfiguracji domeny odwrotnej;
  • dig -x 127.0.0.1 - sprawdzenie działania serwera na interfejsie lokalnym;
  • dig google.pl - testowanie serwera, należy powtórzyć co najniej dwa razy, aby sprawdzić czas odpowiedzi, czyli działanie funkcji buforowania;
  • tail -f /var/log/syslog - śledzenie ewentualnych błędów;

Samba

Instalacja: sudo apt-get install samba

Przed edycją pliku konfiguracyjnego warto zrobić jego kopię: sudo cp /etc/samba/smb.conf.master /etc/samba/smb.conf.org. Edytujemy plik /etc/samba/smb.conf.master:

[global]
 workgroup = mojadomena.org
 server string = %h server (Samba, Ubuntu)
 interfaces = eth1
 bind interfaces only = Yes
 map to guest = Bad User
 pam password change = Yes
 passwd program = /usr/bin/passwd %u
 passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
 unix password sync = Yes
 syslog = 0
 log file = /var/log/samba/log.%m
 max log size = 100
 add machine script = /usr/sbin/useradd -N -g machines -c Machine -s /bin/false -d /dev/null %u
 logon script = scripts\logon.cmd
 logon path = \\%L\profiles\%U
 logon drive = H:
 logon home = \\%L\%U
 domain logons = Yes
 os level = 35
 preferred master = Yes
 domain master = Yes
 dns proxy = No
 usershare allow guests = Yes
 panic action = /usr/share/samba/panic-action %d
 idmap config * : backend = tdb

[homes]
 comment = Katalogi domowe
 valid users = %S
 read only = No
 create mask = 0700
 directory mask = 0700
 browseable = No

[netlogon]
 comment = Network Logon Service
 path = /srv/samba/netlogon
 guest ok = Yes
 browseable = No

[profiles]
 comment = Users profiles
 path = /srv/samba/profiles
 read only = No
 create mask = 0600
 directory mask = 0700
 profile acls = Yes
 browseable = No

[printers]
 comment = All Printers
 path = /var/spool/samba
 create mask = 0600
 guest ok = Yes
 printable = Yes
 print ok = Yes
 browseable = No

[print$]
 comment = Printer Drivers
 path = /var/lib/samba/printers

[public]
 comment = Katalog publiczny
 path = /home/public
 read only = No
 guest ok = Yes

[materialy]
 comment = Zasoby dla uczniow
 path = /home/materialy
 guest ok = Yes

Tworzymy katalogi na profile mobilne oraz katalogi udostępniane:
sudo mkdir -m 1777 -p /srv/samba/netlogon
sudo mkdir -m 1777 -p /srv/samba/profiles
sudo mkdir -m 777 -p /srv/samba/public
sudo mkdir -m 755 -p /srv/samba/materialy


Dla każdego użytkownika i każdej maszyny, którą chcemy podłączyć do PDC (kontrolera domeny) musimy utworzyć konta. Ale najpierw utworzymy i zmapujemy w domenie przydatne grupy:
sudo addgroup -gid 200 ntadmins
sudo addgroup -gid 201 machines

sudo addgroup -gid 202 designers
sudo addgroup -gid 203 nobody
net groupmap add ntgroup="Domain Admins" unixgroup=ntadmins rid=512 type=d
net groupmap add ntgroup="Domain Users"  unixgroup=users rid=513 type=d
net groupmap add ntgroup="Domain Guests" unixgroup=nobody rid=514 type=d
net groupmap add ntgroup="Designers" unixgroup=designers type=d


Dodanie konta dla maszyny:
/usr/bin/useradd -g machines -d /dev/null -c "machine nickname" -s /bin/false test$
passwd -l test$
smbpasswd -a -m test


Dodanie konta dla użytkownika, dodanie użytkownika do przykładowych grup, dodanie użytkownika do kont samby:
sudo adduser juzio
sudo groupmod -a -G users,designers juzio
sudo smbpasswd -a juzio


Logi samby znajdziemy w /var/log/samba.

Podręczne polecenia:
  • sudo service smbd start (restart) - start (restart) podstawowej usługi
  • sudo service nmbd start (restart) - start (restart) usługi przeglądania
  • sudo pdbedit -L -v - podgląd użytkowników Samby

Vnstat

Instalacja i konfiguracja: sudo apt-get install vnstat
sudo vnstat -u -i eth0
sudo vnstat -u -i eth1

Przeglądanie statystyk:
sudo vnstat przełącznik
  • -q - ogólne
  • -s - krótkie
  • -h - ostatnie 12 godzin
  • -d - ostatnie dni
  • -m - miesiące
  • -l - statystyki w czasie rzeczywistym

Optymalizacja

Przede wszystkim podana wyżej konfiguracja Squida i Dansguardiana działa, ale należy dostosować ją do konkretnych warunków, czyli warto obserwować logi:
tail -f /var/log/squid3/access.log oraz tail -f /var/log/dansguardian/access.log
Warto zastanowić się, które strony są zaufane/potrzebna, a które należy blokować i dopisać je do plików odpowiednio /etc/dansguardian/lists/exceptionsitelist oraz /etc/dansguardian/lists/bannedsitelist.

Na serwerze nie powinny działać żadne usługi, które nie są na nim niezbędne, więc co można usunąć?
  • sudo apt-get purge whoopsie - usunięcie narzędzia raportowania błędów (instalowane automatycznie)
  • sudo apt-get purge update-notifier-common - usunięcie zbędnych na serwerze powiadomień o aktualizacjach
  • sudo apt-get purge apport apport-symptoms python-apport python-problem-report - usunięcie usługi tworzącej raporty awarii

Aktualizacja: powyższa konfiguracja działa również na Debianie (Wheezy), przy czym ISC DHCP Server + Bind zastąpiono pakietem Dnsmasq.

Zobacz: Dokumentacja