Перейти к собственно контенту

Блог@DeathStar.Name

Блог системного администратора

Архив

Рубрика: CentOS

При попытке залить дамп базы данных через утилиту mysqldump столкнулся с ошибкой:
ERROR 2006 (HY000) at line 40283: MySQL server has gone away

Пофиксить можно следующим образом:
открываем файл my.cnf ( в Linux как правило /etc/my.cnf , во FreeBSD — /etc/my.cnf или же /usr/local/etc/my.cnf ), и добавляем следующие строки в секцию [mysqld]

wait_timeout = 6000
max_allowed_packet = 1G
, перезапускаем MySQL согласно той ОС которая у Вас стоит и пробуем залить дамп опять.
root@armfilm:/var/www/rg# mysql -p huid < 2017-11-02_04-35-42.sql Enter password: root@armfilm:/var/www/#
Дамп залит успешно

Случилось так, что у одного из сайтов появилось какое-то «левое» зеркало,  которое сильно подбило позиции в поисковике. Я думал что домен просто направили на IP того сервера, на который ссылался домен. Прописал в конфиг виртуального хоста строки, запрещающие доступ к сайту по IP адресу

if ($host !~ ^(example.com|www.example.com)$ ) {
return 403;
}

Но не помогло, так как выяснилось что сайт на «левом» зеркале парсился PHP скриптами через CURL. Сразу возникла идея просто запретить доступ по User Agent, но он был изменен на GoogleBot/2.1 , и если его забанить то и поисковые боты не смогут попасть на сайт. Осталось только 1 решение, сравнивать User Agent и IP адрес, с которого был запрос, и если это реальные IP адреса гуглобота, то пропускать, иначе отдавать ошибку 403. В конфиг nginx добавляем в секцию http следующие строки ( это все IP адреса и подсети, которые использует гуглобот и которые мне удалось найти, если есть чем дополнить пишите в коментариях ):

