RSS

Stawiamy serwer PROXY – SQUID+DansGuardian

25 Wrz

O samym sensie wdrażania PROXY nie będę się rozpisywał, jeżeli już ktoś szuka jak to zrobić to zakładam że wie co korzysta z tego powodu. Dla innych polecam lekturę http://pl.wikipedia.org/wiki/Serwer_po%C5%9Brednicz%C4%85cy

W tym wpisie zajmiemy się instalacją serwera PROXY jakim jest Squid razem z DansGuardianem, da to nam pełną kontrolę nad treścią wyświetlaną na komputerach klientów. Pokażę także na przykładzie naszej-klasy.pl jak filtrować ruch przy tej konfiguracji.

Instalacja SQUIDa :
$ sudo -i
# apt-get update
# apt-get install squid

Po instalacji pozostaje nam edycja configów, w tym celu wydajemy polecenie :
# mv /etc/squid/squid.conf /etc/squid/squid.conf.old
# echo > /etc/squid/squid.conf
# pico /etc/squid/squid.conf

I wpisujemy :
# NETWORK OPTIONS
# -----------------------------------------------------------------------------
# Port na którym squid nasłuchuje i transparentność
http_port 3128 transparent

# OPTIONS WHICH AFFECT THE CACHE SIZE
# -----------------------------------------------------------------------------
# Należy pamiętać iż to nie jest cała pamięć użyta przez squida
# Tu jest ustawienie dla mnie, a mam 1024 MB.
# cache_mem = (RAM - linux - apache - mysql - MTA - userzy - etc) / 3
cache_mem 128 MB

# Informacje na jakim poziomie zapełnienia ma pracować dyskowy cache
# Przy 80% demon powinien zacząć się martwić jego wymianą (low) lub agresywnie wziąć się do roboty (high)
# przy pełnym zapełnieniu cache.
cache_swap_low 80%
cache_swap_high 100%

# LFUDA ma hit rate mniejszy, a byte hit o kilkanaście procent większy od GDSF.
# Zatem ustawiamy politykę LFUDA dla dysku (optymalizacja dla byte hit ratio)
# i GDSF dla pamięci (zatrzymuje w cache niewielkie często używane obiekty).
# Jeśli używamy polityki LFUDA dla dysku poniższy parametr należy zwiększyć,
# w celu zmaksymalizowania byte hit.
maximum_object_size 32768 KB
# Poniżej tej wartości obiekty NIE są zachowywane na dysku.
minimum_object_size 0 KB
maximum_object_size_in_memory 128 KB
ipcache_size 16384
fqdncache_size 0
cache_replacement_policy heap LFUDA
memory_replacement_policy heap GDSF

# LOGFILE PATHNAMES AND CACHE DIRECTORIES
# -----------------------------------------------------------------------------
# Chce mieć 6GB cache (mam na dysku 16GB wolnego)
# Liczba środkowa w parametrze cache_dir to liczba katalogów pierwszego poziomu.
# Wyliczamy ją dzieląc miejsce przeznaczone na cache przez średnią wielkość obiektu,
# a nastepnie wynik jeszcze raz dzielimy przez 32. Przykładowo:
# Liczba katalogów pierwszego poziomu = (6144 / (16 * 32))
#cache_dir ufs /usr/local/squid/var/cache 6144 12 256
cache_dir ufs /var/spool/squid 4000 12 256

# Logi (Permanentna inwigilacja + wyłączenie logów niepotrzebnych ani mi, ani squidowi).
# Wyłączenie logowania wpływa na wydajność systemu.
cache_log /dev/null
cache_store_log none

# OPTIONS FOR EXTERNAL SUPPORT PROGRAMS
# -----------------------------------------------------------------------------
dns_nameservers 192.168.0.1

# 1. Url
root@ubuntu:~# more /etc/squid/squid.conf

# NETWORK OPTIONS
# -----------------------------------------------------------------------------
# Port na którym squid nasłuchuje i transparentność
http_port 3128 transparent

# OPTIONS WHICH AFFECT THE CACHE SIZE
# -----------------------------------------------------------------------------
# Należy pamiętać iż to nie jest cała pamięć użyta przez squida
# Tu jest ustawienie dla mnie, a mam 1024 MB.
# cache_mem = (RAM - linux - apache - mysql - MTA - userzy - etc) / 3
cache_mem 128 MB

# Informacje na jakim poziomie zapełnienia ma pracować dyskowy cache
# Przy 80% demon powinien zacząć się martwić jego wymianą (low) lub agresywnie wziąć się do roboty (high)
# przy pełnym zapełnieniu cache.
cache_swap_low 80%
cache_swap_high 100%

