avatar Ubuntu Защита файлового сервера SAMBA антивирусом ClamAV в Ubuntu 11.04

Файловый сервер Samba используется для полноценного взаимодействия ОС Linux с рабочими станциями и серверами под управлением ОС Windows по протоколу SMB.
Обязательно ознакомьтесь с моей статьей о том, как настроить файловый сервер SAMBA, которую я публиковал ранее. Данный сервер как решает множество проблем с обменом файлами, так и создает целый ряд новых. Т.к. он заточен, в основном, для работы с операционными системами MS Windows, то тут возникает проблема с распространением вредоносного ПО через «расшаренные» сетевые папки. За файловый сервер Ubuntu, обычно, можно не волноваться, а вот виндовые рабочие станции, зачастую становятся источником заражения для остальных ПК.

Нам необходимо организовать антивирусную проверку, на лету, загружаемых на сервер файлов. Организовать проверку расшаренных папок, это пол дела, нам необходимо еще организовать, антивирусную защиту, домашних директорий пользователей.
Собственно сама схема работы:

Схема работы связки

А теперь более развернуто, как все это будет работать. Все пользовательские операции на запись и чтение файлов сервера, будут проходит через ClamFS т.к. сам ClamAV не умеет проверять файлы на лету. Работа ClamFS напоминает прослойку между пользователем и файловой системой файлового сервера т.е все файлы проходящие через нее, проходят обязательную проверку и если с ними все нормально, то они записывается в раздел /home, но если с ними не все в порядке, то они также будут сохранены на на сервере, но доступ к ним получить, будет нельзя.

Переходим к практической части:

Установка ClamAV и ClamFS


sudo su
aptitude install clamav clamfs


теперь нам необходимо создать директорию /clamfs

mkdir /clamfs

А в директории /home создать директорию /clamav

mkdir /home/clamav


предоставим для директории clamfs полные права для всех:
chmod -R 777 /clamfs


Теперь, нам понадобится пример конфигурационного файла ClamFS который находится в архиве, распакуем его:
gunzip /usr/share/doc/clamfs/clamfs-sample.xml.gz

Скопируем его в директорию с ClamAV заодно переименовав в clam.xml
cp /usr/share/doc/clamfs/clamfs-sample.xml /etc/clamav/clam.xml


Редактируем его, нас интересует пункт filesystem root, но то что в нем написано нас не устраивает, то что есть в файле мы закоментируем и добавим свою стоку:
nano /etc/clamav/clam.xml


<filesystem root="/home/clamav" mountpoint="/clamfs" public="yes" nonempty="yes" />

Где:
filesystem root="/home/clamav" -как видно из названия, корень файловой системы, физическое расположение папки по пути /home/clamav
mountpoint="/clamfs" — точка монтирования, физическое расположение папки по пути /clamfs
Также в этом файле нам необходимо изменить настройки логирования работы работы ClamFS, по умолчанию, все записи попадают в syslog, это не правильно и для этих целей необходимо создавать свой журнал, для этого нам необходимо закоментировать строку
<log method="syslog" />

Она должна выглядеть:
<!-- <log method="syslog" /> -->

и раскоментировать следующую за ней строку:
<log method="file" filename="/var/log/clamfs.log" verbose="no" />


Сохраняем изменения, выходим.
запускаем ClamAV
/etc/init.d/clamav-daemon start

Примонтируем содержимое директории /home/clamav в /clamfs
clamfs /etc/clamav/clam.xml


Главный фокус в том что директория останется примонированной только до перезагрузки, после рестарта системы, монтирование необходимо восстановить, делать это в ручную-совершенно не правильно, по этому, этот скучный процесс мы автоматизируем, для этого отредактируем файл rc.local:
nano /etc/rc.local


Добавим в него, перед строкой exit 0, следующее:
clamfs /etc/clamav/clam.xml


Сохраняем изменения и выходим.
Далее нам необходимо установить Samba сервер:

Установка Samba сервера


Установим необходимые пакеты:
aptitude install samba samba-common libcups2


Редактируем файл smb.conf
nano /etc/samba/smb.conf


Находим и снимаем комментарий со строки:
security = user


Добавим в конфигурационный файл строку, с ее помощью немного повышается скорость работы по протоколу SMB:
socket options = TCP_NODELAY IPTOS_LOWDELAY SO_KEEPALIVE SO_RCVBUF=8192 SO_SNDBUF=8192

Сохраняем изменения выходим из smb.conf

Создадим общие папки для наших пользователей и предоставим для них соответствующие права:
mkdir -p /clamfs/public
chown -R root:users /clamfs/public
chmod -R ug+rwx,o+rx-w /clamfs/public


Снова беремся за редактирование smb.conf
nano /etc/samba/smb.conf


Добавим туда следующие строчки:

[Public]
  comment = All Users
  path = /clamfs/public
  valid users = @users
  force group = users
  create mask = 0660
  directory mask = 0771
  writable = yes


Далее находим секцию [homes]
И закомментируем все что в ней есть, обозначенное (; ) их заменяем на #
И вместо, всего что там есть, вставляем следующее.

[homes]
   comment = Home Directories
   browseable = no
   valid users = %S
   writable = yes
   create mask = 0700
   directory mask = 0700


Сохраняем все изменения и выходим.

Перезагружаем файловый сервер:
/etc/init.d/smbd restart


В директории /home мы создали директорию /clamav/ в нее мы и будем добавлять домашние каталоги всех новых пользователей, а также сетевые папки, сделано это для того чтобы упорядочить проверяемые файлы.
Теперь нам необходимо добавить в систему нового пользователя с именем test:
useradd test -b /home/clamav/ -m -G users


Где:test-имя пользователя
/home/clamav-место где будет находиться домашняя директория пользователя.
ключ -m — указывает на то, что будет создана одноименная домашняя директория.
-G users — добавим пользователя в группу users.
Добавим этого пользователя в базу Samba, для того, чтобы он мог подключаться в сетевым папкам:
smbpasswd -a test


Что у нас получилось:
1) Сетевая, общая, папка-физически находится у нас по пути /home/clamav/public
2) Все запросы идут черед директорию /clamfs благодаря чему все файлы проверяются на наличие вредоносного ПО.
3) Домашние директории пользователей также проходят антивирусную проверку, но по расписанию и располагаются в /home/clamav/$USER_NAME

Теперь нам необходимо его протестировать, то что мы тут наворотили. Файл для тестирования работоспособности антивирусов можно скачать ОТСЮДА. Выключаем антивирус на локальном ПК т.к. загружаемый архив будет быстро заблокирован.

Загружаем архив на наш, свеженький, файловый сервер в папку Public и после этого попытаемся скопировать его обратно себе на ПК, ClamFS пресекает наши попытки это и есть демонстрация работоспособности антивирусной системы. Но можно предположить, что вирус попал на сервер раньше, чем его сигнатура была добавлена в антивирусную базу, для решения этой проблемы нам необходимо выполнять регулярную проверку всех файлов на файловом сервере. Как часто ее проводить-личное дело каждого и зависит от параноидальности того, кто все это настраивает. Самым приемлемым вариантом, по моему личному мнению, после завершения рабочего дня, тогда и нагрузка на сервере поменьше и скорость доступа к файлам не имеет значения, ведь все ушли домой. И вот тут тоже возможны варианты, можно запускать проверку и чтобы все файлы в которых обнаружено подозрительное ПО немедленно удалялись, а можно сделать так, что все подозрительные файлы складывались в карантин, системный администратор потом будет разбираться с каждым индивидуально.
Рассмотрим оба варианта:

1. Принудительное удаление всех подозрительных файлов.
Работа по принципу: «Стреляй всех подряд, а господь разберется!» имеет право на жизнь, но лишь до поры до времени. Если в сетевой папке лежат файлы, потеря которых не критична, то можно смело его использовать и забыть о присмотре за данной сетевой шарой, а заняться более интересными вещами.
Создадим малюсенький скрипт, который можно запускать через крон:

nano /home/clamav/virusdelete.sh


И добавим в него следующее:
#!/bin/sh
/usr/bin/clamscan -r /home/clamav --remove=yes


2. Перенос подозрительных файлов в Карантин.
Этот вариант, можно использовать в том случае, если важно не потерять ценные данные, ведь всегда есть возможность что антивирус, по ошибке, может удалить что-то ценное, да и clamav не умеет лечить зараженные файлы-только удалять. Все подозрительные фалы будем складывать в личную папку админа, для того чтобы он разобраться с этими файлами отдельно, например проверив их другим, «коммерческим» антивирусом.
Создадим скрипт:
sudo nano /home/virusmove.sh


Следующего содержания:
#!/bin/sh
/usr/bin/clamscan -r /home/clamav --move=/home/srvadmin/quarantine


Домашнюю директорию пользователя srvadmin мы не помещаем в директорию /home/clamav т.к. все её содержимое проверяется автоматически по расписанию, а по этой причине нет необходимости проверять карантинную директорию, мы ведь и так знаем, что в ней находятся подозрительные файлы. На этом, я пожалуй и закончу.

9 комментариев

avatar
Добрый вечер а может уже ночь!
Огромное спасибо за такие добротные статьи.
Все сделал по вашим инструкциям и все получилось и все работает.
Но есть у меня одна недоработка. Может подскажите, как дать одному юзеру
права, для того, чтобы он видел все остальные папки всех юзеров и мог читать и писать туда
Спасибо большое!!!
avatar
В вашей ситуации, можно создать пользователя, например mainuser и одноименную группу, делаем его владельцем всех директорий, а пользователей которые работают с этими папками добавляем в группу mainuser и выставляем права rwx-rw_-r ну поиграться create mask directory mask чтобы создавались, файлы с нужными правами. Надеюсь, я вас правильно понял…
avatar
Добрый день Artful!
Спасибо за быстрый ответ, но для меня это пока темный лес.
Как я уже говорил, я все сделал все как написано выше. Все 23 пользователя
находятся в /home/clamav/management/и так далее. Все 23 пользователя могут входить
каждый в свою попку и производить любые действия. Но одному пользователю «director»,
надо чтобы он мог входить, писать, и читать во все папки.
Если можно, то поподробней, как мне это прописать в smbconfig.
Буду очень благодарен. За ранее спасибо.
С уважением. gudvin1
avatar
Я так понял каждый пользователь работает каждый со своей домашней директорией.
То другой пользователь не сможет получить к ней доступ!
Необходимо создать отдельную шару, с папками пользователей и рулить правами доступа на уровне файловой системы.
avatar
Спасибо Artful!
Буду читать маны дальше.
avatar
Как создать расшаренную папку рекомендую посмотреть мануал по настройке файлового сервера Samba думаю там найдутся ответы на 90% вопросов.
avatar
У меня такой вопрос: в случае с использованием clamfs при создании файлов на них не дается доступ даже самому владельцу, хотя в конфиге самбы указано:
directory mask = 0771
create mask = 0771
Файлы создаются с правами
-rwxrw----. И Пишет при попытке открыть только что созданный текстовый документ — Нет доступа. Изменяю в конфиге самбы шару на ту же папку, но не в системе Clamfs — все норм.
Подскажите, куда копать, плиз.
avatar
Добрый день! Спасибо за статью, всё настроил. Но есть одно но. А именно неверное отображение размера подключённого сетевого диска в windows. Отображается размер корневого раздела, а не примонтированного, для всех дисков. У меня например 4 винчестера. И монтируются они соответственно /media/hard, /media/hard2 и т.д. Папка clamav находится в корне. Ну и соответственно настройки clamfs.xml так: filesystem root="/media" mountpoint="/clamfs" public=«yes» nonempty=«yes». Я то понимаю что windows мне показывает размер корня так как папка clamav там находится. А вот как показывать правильно обьём каждого диска??? Создать 4 папки clamav на каждом диске и четыре строки с параметрами filesystem root=»/media/hard — hard2 — hard3 и т.д. Корректно ли всё будет работать и не создаст ли дополнительной нагрузки на систему? Обьём данных гоняется большой поэтому очень нужно контролировать свободное место сетевого диска. Заранее спасибо!
P.S ОС Ubuntu
avatar
да вы все правильно понимаете, система показывает размер подмонированного раздела, соответственно если директория живет на другом диске, до будет показана именно его размер.
Воспользуйтесь статьей по внедрению дисковых квот, думаю она вам будет полезна для понимания процесса.
По поводу нагрузки, по данной схеме, у меня реализован файловый сервер, который используется для хранения общих документов, если смотреть по IOPS, то массив используется максимум на 30%, собран RAID5, на счет других ситуаций предугадать сложно, тут только смотреть на месте, что у вас происходит и какая нагрузка создается на дисковую подсистему.
Есть что добавить? Регистрируйся и оставляй комментарии!