geo $googlebotip {
default 0;
64.18.0.0/20 1;
64.233.160.0/19 1;
66.102.0.0/20 1;
66.249.80.0/20 1;
72.14.192.0/18 1;
74.125.0.0/16 1;
108.177.8.0/21 1;
172.217.0.0/19 1;
173.194.0.0/16 1;
207.126.144.0/20 1;
209.85.128.0/17 1;
216.58.192.0/19 1;
216.239.32.0/19 1;
203.208.60.0/24 1;
66.249.64.0/20 1;
72.14.199.0/24 1;
209.85.238.0/24 1;
66.249.90.0/24 1;
66.249.91.0/24 1;
66.249.92.0/24 1;
2001:4860:4000::/36 1;
2404:6800:4000::/36 1;
2607:f8b0:4000::/36 1;
2800:3f0:4000::/36 1;
2a00:1450:4000::/36 1;
2c0f:fb50:4000::/36 1;
2001:4860:4801:1::/64 1;
2001:4860:4801:2::/64 1;
2001:4860:4801:3::/64 1;
2001:4860:4801:4::/64 1;
2001:4860:4801:5::/64 1;
2001:4860:4801:6::/64 1;
2001:4860:4801:7::/64 1;
2001:4860:4801:8::/64 1;
2001:4860:4801:9::/64 1;
2001:4860:4801:a::/64 1;
2001:4860:4801:b::/64 1;
2001:4860:4801:c::/64 1;
2001:4860:4801:d::/64 1;
2001:4860:4801:e::/64 1;
2001:4860:4801:2001::/64 1;
2001:4860:4801:2002::/64 1;
104.132.0.0/21 1;
104.132.12.0/24 1;
104.132.128.0/24 (далее…)

В дополнение к статье Собственный Dynamic DNS сервер на базе Bind решил написать статью, для тех у кого есть домен c использованием Clouflare.com. В настройках CF получаем API Key. Допустим zone называется deathstar.name , мне нужно было для домашнего файлохранилища как и в предыдущей статье менять IP по крону ( метод получения внешнего немного изменен, но можно и использовать метод с предыдущей статьи )

Скрипт находится тут

ID всех записей можно узнать командой:

curl https://www.cloudflare.com/api_json.html   -d 'a=rec_load_all'   -d 'tkn=ВАШ API ключ'   -d 'email=deathstar@deathstar.name'   -d 'z=deathstar.name'

тут находим запись netdisk.deathstar.name и левее названия будет rec_id. Ставим в крон аналогично предыдущей статьи и радуемся.

При включений режима PHP как CGI вместо страничек отображался код скриптов.

Исправляем так: ( на примере CentOS 6 )
создаем файл /etc/httpd/conf.d/php-cgi.conf со следующим содержимым:
ScriptAlias /local-bin /usr/bin
AddHandler application/x-httpd-php5 php
Action application/x-httpd-php /php-bin/php

Перезапускаем apache
[root@hz2 httpd]# /etc/init.d/httpd restart
И наслаждаемся рабочим PHP-CGI.

В дополнение к этой статье решил написать данный мануал. Заказчику потребовалось с выходом PHP 7 поставить эту версию как вторую. Сервер с CentOS 6 , ISPmanager 4 и PHP 5.4.45.

Качаем последнюю версию PHP 7.0.2, распаковываем
[root@hz2 ~]# wget http://php.net/get/php-7.0.2.tar.gz/from/this/mirror
[root@hz2 ~]# tar xzvf php-7.0.2.tar.gz
[root@hz2 ~]# cd ./php-7.0.2

Конфигурируем PHP:
[root@hz2 ~]# mkdir -p /opt/php70

[root@hz2 ~]# ./configure --prefix=/opt/php70 --with-zlib-dir --with-freetype-dir --enable-mbstring --with-libxml-dir=/usr --enable-soap --enable-calendar --with-curl --with-mcrypt --with-zlib --with-gd --disable-rpath --enable-inline-optimization --with-bz2 --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --with-mhash --enable-zip --with-pcre-regex --with-pdo-mysql --with-mysqli --with-jpeg-dir=/usr --with-png-dir=/usr --enable-gd-native-ttf --with-openssl --with-libdir=lib64 --enable-ftp --with-imap --with-imap-ssl --with-kerberos --with-gettext --enable-cgi

Если появляются ошибки о нехватке необходимого ПО или сорцов ставим все это дело:
[root@hz2 ~]# yum install libxml2-devel bzip2-devel curl-devel libjpeg-devel libpng-devel libX11-devel gd-devel libc-client-devel libmcrypt-devel mysql-devel

Собираем и ставим
[root@hz2 ~]# make && make install

Нам нужно сделать, что бы при использовании php как модуля апача использовалась версия 5.4.45, а при втором варианте 7.0. Будет удобно если можно будет прям определять какая версия нужна для какого сайта и пользователя. Для этого нам нужно просто заменить файл php-cgi, что мы и сделаем, но для начала сбекапим старый.

[root@hz2 ~]# mv /usr/bin/php-cgi php-cgi.back
[root@hz2 ~]# ln -s /opt/php70/bin/php-cgi /usr/bin/php-cgi

На этом все!. Заходим в панель ISPmanager и выбираем «PHP как CGI», для того, что бы у вас использовалась версия php 7.0

В дополнение к этой статье я напишу как установить Redmine и при необходимости перенести данные на сервер с ОС CentOS 6.5 и панелью ISPmanager Lite.

У нас имеется один сервер с рабочим Redmine и второй с ISPmanager Lite на котороый и будет делать перенос.

1) Ставим пакеты для сборки сорцов:

# yum install gcc-c++ patch readline readline-devel zlib zlib-devel
# yum install libyaml-devel libffi-devel openssl-devel make
# yum install bzip2 autoconf automake libtool bison iconv-devel mysql-devel

2) Устанавливаем RVM ( Ruby Version Manager ):

# curl -L get.rvm.io | bash -s stable

3) Выставляем переменные окружения:

# source /etc/profile.d/rvm.sh

4) Ставим Ruby 1.9.3 и назначаем дефолтным в системе, проверяем работоспособность:

# rvm install 1.9.3
# rvm use 1.9.3 --default

Провеверям:

# ruby --version
ruby 1.9.3p551 (2014-11-13 revision 48407) [x86_64-linux]

5) Ставим Passenger и добавляем поддержку в Nginx:

