Этап 2. Настройка прокси-сервера.
Итак, все тесты пройдены, мы в домене, SAMBA настроена правильно — переходим к следующему этапу. Настроим прокси-сервер, который называется squid. Мне в этом помогла вот эта статья. Находим файл /etc/squid/squid.conf и приведём его вот к такому виду:
# TAG: http_port
http_port 192.168.1.100:3128
visible_hostname 192.168.1.100
dns_nameservers xxx.xxx.xxx.xxx xxx.xxx.xxx.xxx
# Здесь нужно указать ДНС-серверы вашего провайдера (через пробел).
hierarchy_stoplist cgi-bin ?
# squid не будет кешировать динамически генерируемые страницы (поисковые сервера, некоторые другие серверы и чаты),
# а будет напрямую перенаправлять запрос серверу
coredump_dir /var/spool/squid
# Указываем куда сбрасывать core
# TAG: cache_mem (bytes)
cache_mem 256 MB
# сколько оперативной памяти сквид может забрать под свои нужды.
maximum_object_size 2048 KB
# максимальный размер объектов, которые будут сохранены на диск.
maximum_object_size_in_memory 1024 KB
# максимальный размер объектов, которые будут сохранены в кэше.
# TAG: cache_dir
cache_dir ufs /var/spool/squid 3096 16 256
# указывает сквиду, где сохранять кешируемые файлы. Указывает отдать под кеш 3096 мегабайт и
# создать 16 и 256 соответственно каталогов 1го и 2го уровня.
# Про каталоги сами все поймёте, когда загляните в место, где у сквида кэш.
# TAG: cache_access_log
# TAG: cache_log
# TAG: cache_store_log
# TAG: ftp_user
# в этих строках мы указываем сколько времени в минутах объект в кеше считается свежим
# и какой процент объектов оставлять с последнего обновления
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
# TAG: redirect_program
# redirect_program /etc/squid/redirector.sams
# Позже, здесь можно будет указать путь к редиректору.
# TAG: redirector_access
# TAG: auth_param
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp --require-membership-of="MYDOMAIN\\Пользователи домена"
auth_param ntlm children 50
auth_param ntlm keep_alive on
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic --require-membership-of="MYDOMAIN\\Пользователи домена"
auth_param basic children 50
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
auth_param basic casesensitive off
# TAG: acl
acl manager proto cache_object
# назначить протоколу кеширования объектов название manager
acl localhost src 127.0.0.1/32 192.168.1.100/32
# адрес сервера
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
# удалённые адреса
acl localnet src 192.168.0.0/16
# адресное пространство локальной сети
acl SSL_ports port 443
acl Safe_ports port "/etc/squid/allowports.txt"
# разрешённые порты
acl CONNECT method CONNECT
# Only allow cachemgr access from localhost
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
# Запрет всех портов, кроме разрешённых
http_access deny CONNECT !SSL_ports
# Запрет всех SSL портов, кроме разрешённых
http_access deny to_localhost
# TAG: http_access
http_access allow localhost
# разрешить доступ с сервера
http_access deny all
# запретить всё остальное
# TAG: delay_pools
После этого, создадим в папке /etc/squid файлик allowports.txt и заполним его списком разрешённых портов:
nano allowports.txt
содержимое файла будет таким:
80
8080
443
В будущем, в него можно будет дописать какие-нибудь специфические порты, которые могут использоваться на специфических сайтах.
Чтобы фаервол не препятствовал нам пользоваться сквидом, надо в iptables добавить ещё одно правило, которое откроет порт 3128. Подправим наш файл /etc/systemconfig/iptables:
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 137 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 138 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 139 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 445 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 631 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 631 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3128 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
Перезапустим iptables и пробуем запустить squid:
service iptables restart
service squid start
Если squid запустился, то в конфигурационном файле нет ошибок. Запустим ntsysv и поставим крыж рядом со squid. Теперь он будет стартовать при загрузке, и можно продолжать дальше. А дальше, нам надо установить антивирусник для сканирования интернет-трафика, который проходит через squid. Антивирусник называется ClamAV, а программа, которая его подружит со сквидом — c-icap. Для начала, установим и настроим сам ClamAV. Вводим:
yum -y install clamav clamav-scanner clamav-update
Теперь, перейдём в каталог /usr/share/doc/clamav-server-0.96.1 и прочитаем файл README. В нём написано, что нужно сделать следующее:
- Файл clamd.lodrotate надо привести вот к такому виду:
/var/log/clamd {
monthly
notifempty
missingok
postrotate
killall -HUP clamd 2>/dev/null || :
endscript
}
и положить в каталог /etc/logrotate.d переименовав в просто clamd.
Файл clamd.sysconfig надо привести вот к такому виду:
CLAMD_CONFIGFILE=/etc/clamd.d/clamd.conf
CLAMD_SOCKET=/var/run/clamd/clamd.sock
#CLAMD_OPTIONS=
и положить в /etc/sysconfig, также переименовав в просто clamd.
Файл clamd.init надо привести вот к такому виду:
#!/bin/bash
#
# chkconfig: - 75 25
# description: The clamd server running for clamd
CLAMD_SERVICE=clamd
. /usr/share/clamav/clamd-wrapper
и положить его в каталог /etc/init.d, переименовав в clamd.
Файл clamd.conf надо положить в каталог /etc/clamd.d и сконфигурировать. Мы приведём лишь его некоторые строчки в соответствующий вид:
# Example
LogFile /var/log/clamd
LogFileMaxSize 2M
LogSyslog yes
PidFile /var/run/clamd/clamd.pid
TemporaryDirectory /var/tmp
DatabaseDirectory /var/lib/clamav
TCPSocket 3310
TCPAddr 127.0.0.1
SelfCheck 1800
User root
После этого, нам надо включить демон clamd в автозагрузку. Делаем команду:
chkconfig clamd on
Хорошо. Теперь нам нужно сконфигурировать программу freshclam, которая будет обновлять базы нашего антивирусника. Найдём файл /etc/freshclam.conf и приведём в нём некоторые строчки в соответствие:
# Example
DatabaseDirectory /var/lib/clamav
UpdateLogFile /var/log/freshclam.log
LogFileMaxSize 2M
LogTime yes
PidFile /var/run/freshclam.pid
DatabaseOwner root
AllowSupplementaryGroups yes
DatabaseMirror db.ru.clamav.net
Checks 6
OnUpdateExecute clamscan -r --remove=yes --quiet /var/spool/squid #Этой опцией мы запускаем команду
# принудительного сканирования на вирусы содержимого в кэше сквида.
# Дело в том, что какой-нибудь свежий вирус всё равно не сразу попадает в антивирусную базу.
# Т.о., он может проскочить мимо антивирусника и осесть в кэше сквида.
# Тем не менее, с помощью этой опции, ClamAV всё равно, рано или поздно, должен удалить этот вирус из кэша.
TestDatabases yes
Теперь давайте попробуем скачать свежие антивирусные базы, вводим команду:
freshclam
Если всё в порядке, то вы должны увидеть вот это:
ClamAV update process started at Sat Nov 6 15:31:17 2010
Downloading main.cvd [100%]
main.cvd updated (version: 52, sigs: 704727, f-level: 44, builder: sven)
Downloading daily.cvd [100%]
daily.cvd updated (version: 12212, sigs: 144946, f-level: 53, builder: guitar)
Downloading bytecode.cvd [100%]
bytecode.cvd updated (version: 89, sigs: 10, f-level: 53, builder: edwin)
Database updated (849683 signatures) from db.ru.clamav.net (IP: 62.181.33.229)
/var/spool/squid: No such file or directory
Не обращайте внимание на сообщение «/var/spool/squid: No such file or directory», если оно вылезет. Теперь, давайте попробуем запустить наш сервис clamd:
service clamd start
Если видим «Запускается clamd.clamd: [ OK ]», то радуемся и движемся дальше. Если нет, то проверяем, всё ли сделали сделали правильно, описанное выше.
Для того, чтобы программа freshclam стартовала при запуске сервера и работала в режиме сервиса, обновляя базу каждые 4 часа, мы перейдём в каталог /etc/init.d и создадим там скриптик:
nano freshclam
вот с таким содержимым:
#!/bin/bash
### BEGIN INIT INFO
# Provides: freshclam
# chkconfig: - 99 24
# Short-Description: starting freshclam daemon
# Description: freshclam is freshclam daemon
### END INIT INFO
/bin/echo «Starting freshclam daemon»
cd /usr/bin
./freshclam -d -c 6
Сохраним и сделаем этот скрипт исполняемым:
chmod +x freshclam
и добавим в автозагрузку:
chkconfig freshclam on
Ну что ж, теперь нужно «подружить» Squid и ClamAV. В этом нам поможет программа C-icap. В своё время, я пользовался вот этой статьёй. К сожалению, c-icap нет в репозиториях, и нам придётся её собирать и ставить вручную. Исходники возьмём здесь. Я не стал скачивать самую свежую версию, т.к. не охото разбираться в её конфиге. Будем настраивать, скачав версию c_icap-060708rc4. Для сборки нам понадобятся пакеты: autoconf gcc gcc-c++ zlib-devel clamav-devel. Исходники программы распаковываем в удобное для нас место, затем, заходим туда и выполняем команды:
./configure --enable-static --with-clamav --prefix=/usr/local/c-icap
make
make install
Затем, переходим в каталог /usr/local/c-icap/etc и правим файл c-icap.conf. Приводим в соответствие следующие строчки:
User nobody
Group nobody
acl localsquid_options src 127.0.0.1 type options
acl localsquid_respmod src 127.0.0.1 type respmod
acl localsquid src 127.0.0.1
acl externalnet src 0.0.0.0/0.0.0.0
icap_access allow localsquid_options
icap_access allow localsquid_respmod
icap_access allow localsquid
icap_access http_auth localsquid
icap_access deny externalnet
srv_clamav.VirSaveDir /var/infected
# srv_clamav.VirHTTPServer "http://fortune/cgi-bin/get_file.pl?usename=%f&remove=1&file="
# srv_clamav.VirUpdateTime 15
# srv_clamav.VirScanFileTypes ARCHIVE EXECUTABLE
Сделаем доступ для всех пользователей в папку /var/tmp:
chmod -R 777 /var/tmp
Создадим папку /var/infected и дадим в неё доступ пользователю nobody:
mkdir /var/infected
chown nobody:nobody /var/infected
Теперь попробуем запустить c-icap. Заходим в каталог /usr/local/c-icap/bin и набираем команду:
./c-icap
Если всё хорошо, то должно быть типичное линуксовое молчание. С помощью клиента проверим состояние демона. Прямо тут же вводим команду:
./icap-client
Вывод должен быть примерно таким:
ICAP server:localhost, ip:127.0.0.1, port:1344
OPTIONS:
Allow 204: Yes
Preview: 1024
Keep alive: Yes
ICAP HEADERS:
ICAP/1.0 200 OK
Methods: RESPMOD, REQMOD
Service: C-ICAP/060708rc4 server - Echo demo service
ISTag: CI0001-XXXXXXXXX
Transfer-Preview: *
Options-TTL: 3600
Date: Mon, 08 Nov 2010 11:08:38 GMT
Preview: 1024
Allow: 204
X-Include: X-Authenticated-User, X-Authenticated-Groups
Encapsulated: null-body=0
Нам осталось только создать скриптик, который будет запускать c-icap при загрузке системы. Сделаем мы это также, как делали в случае с freshclam. Перейдём в каталог /etc/init.d и создадим файл c-icap:
nano c-icap
с таким содержимым:
#!/bin/bash
### BEGIN INIT INFO
# Provides: c-icap
# chkconfig: - 89 26
# Short-Description: starting c-icap daemon
# Description: c-icap is icap daemon
### END INIT INFO
/bin/echo «Starting c-icap daemon»
cd /usr/local/c-icap/bin
./c-icap
Сделаем его исполняемым и добавим в автозапуск:
chmod +x c-icap
chkconfig c-icap on
Последний штрих, который нам надо сделать, это подправить конфигурационный файл сквида. Откроем его и в самый конец допишем следующее:
icap_enable on
# включить icap
icap_preview_enable on
icap_preview_size 128
icap_send_client_ip on
icap_service service_req reqmod_precache bypass=1 icap://127.0.0.1:1344/srv_clamav
icap_service service_resp respmod_precache bypass=0 icap://127.0.0.1:1344/srv_clamav
adaptation_access service_req allow all
adaptation_access service_resp allow all
# всех проверяем на вирусы
Таким образом мы подружили Squid и ClamAV. Теперь весь трафик, идущий через Squid, будет сканироваться на вирусы.
Следующим шагом будет установка программы SAMS. Перед установкой и настройкой, рекомендую прочесть документацию. Готовые пакеты самса можно поискать тут. В своём случае, я пересобиру вот этот пакет под свою систему, выполнив вот такие команды:
yum -y install rpm-build mysql-devel pcre-devel php-gd
wget http://nixdev.net/release/sams/packages/Fedora_12/src/sams-1.0.5-91.1.src.rpm
rpmbuild --rebuild sams-1.0.5-91.1.src.rpm
После чего, получу готовый пакет в каталоге /root/rpmbuild/RPMS/i386. И установлю его:
rpm -i sams-1.0.5-91.1.i386.rpm
Однако, для того, чтобы программа работала нормально, надо сделать ещё кое-какие приготовления. Кое-что мне разъяснили на официальном форуме. И кое-что ещё написано тут. Поэтому, приступим всё это делать. Запустим и включим в автозагрузку следующие демоны:
service mysqld start
chkconfig mysqld on
service httpd start
chkconfig httpd on
Отредактируем файл конфигурации php /etc/php.ini. Находим и приводим в соответствующий вид строчки:
safe_mode = On
safe_mode_exec_dir = "/usr/share/sams/bin"
Теперь, находим каталог /usr/share/sams/src, в котором нас интересуют два файла: configtray.php и webconfigtray.php. В этих файлах нам надо найти слово «GetHostName» и заменить его на «GetHostName_».
Для большей безопасности, надо поставить в MySQL пароль на root, т.к., по умолчанию, он отсутствует:
mysql -u root
SET PASSWORD FOR 'root'@'localhost' = PASSWORD('ваш_пароль');
Теперь можно приступить к правке конфига самого SAMS, который лежит в каталоге /etc. Он совсем небольшой и будет выглядеть так:
[client]
SQUID_DB=squidlog
SAMS_DB=squidctrl
MYSQLHOSTNAME=localhost
MYSQLUSER=sams
MYSQLPASSWORD= #пароль на пользователя sams в MySQL
MYSQLVERSION=5.1
SQUIDCACHEFILE=access.log
SQUIDROOTDIR=/etc/squid
SQUIDLOGDIR=/var/log/squid
SQUIDCACHEDIR=/var/spool/squid
SAMSPATH=/usr
SQUIDPATH=/usr/sbin
SQUIDGUARDLOGPATH=/var/log
SQUIDGUARDDBPATH=/var/db/squidguard
RECODECOMMAND=iconv -f KOI8-R -t 866 %finp > %fout
LDAPSERVER=192.168.1.200 # контроллер домена
LDAPBASEDN=mydomain.domain # домен Active Directory
LDAPUSER=admin # имя пользователя, входщего в группу администраторы домена
LDAPUSERPASSWD= # пароль администратора AD
LDAPUSERSGROUP="Пользователи домена" # группа, в которую входят пользователи домена AD.
REJIKPATH=/usr/local/rejik
SHUTDOWNCOMMAND=shutdown -h now
CACHENUM=0
Чтобы мы могли пользоваться web-интерфейсом самса, нам нужно открыть порт 80 на фаерволе. Не буду снова тут приводить весь конфиг. Добавим под правилом для сквида ещё одно правило, открывающее порт 80:
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
Не забываем перезапустить iptables. Теперь, открываем браузер, и переходим на страничку самса по адресу http://192.168.1.100/sams/, где 192.168.1.100 — адрес вашего сервера. Жмём кнопку «Run SAMS database installation script». Появятся поля, в которых надо ввести:
MySQL Hostname — адрес хоста c MySQL сервером. У нас это localhost
MySQL login — имя суперпользователя для MySQL. У нас это root
MySQL password — пароль на этого суперпользователя, который мы недавно назначили.
SAMS MySQL user password — пароль на пользователя sams, который создастся этим скриптом.
Жмём «Create database». И если нам крупными буквами вылезет надпись «SAMS databases created», то жмём кнопочку «Starting SAMS webinterface», и добро пожаловать в SAMS! По умолчанию в SAMS зайти под администратором можно, введя логин admin и пароль qwerty, которые, естественно, надо сразу же поменять. Я не буду вдаваться во все особенности и тонкости работы SAMS. Это вам придётся изучить из документации. Я лишь приведу скриншот своих настроек, с которыми самс берёт пользователей из Active Directory.
Дальше уже дело техники: импортировать пользователей из AD, создать списки плохих сайтов, расставить квоты и прочие админские гадости
Когда сделаете все настройки, то не спешите сразу нажимать кнопку «переконфигурировать squid». Сначала запустите демон sams, который передаст эти настройки сквиду:
service sams start
Ну а после — перезагрузите сервер. Потом, надо бы опробовать, как работает наша антивирусная система. Зайдите на сайт http://www.eicar.org/anti_virus_test_file.htm, пролистните страничку вниз и попробуйте скачать тестовые вирусы. При попытке скачать их, вы должны получить сообщение:
VIRUS FOUND
You try to upload/download a file that contain the virus
Eicar-Test-Signature
This message generated by C-ICAP/060708rc4 srvClamAV/antivirus module
Если так, то можно радоваться, половина дела сделана! С помощью прокси-сервера Squid мы можем крутить-вертеть http-трафиком, как захотим. Однако, как контролировать и отслеживать весь остальной трафик? В этом нам помогут Iptables, Webmin и NetAMS, которые рассмотрим на следующем этапе.
Этап 3. Настройка фаервола.
Вернуться обратно на:
Этап 1
Перейти сразу на:
Этап 4