Установка и настройка Squid, фильтрации, ssl-bump, tor, i2p, https.

Автор superbitch, 09 мая 2014, 08:29:54

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

superbitch

Лабораторная работа Установка и настройка Proxy-сервера SQUID.

Цель работы: Приобрести навыки установки и настройки Proxy-сервера SQUID.

ВЫПОЛНЕНИЯ РАБОТЫ

Будем использовать операционную систему Debian GNU/Linux.
Буду устанавливать Squid для использовать в экспериментальных целях на персональном компьютере.
Squid часто используется в програмных комплексах middleware и как web cache для веб-сервера.
1. Установите squid.
# aptitude search squid
...
#aptitude install squid3
The following NEW packages will be installed:
  libecap2{a} squid-langpack{a} squid3 squid3-common{a}

#apt-cache show squid3
or
# squid3 -v
Squid Cache: Version 3.3.8

   Следующая комманда поможет нам проверть файл настроек:
   #squid3 -k parse

   Запуск будет производить стандартными коммандами:
   #service squid3 start|stop|restart|reload

   Нам понадобится информация из http://wiki.squid-cache.org/SquidFaq/ConfiguringSquid

2. Перейдите в директорию /etc/squid и откройте файл squid.conf. Все необходимые параметры там уже прописаны, но большинство из них закомментированы.
-rw-r--r--   1 root root   1547 Mar  2 15:09 errorpage.css
-rw-r--r--   1 root root    421 Mar  2 15:10 msntauth.conf
-rw-r--r--   1 root root 259118 Mar  2 15:10 squid.conf

Ещё я создам папочку "my" c дополнительными файлами настроек
3. Включите следующие параметры:
Открыть содержимое (спойлер)

http_port 3128

#cache_dir ufs /var/spool/squid 100 16 256
#не буду указывать, чтобы кэш расположить в памяти
#cache_mem 8 MB

cache_mem 200 MB
cache_swap_low 90
cache_swap_low 5
cache_swap_high 95

#minimum_object_size 0 KB #be default
#maximum_object_size 4 MB #be dafault
#maximum_object_size_in_memory 8 KB

maximum_object_size_in_memory  4 MB

#ipcache_size 1024 (размер кэша для хранения IP-адресов)
#ipcache_low 90 (минимальный процент заполнения кэша)
#ipcache_high 95 (максимальный процент заполнения кэша)
#quick_abort_min 16 KB (минимальный размер объекта, устанавливающий при обрыве соединения необходимость закончить его скачивание и полностью сохранить)
#quick_abort_max 16 KB (максимальный остаток объекта, при котором закачка будет прервана в случае обрыва соединения)

    quick_abort_max 1024 KB
   