# gem install passenger

Качаем исходный код nginx:

# cd /tmp
# wget http://nginx.org/download/nginx-1.7.9.tar.gz && tar xvzf nginx-1.7.9.tar.gz

Смотри с какими параметрами был уже бинарик у нас собран:

# nginx -V
nginx version: nginx/1.7.9
built by gcc 4.4.7 20120313 (Red Hat 4.4.7-11) (GCC)
TLS SNI support enabled
configure arguments: --user=nginx --group=nginx --prefix=/usr/share/nginx --sbin-path=/usr/sbin/nginx --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --http-client-body-temp-path=/var/lib/nginx/tmp/client_body --http-proxy-temp-path=/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path=/var/lib/nginx/tmp/scgi --pid-path=/var/run/nginx.pid --lock-path=/var/lock/subsys/nginx --with-debug --with-http_secure_link_module --with-http_random_index_module --with-http_ssl_module --with-http_realip_module --with-http_addition_module --with-http_sub_module (далее…)

Как правило у большинства домашних провайдеров всегда динамические IP адреса, а так как порой надо было иметь доступ к внешнему жесткому диску MyBookLive из интернета — было решено поднять свой DynDNS сервер.
Нам потребуется домен и DNS сервер который будет обслуживать домен.
Про настройку Bind в качестве Master и Slave сервера писать не буду — в интернете куча статей, у меня крутится Bind99 на FreeBSD в качестве Master + Slave с двумя внешними IP адресами на сервере.

На клиенте ( у меня это MyBookLive с Debian на борту ) генерируем ключи для возможности удаленного обновления зоны:
dnssec-keygen -a hmac-md5 -b 128 -n USER deathstar

Должно получится два файла Kdeathstar.+157+03649.private и Kdeathstar.+157+03649.key
Смотрим содержимое файла Kdeathstar.+157+03649.key
deathstar# cat Kdeathstar.+157+03649.key
deathstar. IN KEY 0 3 157 OoMn1WMkDFdAH/ZZ9ip0Imm==

На сервере создаем файл /etc/namedb/keys.conf с таким содержимым ( значение для строки secret берем выше из файла ключа Kdeathstar.+157+03649.key на клиенте ):
key deathstar {
algorithm hmac-md5;
secret "OoMn1WMkDFdAH/ZZ9ip0Imm==";
};

Затем на сервере в файл /etc/namedb/named.conf впишите в самый конец файла:
include "/etc/namedb/keys.conf";

и приводим зону в этом же файле к такому состоянию:
zone "deathstar.name" {
type master;
file "/etc/namedb/master/deathstar.name";
allow-update { key deathstar; };
allow-query { any; };
notify yes;
};

и перезапускаем bind
deathstar# /etc/rc.d/named restart

На клиенте создаем скрипт такого вида:
#!/bin/sh

# SETTINGS
TTL=10
SERVER=ns1.deathstar.name
HOSTNAME=netdisk.deathstar.name.
ZONE=deathstar.name
KEYFILE="/etc/Kdeathstar.+157+03649.private"

IP_FILE="/tmp/myBookLiveIP"
OLDIP="$(grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}' $IP_FILE)"
IP="$(wget -q checkip.dyndns.org -O - | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}')"
DNSIP="$(host -t A $HOSTNAME | grep -o '[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}')"

if (далее…)

В дополнение к этой статье  напишу как сделать несколько IP адресов на 3proxy:

 

Установка все как в предыдущей статье

( в CentOS : yum install -y 3proxy

Debian / Ubuntu: apt-get install 3proxy )

но конфиг уже выглядит иначе

# Name servers
nserver 8.8.8.8
nserver 8.8.4.4
# nscache is good to save speed, traffic and bandwidth
nscache 65536

# Here we can change timeout values

users user:CL:password

daemon

log /var/log/3proxy/3proxy.log
logformat «- +_L%t.%. %N.%p %E %U %C:%c %R:%r %O %I %h %T»
archiver gz /bin/gzip %F
rotate 30

auth strong
allow * * * *

