пример построения FTP-сервера с интегрированной антивирусной защитой

Теме сцепки ClamAV c популярными юниксовыми демонами затрагивалась в «Сетевых Решениях» неоднократно, более того – все эти статьи содержали краткие сведения о ClamAV – установка, настройка. Так что с какой-то точки зрения сегодняшняя статья для «СР» вторична. Зато в ней есть и свои плюсы – в ходе описания таких, казалось бы, банальных вещей, как установка софта, автор поделился некоторыми полезными фишками по теме администрирования линукс-системы, так что не поленитесь – прочтите материал целиком :)

введение

В последнее время наблюдается бурный рост так называемых домашних сетей. Многие, да что там многие - практически все провайдеры предоставляют службы для обмена файлами. Но среди общей массы пользователей встречаются такие, которые не останавливаются на достигнутом. Видите ли подавай им собственные ресурсы, рассчитанные на пользователей сети и обеспечивающие кучу дополнительных функций и удобств. Например, в домашних локальных сетях очень часто встречаются такие службы, как собственные почтовые, игровые, файловые и прочие серверы, обычно работающие на старых (или не очень), выделенных специально для этого компьютерах с режимом работы по схеме 24х7.

Речь в этой заметке пойдет о FTP-сервере ProFTPd - его базовой настройке для предоставления анонимного доступа пользователей домашней сети и сетей, имеющих пиринговые отношения с ней. Но мой рассказ был бы совсем не отличим от десятков подобных, если бы повествовал только об настройке ProFTPd. Большинство серверов, работающих с этой замечательной службой, предоставляют возможность как скачки, так и закачки файлов и – как «дополнительную фичу» - получение в папку Upload какого-либо вредоносного программного кода. Но, как известно, демон ProFTPd является модульным и поддерживает интеграцию с широко известным свободно распространяемым антивирусом ClamAV. К тому же если на нашем предполагаемом сервере закрутить еще и почту, то можно попутно проверять проходящий почтовый трафик на вирусы. Что ж, если вам нравится эта идея, тогда поехали. Итак, цель данной статьи - показать небольшие хитрости в настройке связки FTP-сервера ProFTPd и антивируса ClamAV для предоставления доступа пользователям домашних сетей к FTP, поднятому на домашнем сервере, c установленной на нем source-based операционной системе Gentoo Linux. В этой заметке не будет описано никаких вариантов получения доступа, кроме анонимного, так как в большинстве случаев этого достаточно. Единственное, что будет ограничивать доступ к службе – IP-адрес клиента. Это необходимо сделать для того, чтобы к нашему серверу не подключались люди из Интернета (в случае реального IP) и сетей, с которыми не установлены пиринговые соглашения (и как результат - платный трафик).

ближе к делу

Будем считать, что ваш сервер собран, настроен и на нем уже крутится Gentoo, но не установлен ни ClamAV, ни ProFTPd. Что ж, это вполне нормально :) А начнем мы, собственно, с установки и настройки антивируса. В Gentoo это достаточно просто и практически не требует огромного количества серого вещества:

emerge - pv clamav

Проверяем опции, с которыми собирается ClamAV, смотрим, все ли нас устраивает, и если все нормально, то просто повторяем команду без ключей –pv. Далее просто ждем, пока антивирус не скачается, соберется и инсталлируется, о чем нам будет дополнительно сообщено на экране. Все нормально? Тогда приступаем к его конфигурированию и запуску. Тут, в принципе, наука тоже не особенно большая. Смотрим в файл конфига и внимательно читаем комментарии к опциям. Мне кажется, что этого будет достаточно для запуска службы:

/etc/clamd.conf
LogFile /var/log/clamav/clamd.log
LogTime
LogVerbose
PidFile /var/run/clamav/clamd.pid
TemporaryDirectory /tmp
DatabaseDirectory /var/lib/clamav
LocalSocket /var/run/clamav/clamd
FixStaleSocket
MaxConnectionQueueLength 30
User clamav
AllowSupplementaryGroups
ScanArchive
ArchiveMaxRecursion 2
ScanRAR
ArchiveMaxFileSize 50M
ArchiveMaxFiles 15000

Обратите внимание - я намеренно не стал запускать ClamAV на TCP-порту, так как считаю, что во многих случаях это упрощает работу, но если вам необходимо проверять вирусы с удаленных машин или у вас иные соображения в пользу этого варианта, то конечно, какие могут быть вопросы - ваша система, что хотите, то с ней и делайте :) Но все же я бы дал маленькую рекомендацию: Если вы уж и собрались запускать службу на TCP-порту и если не собираетесь предоставлять ее внешним пользователям, так хотя бы запускайте ее на "локальной петле". Это будет намного безопасней. Таааак, теперь нам необходимо ежедневно и по графику обновлять антивирусные базы. Что же делать? Но и тут разработчики ClamAV пошли нам на встречу, создав демон FreshClam, который по заданному графику будет обновлять вирусную информацию. Обычно он идет в комплекте с антивирусом и собирается из исходных текстов вместе с ClamAV, а значит нам всего лишь нужно подправить файл конфигурации /etc/freshclam.conf:

DatabaseDirectory /var/lib/clamav
UpdateLogFile /var/log/clamav/freshclam.log
PidFile /var/run/clamav/freshclam.pid
DatabaseOwner clamav
DatabaseMirror database.clamav.net
Checks 24

Обратите внимание, я привожу в пример строки файла конфигурации без комментариев. Это делается намеренно по двум причинам. Первая причина - чтобы не раздувать наше маленькое повествование, а вторая – то, что все строки в оригинальном файле freshclam.conf очень подробно описаны (правда, на английском, но если вы на нем не читаете, то что вы забыли в Linux???)

Все, приступаем к запуску.

/etc/init.d/clamd start
* Caching service dependencies ... [OK]
* Starting clamd ... [OK]
* Starting freshclam ... [OK]

Если видим эту картину, то все у нас замечательно и оба демона запустились. Для того, чтобы до конца убедиться, что все работает, смотрим логи в /var/log/clamav:

Thu Feb 2 10:10:37 2006 ->+++ Started at Thu Feb 2 10:10:37 2006
Thu Feb 2 10:10:37 2006 ->clamd daemon 0.88 (OS: linux-gnu, ARCH: i386, CPU: i386)
Thu Feb 2 10:10:37 2006 ->Log file size limited to 1048576 bytes.
Thu Feb 2 10:10:37 2006 ->Verbose logging activated.
Thu Feb 2 10:10:37 2006 ->Running as user clamav (UID 101, GID 408)
Thu Feb 2 10:10:37 2006 ->Reading databases from /var/lib/clamav
Thu Feb 2 10:10:44 2006 ->Protecting against 43895 viruses.
Thu Feb 2 10:10:44 2006 ->Unix socket file /var/run/clamav/clamd
Thu Feb 2 10:10:44 2006 ->Setting connection queue length to 30
Thu Feb 2 10:10:44 2006 ->Listening daemon: PID: 21378
Thu Feb 2 10:10:44 2006 ->Archive: Archived file size limit set to 52428800 bytes.
Thu Feb 2 10:10:44 2006 ->Archive: Recursion level limit set to 8.
Thu Feb 2 10:10:44 2006 ->Archive: Files limit set to 15000.
Thu Feb 2 10:10:44 2006 ->Archive: Compression ratio limit set to 250.
Thu Feb 2 10:10:44 2006 ->Archive support enabled.
Thu Feb 2 10:10:44 2006 ->Archive: RAR support enabled.
Thu Feb 2 10:10:44 2006 ->Portable Executable support enabled.
Thu Feb 2 10:10:44 2006 ->Mail files support enabled.
Thu Feb 2 10:10:44 2006 ->OLE2 support enabled.
Thu Feb 2 10:10:44 2006 ->HTML support enabled.
Thu Feb 2 10:10:44 2006 ->Self checking every 1800 seconds.

Ну и как контрольный выстрел в голову:

netstat -l
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 3419811 /var/run/clamav/clamd

Ура, вроде все заработало!
И, конечно же, добавляем все это в автозагрузку:

rc-update add clamav default

а теперь займемся FTP-демоном

Теперь настала пора разбираться с ProFTPd. Тут нас ждут не совсем приятные сюрпризы. Дело в том, что модуль, который проверяет файлы, проходящие по FTP-протоколу с/на нашу машину, писался сторонними разработчиками, и поэтому добавление его в систему вызовет некоторые проблемы. «Что за проблемы?» - спросите вы. Все очень просто: обычно для установки пакетов в Gentoo используется команда emerge, которая выполняет комплекс действий, таких как скачивание, проверка контрольных сумм, распаковка, сборка и прочие действия. В нашем же случае модуль не входит в пакет и, следовательно, не будет скомпилирован вместе с демоном.

Простая добавка его в архив с дистрибутивом вызовет несовпадение контрольных сумм. «Не беда!» - воскликнут люди, привыкшие работать с FreeBSD, - «скачаем сырцы, соберем демон ручной работы, напишем стартовые скрипты сами и будем счастливы!» Но это не наш метод. Все это, конечно, правильно и контролируемо, но я, например, считаю себя немного лентяем. Зачем делать руками, если за тебя может многое сделать система.
Итак, самое интересное. В одной консоли собираем ProFTPd по умолчанию (!).

emerge -pv proftpd

Добавляем или убираем все необходимые параметры и записываем их на бумажку, так как потом они нам понадобятся. Среди них я бы на всякий случай включил +pam и +mysql, пущай будут, мало ли что нам понадобиться.

Например, аутентифицировать привилегированных пользователей или что-нибудь хранить в базе - статистику или еще чего.

Открываем вторую консоль. Обратите внимание, началась ли сборка в первой консоли, и если процесс прошел стадию скачивания, то во второй консоли идем в директорию /usr/portage/distfiles и находим там архив с сырцами ProFTPd. Копируем его во временно созданную папку, распаковываем и читаем инструкцию по установке. После этого идем на сайт демона в раздел дополнительных модулей и ищем модуль mod_clamav и тянем его оттуда. По инструкции, для сборки с ProFTPd с какими-либо модулями они должны быть помещены в папку /contrib в директории, куда распаковали архив дистрибутива. После чего можно приступить к конфигурированию и сборке. Итак, для начала выполним в папке с распакованным дистрибутивом

./configure --help >configure.hlp

Смотрим, что там внутри, вспоминаем ключики, которые мы записали на бумажку несколько абзацев назад, и смотрим, как правильно все это подключить.

Получилось вот что:

./configure --with-modules=mod_ratio:mod_auth_pam:mod_tls:mod_readme:mod_wrap: \\ mod_sql: mod_sql_mysql:mod_clamav --with-
includes=/usr/include/mysql --enable-ncurses

Вот такая длиннющая строка. Остальное, если мне не изменяет память, должно само срастись :) После завершения работы скрипта конфигурации как всегда делаем make.

Далее идет сборка, и по ее завершению мы получаем демон с вкомпилированным в него дополнительным модулем.

Так, смотрим на первую консоль. Что видим? Ага, сборка по умолчанию закончилась, пакет установился и с виду все нормально. Отлично, теперь необходимо пойти в каталог с демоном, а это /usr/sbin/proftpd, и сделать его копию в какую-нибудь папку. Вернемся во вторую консоль и посмотрим, не закончился ли процесс сборки. Когда закончится, нужно взять из папки собранный вручную демон, который находится в корне каталога с распакованным дистрибутивом, и заменить им демон, собранный на автопилоте, и на всякий случай нами забэкапленный.

Отлично, теперь мы имеем демон, работающий с нестандартным модулем, стартовые скрипты по умолчанию для данного демона, установленные по нужным папкам библиотеки и прочий хлам.

Что еще осталось? Добавить ProFTPd в автозагрузку и исправить файл конфигурации. Тут все зависит от того, что нам нужно, а нужен-то нам всего лишь анонимный вход и права на папки (Download - только чтение, Upload - чтение и запись). Также нужен список разрешенных диапазонов IP-адресов и сеток.

Вот конфиг с моей системы:

ServerName "My FTP Server"
ServerType standalone
DefaultServer on
Port 21
Umask 022
MaxInstances 30
TimeoutLogin 120
TimeoutIdle 600
TimeoutNoTransfer 900
TimeoutStalled 3600
User ftp
Group ftp
UseReverseDNS off
ScoreboardFile /var/run/proftpd/proftpd
TransferLog /var/log/proftpd/xferlog.legacy
LogFormat default "%h %l %u %t \"%r\" %s %b"
LogFormat auth "%v [%P] %h %t \"%r\" %s"
LogFormat write "%h %l %u %t \"%r\" %s %b"

Order allow,deny
Allow from xxx.xxx.xxx.xxx/xx # Пишим IP адреса кому можно подключаться.
Deny from all


AllowOverwrite yes
IdentLookups off
ExtendedLog /var/log/proftpd/access.log WRITE,READ write
ExtendedLog /var/log/proftpd/auth.log AUTH auth

# Включаем проверку
ClamAV on

#Делаем анонимный вход корневая папка /usr/ftp
User ftp
Group ftp
UserAlias anonymous ftp
RequireValidShell no
MaxClients 5

AllowAll


DenyAll

#Папка Upload и права на нее

AllowAll


DenyAll


# Папка Download и права на нее

AllowAll


DenyAll






Что еще можно добавить? Наверное, больше ничего... Хотя да, нужно же запустить демон и проверить его работоспособность :)

/etc/init.d/proftpd start
* Starting proftpd ...
- mod_clamav/0.3: info: loaded 44059 virus patterns [OK]

Вооооот, теперь все запустилось! Модуль нашел ClamAV и даже подцепил его базы!

Отлично, на этом, я думаю, можно закончить мое повествование. Буду рад любым замечаниям и комментариям.



Фомичев Алексей, axx@interwave.ru.


Сетевые решения. Статья была опубликована в номере 02 за 2006 год в рубрике sysadmin

©1999-2024 Сетевые решения