- Использованные версии ПО:
# uname -sr FreeBSD 8.0-STABLE
# pkg_info | grep clamav clamav-0.96.1
# pkg_info | grep exim exim-4.71
- ClamAVУстановка и настройка
- Exim/usr/local/etc/exim/configure.default
Ищем строку которая содержит:av_scanner =
Раскомментируем если нужно и меняем на:
av_scanner = clamd:/var/run/clamav/clamd.sock
Раскомментируем строки:
# deny malware = * # message = This message contains a virus ($malware_name).
Перезапускаем Exim
# /usr/local/etc/rc.d/exim restart
Проверка что Exim работает:
# ps ax | grep exim 1512 ?? S 0:00.00 /usr/local/sbin/exim -bd -q30m (exim-4.71-0) 1513 ?? S 0:00.00 /usr/local/sbin/exim -bd -q30m (exim-4.71-0) 46661 ?? Ss 0:07.51 /usr/local/sbin/exim -bd -q30m (exim-4.71-0)
Смотрим /var/log/clamav/clamd.log на предмет отсутствия ошибок работы с ClamAV. - cat /var/log/clamav/clamd.log | grep FOUND
Установка FreeBSD через SSH сессию
Понадобилось человеку поставить FreeBSD с ZFS на сервер, но никак не получалось. Решил попробовать сам – но фишка была в том, что сервер физически находился в Украине. Решили делать удаленно.
Грузимся с диска в Live CD , логинимся и проделываем следующее:
1) Создаем каталог и монтируем раздел /etc:
# mkdir /tmp/etc
# mount_unionfs /tmp/etc /etc
2) Разрешаем вход под root в SSH:
# sed -i.bak -e 's/#PermitRootLogin no/PermitRootLogin yes/g' /etc/ssh/sshd_config
3) Запускаем SSHD:
# /etc/rc.d/sshd onestart
4) Задаем пароль для root:
# passwd root
5) И поднимаем сеть ( IP и тп изменены на самом деле было сделано тоже самое, но прописывались уже внешний IP и шлюз, так как инет был напрямую через свитч):
Задаем интерфейсу re0 IP 192.168.1.143 и маску 255.255.255.0
# ifconfig re0 inet 192.168.1.143 netmask 255.255.255.0 up
И прописываем шлюз:
# route add default 192.168.1.1
Теперь можно логиниться по SSH на адрес 192.168.1.143 и начать установку через sysinstall, или в моем случае как описано тут. Успехо
Настройка почтового сервера на базе Exim+Dovecot+SpamAssassin+Clamav c веб-мордами Vexim+RoundCube
Ставим nginx
pc# cd /usr/ports/www/nginx pc# make install clean
в /etc/rc.conf добавляем:
nginx_enable="YES"
Ставим MySQL
pc# cd /usr/ports/databases/mysql51-server pc# make install clean
в /etc/rc.conf добавляем:
mysql_enable="YES"
Запускаем MySQL
pc# /usr/local/etc/rc.d/mysql-server start
Задаем пароль для root в MySQL ( в скобках сам пароль )
pc# mysqladmin -u root password 'password'
Ставим PHP ( отмечаем [*] FPM Build FPM version )
pc# cd /usr/ports/lang/php5 pc# make install clean
в /etc/rc.conf добавляем:
php_fpm_enable="YES"
Приводим файл /usr/local/etc/php-fpm.conf к такмоу виду:
[global] pid = run/php-fpm.pid error_log = /var/log/php-fpm.log events.mechanism = kqueue include=/usr/local/etc/php-fpm.d/*.conf
Создаем каталог,в котором будут лежать описания пулов для PHP-FPM ( кому то может пригодиться, если юзеров для сайтов больше чем один ):
pc# mkdir -p /usr/local/etc/php-fpm.d/
и описываем пул
pc# ee /usr/local/etc/php-fpm.d/www.conf
[www] user = www group = www listen = /tmp/php-fpm.sock listen.backlog = -1 pm = dynamic pm.max_children = 2 pm.start_servers = 1 pm.min_spare_servers = 1 pm.max_spare_servers = 2 pm.max_requests = 500 php_admin_value[error_log] = /var/log/fpm-php.www.log php_admin_value[memory_limit] = 128M
Запускаем PHP-FPM:
pc# /usr/local/etc/php-fpm start
Ставим Vexim (отмечаем MySQL):
pc# cd /usr/ports/mail/vexim/ pc# make install clean
Ставим модуль p5-DBD-mysql51
pc# cd /usr/ports/databases/p5-DBD-mysql51/ pc# make pc# make install clean
Запускаем скрипт:
perl /usr/local/share/vexim/create_db.pl --act=newdb --dbtype=mysql -uid=110 --gid=110 --mailstore=/usr/local/mail pc# Please enter the username of the mysql superuser: root Please enter the password of the mysql superuser: Please enter the name of your NEW database: vexim -------------------------------------------------- Database: vexim will be created -------------------------------------------------- Is this correct? (Y = continue / anykey = exit ): Y
Please enter a password for the 'vexim' database user: Confirm password: Please enter a password for the 'siteadmin' user: Confirm password: The user 'siteadmin' has been added with the password Database created successfully!
Создаем каталог с виртуальными хостами для nginx
pc# mkdir -p /usr/local/etc/nginx/vhosts
Приводим /usr/local/etc/nginx/nginx.conf к такому виду:
worker_processes 2; events { use kqueue; worker_connections 2048; } http { include mime.types; default_type application/octet-stream; sendfile on; client_body_buffer_size 16K; client_header_buffer_size 1k; client_max_body_size 32M; large_client_header_buffers 2 1k; client_body_timeout 10; client_header_timeout 10; keepalive_timeout 5 5; send_timeout 10; reset_timedout_connection on; server_tokens off; gzip on; # Закрываем обращения по IP адресу server { listen 80 default_server; server_name _; return 444; } # PHP-FPM upstream php-fpm { server unix:/tmp/php-fpm.sock; } # Инклюдим файлы с виртуальными хостами include /usr/local/etc/nginx/vhosts/*; } Делаем виртуальный хост в nginx для Vexim pc# ee /usr/local/etc/nginx/vhosts/exim.deathstar.name server { listen 80; server_name exim.deathstar.name; access_log /var/log/nginx/exim-access.log; error_log /var/log/nginx/exim-error.log; root /usr/local/www/vexim; index index.php; charset utf-8; location ~ .php$ { fastcgi_pass php-fpm; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /usr/local/etc/nginx/fastcgi_params; } location ~ /.ht { deny all; } }
Редактируем конфиг Vexim
pc# ee /usr/local/www/vexim/config/variables.php";
и вводим данные для подключения к базе данных введенные ранее.
Создаем группу и пользователя exim:
pc# pw groupadd vexim -g 90 pc# pw useradd vexim -u 90 -g vexim -d /usr/local/mail -m -s /nonexistant
Устанавливаем Exim ( отмечаем опцию SA-EXIM для работы SpamAssasin) :
pc# cd /usr/ports/mail/exim && make install clean
Добавляем в /etc/rc.conf:
exim_enable="YES"
Копируем и правим конфиги
pc# cd /usr/local/etc/exim/ pc# cp /usr/local/share/doc/vexim/docs/*.conf ./ pc# cp /usr/local/share/doc/vexim/docs/configure ./ pc# ee /usr/local/etc/exim/configure
Находим строку:
MY_IP = CHANGE
описываем свой ip
MY_IP = 146.38.53.5/pre> Находим:
trusted_users = avleen:www
и удаляем avleen .Остается:
trusted_users = www exim_user = mailnull exim_group = mail never_users = root
Находим закоментированную строку, отвечающую за подключение к MySQL серверу,раскоментируем ее и поставим там свой пароль:
hide mysql_servers = localhost::(/tmp/mysql.sock)/vexim/vexim/vexim
Раскоментируем:
AINS = SELECT DISTINCT domain FROM domains WHERE type = 'relay' AND domain = '${quote_mysql:$domain}' ALIAS_DOMAINS = SELECT DISTINCT alias FROM domainalias WHERE alias = '${quote_mysql:$domain}'timeout_frozen_after = 2d log_selector = +subject
Изменяем путь к антивируму ClamAV:
Находим:
av_scanner = clamd:/var/run/clamav/clamd
и меняем на
av_scanner = clamd:/var/run/clamav/clamd.sock
Добавляем в /etc/rc.conf
spamd_enable="YES"
и запускаем
exim# /usr/local/etc/rc.d/sa-spamd start
Ставим ClamAV:
pc# cd /usr/ports/security/clamav && make install clean
Добавляем в /etc/rc.conf:
clamav_freshclam_enable="YES" clamav_clamd_enable="YES"
и запускаем
pc# /usr/local/etc/rc.d/clamav-clamd start
Запускаем обновление баз ClamAV
pc# /usr/local/etc/rc.d/clamav-freshclam start
Добавялем в /etc/rc.conf
exim_enable="YES"
Устанавливаем Dovecot:
pc# cd /usr/ports/mail/dovecot && make install clean
Настройки хранятся в файле /usr/local/etc/dovecot.conf
Приводим конфиг к такому виду
base_dir = /var/run/dovecot/ protocols = imap pop3 imaps pop3s protocol imap { listen=*:143 } protocol pop3 { listen=*:110 } disable_plaintext_auth = no log_path =/var/log/dovecot log_timestamp = "%b %d %H:%M:%S " syslog_facility = mail ssl = no ssl_parameters_regenerate = 0 mail_location = maildir:~/Maildir mail_privileged_group = mail mail_debug = yes mail_log_prefix = "%Us(%u): " dotlock_use_excl = yes verbose_proctitle = yes first_valid_uid = 90 first_valid_gid = 90 maildir_copy_with_hardlinks = yes protocol imap { mail_executable = /usr/local/libexec/dovecot/imap imap_client_workarounds = delay-newmail netscape-eoh tb-extra-mailbox-sep } protocol pop3 { mail_executable = /usr/local/libexec/dovecot/pop3 pop3_uidl_format = %08Xu%08Xv pop3_client_workarounds = outlook-no-nuls oe-ns-eoh } protocol lda { postmaster_address = postmaster@example.com sendmail_path = /usr/sbin/sendmail } auth_username_format = %Lu auth_verbose = yes auth_debug = yes auth default { ssl_require_client_cert=no ssl_username_from_cert=no mechanisms = plain login passdb pam { args = session=yes dovecot } passdb sql { args = /usr/local/etc/dovecot-sql.conf } userdb passwd { args = blocking=yes } userdb sql { args = /usr/local/etc/dovecot-sql.conf } user = root socket listen { master { path = /var/run/dovecot/auth-master mode = 0600 } client { path = /var/run/dovecot/auth-client mode = 0660 } } } dict { } plugin { }
Настраиваем подключение к MySQL в файле dovecot-sql.conf
pc# ee /usr/local/etc/dovecot-sql.conf
driver = mysql connect = host=/tmp/mysql.sock user=vexim password=PASSWORD dbname=vexim default_pass_scheme = MD5-CRYPT password_query = SELECT crypt as `password` FROM users,domains WHERE users.username = '%u' AND users.enabled = '1' AND users.type = 'local' and domains.enabled = '1' and domains.domain_id = users.domain_id user_query = SELECT pop as home, uid, gid FROM users WHERE username = '%u'
Добавляем запись в /etc/rc.conf:
dovecot_enable="YES"
Запускаем Dovecot:
pc# /usr/local/etc/rc.d/dovecot start
Ставим RoundCube (выбираем MySQL):
#deathstar cd /usr/ports/mail/roundcube/ pc# make install clean
И далее команды по порядку:
pc#cd /usr/local/www/roundcube pc# chmod 777 logs/ pc# chmod 777 temp/
Создаем базу
pc# mysql -p Enter password: Welcome to the MySQL monitor. Commands end with ; or g. mysql> CREATE DATABASE roundcubemail DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; Query OK, 1 row affected (0.01 sec)
mysql> GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost IDENTIFIED BY 'password';
Query OK, 0 rows affected (0.00 sec)
mysql> quit
Bye
pc# cd /usr/local/www/roundcube/ pc# mysql -p roundcubemail < SQL/mysql.initial.sql
pc# cp config/db.inc.php.dist config/db.inc.php pc# ee config/db.inc.php
Правим конфигурационный файл /usr/local/www/roundcube/config/db.inc.php,
отвечающий за соединение с базой данных:
$rcmail_config['db_dsnw'] = 'mysql://roundcube:pass@localhost/roundcubemail';
Правим файл main.inc.php, содержащий основные настройки:
pc# ee config/main.inc.php
$rcmail_config['default_host'] = 'localhost'; #хост, на котором находится почта $rcmail_config['username_domain'] = ' mydomain.ru'; #домен, который будет автоматически добавляться к имени пользователя $rcmail_config['mail_domain'] = 'mydomain.ru'; #почтовый домен $rcmail_config['default_port'] = 143; #порт imap $rcmail_config['imap_auth_type'] = null; #тип авторизации imap $rcmail_config['smtp_server'] = 'localhost'; #сервер smtp $rcmail_config['smtp_user'] = '%u'; $rcmail_config['smtp_pass'] = '%p'; $rcmail_config['smtp_auth_type'] = 'CRAM-MD5'; #тип авторизации smtp $rcmail_config['create_default_folders'] = TRUE; #при первом логине юзера создаются дефолтные почтовые папки (Входящие, Исходящие, Корзина и тд.) $rcmail_config['language'] = ru_RU; #локализация
И добавляем виртуальный хост в nginx для Roundcube
pc# ee /usr/local/etc/nginx/vhosts/mail.deathstar.name server { listen 80; server_name mail.deathstar.name; access_log /var/log/nginx/mail-access.log; error_log /var/log/nginx/mail-error.log; root /usr/local/www/roundcube; index index.php; charset utf-8; location ~ .php$ { fastcgi_pass php-fpm; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include /usr/local/etc/nginx/fastcgi_params; } location ~ /.ht { deny all; } }
Перезапускаем PHP-FPM и NGINX
pc# /usr/local/etc/rc.d/nginx restart && usr/local/etc/rc.d/php-fpm restart
Теперь Roundcube доступен по адресу http://mail.deathstar.name а Vexim по http://exim.deathstar.name
Заходим по адресу http://exim.deathstar.name
Логинимся под siteadmin и пароль, что выставляли ранее
Жмем
Add local domain
Прописываем домен, имя администратора ( по умолчанию postmaster, можно сменить на любое , так же создастся ящик вида postmaster@domain, а создадим например admin )
прописываем пароль ( например pass )
повторяем пароль
отмечаем антиспам и антивирус ( по желанию ) и жмем Submit
У нас появился почтовый аккаунт admin@domain с паролем pass
Чтоб для созданного домена создать еще ящик, логинимся под логином админа домена, в нашем случае – admin
Жмем
Add, delete and manage POP/IMAP accounts
Потом
Add User
Прописываем имя ( любое, оно просто для отображения в списке юзеров )
логин ( например user )
два раза пароль ( например userpass )
Has domain admin privileges? – отмечаем, есди хотим сделать юзера тоже админом домена
И жмем Submit.
У нас появился почтовый аккаунт user@domain с паролем userpass
Теперь можно зайти в roundcube по ссылке http://mail.deathstar.name под логином user@domain и паролем userpass
Установка и настройка SPAMASSASIN
pkg install SPAMASSASIN
обноляет базу SpamAssassin
sa-update
и стартуем
/usr/local/etc/rc.d/sa-spamd start
Далее отправляем себе на почту письмо с текстом
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
Если оно не пришло а в логах есть сообщение о блокировке то все работает
Для обучения спам фильтра можно воспользоваться командами
sa_learn --spam <путь к спамным письмам в формате .msg>
sa_learn --ham <путь к чистым письмам в формате .msg>
Переход во FreeBSD на использование PKGNG
Существующий пакетный менеджер в FreeBSD ветки 9 и ниже был предложен Джорданом Хаббардом (Jordan Hubbard) еще в далеком 1994 году. С тех пор многое изменилось, поэтому разработчики FreeBSD, начиная с ветки 10, заменили устаревший пакетный менеджер на новый – PKGNG (package new generation). Для установки бинарных пакетов теперь предлагается использовать удаленные репозитории, например – pkg.FreeBSD.org. Из базовой системы были удалены утилиты pkg_* (такие, как: pkg_install, pkg_add, pkg_create, pkg_delete, pkg_info, pkg_updating и pkg_version). |
Теперь при обновлении какого-либо порта вы можете видеть вот такое предупреждающее сообщение:
/! WARNING /! pkg_install EOL is scheduled for 2014-09-01. Please consider migrating to pkgng http://blogs.freebsdish.org/portmgr/2014/02/03/time-to-bid-farewell-to-the-old-pkg_-tools/ If you do not want to see this message again set NO_WARNING_PKG_INSTALL_EOL=yes in your make.conf
В котором вам предлагается до сентября 2014 года перейти на новый пакетный менеджер, т.к. поддержка старого прекратится.
Переход на новый пакетный менеджер PKGNG в операционных системах FreeBSD версии 9 и ниже осуществляется следующим образом (все нижеперечисленные процедуры осуществлялись на FreeBSD 9.0-RELEASE). Сперва установим сам порт PKG:
# make -C /usr/ports/ports-mgmt/pkg install clean
По окончанию установки вы можете видеть следующее сообщение:
If you are upgrading from the old package format, first run: # pkg2ng
Но перед началом его использования укажите опцию WITH_PKGNG=YES в своем make.conf:
# echo 'WITH_PKGNG=YES' >> /etc/make.conf
Теперь дадим команду pkg2ng, которая осуществить конвертацию существующей базы установленных портов в новую, для использования с pkgng:
# pkg2ng Converting packages from /var/db/pkg ... Converting nmap-6.40_2... Installing nmap-6.40_2... done ...
Принудительно обновите базу данных установленных портов:
# pkgdb -fu ---> Updating the pkgdb [Reading data from pkg(8) ... - 46 packages found - done]
В принципе – переход на использование нового пакетного менеджера завершен. Для обновления установленных портов я использую portupgrade. Теперь при ее запуске можно видеть, что используется pkg:
# portupgrade -van ---> Session started at: Mon, 24 Mar 2014 10:05:07 +0400 [Reading data from pkg(8) ... - 46 packages found - done] ** None has been installed or upgraded. ---> Session ended at: Mon, 24 Mar 2014 10:05:24 +0400 (consumed 00:00:16)
Но при попытке обновить базу данных с удаленного репозитария выскочила ошибка:
# pkg update -f Updating repository catalogue No valid repository found.
Чтобы явно указать расположение репозитария необходимо выполнить следующее.
Удалить существующий конфигурационный файл для pkg и скопировать его из того, что дан по-умолчанию:
# rm -f /usr/local/etc/pkg.conf # cp /usr/local/etc/pkg.conf.sample /usr/local/etc/pkg.conf
Создать каталог /usr/local/etc/pkg/repos и разместить в нем конфигурационный файл FreeBSD.conf с указанием расположения удаленного репозитария (обратите внимание на кавычки, они должны быть прямыми "
):
# mkdir -p /usr/local/etc/pkg/repos # nano -w /usr/local/etc/pkg/repos/FreeBSD.conf FreeBSD: { url: “pkg+http://pkg.FreeBSD.org/${ABI}/latest”, mirror_type: “srv”, enabled: yes }
Теперь выполнение обновления базы pkg:
# pkg update -f Updating repository catalogue digests.txz 100% 1097KB 1.1MB/s 1.1MB/s 00:00 packagesite.txz 100% 5087KB 5.0MB/s 5.0MB/s 00:00 Incremental update completed, 23432 packages processed: 0 packages updated, 0 removed and 23432 added.
Использование pkg хорошо документировано. Полный список команд вы получите дав просто pkg:
# pkg ... Commands supported: add Registers a package and installs it on the system annotate Add, modify or delete tag-value style annotations on packages ...
Получить помощь по отдельно взятой команде можно так:
# pkg help update
На момент написания статьи версия pkgng:
# pkg -v 1.2.7
Однако, вам теперь необходимо изучить применение новых опций, указываемых в вашем make.conf или при сборке портов. Конструкция типа WITH_NAME, WITHOUT_NAME канула в лету. Теперь вместо, например, WITHOUT_X11=YES необходимо указывать WITHOUT=“X11” и т.д. Более подробно тут: http://wiki.freebsd.org/Ports/Options/OptionsNG.
Некоторые полезные команды из нового менеджера пакетов:
# pkg audit -F # pkg update -f # pkg check -Bd # pkg info | grep nmap nmap-6.40_2 Port scanning utility for large networks Перед обновлением можно проверить базу данных портов на ошибки:
# pkgdb -Fa и на потерянные зависимости:
# pkgdb -L
# pkgdb -fu
Принудительный запуск fsck при перезагрузке
Чтобы Linux выполнил проверку дисков (fsck) при следующей перезагрузке, нужно создать пустой файл forcefsck в корневом каталоге:
cd / touch forcefsck reboot
Тот же эффект даст следующая команда:
shutdown -rF now
Для того, чтобы fsck самостоятельно устраняла ошибки без ручного подтверждения запросов, в загрузочных параметрах требуется включить опцию автоматического подтверждения всех запросов.
CentOS, Fedora, RedHat
В конфигурационном файле /etc/sysconfig/autofsck добавляем значение -y переменной AUTOFSCK_OPT:
AUTOFSCK_OPT="$AUTOFSCK_OPT -y"
Debian, Ubuntu
В конфигурационном файле /etc/default/rcS присвоить переменной FSCKFIX значение yes:
FSCKFIX=yes
FreeBSD
В конфигурационном файле /etc/rc.conf присвоить переменной fsck_y_enable значение YES:
fsck_y_enable="YES"