Установка DirectAdmin на FreeBSD 8.3 AMD64

Комментарии ()

Внимание! На апрель 2014 года установка на FreeBSD 9.2 amd64 со "скрипом" выполняется, но войти под admin невозможно. даже не разберался чего не так, если с самого начала посыпались проблемы. Юзаем FreeBSD 8.4...

Выполняем минимальную установку FreeBSD 8.3 AMD64, при инсталиции не забываем установить 32 bit binaries.

Пользователей, в процессе установки не добавляем, это сделаем в DA.

Обновляем порту

portsnap fetch
portsnap extract
portsnap update

Перед установкой Directadmin'а, устанавливаем некоторые порты

gcc: /usr/ports/lang/gcc
g++: включено в gcc
perl: включено в gcc included in gcc
gmake:  включено в gcc 
opensssl-devel: /usr/ports/security/openssl
wget: /usr/ports/ftp/wget
bison: /usr/ports/devel/bison
flex: /usr/ports/textproc/flex
gd: /usr/ports/graphics/gd
cyrus-sas12: /usr/ports/security/cyrus-sasl2
libidn: /usr/ports/dns/libidn
libtool15: /usr/ports/devel/libtool15
autoconf: /usr/ports/devel/autoconf
automake: /usr/ports/devel/automake
freetype: /usr/ports/print/freetype
freetype2: /usr/ports/print/freetype2
ImageMagick: /usr/ports/graphics/ImageMagick
libxslt: /usr/ports/textproc/libxslt
curl: /usr/ports/ftp/curl
mc: /usr/ports/misc/mc

Скачивает инсталяционныйфайл Directadmin'а, выставлям права и запускаем

fetch http://www.directadmin.com/setup.sh
chmod 755 setup.sh
./setup.sh

Процес установки прост. Вводим user id и password. Выбираем custombuild 1.2, отвечаем на вопросы по смыслу.

Редактируем /etc/mail/mailer.conf и приводим к такому виду

sendmail        /usr/sbin/exim
send-mail       /usr/sbin/exim
mailq           /usr/sbin/exim -bp
newaliases      /usr/sbin/exim -bi
hoststat        /usr/sbin/exim
purgestat       /usr/sbin/exim

Проблемы после установки

Не запускается exim - Shared object "libperl.so" not found, required by "exim"

ln -s /usr/local/lib/perl5/5.*/mach/CORE/libperl.so /usr/local/lib

Apache ITK MPM

Останавливаем штатный apache, снимаем права на выполнения стартового скрипта

/usr/local/etc/rc.d/httpd stop
chmod -x /usr/local/etc/rc.d/httpd

Инсталируем Apache itk mpm

cd /usr/ports/www/apache22-itk-mpm/
make install clean

Добавляем в автозагрузку 

apache22_enable="YES"

Делайм симлинк конфига штатного апача в папку апаче установленного с портов

mv /usr/local/etc/apache22/httpd.conf /usr/local/etc/apache22/httpd.conf.dist
ln -s /etc/httpd/conf/httpd.conf /usr/local/etc/apache22/

Из конфига апача с портов, копируем подключение модулей LoadModule в  /etc/httpd/conf/extra/httpd-phpaddmodules.conf, причем заменяем libexec/apache22/ на /usr/local/libexec/apache22/

Запускаем

[root@]]# /usr/local/etc/rc.d/apache22 start
Performing sanity check on apache22 configuration:
Syntax OK
Starting apache22.
[Wed May 15 01:21:45 2013] [warn] (2)No such file or directory: Failed to enable the 'httpready' Accept Filter
[Wed May 15 01:21:45 2013] [warn] (2)No such file or directory: Failed to enable the 'dataready' Accept Filter
[root@]#

Предупреждения устраняются, подгрузкой модулей. Добавляем в /boot/loader.conf следующее:

accf_http_load="YES" 
accf_data_load="YES" 

Теперь можно добавить в шаблонах виртуального хоста AssignUserID |USER| |GROUP| - что бы каждый виртуальный хост работал от своего пользователя

Также, удаляем скрипт запуска штатного апача и делаем стмлинк на апач установленый с портов, иначе не будет перегружаться апач, во время создания новых виртуальных хостов

rm /usr/local/etc/rc.d/httpd
ln -s /usr/local/etc/rc.d/apache22 /usr/local/etc/rc.d/httpd

 

Nginx - предназначенный в основном для отдачи статики (для того чтобы разгрузить бекенд) и использования в качестве фронтендов. Apache при этом можно использовать в качестве бэкенда для генерации динамического контента.Устанавливаем: 

cd /usr/ports/www/nginx
make install clean

Добавляем в /etc/rc.conf

nginx_enable="YES"

Установка и настройка RPAF

Так как у нас появился в цепи дополнительный элемент в виде фронтенд-сервера, то теперь в REMOTE_ADDR у нас не пользовательский IP, а IP-адрес фронтенд-сервера (на котором расположен Nginx). Поэтому на помощь приходит RPAF, он берет тело заголовка X-Forwarded-For, присланного от фронтенда и формирует на бекенде из него REMOTE_ADDR.

Таким образом заголовок REMOTE_ADDR снова имеет пользовательский IP!

Устанавливаем модуль RPAF

cd /usr/ports/www/mod_rpaf2
make install clean

Подключаем модуль, добавим запись в /etc/httpd/conf/extra/httpd-phpaddmodules.conf

LoadModule rpaf_module   /usr/local/libexec/apache22/mod_rpaf2.so

Настраиваем RPAF, редактируем httpd.conf, добавляем в конец файла:

RPAFenable On
RPAFsethostname Off
RPAFproxy_ips 127.0.0.1 xxx.xxx.38.4
RPAFproxy_ips 127.0.0.1 xxx.xxx.38.209
RPAFproxy_ips 127.0.0.1 xxx.xxx.38.210
...
RPAFheader X-Real-IP

В моем случаи nginx работает на 85 порту,  apache на 80. Поетому с помощью фаервола выполняю перенаправление трафика з 80 на 85.

/sbin/ipfw add 100  fwd xxx.xxx.38.4,85 ip from not table\(10\) to 195.78.38.4 80
/sbin/ipfw add 100  fwd xxx.xxx.38.209,85 ip from not table\(10\) to 195.78.38.209 80
...

где table(10) - таблица с ip-адресами, которые присутствуют на хостинге

Архив с custom шаблонами и скриптами DA+Apache+Nginx

Mysql

Устанавливаем mysql из портов

/usr/local/etc/rc.d/mysqld stop
rm /usr/local/mysql
rm /usr/local/bin/mysql
rm /usr/local/bin/mysqladmin
cd /usr/ports/databases/mysql51-server/
make install clean

Add mysql_enable="YES" to /etc/rc.conf

ln -s /home/mysql /var/db/mysql
cp /etc/my.cnf /home/mysql
chown -R mysql:mysql /home/mysql/*
cd /usr/local/etc/rc.d
mv mysqld mysqld_da_old
ln -s mysql-server mysqld
/usr/local/etc/rc.d/mysqld start
ln -s /usr/local /usr/local/mysql

ProFtpd

mv /usr/local/etc/rc.d/proftpd /usr/local/etc/rc.d/proftpd_da
chmod -x /usr/local/etc/rc.d/proftpd_da
cd /usr/ports/ftp/proftpd/
make install clean

Add proftpd_enable="YES" to /etc/rc.conf

mv /usr/local/etc/proftpd.conf /usr/local/etc/proftpd_orig_conf
ln -s /etc/proftpd.conf /usr/local/etc/proftpd.conf

Exim

mv /usr/sbin/exim /usr/sbin/exim_da
ln -s /usr/local/sbin/exim /usr/sbin/exim

mv /usr/local/etc/rc.d/exim /usr/local/etc/rc.d/exim_da
chmod -x /usr/local/etc/rc.d/exim_da

cd /usr/ports/mail/exim
make install clean

Add to /etc/rc.conf

sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"
exim_enable="YES" 

cd /usr/local/etc/exim/
mv configure configure_orig_old
ln -s /etc/exim.conf configure

Edit configure, and add exim_user=mail

Edit file /usr/local/directadmin/data/admin/services.status, be sure to have:

exim-4.80.1-2=ON

cd /usr/local/etc/rc.d/

Edit /usr/local/etc/rc.d/boot.sh, remove any exim lines

 /usr/local/etc/rc.d/exim restart

Spamassasin

cd /usr/local/directadmin/custombuild
./build set_fastest && ./build update
./build set spamassassin yes
cpan -i Archive::Tar Digest::SHA Mail::SPF IP::Country Net::Ident IO::Socket::INET6 Compress::Zlib Mail::DKIM LWP::UserAgent HTTP::Date Encode::Detect ExtUtils::MakeMaker
./build spamassassin

Открываем файл /etc/exim.conf на редактирование, находим строки примерно следующего содержания:

# Spam Assassin
#spamcheck_director:
# driver = accept
# condition = "${if and { \
# {!def:h_X-Spam-Flag:} \
# {!eq {$received_protocol}{spam-scanned}} \
# {!eq {$received_protocol}{local}} \
# {exists{/home/${lookup{$domain}lsearch{/etc/virtual/domainowners}{$value}}/.spamassassin/user_prefs}} \
# {<{$message_size}{100k}} \
# } {1}{0}}"
# retry_use_local_part
# transport = spamcheck
# no_verify

И расскоментируем их:

# Spam Assassin
spamcheck_director:
driver = accept
condition = "${if and { \
{!def:h_X-Spam-Flag:} \
{!eq {$received_protocol}{spam-scanned}} \
{!eq {$received_protocol}{local}} \
{exists{/home/${lookup{$domain}lsearch{/etc/virtual/domainowners}{$value}}/.spamassassin/user_prefs}} \
{<{$message_size}{100k}} \
} {1}{0}}"
retry_use_local_part
transport = spamcheck
no_verify

Clamav

cd /usr/ports/security/clamav
make install clean

редактируем /usr/local/etc/clamd.conf, расскоментируем следующие строки

TCPSocket 3310
TCPAddr 127.0.0.1

добавляем в rc.conf

clamav_clamd_enable="YES"
clamav_freshclam_enable="YES"

обновляем антивирусную базу

freshclam

запускаем

/usr/local/etc/rc.d/clamav-freshclam start
/usr/local/etc/rc.d/clamav-clamd start

Редактируем /etc/exim.conf, перед "primary_hostname =" добавляем

av_scanner = clamd:127.0.0.1 3310

А также раскоментируем следующее

# ACL that is used after the DATA command
check_message:
  .include_if_exists /etc/exim.clamav.conf
  accept

Создаем  /etc/exim.clamav.conf

deny message = This message contains malformed MIME ($demime_reason)
 demime = *
 condition = ${if >{$demime_errorlevel}{2}{1}{0}}
 deny message = This message contains a virus or other harmful content ($malware_name)
 demime = *
 malware = */defer_ok
 deny message = This message contains an attachment of a type which we do not accept (.$found_extension)
 demime = bat:com:pif:prf:scr:vbs
 warn message = X-Antivirus-Scanner: Clean mail though you should still use an Antivirus

в итоге нужно перегрузить exim


Webit.in.ua 2013