proxy -n -a -p3128 -i100.218.211.82 -e100.218.211.82 -p3128
proxy -n -a -p3128 -i142.218.209.164 -e142.218.209.164 -p3128
proxy -n -a -p3128 -i167.248.229.155 -e167.248.229.155 -p3128
proxy -n -a -p3128 -i162.211.209.142 -e162.211.209.142 -p3128
proxy -n -a -p3128 -i162.213.109.133 -e162.213.109.133 -p3128
proxy -n -a -p3128 -i162.219.302.124 -e162.219.302.124 -p3128

auth strong

flush

maxconn 32
socks -n -a -p3128 -i100.218.211.82 -e100.218.211.82 -p3128
socks -n -a -p3128 -i142.218.209.164 -e142.218.209.164 -p3128
socks -n -a -p3128 -i167.248.229.155 -e167.248.229.155 -p3128
socks -n -a -p3128 -i162.211.209.142 -e162.211.209.142 -p3128
socks -n -a -p3128 -i162.213.109.133 -e162.213.109.133 -p3128
socks -n -a -p3128 -i162.219.302.124 -e162.219.302.124 -p3128

setgid 65535
setuid 65535

При входе в панельку по адресу https://X.X.X.X/manager/ пишет вот такую ошибку
Request timeout to panel reached. Panel has not started yet.
Но по адресу https://X.X.X.X/manager/ispmgr панелька открывется,

Причина ошибки — обновиление панельки с версии 4.4.10.6 на 4.4.10.8.

Для того, чтобы пофиксить эту проблему выполняем следующую команду
# echo 'ispmgr' > /usr/local/ispmgr/bin/index
то есть создаем в каталоге файл index с содержимым ispmgr.

В дополнение к статье по настройке почтового сервера на FreeBSD решил написать как настроить тоже самое, но на ОС CentOS 6.

Подключаем репозиторий Remi и Epel

rpm --import https://fedoraproject.org/static/0608B895.txt
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-7.noarch.rpm
yum install yum-priorities
rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

Приводим файл /etc/yum.repos.d/epel.repo к такому виду

