Poniżej przedstawiam instrukcję instalacji i konfiguracji serwera Ubuntu do pracy jako router z automatycznym filtrem treści stron internetowych. Przykładem zastosowania jest usunięcie możliwości oglądania treści pornograficznych na stronach www lub zablokowanie dostępu do gier online.
INSTALACJA SYSTEMU
– ściągnięcie najnowszej dystrybucji Ubuntu Server (poniższe instrukcje sprawdzone dla wersji 16.04 – uwaga! tylko aktualne wersje mają działające repozytoria!)
– uruchomienie instalatora z CD lub USB
– wybranie języka, następnie wybranie opcji „Instalacja Ubuntu Server” i potwierdzenie chęci instalacji mimo nieukończonego tłumaczenia instalatora.
– wybór lokalizacji („Polska”) oraz układu klawiatury (pomijamy wykrywanie, wybieramy kraj i układ „Polski”).
– wskazanie podstawowego interfejsu sieciowego, czyli karty sieciowej podłączonej do internetu, oraz podanie nazwy serwera. Nazwy wykrytych kart należy zapisać!
– utworzenie konta użytkownika: podanie pełnej nazwy, loginu oraz dwukrotnie hasła.
– odmówienie szyfrowania katalogu domowego.
– ustawienie strefy czasowej: zatwierdzenie domyślnie wybranej strefy „Europe/Warsaw”.
– przygotowania partycji i zapisanie zmian na dysku (najszybciej automatycznie: „przewodnik – cały dysk”).
– zainstalowanie pakietów na twardym dysku.
– wprowadzenie danych ewentualnego serwera proxy, jeśli łączymy się przez niego w sieci.
– określenie sposobu aktualizacji systemu. Najlepiej „Brak aktualizacji automatycznych”.
– wybór zestawu (ról) oprogramowania serwerowego. Oprócz zaznaczonej opcji wybieramy dodatkowo „OpenSSH Server” (przyda się do konfiguracji zdalnej).
– zainstalowanie boot menedżera GRUB. Potwierdzamy propozycję zainstalowania w MBR (master boot record).
– nastąpi ponowne uruchomienie komputera.
– dokonujemy aktualizacji całego systemu poprzez
apt-get dist-upgrade
– ponowne uruchomienie komputera – instalacja zakończona.
UWAGA NAD UWAGAMI!
Jeżeli cokolwiek skopiujesz z tej strony w Windows i będziesz wklejał do plików w linuks pojawi się problem ze znakami końca linii. Każdy plik przygotowany w ten sposób trzeba sprawdzić w edytorze vi i pousuwać na końcu linii znaki ^M !!! Bez tego skrypty bash będą wykonywane z błędami!
Dodatkowowo – wdytor w systemie CMS tej strony zamienia podwójne znaki — na pojedyncze. Starałem się to poprawić, ale mogłem coś jeszcze przeoczyć!
PO INSTALACJI – KONFIGURACJA INTERFEJSÓW SIECIOWYCH
#ip addr
Określ i zapisz nazwy interfejsów i sprawdź który został przypisany do WAN, a który do LAN
następnie edytuj plik /etc/network/interfaces
dokonując zapisu:
auto lo
iface lo inet loopback
# WAN interface przez DHCP
auto eth0
iface eth0 inet dhcp
# LAN interface statycznie
auto eth1
iface eth1 inet static
address 192.168.100.1
network 192.168.100.0
netmask 255.255.255.0
broadcast 192.168.100.255
dns-nameservers 192.168.100.1
dns-search mojadomena.org
dns-domain mojadomena.org
– zapisz plik i zrestartuj komputer
SERWER DHCP i DNS – DNSMASQ
#sudo apt-get install dnsmasq
Edytuj plik /etc/dnsmasq.conf do postaci:
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 – ustaw swój interfejs LAN
interface=eth1
expand-hosts
domain=mojadomena.org
# zakres adresów
dhcp-range=192.168.100.10,192.168.100.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.100.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
Następnie edytuj plik /etc/dhcp/dhclient.conf
supersede domain-name „mojadomena.org”;
prepend domain-name-servers 127.0.0.1;
Edytuj plik /etc/hosts
#127.0.1.1 mojserwer.mojadomena.org mojserwer #to zakomentowujemy
192.168.100.1 mojserwer.mojadomena.org mojserwer
Serwer uruchamiamy
sudo service dnsmasq start
Teraz należy sprawdzić czy serwer przydziela prawidłowo adresy IP i inne potrzebne parametry (w windows ipconfig /all) Jeśli nie działa może być konieczny restart serwera.
FIREWALL i NAT
W pliku /etc/sysctl.conf trzeba odkomentować opcję:
net.ipv4.ip_forward=1
Utwórz plik tekstowy /etc/dowolny_katalog/firewall.sh
W środku wklej treść:
#!/bin/bash
INTIF=”eth1″
INTNET=”192.168.100.0/24″
INTIP=”192.168.100.254″
EXTIF=”eth0″
EXTIP=”`/sbin/ifconfig $EXTIF | grep 'inet addr’ | awk '{print $2}’ | sed -e 's/.*://’`”
UNIVERSE=”0.0.0.0/0″
iptables -P INPUT ACCEPT
iptables -F INPUT
iptables -P OUTPUT ACCEPT
iptables -F OUTPUT
iptables -P FORWARD ACCEPT
iptables -F FORWARD
iptables -F -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 tego pliku:
sudo chmod a+x /etc/mojserwer/testf.sh
Teraz możemy już uruchomić przygotowany firewall:
sudo sh /etc/mojserwer/testf.sh
– i sprawdzić, czy hosty podpięte do interfejsu LAN mogą połączyć się z internetem.
Uwaga! Skrypt musi się wykonać bez żadnego błędu. Jeśli masz z tym problem sprawdź czy masz prawidłowe znaki końca linii (edytor vi -> znaki ^M trzeba pousuwać).
Powyższy firewall przepuszcza cały ruch. Bardziej przydatny skrypt poniżej (uwaga na podwójne minusy przy –ctstate, –log-level, –dport, –to-ports, –sport):
#!/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.100.0/24"
INTIP="192.168.100.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łączenia 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
# Zapytania DHCP
iptables -A INPUT -i $INTIF -p udp --dport 67 -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 -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: smtp, pop3, imap, legacy secure SMTP, smtp Submission, imap ssl, pop3s
iptables -A FORWARD -i $INTIF -p tcp --dport 25 -j ACCEPT
iptables -A FORWARD -i $INTIF -p tcp --dport 110 -j ACCEPT
iptables -A FORWARD -i $INTIF -p tcp --dport 143 -j ACCEPT
iptables -A FORWARD -i $INTIF -p tcp --dport 465 -j ACCEPT
iptables -A FORWARD -i $INTIF -p tcp --dport 587 -j ACCEPT
iptables -A FORWARD -i $INTIF -p tcp --dport 993 -j ACCEPT
iptables -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"
Uruchamianie firewall przy starcie systemu: w pliku /etc/rc.local dopisujemy:
/etc/nazwa_folderu_z_plikiem_firewall/firewall.sh
(przed exit 0)
SQUID – SERWER PROXY
Komendy po kolei:
sudo apt-get install squid3
sudo mv /etc/squid/squid.conf /etc/squid/squid.conf.org
sudo touch /etc/squid/squid.conf
Edytujemy plik /etc/squid/squid.conf – wklejamy poniższe:
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.100.0/24 #Opis sieci LAN
acl LAN src 192.168.100.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
# 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
Następnie wykonujemy komendy (przygotowanie katalogu cache):
sudo mkdir /srv/cache
sudo chmod 777 /srv/cache # uprawnienia do zapisu
sudo chown proxy:proxy /srv/cache # ustawienia właściciela i grupy
Inicjujemy squida (wyświetli ewentualne błędy w konfiguracji – jeśli czysto to jest OK)
sudo squid3 -z
Poprawiamy ewentualne błędy
Zarządzanie squidem:
sudo service squid start [restart/stop]
Dodajemy do firewall wpis otwierający port 3128 (na końcu pliku)
iptables -A INPUT -i $INTIF -p tcp –dport 3128 -j ACCEPT
Po restarcie powinniśmy połączyć się z internetem przez port 3128 (sprawdź koniecznie czy działa zmieniając ustawienia proxy w przeglądarce – IP LAN serwera i port 3128)
DANSGUARDIAN – FILTROWANIE ZABRONIONEJ TREŚCI
sudo apt-get install dansguardian
W pliku /etc/dansguardian/dansguardian.conf zmieniamy:
language = 'polish’
filterip =192.168.100.1 #ip, na którym ma nasłuchiwać dansguardian czyli nasz LAN
# zakomentowujemy linię zaczynającą się:
#accessdeniedaddress = 'http://YOURSERVER.YOURDOMAIN…’
forwardedfor = on
W pliku /etc/dansguardian/dansguardianf1.conf
naughtynesslimit = 150 #ustawienie wrażliwości filtra – czym mniej tym większe restrykcje
W tym momencie filtr powinien działać przy ustawieniu przeglądarki na proxy 8080 – przetestuj koniecznie przed dalszymi krokami!
Żeby ruch przechodził automatycznie przez filtr bez konieczności ręcznej konfiguracji przeglądarki należy do firewalla dodać zapis:
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
(na końcu pliku)
Pozostaje jedynie zablokować możliwość obejścia filtrowania blokując port 3128 poprzez zmianę ACCEPT na DROP w
pliku firewall
iptables -A INPUT -i $INTIF -p tcp –dport 3128 -j DROP #wcześniej było ACCEPT
Dostrojenia blokowanych treści dokonujemy w listach zawartych w katalogu /etc/dansguardian/lists. Już na początku warto zmienić ustawienia:
bannedextensionlist – odblokować (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ć (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
Uruchomienie usługi:
sudo service dansguardian start
Restart po zmianac:
sudo service dansguardian restart
Dostosowanie wyświetlanej strony blokady można wykonać w pliku:
/etc/dansguardian/languages/polish/template.html
(standardowy HTML + kilka dodatkowych funkcji opisanych w komentarzu do tego pliku, można wyświetlać obrazki z internetu)
Warto wyświetlić gdzieś na stronie blokady opcję -REASONLOGGED- która wyświetla szczegółowe informacje o powodach blokady, wraz z odnalezionymi wyrazami zabronionymi oraz ich wagami. Obserwacja tej zmiennej pomaga w lepszym dopasowaniu konfiguracji filtrowania do naszych potrzeb. Dansguardian jest doskonałym programem,ale należy pamiętać, że nie da się całkowicie zablokować niechcianej treści. Filtr obsługuje wyłącznie połączenia nieszyfrowane na porcie 80. W przypadku stron HTTPS filtr nie zadziała. To samo dotyczy szyfrowanych web proxy.
Post Views: 1 030