#quick_abort_pct 95 (максимальный процент уже полученной информации)
#negative_ttl 5 minutes (количество минут, за которые нужно кэшировать негативный ответ сервера)
#positive_dns_ttl 6 hours ( время, в течение которого нужно кэшировать положительный результат DNS-запроса)
#negative_dns_ttl 1 minute (промежуток времени, в пределах которого нужно кэшировать негативный ответ DNS-сервера)
#range_offset_limit 0 KB(информация в запрошенном объеме будет передаваться между сервером и клиентом без кэширования на прокси-сервере)
#cache_log /var/log/squid/cache.log
#cache_store_log /var/log/squid/store.log #none by default
#log_mime_hdrs off (не сохранять заголовки MIME)
#icp_port 3130 #disabled by defalut
#htcp_port 4827 (номер порта, который будет использоваться для ICP-протокола, работающего поверх TCP/IP) #disabled by default
#icp_query_timeout 0 (время ожидания в миллисекундах) #dynamic
#acl good_url    url_regex     "/etc/squid/acl/good_url"
#acl bad_urlpath urlpath_regex "/etc/squid/acl/bad_url_path"
#acl bad_url     url_regex     "/etc/squid/acl/bad_url"

   #in config by default
   acl SSL_ports port 443
   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 CONNECT method CONNECT
   #in config by default

   acl Safe_ports port 3128   
   #proxyport
   acl spam port 25 80
   #smtp http
   acl smtp port 25
   #smtp

   acl alls src all
   #все IP адреса источники
   #From 3.2 further configuration cleanups have been done to make things easier and safer. The manager, localhost, and to_localhost ACL definitions are now built-in.
   #acl manager proto cache_object
   #acl localhost src 127.0.0.1/32
   acl blockls src 94.232.8.0/21 #94.232.8.0 – 94.232.15.255

   #acl to_localhost dst 127.0.0.0/8      0.0.0.0/32   
   acl to_localnet dst 10.0.0.0/8
   acl blockld dst 94.232.8.0/21

   acl localnet src 10.0.0.0/8   # RFC1918 possible internal network
   acl localnet2 src 192.168.0.0/16   # RFC1918 possible internal network
   
   acl banlist src "/etc/squid3/my/banlist.txt"
   acl badbrowsers browser "/etc/squid3/my/badbrowsers.txt"
   #acl checkers src "/etc/squid3/my/allowedcheckers.txt"

   acl botcharset req_header Accept-Charset "/etc/squid3/my/badlcharset.txt"
   acl botlanguage req_header Accept-Language "/etc/squid3/my/badlanguage.txt"
   acl proxybotsx req_header X-Forwarded-For . #to deny bots with proxy

   acl upload_control req_header Content-Length [2-9][0-9]{6,}
   #bytes 1024*1024=1048576=1MB=7 chars

   acl night time 01:00-09:00

   #блокируем доступ к локальной сети
   http_access deny to_localnet
   #блокируем доступ самомим себе
   http_access deny to_localhost
   #блокируем доступ из особо опасного диапозона адресов
   http_access deny  blockls
   #блокируем доступ к особо опасному диапозону адресов
   http_access deny blockld
   #блокируем доступ из локальной сети
   http_access deny localnet
   #блокируем доступ из локальной сети
   http_access deny localnet2
   http_access allow checkers

   http_access deny botcharset
   #блокируем по заголовку на заливание слишком больших файлов
   http_access deny upload_control
   #список айпиадресов и диапозонов
   http_access deny banlist
   #список regex плохих useragent
   http_access deny badbrowsers

   http_access deny botlanguage
   #закрываем доступ для тех кто использует низкокачественные прокси серверы
   #http_access deny proxybotsx

   # Only allow cachemgr access from localhost
   http_access allow manager localhost
   http_access deny manager

   ############
   http_access deny CONNECT smtp
   #############
   http_access allow CONNECT
   #############
   #access from all IP adresses
   http_access allow alls
   #http_access allow localhost
   http_access deny all

   follow_x_forwarded_for deny all

   via off
   follow_x_forwarded_for deny all

request_header_access Allow allow all
request_header_access Authorization allow all
#      request_header_access WWW-Authenticate allow all
#request_header_access User-Agent allow all
request_header_access Proxy-Authorization allow all
request_header_access Proxy-Authenticate allow all
request_header_access Cache-Control allow all
request_header_access Content-Encoding allow all
request_header_access Content-Length allow all
request_header_access Content-Type allow all
request_header_access Date allow all
request_header_access Expires allow all
request_header_access Host allow all
request_header_access If-Modified-Since allow all
request_header_access Last-Modified allow all
request_header_access Location allow all
request_header_access Pragma allow all
request_header_access Accept allow all
request_header_access Accept-Charset allow all
request_header_access Accept-Encoding allow all
request_header_access Accept-Language allow all
request_header_access Content-Language allow all
request_header_access Mime-Version allow all
request_header_access Retry-After allow all
request_header_access Title allow all
request_header_access Connection allow all
request_header_access Proxy-Connection allow all
request_header_access Keep-Alive allow all     
request_header_access All deny all