# LFUDA ma hit rate mniejszy, a byte hit o kilkanaście procent większy od GDSF.
# Zatem ustawiamy politykę LFUDA dla dysku (optymalizacja dla byte hit ratio)
# i GDSF dla pamięci (zatrzymuje w cache niewielkie często używane obiekty).
# Jeśli używamy polityki LFUDA dla dysku poniższy parametr należy zwiększyć,
# w celu zmaksymalizowania byte hit.
maximum_object_size 32768 KB
# Poniżej tej wartości obiekty NIE są zachowywane na dysku.
minimum_object_size 0 KB
maximum_object_size_in_memory 128 KB
ipcache_size 16384
fqdncache_size 0
cache_replacement_policy heap LFUDA
memory_replacement_policy heap GDSF

# LOGFILE PATHNAMES AND CACHE DIRECTORIES
# -----------------------------------------------------------------------------
# Chce mieć 6GB cache (mam na dysku 16GB wolnego)
# Liczba środkowa w parametrze cache_dir to liczba katalogów pierwszego poziomu.
# Wyliczamy ją dzieląc miejsce przeznaczone na cache przez średnią wielkość obiektu,
# a nastepnie wynik jeszcze raz dzielimy przez 32. Przykładowo:
# Liczba katalogów pierwszego poziomu = (6144 / (16 * 32))
#cache_dir ufs /usr/local/squid/var/cache 6144 12 256
cache_dir ufs /var/spool/squid 4000 12 256

# Logi (Permanentna inwigilacja + wyłączenie logów niepotrzebnych ani mi, ani squidowi).
# Wyłączenie logowania wpływa na wydajność systemu.
cache_log /dev/null
cache_store_log none

# OPTIONS FOR EXTERNAL SUPPORT PROGRAMS
# -----------------------------------------------------------------------------
dns_nameservers 192.168.0.1

# 1. Url
# 2. Minimalny wiek obiektu w minutach
# 3. Maksymalny stosunek wieku obiektu do czasu od ostatniej modyfikacji
# 4. Maksymalny wiek obiektu w minutach
# Proponuję usunąć linijkę z uporem maniaka lansowaną w necie ^gopher: 1440 0% 1440.
# Znasz kogoś kto używa świstaka w XXI w?
# Kolejne linijki były skuteczne w 2005 roku. Odkąd Microsoft wprowadził ograniczenia
# dla niezarejestrowanych kopii ruch zmalał 200 krotnie usmiech
refresh_pattern -i \.(gif|jpg|jpeg|png|html|bmp) 0 50% 7200 reload-into-ims
refresh_pattern -i \.(zip|gz|bz2|exe|rar|mp3|mpg|avi|wmv|vqf|ogg) 43200 100% 43200 reload-into-ims
refresh_pattern windowsupdate.com/.*\.(cab|exe|dll) 43200 100% 43200 reload-into-ims
refresh_pattern download.microsoft.com/.*\.(cab|exe|dll) 43200 100% 43200 reload-into-ims
refresh_pattern au.download.windowsupdate.com/.*\.(cab|exe|dll) 43200 100% 43200 reload-into-ims
refresh_pattern symantecliveupdate.com/.*\.(zip|exe) 43200 100% 43200 reload-into-ims
refresh_pattern windowsupdate.com/.*\.(cab|exe) 43200 100% 43200 reload-into-ims
refresh_pattern download.microsoft.com/.*\.(cab|exe) 43200 100% 43200 reload-into-ims
refresh_pattern avast.com/.*\.(vpu|vpaa) 43200 100% 43200 reload-into-ims
refresh_pattern . 0 20% 4320


# TIMEOUTS
# -----------------------------------------------------------------------------
half_closed_clients off

# ACCESS CONTROLS
# -----------------------------------------------------------------------------
acl all src 0.0.0.0/0.0.0.0
acl siec src 192.168.1.0/255.255.255.0

acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
#acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http

acl ZA-DUZO maxconn 50


http_access deny ZA-DUZO siec

http_access allow siec

http_access deny !Safe_ports
#http_access deny CONNECT !SSL_ports
#http_access deny !SSL_ports

# ADMINISTRATIVE PARAMETERS
# -----------------------------------------------------------------------------
visible_hostname lazowski.us

