Страница 1 из 1

Установка прокси сервера. debian + squid + AD + squidguard + HAVP + lightsquid + мелочевка

Добавлено: 26 апр 2016, 17:58
xor
Полезные ресурсы по теме:
squid.conf по-русски: http://break-people.ru/cmsmade/index.ph ... _conf_file
smb.conf по-русски: http://smb-conf.ru/

Установка прокси сервера. debian + squid + AD + squidguard + lightsquid + мелочевка

Установка базовой системы.
Разворачиваем свежий дистрибутив с минимумом компонентов (базовая система, ssh, apt). На момент написания последняя версия 8.4.
Взять можно свободно с http://www.debian.org
Операция элементарная, и если она у вас вызывает трудности, ребята, дальнейший текст вам не нужен, до свидания.

Настройка ОС
Задаем хостнейм
# nano /etc/hostname

Код: Выделить всё

md-proxy
Настраиваем сетевые интерфейсы. Приватный роутинг в локальныю сеть, дефолт в интернет.
# nano /etc/network/interfaces

Код: Выделить всё

source /etc/network/interfaces.d/*

auto lo
iface lo inet loopback

allow-hotplug eth0 eth1

# LAN interface
iface eth0 inet static
	address 10.254.1.10
	netmask 255.255.255.0
	network 10.254.1.0
	broadcast 10.254.1.255
	up /sbin/route add -net 10.0.0.0 netmask 255.0.0.0 gw 10.254.1.1
	up /sbin/route add -net 172.16.0.0 netmask 255.240.0.0 gw 10.254.1.1
	up /sbin/route add -net 192.168.0.0 netmask 255.255.0.0 gw 10.254.1.1
	# dns-* options are implemented by the resolvconf package, if installed
	dns-nameservers 10.254.1.2 10.254.2.2
	dns-search mdev.su

# WAN iface (default route)
iface eth1 inet static
	address 99.87.78.91
	netmask 255.255.255.224
	network 99.87.78.64
	broadcast 99.87.78.95
	gateway 99.87.78.65
Настроим iptables. Создайте init скрипт /etc/init.d/firewall
Ограничим входящие подключения, запретим соединяться по ssh из интернета.

Код: Выделить всё

#!/bin/bash
### BEGIN INIT INFO
# Provides:          firewall
# Required-Start:    $local_fs $remote_fs $network $syslog
# Required-Stop:     $local_fs $remote_fs $network $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# X-Interactive:     false
# Short-Description: Local firewall and NAT
# Description:       Local firewall and NAT
#  This script will start firewall.
### END INIT INFO

IPTABLES=/sbin/iptables

INT_IF=eth0
INT_IP=10.254.1.10
INT_NET=10.254.1.0/24
LAN_NET1=10.0.0.0/8
LAN_NET2=172.16.0.0/12
LAN_NET3=192.168.0.0/16
SUPERNETS=10.0.0.0/8,172.16.0.0/12,192.168.0.0/16
ALL_NETS=0.0.0.0/0

WAN_IF=eth1
WAN_IP=99.87.78.91
WAN_GW=99.87.78.65
WAN_NET=99.87.78.64/27

#*********************** START RULES ***********************#
$IPTABLES -F
$IPTABLES -t nat -F

###PERMIT ALL LOCAL ESTABLISHED###
##local connections##
#WAN#
$IPTABLES -A INPUT	-i $WAN_IF -p tcp --dst $WAN_IP  -m state --state ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT	-i $WAN_IF -p udp --dst $WAN_IP  -m state --state ESTABLISHED -j ACCEPT
#LAN#
$IPTABLES -A INPUT	-i $INT_IF -p tcp --dst $INT_IP  -m state --state ESTABLISHED -j ACCEPT
$IPTABLES -A INPUT	-i $INT_IF -p udp --dst $INT_IP  -m state --state ESTABLISHED -j ACCEPT
##related from local network
$IPTABLES -A INPUT	-i $INT_IF -p tcp --dst $INT_IP  -m state --state RELATED -j ACCEPT
$IPTABLES -A INPUT	-i $INT_IF -p udp --dst $INT_IP  -m state --state RELATED -j ACCEPT

###INPUT SERVICES###
#icmp
$IPTABLES -A INPUT	-i $WAN_IF -p icmp -d $WAN_IP -j ACCEPT
$IPTABLES -A INPUT	-i $INT_IF -p icmp -d $INT_IP -j ACCEPT
#sshd
$IPTABLES -A INPUT	-i $WAN_IF -p tcp --dport 22 -j DROP
$IPTABLES -A INPUT	-i $INT_IF -p tcp --dport 22 -j LOG --log-prefix "!SSH connect :"
$IPTABLES -A INPUT	-i $INT_IF -p tcp --dport 22 -j ACCEPT
#httpsd-LAN
$IPTABLES -A INPUT	-i $INT_IF -p tcp --dport 443 -j ACCEPT
#httpd-LAN
$IPTABLES -A INPUT	-i $INT_IF -p tcp --dport 80 -j ACCEPT
#squid proxy server
$IPTABLES -A INPUT	-i $INT_IF -p tcp --dport 3128 -j ACCEPT
#snmpd
$IPTABLES -A INPUT	-i $INT_IF -p udp --dport 161 -j ACCEPT
#snmp-squid
$IPTABLES -A INPUT	-i $INT_IF -p udp --dport 1161 -j ACCEPT
###
### ### ### ### ###

### FINAL DROPS ###
$IPTABLES -A INPUT	-i $WAN_IF	-j DROP
$IPTABLES -A FORWARD	-i $WAN_IF	-j DROP
$IPTABLES -A INPUT	-i $INT_IF	-j DROP
$IPTABLES -A FORWARD	-i $INT_IF	-j DROP
Добавим скрипт в автозагрузку
update-rc.d firewall defaults

Для работы в AD потребуется синхронизация времени с доменным тайм-сервером. Установим минимальный пакет и накалякаем скрипт для крона.

# apt-get install ntpdate
# nano /etc/cron.daily/ntpdate

Код: Выделить всё

#!/bin/sh
ntpdate -s 10.254.254.10
hwclock -w
exit 0
# chmod +x /etc/cron.daily/ntpdate

В resolv.conf указываем наш домен и dns-серверы.
# nano /etc/resolv.conf

Код: Выделить всё

search mdev.su
nameserver 10.254.1.2
nameserver 10.254.2.2
Включение в домен
Ставим керберос и самбу для связки с доменом.
Обратите внимание на статью про баг в самбе
Настраиваем smb и krb. Используем два контроллера домена для отказоустойчивой авторизации.
# apt-get install samba winbind krb5-admin-server krb5-config krb5-doc krb5-kdc krb5-user
# nano /etc/samba/smb.conf

Код: Выделить всё

[global]
   workgroup = MDEV
   server string = Proxy Server
   security = ADS
   password server = md-dc1, md-dc2
   realm = mdev.su
   dns proxy = no
   socket options = TCP_NODELAY
   log file = /var/log/samba/log.%m
   max log size = 1000
   syslog = 0
   panic action = /usr/share/samba/panic-action %d
   local master = no
   os level = 0
   domain master = no
   preferred master = no
   domain logons = no
   server role = standalone server
   passdb backend = tdbsam
   obey pam restrictions = yes
   unix password sync = yes
   passwd program = /usr/bin/passwd %u
   passwd chat = *Enter\snew\s*\spassword:* %n\n *Retype\snew\s*\spassword:* %n\n *password\supdated\ssuccessfully* .
   pam password change = yes
   map to guest = bad user
   idmap uid = 10000-20000
   idmap gid = 10000-20000
   load printers = no
   winbind use default domain = yes
   winbind enum users = yes
   winbind enum groups = yes
   winbind refresh tickets = yes
   winbind max clients = 200
В конфиг krb5.conf добавляем следующие секции и опции.
# nano /etc/krb5.conf

Код: Выделить всё

[libdefaults]
	default_realm = MDEV.SU
 [realms]
	MDEV.SU = {
		kdc = md-dc1
		kdc = md-dc2
		admin_server = md-dc1.mdev.su
		default_domain = mdev.su
	}
[domain_realm]
	.mdev.su = MDEV.SU
	mdev.su = MDEV.SU
 [logging]
default = FILE:/var/log/krb5libs.log
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/krb5admind.log
# touch /var/log/krb5libs.log
# touch /var/log/krb5kdc.log
# touch /var/log/krb5admind.log
# reboot


перезагружаемся (шизофреники, негодующие "ЗАЧЕМ ПЕРЕЗАГРУЖАТЬСЯ?! КОШМАР! ДЕБИЛ!", спасибо за заботу о моем психическом здоровье, но я прекрасно знаю о достаточности перезагрузки определенных сервисов, и в силу своей природной лени совершенно не хочу этот перечень команд вводить. Проще reboot, и подождать минуту.)
………………….
проверяем корректность выдачи тикетов кербероса, входим в домен
# kinit administrator
Password for administrator@MDEV.SU: ***
# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: administrator@MDEV.SU
Valid starting Expires Service principal
04/26/2016 19:07:40 04/27/2016 05:07:40 krbtgt/MDEV.SU@MDEV.SU
renew until 04/27/2016 19:07:35
#
# net ads join -U administrator
Enter administrator@mdev.su's password: ***
Using short domain name -- MDEV
Joined 'proxy' to dns domain 'mdev.su'
# reboot

и опять же перезагружаемся (недовольные, смотрите ранее...)

Установка сквида
Ставим необходимые пакеты. Добавляем в группу winbindd пользователя proxy. Меняем группу владельцев winbindd сокета. Иначе не будет проходить авторизация от сквида, который работает от имени proxy. Не знаю, недоработка ли это в пакете, или так и задумано, но раз уже на протяжении нескольких релизов нет изменений, значит вариант второй, не понимаю только зачем.
# apt-get install squid3 squid-langpack squidguard squidview
# gpasswd -a proxy winbindd_priv
# chown :winbindd_priv /var/lib/samba/winbindd_privileged


Программируем наш сквид =)
вкратце:
Авторизация по группам в каталоге AD.
Присутствуют белые, черные, и ограниченного доступа списки.
Порядок разрешений такой:
  1. обработка белых списков (однозначно легитимные ресурсы, доступные для всех, даже без авторизации)
  2. обработка черных списков (порнография, баннерные сети, прочий трэш)
  3. доступ vip группе по ip адресам =)
  4. доступ vip группе по AD авторизации
  5. доступ к лимитированному списку ресурсов для избранных
  6. ну и наконец доступ для пролетариата
разумеется, группы web-vip-users, web-all-users, и т.д. должны существовать в домене.
Плюс ограничение на MIME контент (например резать видео/аудио стримы), и на скачку определенных файлов.
Есть ограничения по скорости, 5мбит/с для всех, и анлим для vip
# nano /etc/squid3/squid.conf

Код: Выделить всё

auth_param ntlm program /usr/bin/ntlm_auth --diagnostics --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 200 startup=32 idle=1
auth_param ntlm keep_alive off

external_acl_type AD_group children-max=32 children-startup=16 %LOGIN /usr/lib/squid3/ext_wbinfo_group_acl

acl SSL_ports port 443
acl Safe_ports port 3128	# local proxy
acl Safe_ports port 80 8080	# http
acl Safe_ports port 81		# web stream services
acl Safe_ports port 21		# ftp
acl Safe_ports port 443	# https
acl CONNECT method CONNECT

acl acl_wl_general dstdomain "/etc/squid3/acls/wl/general_d.lst"
acl acl_wl_general_url url_regex -i "/etc/squid3/acls/wl/general_u.lst"

acl acl_bl_general dstdomain "/etc/squid3/acls/bl/general_d.lst"
acl acl_bl_general_url url_regex -i "/etc/squid3/acls/bl/general_u.lst"
acl acl_bl_spyware dstdomain "/etc/squid3/acls/bl/spyware_d.lst"
acl acl_bl_spyware_url url_regex -i "/etc/squid3/acls/bl/spyware_u.lst"
acl acl_bl_pron dstdomain "/etc/squid3/acls/bl/pron_d.lst.blank"
acl acl_bl_pron_url url_regex -i "/etc/squid3/acls/bl/pron_u.lst.blank"
acl acl_bl_ads dstdomain "/etc/squid3/acls/bl/ads_d.lst"
acl acl_bl_ads_url url_regex -i "/etc/squid3/acls/bl/ads_u.lst"

acl acl_src_ip_vip src "/etc/squid3/acls/src_ip_vip.lst"
acl acl_vip_internet_allow external AD_group web-vip-users

acl acl_ng_audio dstdomain "/etc/squid3/acls/ng/audio_d.lst"
acl acl_ng_audio_url url_regex -i "/etc/squid3/acls/ng/audio_u.lst"
acl acl_ng_video dstdomain "/etc/squid3/acls/ng/video_d.lst"
acl acl_ng_video_url url_regex -i "/etc/squid3/acls/ng/video_u.lst"
acl acl_ng_storage dstdomain "/etc/squid3/acls/ng/storage_d.lst"
acl acl_ng_storage_url url_regex -i "/etc/squid3/acls/ng/storage_u.lst"
acl acl_ng_mail dstdomain "/etc/squid3/acls/ng/mail_d.lst"
acl acl_ng_mail_url url_regex -i "/etc/squid3/acls/ng/mail_u.lst"
acl acl_ng_skype dstdomain "/etc/squid3/acls/ng/skype_d.lst"
acl acl_ng_skype_url url_regex -i "/etc/squid3/acls/ng/skype_u.lst"

acl acl_inet_storage_access external AD_group web-drive
acl acl_inet_mail_access external AD_group web-mail
acl acl_skype_access external AD_group web-skype
acl acl_video_users external AD_group web-video

acl acl_any_internet_allow external AD_group web-all-users

acl acl_bad_files urlpath_regex -i "/etc/squid3/acls/bad_files.lst"
acl acl_negative_mime rep_mime_type "/etc/squid3/acls/bad_mime.lst"
acl acl_mime_good_domains dstdomain "/etc/squid3/acls/mime_good_domains.lst"

acl acl_snmp_access snmp_community snmp-noc
acl acl_snmp_clients src 10.254.2.25/32

http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access deny to_localhost

http_access allow acl_wl_general
http_access allow acl_wl_general_url

http_access deny acl_bl_general
http_access deny acl_bl_general_url
http_access deny acl_bl_spyware
http_access deny acl_bl_spyware_url
http_access deny acl_bl_pron
http_access deny acl_bl_pron_url
http_access deny acl_bl_ads
http_access deny acl_bl_ads_url

http_access allow acl_src_ip_vip
http_access allow acl_vip_internet_allow

http_access allow acl_skype_access acl_ng_skype
http_access allow acl_inet_storage_access acl_ng_storage
http_access allow acl_inet_storage_access acl_ng_storage_url
http_access allow acl_inet_mail_access acl_ng_mail
http_access allow acl_inet_mail_access acl_ng_mail_url
http_access allow acl_video_users acl_ng_video
http_access allow acl_video_users acl_ng_video_url

http_access deny acl_ng_audio
http_access deny acl_ng_audio_url
http_access deny acl_ng_video
http_access deny acl_ng_video_url
http_access deny acl_ng_storage
http_access deny acl_ng_storage_url
http_access deny acl_ng_mail
http_access deny acl_ng_mail_url
http_access deny acl_ng_skype
http_access deny acl_ng_skype_url

http_access deny acl_bad_files !acl_mime_good_domains

http_access allow acl_any_internet_allow

http_access deny all

http_reply_access allow !acl_negative_mime
http_reply_access allow all acl_mime_good_domains
http_reply_access allow acl_src_ip_vip acl_negative_mime
http_reply_access allow acl_vip_internet_allow acl_negative_mime
http_reply_access deny all

http_port 3128
maximum_object_size 32 MB
cache_dir ufs /var/spool/squid3 1024 256 256
cache_store_log stdio:/var/log/squid3/store_io.log
cache_store_log daemon:/var/log/squid3/store_squid.log
coredump_dir /var/spool/squid3
ftp_telnet_protocol off
refresh_pattern ^ftp:		1440	20%	10080
refresh_pattern ^gopher:	1440	0%	1440
refresh_pattern -i (/cgi-bin/|\?) 0	0%	0
refresh_pattern .		0	20%	1440

delay_pools 2
delay_class 1 1
delay_class 2 1
delay_access 1 allow acl_src_ip_vip
delay_access 1 allow acl_vip_internet_allow
delay_access 1 deny all
delay_access 2 allow all
delay_parameters 1 -1/-1
delay_parameters 2 625000/625000

snmp_port 1161
snmp_access allow acl_snmp_access acl_snmp_clients
snmp_access allow acl_snmp_access localhost
snmp_access deny all

error_default_language Russian-1251
и да... =))) отвалите!
# reboot

Настройка отчетности и статистики
Установим lightsquid, и к нему апач с побочной шелухой. Настроим немножечко. Основную часть httpd настроек уже за нас заботливо выполнили разработчики дистрибутива.
apt-get install lightsquid apache2 php5
a2enmod cgi
a2enconf lightsquid


Поправим немного конфиг web-сервера для лайтсквида.
# nano /etc/apache2/conf-enabled/lightsquid.conf

Код: Выделить всё

ScriptAlias	/lightsquid/	/usr/lib/cgi-bin/lightsquid/

<Location "/lightsquid/">
	Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
	Require all granted
</Location>
Запускаем, проверяем
# service apache2 restart
Веб интерфейс доступен по адресу http://10.254.1.10/lightsquid/

Для realtime статистики влепим SqStat (http://samm.kiev.ua/sqstat/sqstat-1.20.tar.gz).
Качаем указанный архив, распаковываем в /var/www/html/, правим конфиг
# cd /var/www/html/sqstat
# cp ./config.inc.php.defaults ./config.inc.php
# nano ./config.inc.php

Код: Выделить всё

$squidhost[0]="127.0.0.1";   // интерфейс сквида
$squidport[0]=3128;            // порт сквида
$cachemgr_passwd[0]="";    // пароль на cachemgr, если требуется. оставьте пустым для отключения авторизации
$resolveip[0]=true;             // резолвить ли ip адреса пользователей
$group_by[0]="username";  // группировка статистики по имени пользователя "username", или по хосту клиента "host"
после чего доступ к статистике получаем по ссылке http://10.254.1.10/sqstat/sqstat.php.
Однако наблюдаем, что статистика нифига не работает, выдает
"SqStat error"
"Error (1): Cannot get data. Server answered: HTTP/1.1 200 OK"

Причиной этому то, что в релизе 3.2 сквида разработчики сменили формат вывода статистики кэш-менеджера, а проект SqStat не очень-то развивается. К счастью написан он на php, обладает весьма простой логикой. Да и к тому же всю чёрную работу уже любезно выполнил автор этого решения http://kidun.ru/index.php/component/con ... cle?id=165
В сути, правим файлик sqstat.class.php

Код: Выделить всё

107c107
<               if($raw[0]!="HTTP/1.0 200 OK"){
---
>               if($raw[0]!="HTTP/1.1 200 OK"){
131,132c131,132
<                                       if(substr($v,0,5)=="peer:") $parsed["con"][$connection]["peer"]=substr($v,6);
<                                       if(substr($v,0,3)=="me:") $parsed["con"][$connection]["me"]=substr($v,4);
---
>                                       if(substr($v,0,7)=="remote:") $parsed["con"][$connection]["remote"]=substr($v,8);
>                                       if(substr($v,0,6)=="local:") $parsed["con"][$connection]["local"]=substr($v,7);
178c178
<                       $ip=substr($v["peer"],0,strpos($v["peer"],":"));
---
>                       $ip=substr($v["remote"],0,strpos($v["remote"],":"));
189c189
<                               $ip=ip2long(substr($v["peer"],0,strpos($v["peer"],":")));
---
>                               $ip=ip2long(substr($v["remote"],0,strpos($v["remote"],":")));
Или можно не париться и скачать исправленный и настроенный пакет
sqstat.zip
пропатченный sqstat
(12.86 КБ) 132 скачивания
Настройка WebProxy AutoDiscovery
Создаем в DNS запись A или CNAME с названием wpad.mdev.su.
Создаем SRV запись, сервис _wpad, протокол _tcp, порт 80, хост wpad.mdev.su.
В сетях с AD и WindowsDNS потребуется скорректировать списки блокировки
The DNS Server role in Windows Server 2008 introduces a global query block list to reduce vulnerability associated with dynamic DNS updates. For more information, see About implementing WPAD.
If you want to use WPAD with DNS, note the following:
If WPAD entries are configured in DNS before the DNS server is upgraded in Windows Server 2008, no action is required.
If you configure or remove WPAD after you deploy the DNS server role on a server running Windows Server 2008, you must update the block list on all DNS servers that host the zones affected by the change. The affected zones are those where you registered the WPAD servers.
Проверка работы списка блокировки:
dnscmd /info /enableglobalqueryblocklist

Список имен в блок листе:
dnscmd /info /globalqueryblocklist

Выключение механизма блокировки:
dnscmd /config /enableglobalqueryblocklist 0

Удалить все имена из списка блокировки:
dnscmd /config /globalqueryblocklist

Заменить текущий список блокировки на новый:
dnscmd /config /globalqueryblocklist name [name]…

В дефолтном web каталоге (/var/www) создаем файл wpad.dat

Код: Выделить всё

function FindProxyForURL(url, host)
{
// If URL has no dots in host name, send traffic direct.
if (isPlainHostName(host))
return "DIRECT";
// If specific URL needs to bypass proxy, send traffic direct.
if (shExpMatch(host,"*mdev.su*") ||
shExpMatch(host,"10.*") ||
shExpMatch(host,"192.168.*") ||
shExpMatch(host,"172.16.*") ||
shExpMatch(host,"172.17.*") ||
shExpMatch(host,"172.18.*") ||
shExpMatch(host,"172.19.*") ||
shExpMatch(host,"172.20.*") ||
shExpMatch(host,"172.21.*") ||
shExpMatch(host,"172.22.*") ||
shExpMatch(host,"172.23.*") ||
shExpMatch(host,"172.24.*") ||
shExpMatch(host,"172.25.*") ||
shExpMatch(host,"172.26.*") ||
shExpMatch(host,"172.27.*") ||
shExpMatch(host,"172.28.*") ||
shExpMatch(host,"172.29.*") ||
shExpMatch(host,"172.30.*") ||
shExpMatch(host,"172.31.*") ||
shExpMatch(host,"127.*") ||
dnsDomainIs(host,"mdev.su") )
return "DIRECT";
// All other traffic uses below proxies, in fail-over order.
return "PROXY 10.254.1.10:3128";
}
Далее сквид гвард... надо написать. пока лень.

Установка HAVP. Интеграция со сквидом.
Теперь дело за антивирусом. Поднимем HTTP Antivirus Proxy.
Ставим пакеты
apt-get install havp clamav-daemon clamav-freshclam clamav-testfiles
в файл /etc/clamav/clamd.conf выставляем опции

Код: Выделить всё

AllowSupplementaryGroups true
LogTime true
FixStaleSocket true
ScanMail false
остальное по дефолту. и рестартуем.
/etc/init.d/clamav-daemon restart
/etc/init.d/clamav-freshclam restart

в файле /etc/havp/havp.config выставляем такие опции:

Код: Выделить всё

LOG_OKS flase      #писать в лог только про вирусню
FORWARDED_IP true   #переносить заголовок X-Forwarded-For, чтобы в логах светились IP клиентов
PORT 4128   #ну... порт АВ-прокси
BIND_ADDRESS 127.0.0.1   #биндить демон только на лупбэк, чтоб из сети не подключались
FAILSCANERROR flase   #не отбрасывать файл, если сканер вернул ошибку (например запароленный архив не смог прочесть)
RANGE true   #прерванные закачки продолжаются без новой проверки
CLAMBLOCKBROKEN true   #блочить битые исполняемые файлы (есть вероятность ложных срабатываний. если что, отключите)
остальное в дефолт. в файлы whitelist и blacklist можно добавить явно разрешенные или запрещенные узлы, которые даже сканироваться не будут, сразу откидываться.
рестарт.
/etc/init.d/havp restart

Правим конфиг сквида:

Код: Выделить всё

cache_peer  127.0.0.1  parent  4128  0  default  no-query
always_direct allow SSL_Ports
и перезапускаем его
/etc/init.d/squid restart

DrWEB for Squid
К сквиду можно прикрутить модуль обработки контента от DrWEB. Подключается он к сквиду через ICAP. Так же у вас должна быть соответствующая лицензия Dr.Web Gateway Security Suite. Модуль может работать как самостоятельно, так и в составе корпоративной системы Enterprise Security Suite. Обеспечивает антивирусную проверку контента, возможность блокировки доступа к сайтам по категориям, но поддерживает только HTTP.

Первым делом добавим репозоторий DrWEB.
# nano /etc/apt/sources.list

Код: Выделить всё

deb http://officeshield.drweb.com/drweb/debian stable non-free
Обновляем список пакетов и ставим DrWEB.
# apt-get update
# apt-get install drweb-internet-gateways


В каталог /opt/drweb копируем файл с лицензией, переименовываем его в drweb32.key.
Конфигурируем агента и icapd компонент.
Если ваш drweb будет подключаться к серверу централизованного управления, а сервер ESS версии 10 или выше, то поправьте в файле /etc/drweb/monitor/agent.mmc строчку

Код: Выделить всё

drweb-agent10 "-c /etc/drweb/agent.conf"
В файле /etc/drweb/agent.conf добавляем/меняем такие опции

Код: Выделить всё

[Logging]
Level = info
IPCLevel = error
SyslogFacility = Daemon
FileName = syslog
[Agent]
UseMonitor = yes
MonitorResponseTime = 5
[EnterpriseMode]    # если подключаете к централизованному серверу
UseEnterpriseMode = yes
ComputerName = md-proxy
VirusbaseDir = /var/drweb/bases
PublicKeyFile = /opt/drweb/drwcsd.pub
ServerHost = drweb-ess.mdev.su
ServerPort = 2193
CryptTraffic = possible
CompressTraffic = possible
CacheDir = /var/drweb/agent
[StandaloneMode]    # если модуль работает сам по себе
LicenseFile = /opt/drweb/drweb32.key
остальное по умолчанию

В файл /etc/drweb/drweb32.ini добавляем меняем эти опции

Код: Выделить всё

[Daemon]
Key = /opt/drweb/drweb32.key
RunForeground = no
FilesTypesWarnings = yes
ScanFiles = All
CheckArchives = yes
CheckEMailFiles = yes
ExcludePaths = /proc,/sys,/dev
FollowLinks = no
RenameFilesTo = #??
MoveFilesTo = /var/drweb/infected
BackupFilesTo = /var/drweb/infected
LogFileName = syslog
SyslogFacility = Daemon
LimitLog = no
LogScanned = yes
LogPacked = yes
LogArchived = yes
LogTime = yes
LogProcessInfo = yes
RecodeNonprintable = yes
RecodeMode = QuotedPrintable
RecodeChar = "?"
Socket = /var/drweb/run/.daemon
Socket = 3000, localhost
SocketTimeout = 10
MaxCompressionRatio = 500
CompressionCheckThreshold = 1024
MaxFileSizeToExtract = 40960
MaxArchiveLevel = 8
MaxBasesObsolescencePeriod = 24
MessagePatternFileName = /etc/drweb/templates/drwebd/msg.tmpl
MailTo = admin@mdev.su
[Scanner]
EnginePath = /var/drweb/lib/drweb32.dll
VirusBase = /var/drweb/bases/*.vdb
UpdatePath = /var/drweb/updates
TempPath = /tmp
Key = /opt/drweb/drweb32.key
OutputMode = Terminal
HeuristicAnalysis = yes
FilesTypesWarnings = yes
ScanFiles = All
ScanSubDirectories = yes
CheckArchives = yes
CheckEMailFiles = yes
ExcludePaths = /proc,/sys,/dev
FollowLinks = no
RenameFilesTo = #??
MoveFilesTo = /var/drweb/infected
EnableDeleteArchiveAction = no
InfectedFiles = Cure
SuspiciousFiles = Report
IncurableFiles = Move
ActionAdware = Move
ActionDialers = Move
ActionJokes = Move
ActionRiskware = Move
ActionHacktools = Move
ActionInfectedArchive = Move
ActionInfectedMail = Move
ActionInfectedContainer = Move
LogScanned = yes
LogPacked = yes
LogArchived = yes
LogTime = yes
LogStatistics = yes
RecodeNonprintable = yes
RecodeMode = QuotedPrintable
RecodeChar = "?"
MaxCompressionRatio = 5000
CompressionCheckThreshold = 500000
MaxFileSizeToExtract = 500000
MaxArchiveLevel = 8
MaximumMemoryAllocationSize = 0
ScannerScanTimeout = 0
MaxBasesObsolescencePeriod = 24
OnlyKey = no
остальное, опять же, по умолчанию

В файл /etc/drweb/drweb-icapd.ini добавляем/изменяем строчки

Код: Выделить всё

[Icapd]
MaxLogSize = 1m
Loglevel = 3
Logfile = /var/log/drweb/icapd.log
SyslogFacility = Daemon
SyslogPriority = Warning
Hostmaster = admin@mdev.su
Incurable = move
Suspicious = report
Infected = cure
Adware = move
Dialers = move
Jokes = move
Riskware = move
Hacktools = move
ArchiveRestriction = report
DaemonError = report
SkipObject = pass
LicenseError = report
Heuristic = yes
LocalScan = yes
BlockAdult = yes
BlockViolence = no
BlockWeapon = no
BlockGamble = yes
BlockDrugs = yes
BlockObscenity = no
BlockChats = no
BlockTerrorism = yes
BlockEmail = no
BlockSocialNetwork = no
BlockMalwareLinks = yes
BlockSocialEngineering = yes
BlockAll = no
WhiteDwsFiles = /etc/drweb/icapd.wl
SendUrlsWithViruses = no
Key = /opt/drweb/drweb32.key
BlackHosts = 
WhiteHosts = /etc/drweb/icapd.wh
MaxBlocksize = 10m
BindPort = 1344
BindAddress = 127.0.0.1
MimeStart
  *                                scan 1M pass
  application                      scan 1M pass
  image                            scan 1M pass
  message                          scan 1M pass
  multipart                        scan 1M pass
  text                             scan 1M pass
  audio                            pass all
  video                            pass all
  application/x-mms-framed         pass all
MimeEnd
[def]
[match]
оставляем остальное по умолчанию.

Запускаем DrWEB и смотрим, чтобы все включилось.
# /etc/init.d/drwebd start
# /etc/init.d/drweb-monitor start
# /etc/init.d/drweb-icapd start

root@rainbow:~# netstat | grep drweb
tcp 0 0 rainbow.ivoin.ru:43078 msk-co-drweb.ivoin:2193 ESTABLISHED


Теперь добавляем строчки в squid.conf

Код: Выделить всё

acl FTP proto FTP
always_direct allow FTP
icap_enable on
icap_service icapDrWEB respmod_precache bypass=off icap://127.0.0.1:1344/respmod
Перезапускаем сквид и пользуемся.
По модулю и всем параметрам его конфигурации есть достаточно подробная документация на сайте DrWEB.