#header_replace Accept-Language ru,en-us;q=0.7,en;q=0.3
request_header_replace Accept-Language en,en-us;q=0.7,ru;q=0.3
request_header_replace Accept-Encoding gzip,deflate
request_header_replace Accept-Charset windows-1251,utf-8;q=0.7,*;q=0.7
request_header_replace Accept "напиши"
request_header_add User-Agent "Mozilla/5.0 (Windows; U; Windows NT 5.2; ru; rv:1.9.1.10) Gecko/20100504 SeaMonkey/2.0.5"
request_header_add Dnt 1

cache_mgr your_email@mail.com
httpd_suppress_version_string on
shutdown_lifetime 10 seconds

logformat squid %ts %4>st %6<st %15>a %9mt %5rm %3>Hs %ru %un %Sh/%<A %Ss
logformat useragent %>a   "%{Accept-Language}>h"    "%{Accept-Charset}>h"    "%{User-Agent}>h" %Ss:%Sh
logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %>Hs %<st "%{Referer}>h" "%{User-Agent}>h" %Ss:%Sh

#access_log /var/log/squid3/access.log squid !banlist
#access_log /var/log/squid3/user-agent.log useragent !banlist !badbrowsers !botcharset !botlanguage
#access_log /var/log/squid3/banned_badbrowsers.log useragent badbrowsers
#access_log /var/log/squid3/banned_botlanguage.log useragent botlanguage
#access_log /var/log/squid3/banned_nocharset.log useragent botcharset

#дадим приоритет запросам с нашего же хоста
delay_pools 2
delay_class 1 1
delay_class 2 2
delay_access 1 allow localhost
delay_access 1 deny all
delay_parameters 1 -1/-1
delay_parameters 2 240000/240000 48000/48000

#можно использовать сторонние сервера для разрешения днс
dns_nameservers 1.1.1.1 8.8.8.8

memory_pools_limit 100 MB
forwarded_for off
client_db off
[свернуть]
4. В каталоге /etc/squid создайте папку acl.
5. В этой папке создайте 3 файла: bad_url, bad_url_path, good_url. С помощью них и acl будем бороться с рекламой, баннерами, всплывающими окнами и т.п.

Файл badbrowsers.txt

^$
^-$
^Mozilla/5\.0$
^Mozilla/[7-9]
Netscape
(.*?)MSIE 5
(.*?)MSIE 4
(.*?)MSIE 3
(.*?)Gecko/200
(.*?)firefox/[0-2]
(.*?)Firefox/3\.0
(.*?)Firefox/3\.5
(.*?)Firefox/3\.6\.[0-7]
(.*?)SeaMonkey/0
(.*?)SeaMonkey/1
(.*?)Opera [7-9]
^Opera/[5-8]
^Opera/9
(.*?)Chrome/5\.0\.375\.125
(.*?)Windows 98
(.*?)Windows 2000
(.*?)Windows NT4\.0
(.*?)Ubuntu/9
(.*?)Safari/4
(.*?)Safari/52
(.*?)Safari/53[0-2]
(.*?)Safari/533\.1[0-6]
(.*?)rv:1\.7\.
^Speedy
^Nutch
^Java
^shelob
^ISC
^TrackBack
^ichiro
^bot
^HouxouCrawler
^User
^user
^Attentio
^Mp3Bot
^NameOfAgent
^yacybot
^WWW-Mechanize
^MLBot
^WebAlta
^MJ12bot
^Python
^libwww
^Libwww
^trackback
^heretrix
^jakarta
^Jakarta
^LibWWW
^Mozilla/1
^Larbin
^larbin
^Gator
^gator
^Mozilla/[0-4]
(.*?)Googlebot
^Aport
^Yandex
^MobileRunner-J2ME
^Mozilla 4
^Mozilla / 4
^Mozilla/5\.0 \( Windows; U; Windows NT5\.0; FireFox \)$
^bnflow
(.*?)NetCaptor
^mozilla/4
(.*?)DigiExt
^Twisted PageGetter
^Mozilla Firefox
^Filangy
^Penetrator
ip_stats
^MOT-V
^SIE-A
(.*?)Nokia
^ScrapeBox
(.*?)athome0
^Mozilla/5\.0 \(compatible; MSIE 6\.0; Windows NT 5\.1\)$
(.*?)Firefox/3\.6$
^Secunia PSI$
(.*?)Avant Browser
^WMD
^AsyncDownloadMgr$
^fimap\.googlecode
^SEC
^Microsoft
^DoCoMo
(.*?)GTB7
(.*?)RPT-HTTPClient
^ebuddy
^w3m
(.*?)MozillaDeveloperPreview
(.*?)Trident
^TMUFE
(.*?)hotvideobar
^GRLevel
(.*?)sputnik
^curl
(.*?)HttpClient
^NSPlayer
(.*?)Windows Live
(.*?)MSNIA
^IE/
^Windows
^Sony
(.*?)LUDI2
^Space Bison
(.*?)Yahoo
(.*?)MRA [0-9]
^Panda Security
^Internet
(.*?)iPhone
(.*?)Compaq
^Adobe
^Ruby/69$
^Bros4.Whenbye$
^KDDI-HI
^Opera$
^MSIE
^Wget
^SIE
^xmlrpclib
[свернуть]

Файл badlanguage.txt

^$
^en$
^fr$
^ja$
^de$
^ru$
^zh-cn$
^ru-RU$
^en-us$
^en-US$
^ja-jp$
[свернуть]

Файл badlcharset.txt

^$
^-$
^UTF-8,\*$
[свернуть]

Открыть содержимое (спойлер)
Файл banlist.txt
109.86.246.7
109.87.7.115
[свернуть]
6. В файл bad_url поместите плохие URL:
7.
Открыть содержимое (спойлер)

8. http://microsoft.com
9. http://.*doubleclick
10. http://.*-ad.flycast.com/server/img/
11. http://1000.stars.ru/cgi-bin/1000.cgi
12. http://1000.stars.ru/cgi-bin/1000.cgi
13. http://12.16.1.10/~web_ani/ 
14.
[свернуть]
15. В bad_url_path – плохие имена:
16.
Открыть содержимое (спойлер)

17. 88x31.*gif
18. 88x31.*GIF
19. 100x80.*gif
20. 100x80.*GIF
21. 100x100.*gif 
22.
[свернуть]



Для поддержки HTTS придётся повозиться. это технология в squid называется ssl-bump.
К сожалению HTTPS не перенаправляется через cache_peer, что с этим делать я не знаю.
Для её поддержки необходимо будет скомпилировать Squid из иподников с дополнительными параметрами:'--enable-ssl' '--enable-ssl-crtd'
http://www.mydlp.com/how-to-configure-squid-3-2-ssl-bumping-dynamic-ssl-certificate-generation/
дополнительно http://wiki.squid-cache.org/Features/DynamicSslCert

Перекомпиляция squid-3.4.5:
Чтобы небыло ошибки:``FATAL: Received Segment Violation...dying'' нужно сделать следующее: (как я не знаю) это должно отключить оптимизацию gcc
% cd squid-x.y
% make distclean
you need csh:
% setenv CFLAGS='-g -Wall'

Я включил эти опции в конфиг:
Открыть содержимое (спойлер)
'--build=i486-linux-gnu' '--prefix=/home/user/ProgramsMy/squid' '--includedir=${prefix}/include' '--bindir=${prefix}/sbin' '--mandir=${prefix}/share/man' '--infodir=${prefix}/share/info' '--sysconfdir=${prefix}/etc' '--localstatedir=${prefix}/var' '--libexecdir=${prefix}/lib' '--srcdir=.' '--disable-maintainer-mode' '--disable-dependency-tracking' '--disable-silent-rules' '--datadir=${prefix}/share' '--sysconfdir=${prefix}/etc' '--mandir=${prefix}/share/man' '--enable-inline' '--enable-async-io=8' '--enable-storeio=ufs,aufs,diskd,rock' '--enable-removal-policies=lru,heap' '--enable-delay-pools' '--enable-underscores' '--enable-icap-client' '--enable-follow-x-forwarded-for' '--enable-auth-basic=DB,fake,getpwnam,LDAP,MSNT,MSNT-multi-domain,NCSA,NIS,PAM,POP3,RADIUS,SASL,SMB' '--enable-auth-digest=file,LDAP' '--enable-auth-negotiate=kerberos,wrapper' '--enable-auth-ntlm=fake,smb_lm' '--enable-external-acl-helpers=file_userip,kerberos_ldap_group,LDAP_group,session,SQL_session,unix_group,wbinfo_group' '--enable-url-rewrite-helpers=fake' '--enable-eui' '--enable-esi' '--enable-icmp' '--enable-zph-qos' '--enable-ecap' '--disable-translation' '--with-swapdir=${prefix}/spool' '--with-logdir=${prefix}/log' '--with-pidfile=${prefix}/run/squid3.pid' '--with-filedescriptors=65536' '--with-large-files' '--with-default-user=proxy' '--enable-linux-netfilter' 'build_alias=i486-linux-gnu' 'CFLAGS=-g -O0 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Wall' 'LDFLAGS=-fPIE -pie -Wl,-z,relro -Wl,-z,now' 'CPPFLAGS=-D_FORTIFY_SOURCE=2' 'CXXFLAGS=-g -O2 -fPIE -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security' '--enable-ssl' '--enable-ssl-crtd'
[свернуть]


1)
создаём где-нибудь папку ssl_cert и ssl_db
Впервую папку ssl_cert создаём ключи:
openssl genrsa 4096 > private.pem
openssl req -new -x509 -days 3650 -key private.pem -out public.pem
openssl x509 -in public.pem -outform DER -out user.der
2)
user.der

Включаем в сертификаты браузера:
For example, in FireFox:
    Open 'Preferences'
    Go to the 'Advanced' section, 'Encryption' tab
    Press the 'View Certificates' button and go to the 'Authorities' tab
    Press the 'Import' button, select the .der file that was created previously and pres 'OK'
3) Заменяем следующие настройки в etc/squid.conf
http_port 3128 ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB key=/...ssl_cert/private.pem cert=/.../ssl_cert/public.pem

always_direct allow all
ssl_bump server-first all #ssl_bump allow all - устарела
sslproxy_cert_error allow all
# Or may be deny all according to your company policy
# sslproxy_cert_error deny all
sslproxy_flags DONT_VERIFY_PEER
sslcrtd_program /usr/lib/squid3/ssl_crtd -s /var/lib/ssl_db -M 4MB
sslcrtd_children 5

#№ssl_crtd - это скрипт который находится в папке lib
ssl_db - это напи созданная директория из пункат 1.

4) Squid may require to ssl_crtd caching directories to be created manually and change directory ownership of this caching folder to user that Squid use. For this case, please use the commands below;
Нужно выполнить одну комманду ...lib/squid3/ssl_crtd -c -s ssl_db
ssl_crtd и ssl_db из пункта 4 и пункта 3 должны совпадать и иметь права proxy proxy

Для подключения доступа к i2p и TOR
1) polipo прокси, в config:
Открыть содержимое (спойлер)
# This file only needs to list configuration variables that deviate
# from the default values.  See /usr/share/doc/polipo/examples/config.sample
# and "polipo -v" for variables you can tweak and further information.

logSyslog = true
logFile = /var/log/polipo/polipo.log

allowedPorts = 1-65535
tunnelAllowedPorts = 1-65535

#proxyAddress = "127.0.0.2"
proxyAddress = "0.0.0.0"
proxyPort = 8123

socksParentProxy = localhost:9050
diskCacheRoot=""
socksProxyType = socks5
[свернуть]

В концеконцов, я решил отказаться от SSL-Bump и перенаправлять весь HTTPS нравик через тор, так как его заголовки не поддаются фильтрации. HTTP через обычный прокси, а TOR и I2P через соответствующие открытые порты.