# MISCELLANEOUS
# -----------------------------------------------------------------------------
# Anonimowość dla użytkownikow za natem - squid ustawia w nagłówku HTTP/1.1
# pole 'X-Forwarded-For: unknown' zamiast 'X-Forwarded-For: 10.10.10.171'.
# Więcej o tym: http://www.squid-cache.org/Doc/FAQ/FAQ-4.html#ss4.18
forwarded_for off
# Wyłączenie logowania zapytań ICP z innych serwerów web cache
log_icp_queries off
store_avg_object_size 16 KB
store_objects_per_bucket 36
# Włączenie buforowania dla logów zapisywanych przy pomocy funkcji stdio (cache_log)
buffered_logs on
reload_into_ims on
acl FTP proto FTP
always_direct allow FTP

strip_query_terms off

Na koniec sprawdzamy czy istnieje katalog /var/spool/squid , jeżeli nie to tworzymygo.


Instalujemy DansGuardiana :

# apt-get install dansguardian

Przenosimy config DG w bezpieczne miejsce i tworzymy nowy pusty plik /etc/dansguardian/dansguardian.conf
# pico /etc/dansguardian/dansguardian.conf
i wklejamy do niego :

reportinglevel = 3
languagedir = '/etc/dansguardian/languages'
language = 'polish'
loglevel = 2
logexceptionhits = 2
logfileformat = 1
filterip =
filterport = 8080
proxyip = 127.0.0.1
proxyport = 3128
nonstandarddelimiter = on
usecustombannedimage = on
custombannedimagefile = '/usr/share/dansguardian/transparent1x1.gif'

filtergroups = 1
filtergroupslist = '/etc/dansguardian/lists/filtergroupslist'
bannediplist = '/etc/dansguardian/lists/bannediplist'
exceptioniplist = '/etc/dansguardian/lists/exceptioniplist'
showweightedfound = on
weightedphrasemode = 2
urlcachenumber = 1000
urlcacheage = 900
scancleancache = on
phrasefiltermode = 2
preservecase = 0
hexdecodecontent = off
forcequicksearch = off
reverseaddresslookups = off
reverseclientiplookups = off
logclienthostnames = off
createlistcachefiles = on
maxuploadsize = -1
maxcontentfiltersize = 256
maxcontentramcachescansize = 2000
maxcontentfilecachescansize = 20000
filecachedir = '/tmp'
deletedownloadedtempfiles = on
initialtrickledelay = 20
trickledelay = 10
downloadmanager = '/etc/dansguardian/downloadmanagers/fancy.conf'
downloadmanager = '/etc/dansguardian/downloadmanagers/default.conf'
contentscanner = '/etc/dansguardian/contentscanners/clamav.conf'
contentscannertimeout = 60
contentscanexceptions = off
recheckreplacedurls = off
forwardedfor = off
usexforwardedfor = off
logconnectionhandlingerrors = on
logchildprocesshandling = off
maxchildren = 120
minchildren = 8
minsparechildren = 4
preforkchildren = 6
maxsparechildren = 32
maxagechildren = 500
maxips = 0
ipcfilename = '/tmp/.dguardianipc'
urlipcfilename = '/tmp/.dguardianurlipc'
ipipcfilename = '/tmp/.dguardianipipc'
nodaemon = off
nologger = off
logadblocks = off
loguseragent = off
daemonuser = 'dansguardian'
daemongroup = 'dansguardian'
softrestart = off

Konfigurujemy przekierowywanie portów do naszego SQUIDa :
# pico /bin/masq
W pliku /bin/masq wklejamy :
echo "1" > /proc/sys/net/ipv4/ip_forward
/sbin/sysctl -w net.ipv4.tcp_max_syn_backlog=1280
/sbin/sysctl -w net.ipv4.icmp_echo_ignore_broadcasts=1
/sbin/iptables -F -t nat
/sbin/iptables -X -t nat
/sbin/iptables -F -t filter
/sbin/iptables -X -t filter
/sbin/iptables -t filter -P FORWARD DROP
/sbin/iptables -t filter -A FORWARD -s 192.168.1.0/255.255.255.0 -d 0/0 -j ACCEPT
/sbin/iptables -t filter -A FORWARD -s 0/0 -d 192.168.1.0/255.255.255.0 -j ACCEPT
/sbin/iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d 0/0 -j MASQUERADE

#przekierowanie ruchu na Dansguardian nie tylko po porcie 80
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 3124 -j REDIRECT --to-port 8080
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 3127 -j REDIRECT --to-port 8080
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 3128 -j REDIRECT --to-port 8080
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 8080 -j REDIRECT --to-port 8080

Nadajemy prawa wykonywania dla pliku /bin/masq
# chmod +x /bin/masq
Na koniec dodajemy go do /etc/rc.local
# pico /etc/rc.local
i wklejamy linijkę :
/bin/masq