[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch
failovermethod=priority
enabled=1
priority=10
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-6

и файл /etc/yum.repos.d/remi.repo к такому виду:

[remi]
name=Les RPM de remi pour Enterprise Linux $releasever - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/$releasever/remi/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/$releasever/remi/mirror
enabled=1
priority=10
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
failovermethod=priority

[remi-test]
name=Les RPM de remi en test pour Enterprise Linux $releasever - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/$releasever/test/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/$releasever/test/mirror
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi

Ставим MySQL , добавляем в атозагрузку и стартуем:

yum install mysql mysql-server
chkconfig --levels 235 mysqld on
/etc/init.d/mysqld start

Установим пароь для root в MySQL следующей командой:

mysql_secure_installation

Устанавливаем nginx ( да да, как и в прошлый раз мы обойдемся без тяжеловесного Apache и сделаем все на NGINX + PHP-FPM ), добавим в автозагрузку и стартуем
yum install nginx
chkconfig --levels 235 nginx on
/etc/init.d/nginx start

Ставим PHP-FPM и необходимые модули PHP:

yum --enablerepo=remi,remi-test install php php-fpm php-common php-pear php-pdo php-mysql php-pgsql php-pecl-memcache php-gd php-mbstring php-mcrypt php-xml php-pear-DB php-posix

Приводим файл /etc/php-fpm.conf к такому виду:

[global]
pid = /var/run/php-fpm/php-fpm.pid
error_log = /var/log/php-fpm/error.log
include=/etc/php-fpm.d/*.conf

А файл /etc/php-fpm.d/www.conf к такому:

[www]
listen = /tmp/php-fpm.sock
user = apache
group = apache
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
slowlog = /var/log/php-fpm/www-slow.log
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_value[memory_limit] = 128M

Настраиваем nginx. Для этого приводим файл /etc/nginx/nginx.conf к такому виду:

user apache;
worker_processes 2;

error_log /var/log/nginx/error.log;

pid /var/run/nginx.pid;

events {
use epoll;
worker_connections 8192;
}

http {
include /etc/nginx/mime.types;
default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

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;

# PHP-FPM

upstream php-fpm {
server unix:/tmp/php-fpm.sock;
}

# Virtual hosts

include /etc/nginx/conf.d/*.conf;

}

и создаем файлы виртуальых хостов:
1) Для Vexim ( /etc/nginx/conf.d/exim.deathstar.name.conf ) файл выглядит вот так:

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/share/vexim2/vexim;
index index.php;
charset utf-8;

location = /favicon.ico {
log_not_found off;
access_log off;
}

location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}

location ~ .php$
{
fastcgi_pass php-fpm;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

location ~ /.ht
{
deny all;
}
}

2) Для Roundcube файл ( /etc/nginx/conf.d/mail.deathstar.name.conf ) выглядит так:

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/share/roundcubemail;
index index.php;
charset utf-8;

location = /favicon.ico {
log_not_found off;
access_log off;
}

location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}

location ~ .php$
{
fastcgi_pass php-fpm;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

location ~ /.ht
{
deny all;
}
}
и перезагружаем nginx:

/etc/init.d/nginx restart

Устанавливаем Exim,Dovecot и прочее ПО:

yum install -y exim exim-mysql dovecot dovecot-mysql clamd clamav spamassassin

Скачиваем и распаковываем Vexim
cd /usr/share/
wget http://silverwraith.com/vexim/vexim2.2.1.tar.gz
tar zxvf vexim2.2.1.tar.gz
chown -R root:root vexim2/

Копируем конфиги из Vexim в каталог с Exim

mv /etc/exim/exim.conf /etc/exim/exim.conf.bak
cp /usr/share/vexim2/docs/configure /etc/exim/exim.conf
cp /usr/share/vexim2/docs/vexim-* /etc/exim/

Добавляем юзера Vexim

useradd vexim -u 90 -d /usr/local/mail -s /sbin/nologin -m

Устанавливаем БД для Vexim

perl /usr/share/vexim2/setup/create_db.pl --act=newdb --dbtype=mysql --uid=93 –gid=93 --mailstore=/usr/local/mail

Редактируем файл

/usr/share/vexim2/vexim/config/variables.php

и прописываем доступ к БД

$sqldb = "vexim"; имя БД
$sqluser = "vexim"; логин
$sqlpass = "PASSWORD"; пароль заданный ранее

Отключим и удалим Postfix, который по умолчанию уже стоит в системе CentOS 6.

alternatives --config mta
chkconfig --level 123456 postfix off
service postfix stop
yum remove postfix -y

Отключаем SELINUX:
echo 'SELNIUX=disabled' >> /etc/selinux/config

Добавлеяем сервисов в автозагрузку
chkconfig --level 35 clamav on
chkconfig --level 35 spamassasin on
chkconfig --level 35 exim on
chkconfig --level 35 dovecot on

Выставляем права:

usermod -a -G exim clamav
chmod -Rf g+w /var/spool/exim
chmod -Rf g+s /var/spool/exim
chown exim:exim -R /usr/local/mail
chown exim:exim -R /var/spool/exim

Правим пути в конфиге Exim:

cd /etc/exim/
sed -i.bak -e ‘s//usr/local/etc//etc/g’ exim.conf
sed -i.bak -e ‘s/MAILMAN_USER=mailnull/MAILMAN_USER=exim/g’ -e ‘s/MAILMAN_GROUP=mail/MAILMAN_GROUP=exim/g’ exim.conf

Находим в конфигe exim строку:
MY_IP = CHANGE и описываем свой ip
MY_IP = 46.38.63.5
Находим:
trusted_users = avleen:www
и меняем на apache . Остается:

trusted_users = apache
Менякем юзера, от которого будет запускаться exim, меняем строки

exim_user = mailnull
exim_group = mail

на
exim_user = exim
exim_group = exim

Находим закоментированную строку, отвечающую за подключение к MySQL серверу,раскоментируем ее и поставим там свой пароль:
hide mysql_servers = localhost::(/tmp/mysql.sock)/vexim/vexim/PASSWORD

Находим секцию system_aliases: и в ней меняем строки

user = mailnull
group = mail

на
user = exim
group = exim

И запускаем:
service exim start

Настраиваем Dovecot:
Приводим конфиг /etc/dovecot/dovecot.conf к такому виду:

base_dir = /var/run/dovecot/
disable_plaintext_auth = no
first_valid_uid = 93
listen = *
login_greeting = Dovecot ready man.
login_log_format_elements = user=< %u> method=%m rip=%r lip=%l %c
mail_location = maildir:~/Maildir
log_path =/var/log/dovecot

# Log file to use for informational and debug messages.
# Default is the same as log_path.
#info_log_path =

# Prefix for each line written to log file. % codes are in strftime(3)
# format.
log_timestamp = "%b %d %H:%M:%S "

passdb {
driver = pam
}
passdb {
args = /etc/dovecot/dovecot-mysql.conf
driver = sql
}
protocols = imap pop3
service auth {
unix_listener auth-master {
group = exim
mode = 0660
user = exim
}
user = root
}
service imap-login {
chroot =
client_limit = 256
process_limit = 128
process_min_avail = 3
service_count = 1
vsz_limit = 64 M
}
service pop3-login {
chroot =
client_limit = 256
process_limit = 128
process_min_avail = 3
service_count = 1
vsz_limit = 64 M
}
ssl = no
userdb {
driver = passwd
}
userdb {
args = /etc/dovecot/dovecot-mysql.conf
driver = sql
}
protocol imap {
imap_client_workarounds = tb-extra-mailbox-sep
mail_plugins = quota imap_quota
}
protocol pop3 {
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
pop3_uidl_format = %08Xu%08Xv
}

Настраиваем подключение к MySQL в файле /etc/dovecot/dovecot-mysql.conf
driver = mysql
connect = host=/var/lib/mysql/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/init.d/dovecot start
/etc/init.d/clamav start
/etc/init.d/spamassassin start

Устанавливаем roundcube

cd /usr/share
wget http://sourceforge.net/projects/roundcubemail/files/roundcubemail/0.8.1/roundcubemail-0.8.1.tar.gz
tar zxvf roundcubemail-0.8.1.tar.gz

mv roundcubemail-0.8.1 roundcubemail
chown -R apache:apache roundcubemail/
chmod -R 777 roundcubemail/temp/ roundcubemail/logs/

Создаем базу

mysql -p
Enter password: ( вводим пароль от root MySQL )
Welcome to the MySQL monitor. Commands end with ; or g.

Вводим команду
CREATE DATABASE roundcubemail DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

И команду
GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost IDENTIFIED BY 'password'; ( вместо password пишем пароль для юзера roundcube )

и выходим командой quit

Импортируем БД
mysql -p roundcubemail < roundcubemail/SQL/mysql.initial.sql ( вводим пароль от root MySQL )

Копируем конфиги

cp roundcubemail/config/db.inc.php.dist roundcubemail/config/db.inc.php
cp roundcubemail/config/main.inc.php.dist roundcubemail/config/main.inc.php

редактируем файл roundcubemail/config/db.inc.php

и вместо pass пишем пароль заведенный для юзера roundcube
$rcmail_config['db_dsnw'] = 'mysql://roundcube:pass@localhost/roundcubemail';

Редактируем roundcubemail/config/main.inc.php

и заменяем в нем строки:
$rcmail_config['default_host'] = ''; на
$rcmail_config['default_host'] = 'localhost';

$rcmail_config['smtp_server'] = ''; на
$rcmail_config['smtp_server'] = 'localhost';

$rcmail_config['smtp_user'] = ''; на

$rcmail_config['smtp_user'] = '%u';

$rcmail_config['smtp_pass'] = ''; на
$rcmail_config['smtp_pass'] = '%p';

$rcmail_config['smtp_auth_type'] = ''; на
$rcmail_config['smtp_auth_type'] = 'CRAM-MD5';

$rcmail_config['language'] = ; на
$rcmail_config['language'] = ru_RU;

$rcmail_config['create_default_folders'] = false; на
$rcmail_config['create_default_folders'] = true;

$rcmail_config['default_charset'] = ''; на
$rcmail_config['default_charset'] = 'UTF-8';

и сохраняем.

Теперь Roundcube доступен по адресу http://mail.deathstar.name а Vexim по http://exim.deathstar.name