Итак начнем. Предполагается что у Вас уже установлен и настроен сам Clamav.
Конфигурация clamd.conf
#Путь к логам LogFile /var/log/clamav/clamd.log #Максимальный размер лога LogFileMaxSize 20M LogTime yes LogSyslog no LogVerbose yes ExtendedDetectionInfo yes PidFile /var/run/clamav/clamd.pid TemporaryDirectory /var/tmp DatabaseDirectory /var/db/clamav #Порт TCPSocket 3310 #Адрес localhost TCPAddr 127.0.0.1 #Путь к сокету LocalSocket /var/run/clamav/clamd.sock FixStaleSocket yes MaxConnectionQueueLength 30 MaxThreads 20 ReadTimeout 120 CommandReadTimeout 5 SendBufTimeout 200 #Юзер от которого работает клам User clamav AllowSupplementaryGroups yes AlgorithmicDetection yes #Сканировать Pe-исполняемые файлы(венда) ScanPE yes #Сканировать Elf-исполняемые файлы(никсы) ScanELF yes DetectBrokenExecutables yes #Сканировать Ole-формат(мелкософт офис) ScanOLE2 yes OLE2BlockMacros no #Сканировать Pdf-чики ScanPDF yes #Сканировать Html-ки ScanHTML yes #Сканировать архивы ScanArchive yes MaxScanSize 50M MaxFileSize 25M MaxRecursion 10 MaxFiles 10000
Конфигурация freshclam.conf
DatabaseDirectory /var/db/clamav #Путь к логам UpdateLogFile /var/log/clamav/freshclam.log #Максимальный размер лога LogFileMaxSize 2M LogTime yes PidFile /var/run/clamav/freshclam.pid DatabaseOwner clamav AllowSupplementaryGroups yes #Зеркало обновлений DatabaseMirror database.clamav.net ScriptedUpdates yes CompressLocalDatabase no Checks 24 NotifyClamd /usr/local/etc/clamd.conf
Теперь собираем proftpd
evil[~]make -C /usr/ports/ftp/proftpd config
я обираю с такими опциями:
WITH_BAN=true WITH_CLAMAV=true WITH_CTRLS=true WITHOUT_EXEC=true WITHOUT_HTMLDOCS=true WITH_IFSESSION=true WITHOUT_IPV6=true WITHOUT_LDAP=true WITHOUT_LDAP_TLS=true WITH_MYSQL=true WITH_NLS=true WITHOUT_ODBC=true WITH_OPENSSL=true WITHOUT_PGSQL=true WITH_QUOTA=true WITHOUT_QUOTATAB_RADIUS=true WITHOUT_SHAPER=true WITHOUT_SQLITE=true WITHOUT_RADIUS=true WITHOUT_RATIO=true WITH_README=true WITH_REWRITE=true WITHOUT_TLS_SHMCACHE=true WITHOUT_TDS=true WITHOUT_SFTP=true WITHOUT_SFTP_SQL=true WITHOUT_SFTP_PAM=true WITHOUT_SITE_MISC=true WITHOUT_SQL_PASSWD=true WITHOUT_UNIQUE=true WITHOUT_WRAP=true WITHOUT_WRAP_FILE=true WITHOUT_WRAP_SQL=true
evil[~]make -C /usr/ports/ftp/proftpd make install clean
Конфигурация proftpd.conf
ServerName "Super Ftp Server ;-)" ServerType standalone DefaultServer on ScoreboardFile /var/run/proftpd/proftpd.scoreboard Port 21 Umask 022 MaxInstances 30 CommandBufferSize 512 #Пользователь и группа от которых работает демон User nobody Group www #Не требовать валидный шелл RequireValidShell off #Для усиления безопасности запрещаем подключаться на сервер как root RootLogin off #Запрещаем заливать файлы в имени которых первой идет точка DenyFilter *.*/ # Против DDOS атаки MaxInstances 8 #chroot-им всех пользователей в свои директории DefaultRoot ~ #Перезапись существующих файлов AllowOverwrite on #Разрешаем докачивать файлы AllowStoreRestart on #Подключаем антивирус ClamAV on ClamServer 127.0.0.1 ClamPort 3310 #Сокет не работает если пользователи в chroot-е ClamLocalSocket /var/run/clamav/clamd.sock #Ограничения по времени TimeoutIdle 180 TimeoutLogin 120 TimeoutNoTransfer 360 TimeoutStalled 640 SQLAuthTypes Plaintext SQLAuthenticate users #Подключения к серверу баз данных имя_пользователя@хост_сервера:порт имя_базы пароль_к_базе SQLConnectInfo ftp@localhost:3306 ftp ftppass SQLUserInfo `users_table` `username` `password` `uid` `gid` `homedir` `shell` SQLLogFile /var/log/proftpd.log SQLLog PASS counter_login SQLNamedQuery counter_login UPDATE "`last_login`=UNIX_TIMESTAMP(), `login_count`=`login_count`+1 WHERE `username`='%u'" `users_table` SQLLog ERR_PASS counter_err SQLNamedQuery counter_err UPDATE "`last_err_login`=UNIX_TIMESTAMP(), `err_login_count`=`err_login_count`+1 WHERE `username`='%U'" `users_table` SQLLog RETR,STOR log_story_transfer SQLNamedQuery log_story_transfer INSERT "'', UNIX_TIMESTAMP(),'%u', '%f', '%b', '%h', '%a', '%m', '%T'" `xfer_table` SQLLOG ERR_RETR,ERR_STOR,ERR_DELE,ERR_RMD,ERR_RNTO log_err_modify SQLNamedQuery log_err_modify INSERT "'', UNIX_TIMESTAMP(), '%u', '%f', '%h', '%a', '%m'" `xfer_errors`