Blokowanie stron na przykładzie naszej-klasy.pl :
Edytujemy plik /etc/dansguardian/lists/bannedsitelist
# pico /etc/dansguardian/lists/bannedsitelist
i dodajemy w dziale #List other sites to block:
nasza-klasa.pl

W pliku /etc/dansguardian/lists/weightedphraselist odznaczamy kategorie, które chcemy blokować, a zahaszujemy te, których blokować nie chcemy. Mamy tu do wyboru: pornografię, narkotyki, przemoc i nietolerancję, gry hazardowe i inne. Domyślnie blokujemy pornografię, inne kategorie hashujemy.

Pozwalamy również użytkownikom na pobieranie plików. Hashujemy wszystkie rozszerzenia w plikach lists/bannedextensionlist oraz zezwalamy na przeglądanie filmów i słuchanie muzyki – hashujemy wszystko w pliku lists/bannedmimetypelist .

Możemy też dopisać do listy wyjątków największe polskie portale informacyjne. Niestety zmieniają one po godzinie 22.00 profil z inforamacyjnych na erotyczne. Dopisujemy do pliku /etc/dansguardian/lists/exceptionsitelist
onet.pl
wp.pl
interia.pl

Na koniec możemy zrestartować komputer żeby zobaczyć czy wszystko się podniosło. Od tej pory ruch będzie automatycznie przekierowywany na nasz serwer Proxy bez zmiany konfiguracji przeglądarek i bez wiedzy użytkowników. Plik /bin/masq zawiera reguły przekierowujące ruch dla większości używanych portów proxy, więc eliminujemy sytuacje że ktoś omija nasz serwer proxy i łączy się z innym dzięki czemu zyskuje niczym nie normowany dostęp do internetu.

Warto jest zagłębić się w konfigurację DG ponieważ domyślne ustawienia lub te pokazane na stronie mogą być nie wystarczające dla kogoś. Dg posiada spore możliwość blokowania, jako przykład posłużyć może lista wyjątków i reguł które możemy ustawić :
root@ubuntu:/etc/dansguardian/lists# ls
authplugins bannedphraselist bannedurllist downloadmanagers exceptioniplist exceptionsitelist greyurllist logurllist weightedphraselist
bannedextensionlist bannedregexpheaderlist blacklists exceptionextensionlist exceptionmimetypelist exceptionurllist headerregexplist phraselists
bannediplist bannedregexpurllist contentregexplist exceptionfilesitelist exceptionphraselist filtergroupslist logregexpurllist pics
bannedmimetypelist bannedsitelist contentscanners exceptionfileurllist exceptionregexpurllist greysitelist logsitelist urlregexplist

Linki i pliki konfiguracyjne :
http://www.kathmannlabs.net/mediawiki/index.php/Dansguardian_Ubuntu_Linux_Install_how-to
http://www.dansguardian.pl/index.php?s=home
http://www.howtoforge.com/squid-proxy-server-on-ubuntu-9.04-server-with-dansguardian-clamav-and-wpad-proxy-auto-detection
MASQ
squid.conf
dansguardian.conf
bannedsitelist

Advertisements
 
2 komentarze

Opublikował/a w dniu Wrzesień 25, 2009 w internet, it, linuks, Linux, ubuntu

 

Tagi: , ,

2 responses to “Stawiamy serwer PROXY – SQUID+DansGuardian

  1. Piotr

    Maj 24, 2016 at 11:46 am

    Witam,

    Cieszę się, że znalazłem to HowTo i chcę je jak najszybciej przetestować na Debianie 8 🙂

    Chciałbym jeszcze zapytać, jak przy pomocy Squid’a zrobić coś takiego,
    żeby niektóre strony bardzo wolno się ładowały (te niechciane),
    a pozostałe (te chciane) – z normalną prędkością.

    Z góry dziękuję za informację zwrotną i pozdrawiam serdecznie – Piotr.

     
    • lazowski

      Maj 24, 2016 at 2:42 pm

      Niestety już dawno się tym nie bawiłem, nie pomogę ci.

       

Skomentuj

Wprowadź swoje dane lub kliknij jedną z tych ikon, aby się zalogować:

Logo WordPress.com

Komentujesz korzystając z konta WordPress.com. Log Out / Zmień )

Zdjęcie z Twittera

Komentujesz korzystając z konta Twitter. Log Out / Zmień )

Facebook photo

Komentujesz korzystając z konta Facebook. Log Out / Zmień )

Google+ photo

Komentujesz korzystając z konta Google+. Log Out / Zmień )

Connecting to %s

 
%d blogerów lubi to: