среда, 13 июня 2018 г.

MySQL 5.7 Ошибка "is incompatible with sql_mode=only_full_group_by"

При запуске запроса с GROUP_BY можно столкнуться с ошибкой "is incompatible with sql_mode=only_full_group_by" что бы избавиться от нее нужно либо править свои запросы либо отключить данный режим sql_mode=only_full_group_by. В MySQL 5.7 он включен по умолчанию.
Для отключения нужно в конфиг my.cnf в секцию [mysqld] добавить следующий параметр:
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION


Перезапускаем сервис и все работает.

Если хотите обойтись без рестарта сервиса то можно сменить глобальную переменную:

mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

понедельник, 16 апреля 2018 г.

Ошибка Perl warning Setting locale failed в Ubuntu

Несколько раз столкнулся со следующей ошибкой в процессе установки или обновления пакетов в Ubuntu 16.04:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
 LANGUAGE = (unset),
 LC_ALL = (unset),
 LANG = "en_US.utf8"
    are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").

Она не критична пакеты нормально устанавливаются и решается довольно просто перегенерацией и конфигурированием новых локалей.

export LANGUAGE=en_US.UTF-8
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
locale-gen en_US.UTF-8
dpkg-reconfigure locales

Команда dpkg-reconfigure откроет диалоговое окно для выбора желаемого языкового стандарта. 

Либо второй способ, команда:

update-locale LANG=en_US.UTF-8

Выходим из терминала и открываем новый и все работает.

четверг, 16 мая 2013 г.

Настройка NTP-сервера

Поднимаем сервер времени на FreeBSD.


uname -a
FreeBSD gate 9.0-RELEASE FreeBSD 9.0-RELEASE

Ставим из портов сервер:


# cd /usr/ports/net/ntp

# make install clean
# rehash

Создаем файл в котором хранится инфа о смещении времени относительно серверов

# touch /etc/ntp/drift

Можно конфигурировать основной файл настроек /etc/ntp.conf



# cat /etc/ntp.conf

server 0.ua.pool.ntp.org iburst burst prefer
server 1.ua.pool.ntp.org iburst burst
server 2.ua.pool.ntp.org iburst burst
server 3.ua.pool.ntp.org iburst burst

driftfile /etc/ntp/drift

logfile /var/log/ntp.log

restrict default ignore
restrict 192.168.0.0 mask 255.255.0.0 nomodify notrap
restrict localhost

restrict 0.ua.pool.ntp.org
restrict 1.ua.pool.ntp.org
restrict 2.ua.pool.ntp.org
restrict 3.ua.pool.ntp.org



В /etc/rc.conf добавляем следующее:

ntpd_enable="YES"
ntpd_program="/usr/local/bin/ntpd"

Запускаем сервис

# /etc/rc.d/ntpd start

Состояние синхронизации проверяем командой

# ntpq -p

Итого, сервер работает, теперь можно перейти к настройке клиентов, у нас ими выступают Сервера с виндой
Открываем редактор реестра 

Ищем и меняем параметры:

Включаем синхронизацию времени с внешним источником

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters]
"Type"="NTP"

Задаем нужные нам сервера

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W32Time\Parameters]
"NtpServer"="ntp.local.net,0x8"

Флаг 0×8 на конце означает, что синхронизация должна происходить в режиме клиента NTP, через предложенные этим сервером интервалы времени.

Применяем изменения

w32tm /config /update

Принудительно синхронизируемся

w32tm /resync /rediscover



среда, 28 ноября 2012 г.

Openfire, как увеличить Java Memory в Freebsd


Часто в Openfire начинает не хватать памяти используемой по умолчанию для Java. При этом клиенты отваливаются, сервис перестает отвечать. через вебадминку изменить параметр нельзя, но можно исправить его в стартовом файле.
В FreeBSD это файл /usr/local/etc/rc.d/openfire.

Параметр ${openfire_javargs:='-Xmx512M'} меняем значение 512 на необходимое нам и перезапускаем openfire.

понедельник, 22 октября 2012 г.

Настрока IPSec между PFSense и FreeBSD

PFSense - дистрибутив основанный на FreeBSD очень удобен при потребности быстрого разворачивания сетей. Все настраивается через вебинтерфейс, работает стабильно, функций имеет довольно много. При наличии сети филиалов которая разрастается довольно быстро, оправданно его использование.
Шлюз основной сети можно поднять на FreeBSD поскольку сдесь может понадобится более гибкая управляемость, а на остальных офисах ставить PFSense и обьединить все посредством IPsec.

Сначала настройка FreeBSD (Версия 9.0)


Для поддержки IPsec компилируем ядро со следующими опциями:


options  IPSEC
options IPSEC_NAT_T
device crypto

Также должно быть включено устройство:

device gif 
#(В GENERIC оно включено по умолчанию, но не будет лишним проверить)

После компиляции устанавливаем IPsec:

cd /usr/ports/security/ipsec-tools/
make config

Включаем следующие опции:


















make install clean

Если все успешно установилось создаем папку /usr/local/etc/racoon и в ней создаем три конфигурационных файла:

racoon.conf
spd.conf
psk.txt

В файле psk.txt будут храниться ключи, поэтому ограничиваем к нему доступ

chown root:wheel psk.txt
chmod 600 psk.txt

В racoon.conf записываем конфигурацию:


path pre_shared_key "/usr/local/etc/racoon/psk.txt"; #путь к нашему файлу с ключами
log debug2; # уровень логирования
path certificate  "/usr/local/etc/racoon"; # путь к сертификатам, для нас необязателен


listen
{
adminsock "/var/db/racoon/racoon.sock" "root" "wheel" 0660;
isakmp 8.8.8.8 [500]; #адресс внешнего интерфейса с тунелем
isakmp_natt 8.8.8.8 [4500]; #
}


remote 9.9.9.9 # адресс и далее секция с опциями удаленной стороны
{
ph1id 1;
exchange_mode aggressive;
my_identifier address 8.8.8.8; # наш внешний адресс
peers_identifier address 9.9.9.9; # адресс удаленного сервера
ike_frag on;
generate_policy = off;
initial_contact = on;
nat_traversal = off;
support_proxy on;
proposal_check claim;

proposal # аутентификация и шифрование
{
authentication_method pre_shared_key;
encryption_algorithm 3des;
hash_algorithm md5;
dh_group 1;
lifetime time 28800 secs;
}
}

sainfo subnet 1.1.1.1/24 any subnet 2.2.2.2/24 any #внутренние подсети 1 наша 2 удаленная
{
remoteid 1;
encryption_algorithm 3des;
authentication_algorithm hmac_md5;
lifetime time 28800 secs;
compression_algorithm deflate;
}




#И так повторяем для кажого соединения начиная с опции remote

Теперь файл spd.conf


flush;
spdflush;
spdadd 1.1.1.1/32 1.1.1.1/32 any -P in none;
spdadd 1.1.1.1/32 1.1.1.1/32 any -P out none;

#следующие две строки нужно добавлять для кажого соединения 
#с соответвущими адрессами
spdadd 1.1.1.0/24 2.2.2.0/24 any -P out ipsec esp/tunnel/8.8.8.8-9.9.9.9/unique;
spdadd 2.2.2.0/24 1.1.1.0/24 any -P in ipsec esp/tunnel/9.9.9.9-8.8.8.8/unique;



Далее нуждо создать интерфейс для тунеля, для этого добавляем в rc.conf


gif_interfaces="gif0"
gifconfig_gif0="8.8.8.8 9.9.9.9"
ifconfig_gif0="inet 1.1.1.1 2.2.2.2 netmask 255.255.255.0"

#Включаем IPSec

ipsec_enable="YES"
ipsec_program="/usr/local/sbin/setkey"
ipsec_file="/usr/local/etc/racoon/spd.conf"
racoon_enable="YES"
racoon_flags="-f /usr/local/etc/racoon/racoon.conf -l /var/log/racoon.log" #Для логов



#добавляем маршрут 

static_routes="remote"
route_remote="2.2.2.0 2.2.2.1 255.255.255.0"


в файл psk.txt записываем адресс удаленного сервера и секретный ключ

9.9.9.9    psk@key

Теперь можно стартовать сервис для этого достаточно перегрузиться или же набираем ряд следующих комманд:

/etc/netstart

setkey –P –f /usr/local/etc/racoon/setkey.conf

route add 2.2.2.0 2.2.2.1 255.255.255.0

/usr/local/etc/rc.d/racoon start



На основном сервере все работает.


Настройка PFSense.

В секции VPN выбираем IPsec и создаем новое подключение с такими же настройками как на FreeBSD:















Рис.2







Добавляем фазу 2















Рис.3






Ставим галочку Enable IPsec и все готово.
Конечно не забываем добавить правила для фаерволлов обеих сторон, в соответствии со своими нуждами.

Дополнение.

Появился шлюз на CISСO RV042G Gigabit Dual WAN VPN Router. С  ним туннель поднялся тоже довольно легко, не сервере ничего не пришлось править, только создать новое подключение по примеру выше но без gif.
Ну и настройки на роутере:

Тип - Gateway To Gateway



сохраняем. Жмем Connect и через пару минут ожидания все готово.


суббота, 11 февраля 2012 г.

Редактирование iso образа в Ubuntu



Снимаем образ с компакт-диска. Работа с образом быстрее, да и резервная копия никогда не помешает.

dd if=/dev/cdrom of=cdimage-orig.iso bs=2048

Создаём папку для монтирования образа, аналог «подключения виртуального диска» в виндах. В зависимости от места создания, возможно, придётся делать от имени суперпользователя. Лично у меня эта папка была создана однократно и именно для таких целей - для подключения образов дисков.
 
sudo mkdir /mnt/vcd

Монтируем образ компакт-диска в папку. Только от имени суперпользователя.
 
sudo mount cdimage-orig.iso /mnt/vcd -o loop

Создаём папку для копирования содержимого диска, в которой будем изменять файлы. Путь к cd-dir должен быть указан либополный, либо относительно текущего каталога. У меня обычно это папка в домашнем каталоге.
 
mkdir cd-dir

Копируем файлы с образа в папку.
 
cp /mnt/vcd/* cd-dir -R

Размонтируем образ, он нам больше не нужен. Тоже от имени суперпользователя. Если этого не сделать сейчас, образ будет автоматически размонтирован при перезагрузке.
 
sudo umount /mnt/vcd

Всё содержимое компакт-диска сейчас у нас находится в папке cd-dir. Редактируем его по усмотрению.

Сборка каталога в образ

А вот эта задача уже посложнее. Стандарт загрузочного компакт-диска подразумевает наличие на нём двух файлов: загрузочного каталога и собственно образа загрузчика.
Например, в Ubuntu 8.04 эти два файла находятся в папке isolinux. Образ загрузчика - isolinux.bin, загрузочный каталог - boot.cat.
Загрузочный каталог - файл размером 2 килобайта, его содержимое роли не играет.
Особый интерес представляет образ загрузчика.
Немного теории.
BIOS не умеет грузиться с CD-ROMа, но умеет считывать с него информацию. Специально для загрузки с компакт-дисков была введена спецификация El Torito, El Torito Bootable CD Specification. Суть её в следующем: BIOS сканирует все дисковые системы компьютера, и по стандарту ISO9660 (формат хранения данных на компакт-дисках), эмулирует образ загрузчика как жёсткий диск (или флоппик), после чего происходит загрузка с этого диска в обычном режиме.
Нужно найти оба этих файла, после чего собрать образ компакт-диска из каталога:
mkisofs -r -iso-level 4 -b boot.bin -c boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o cdimage-new.iso cd-dir/
boot.bin - полный путь к образу загрузчика относительно корня компакт-диска
boot.cat - полный путь к загрузочному каталогу относительно корня компакт-диска
-no-emul-boot - нужен в том случае, когда образ загрузчика не является точным образом загрузочного флоппи, включая размер
-boot-load-size 4 - задаёт число загрузочных секторов, ключ нужен для совместимости с «глючными» биосами, которых много. Если параметр будет не 4, то некоторые экземпляры откажутся запускаться
-boot-info-table - также для совместимости
Получившийся диск записываем командой:
cdrecord cdimage-new.iso

Умолчания

/dev/cdrom - файл-устройство привода компакт-дисков
cdimage-orig.iso - образ диска до редактирования
cdimage-new.iso - образ отредактированного диска
/mnt/vcd/ - каталог для монтирования образов
cd-dir - каталог для редактирования содержимого диска

Дополнительно

ISO9660 - стандарт файловой системы для хранения данных на дисках CD. Формат введён для независимости доступа к дискам от рабочей платформы (Windows, Linux, и т.д.)
Есть несколько уровней спецификации:
1. Формат имён файлов - 8.3, как в DOS. Не больше 8 символов в имени каталога. Не больше 8 вложенных каталогов. В именах используются только буквы латинского алфавита. Фрагментация файлов не допускается.
2. Имена файлов ограничены 32 символами. Набор символов в именах неограничен.
3. Допускается фрагментация файлов (необходимо для пакетной или инкрементной записи CD).
4. (ISO9660-2) Максимальная длина пути - 207 символов. Нет ограничения на вложенные папки. Символа «.» (точка) в именах файлов не носит особого значения.
Общее ограничение ISO9660 - размер файла не может превышать 2GB.
Расширение стандарта, называемое Joliet, добавляет поддержку длинных имён файлов и не-ASCII символов в именах.


Не мое. Взял здесь http://www.it-simple.ru/?p=550 

пятница, 16 декабря 2011 г.

Автозагрузка виртуальной гостевой машины VirtualBox в Ubuntu

Имеется VirtualBox на Ubuntu 11.10 на которой постоянно крутится гостевая Windows Server с рядом сервисов необходимых в  сети. Все настраивалось через стандартные графические инструменты но это накладывает одно неудобство, при перезагрузке необходимо вручную запускать заново виртуальную машину. А хочется что бы все запускалось автоматом и без графики.
Для запуска VirtualBox без графики, есть несколько параметров, мы воспользуемся следующим:

VBoxHeadless --startvm <uuid|name>
где <uuid|name> идентификатор или имя нашей гостевой ОС. 
Теперь нужно автоматизировать этот процесс, для этого создадим скрипт /etc/init.d/vbox следующего содержания:

#!/bin/sh
#Запуск ВМ
vm_start() {         log_daemon_msg "Starting Vbox WinServ2008 machine"         sleep 120 && su -l -c "VBoxHeadless --startvm \
        "WinServ2008" &" shajtan
        log_end_msg 0
        return 0
}

# выключение ВМ
vm_save()
{
        log_daemon_msg "Sending ACPI POWER OFF \
signal for Vbox WinServ2008 machine"
        su -l -c "VBoxManage controlvm \
        WinServ2008 acpipowerbutton" shajtan
        log_end_msg 0
        return 0
}

case "$1" in
start)
perform_start
;;

stop)
perform_save
echo "done."
exit 0;
;;

*)
echo "Usage: /etc/init.d/vbox start|stop"
exit 1
;;

esac
Добавим наш скрипт во все уровни запуска:
sudo update-rc.d slave start 99 2 3 4 5 . stop 01 0 1 6 .
Все будет стартовать автоматически, более того мы можем отключить или заново включить нашу ВМ командами:

/etc/init.d/slave start
/etc/init.d/slave stop








вторник, 29 ноября 2011 г.

Нерабочая F10 в MC (Midnight Commander) Ubuntu 11.10.

Не работает функциональная клавиша F10 в MC, при нажатии на последнюю вместо выхода из файлового менеджера появляется меню терминала, при этом не помогает отключение данной функции в настройках комбинаций клавиш терминала.

Данная проблема появилась еще в предыдущей версии Ubuntu. Там она устранялась при помощи редактирования параметров с помощью dconf-editor (каких именно уже не вспомню). В версии 11.10  dconf-editor не помог, хотя Google нашел пару советов включения отключения F10 как кнопки доступа к меню из последнего: org.gnome.desktop.applications.interface параметр menubar-accel. Но похоже это не совсем то, поскольку изменение ни к чему не привело.

Однако решение нашлось тоже довольно простое alt+F2 запускаем about:config откроется менеджер настройки CompizConfig. В Behaviour ищем опцию "Key to open the first panel menu" и изменяем в ней комбинацию клавиш.

вторник, 20 сентября 2011 г.

Ошибка установки php5-extensions на FreeBSD (autoconf: required version 2.68 not found)

 

При установке расширений для php5 из портов возникла следующая ошибка:

Configuring for:
PHP Api Version: 20090626
Zend Module Api No: 20090626
Zend Extension Api No: 220090626
autoconf: required version 2.68 not found
*** Error code 1

При этом php был установлен перед этим без проблем. Обновление порта не помогло.

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

# portupgrade autoconf

А также нжно обновить autoconf-wrapper:

# portupgrade autoconf-wrapper

После этого все установилось без проблем.

понедельник, 19 сентября 2011 г.

Обновление установленных пакетов FreeBSD

 

Для обновления будем использовать portupgrade.

Установим утилиту:

# cd /usr/ports/ports-mgmt/portupgrade
# make install clean

Теперь обновляемся с помощью команды:

# portupgrade –arR

По завершении работы portupgrade выводится список программ которые обновить автоматически не удалось. Если необходимо то это можно сделать вручную, перейдя в папку каждого порта и выполнив команду:

# make reinstall

или удалив и установив программу заново:

# make deinstall && make install

Обновление дерева портов FreeBSD

 

Для поддержки актуальности устанавливаемых программ нужно периодически обновлять порты. В данном примере мы будем делать это с помощью  cvsup.

Для начала установим саму утилиту:

# cd /usr/ports/net/cvsup-without-gui
# make install clean

Создадим конфигурационный файл /usr/local/etc/cvsup.conf со следующим содержимым:

*default host=cvsup.FreeBSD.org
*default base=/var/db
*default prefix=/usr
*default release=cvs tag=RELENG_7_1
*default delete use-rel-suffix
*default compress
ports-all tag=.

Теперь можно обновлять дерево портов, для этого служит комманда:

cvsup -g -L 2 /usr/local/etc/cvsup.conf && make fetchindex

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

четверг, 4 августа 2011 г.

Установка и настройка почтового сервера на базе Courier и Postfix в Ubuntu

 

Для быстрой настройки почтового сервера связка Courier и Postfix является очень удобной.

Для работы нам понадобится наличие домена с обратным преобразованием оного и записью типа MX, а также база данных MySQLдля хранения информации о пользователях и доменах.

Также нужно открыть доступ к следующим портам :

25 (SMTP), 110, 995 (POP, POPS), 143, 993 (IMAP, IMAPS)

Самый простой способ настроить место для хранения почты — создать пользователя vmail с соответствующей группой и назначить ему специфичный userID.

Пользователь vmail создается как обычно, но с некоторым отличием: мы указываем, что пользователь не может логиниться в систему.

Для начала создадим группу vmail:

 

sudo groupadd -g 5000 vmail

Это команда создает группу vmail и присваивает ее GID (group ID) 5000.

Затем создаем пользователя vmail:

 

sudo useradd -s /usr/sbin/nologin -g vmail -u 5000 vmail -d /home/vmail -m

Эта команда создает пользователя vmail, чтобы он не мог логиниться в систему, присваивает его группе vmail, а так же создает ему домашнюю директорию /home/vmail

Установим Postfix:

 

sudo apt-get install postfix postfix-mysql postfix-tls libsasl2-2 libsasl2-modules libsasl2-modules-sql sasl2-bin libpam-mysql openssl

 

В процессе установки Postfix сервера вначале система выведет на экран окно с информацией, после чего потребуется выбрать пункт 'Internet Site'.

На вопрос о имени имя вашего почтового домена mail.domen1.com.

Настройка MySQL.

Для начала создадим базу данных с оригинальным названием — mail.

 

mysqladmin -u root -p create mail

В процессе выполнения команды система вас попросит ввести пароль администратора MySQL (вы его ввели при инсталляции MySQL).

Далее залогинимся в MySQL и создадим несколько таблиц.

 

mysql -u root -p

Для начала создадим пользователя БД, для наших целей.

 

CREATE USER 'mailadmin'@'localhost' IDENTIFIED BY 'MyPasswordHere';

Замените MyPasswordHere на свой собственный пароль.

Далее, дадим этому пользователю необходимые привилегии:

 

FLUSH PRIVILEGES;

GRANT SELECT, INSERT, UPDATE, DELETE ON `mail` . * TO 'mailadmin'@'localhost';

FLUSH PRIVILEGES;

1.Теперь мы можем выбрать нашу БД mail и создать необходимые таблицы.

 

USE mail;

Необходимо создать три таблицы для хранения почтовых доменов, пользователей и деталей доставки сообщений (форвардинг сообщений).

Таблица доменов. В Mysql введите следующие команды:

 

CREATE TABLE domains (

domain varchar(50) NOT NULL,

PRIMARY KEY (domain)

)

TYPE=MyISAM;

Таблица пользователей. Как раньше, введите в MySQL:

 

CREATE TABLE users (

email varchar(80) NOT NULL,

password varchar(20) NOT NULL,

PRIMARY KEY (email)

)

TYPE=MyISAM;

Таблица форвардинга:

 

CREATE TABLE forwards (

source varchar(80) NOT NULL,

destination TEXT NOT NULL,

PRIMARY KEY (source)

)

TYPE=MyISAM;

Теперь можно выйти из MySQL.

Для того, чтобы Postfix мог использовать таблицы MySQL, необходимо создать несколько настроечных файлов.

Создадим текстовый файл:

 

sudo nano /etc/postfix/mysql-domains.cf

Введем следующие строки:

 

user = mailadmin

password = MyPasswordHere

dbname = mail

query = SELECT domain AS virtual FROM domains WHERE domain='%s'

hosts = 127.0.0.1

MyPasswordHere надо заменить на введенный при создании пользователя БД mailadmin пароль.

Создаем файл:

 

sudo nano /etc/postfix/mysql-forwards.cf

Заполняем его:

 

user = mailadmin

password = MyPasswordHere

dbname = mail

query = SELECT destination FROM forwards WHERE source='%s'

hosts = 127.0.0.1

 

Каждый домен имеет множество различных почтовых ящиков. Этот скрипт получает правильные характеристики почтового ящика.

 

sudo nano /etc/postfix/mysql-mailboxes.cf

Содержимое:

 

user = mailadmin

password = MyPasswordHere

dbname = mail

query = SELECT CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/') FROM users WHERE email='%s'

hosts = 127.0.0.1

 

И наконец создадим файл адресов.

 

sudo nano /etc/postfix/mysql-email.cf

Содержимое

 

user = mailadmin

password = MyPasswordHere

dbname = mail

query = SELECT email FROM users WHERE email='%s'

hosts = 127.0.0.1

Эти четыре файла позволят Postfix-у получить доступ к информации в базе данных mail и присвоить корректные данные каждому письму.

Установим нужные права:

 

sudo chmod o= /etc/postfix/mysql-*

(другие группы не имеют доступа к файлам.

И сменим владельца:

 

sudo chgrp postfix /etc/postfix/mysql-*

Postfix должен иметь к ним доступ.

Теперь настроим Postfix

Отредактируем файл настроек Postfix:

 

sudo nano /etc/postfix/main.cf

Обычно нижняя часть файла выглядит так:

 

myhostname = mail.domen1.com

alias_maps = hash:/etc/aliases

alias_database = hash:/etc/aliases

myorigin = /etc/mailname

mydestination =

relayhost =

mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

mailbox_size_limit = 0

recipient_delimiter = +

inet_interfaces = all

Убедитесь, что mydestination не сделано присвоение.

Добавим ссылки на созданные файлы настроек, чтобы Postfix использовал их в процессе работы. В конец файла добавьте строки:

 

virtual_alias_domains =

virtual_alias_maps = proxy:mysql:/etc/postfix/mysql-forwards.cf, mysql:/etc/postfix/mysql-email.cf

virtual_mailbox_domains = proxy:mysql:/etc/postfix/mysql-domains.cf

virtual_mailbox_maps = proxy:mysql:/etc/postfix/mysql-mailboxes.cf

virtual_mailbox_base = /home/vmail

virtual_uid_maps = static:5000

virtual_gid_maps = static:5000

proxy_read_maps = $local_recipient_maps $mydestination $virtual_alias_maps $virtual_alias_domains $virtual_mailbox_maps $virtual_mailbox_domains $relay_recipient_maps $relay_domains $canonical_maps $sender_canonical_maps $recipient_canonical_maps $relocated_maps $transport_maps $mynetworks $virtual_mailbox_limit_maps

Дальше нужно настроить безопасное соединение.

Saslauthd требуется для того, чтобы устанавливать безопасные соединения с вашим почтовым сервером.

Посмотрим основной файл настроек программы:

 

sudo nano /etc/default/saslauthd

Первым делом надо установить автоматический запуск демона (поменяйте значение на 'yes'. По умолчанию стоит 'no'):

 

# Should saslauthd run automatically on startup? (default: no)

START=yes

Далее нужно изменить некоторые опции в конце файла. По умолчанию они выглядят так:

 

#

# Example for postfix users: "-c –m /var/spool/postfix/var/run/saslauthd"

OPTIONS="-c -m /var/run/saslauthd"

 

Изменим их следующим образом :

 

#

# Example for postfix users: "-c -m /var/spool/postfix/var/run/saslauthd"

OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"

Мы только что указали каталог, который не существует в природе. Непорядок. Устраним это:

 

sudo mkdir -p /var/spool/postfix/var/run/saslauthd

Мы используем MySQL для хранения наших идентификационных данных. Точнее не наших, а пользователей сервера. Значит процесс авторизации должен знать, где брать данные.
Создадим два файла, чтобы процесс мог получить доступ к базе данных и добыть необходимую ему информацию:

 

sudo nano /etc/pam.d/smtp

Добавим в этот файл следующий текст:

 

auth    required   pam_mysql.so user=mailadmin passwd=MyPasswordHere host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1

account sufficient pam_mysql.so user=mailadmin passwd=MyPasswordHere host=127.0.0.1 db=mail table=users usercolumn=email passwdcolumn=password crypt=1

Это позволит процессу авторизации иметь доступ к БД для проверки пароля и e-mail-а.

И второй файл:

 

sudo nano /etc/postfix/sasl/smtpd.conf

Его содержимое следующее:

 

pwcheck_method: saslauthd

mech_list: plain login

allow_plaintext: true

auxprop_plugin: mysql

sql_hostnames: 127.0.0.1

sql_user: mailadmin

sql_passwd: MyPasswordHere

sql_database: mail

sql_select: select password from users where email = '%u'

Для того, чтобы Postfix мог получить доступ к процессу Saslauthd, добавим пользователя Postfix в группу Saslauthd

 

sudo adduser postfix sasl

Перезапускаем демоны:

 

sudo /etc/init.d/postfix restart

sudo /etc/init.d/saslauthd restart

Создадим сертификат безопасности. По умолчанию он будет создан в каталоге /etc/ssl/certs.

 

sudo make-ssl-cert /usr/share/ssl-cert/ssleay.cnf /etc/ssl/certs/mailcert.pem

В процессе создания, вам зададут несколько вопросов. Ответить можно, например так:

 

Country Name - UA

State or Province -

Locality name - Kiev

Organisation Name - MyGreat Company

Organisational Unit Name - Mail

Hostname - mail.domen1.com

Email address - admin@domen1.com

Важно, чтобы Hostname совпадал с именем mail server-а — hostname. В нашем случае, это mail.domen1.com.
Мы создали самоподписанный сертификат здесь:

 

/etc/ssl/certs/mailcert.pem

Теперь требуется отредактировать главный файл настроек Postfix:

 

sudo nano /etc/postfix/main.cf

Найдите секцию TLS parameters. Настройки по умолчанию в ней выглядят так:

 

smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem

smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key

smtpd_use_tls=yes

smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache

smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

Стираем их полностью. И вставляем вместо них следующие:

 

smtpd_sasl_auth_enable = yes

broken_sasl_auth_clients = yes

smtpd_sasl_authenticated_header = yes

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

smtpd_use_tls = yes

smtpd_tls_cert_file = /etc/ssl/certs/mailcert.pem

smtpd_tls_key_file = $smtpd_tls_cert_file

Тем самым мы активировали безопасные соединения, перечислили, какие соединения будем принимать, и, наконец, указали путь к сертификату.

Установим Courier который позволит нам получить POP3 и IMAP доступ к нашей почте.

 

sudo apt-get install courier-authdaemon courier-authlib-mysql courier-pop courier-pop-ssl courier-imap courier-imap-ssl

Во время установки вам будет задан вопрос, нужно ли создать директории. Правильный ответ — НЕТ

Для начала отредактируем файл:

sudo nano /etc/courier/authdaemonrc

Поменяйте строку

authmodulelist="authpam"

на

authmodulelist="authmysql"

Далее редактируем файл с деталями БД /etc/courier/authmysqlrc:

 

MYSQL_SERVER localhost

MYSQL_USERNAME mailadmin

MYSQL_PASSWORD MyPasswordHere

MYSQL_PORT 0

MYSQL_DATABASE mail

MYSQL_USER_TABLE users

MYSQL_CRYPT_PWFIELD password

MYSQL_UID_FIELD 5000

MYSQL_GID_FIELD 5000

MYSQL_LOGIN_FIELD email

MYSQL_HOME_FIELD "/home/vmail"

MYSQL_MAILDIR_FIELD CONCAT(SUBSTRING_INDEX(email,'@',-1),'/',SUBSTRING_INDEX(email,'@',1),'/')


После изменения файлов настроек, требуется рестартовать демоны:

 

sudo /etc/init.d/courier-authdaemon restart

sudo /etc/init.d/courier-imap restart

sudo /etc/init.d/courier-imap-ssl restart

sudo /etc/init.d/courier-pop restart

sudo /etc/init.d/courier-pop-ssl restart

Нужно заполнить таблички в MySQL, чтобы все то, что мы настроили ранее заработало.

Логинимся в MySQL:

 

mysql -u root -p

Выбираем базу данных:

 

USE mail;

Заполняем таблицу доменов:

 

INSERT INTO `domains` (`domain`) VALUES ('domen1.com');

Чтобы ввести любой другой домен, выполните аналогичную команду:

 

INSERT INTO `domains` (`domain`) VALUES ('domen2.ru');

Заполняем таблицу пользователей:

 

INSERT INTO `users` (`email`, `password`) VALUES ('admin@domen1.com', ENCRYPT('secretpassword'));

Остальные пользователи вводятся аналогично:

 

INSERT INTO `users` (`email`, `password`) VALUES ('kot@domen2.ru', ENCRYPT('secretpassword'));

Когда все таблицы заполнены — выходим из ведения БД:

Перегружаем postfix:

 

sudo postfix reload

Для проверки работоспособности нужно отправить письмо на наш адрес

 

mail admin@domen1.com

Через какое-то время проверьте папку /home/vmail:

 

ls /home/vmail

Увидите новый каталог:

 

/home/vmail/domen1.com

А для каждого пользователя домена domen1.com в папке /home/vmail/domen1.com будет создан собственный каталог с письмами.

Осталось обеспечить возможность проверки почты с помощью WEB клиента.
Наиболее известным бесплатным и свободно распространяемым продуктом для этого является Squirrelmail.

 

sudo apt-get install squirrelmail squirrelmail-locales php-pear php5-cli

Скорее всего сразу после инсталляции ваш веб-клиент будет доступен по адресу: www.domen1.com/squirrelmail (www.domen1.com — ваш домен)
Если это не так, то нужно проделать следующее:

 

sudo cp /etc/squirrelmail/apache.conf /etc/apache2/sites-available/squirrelmail

sudo a2ensite squirrelmail

Тем самым мы копируем файл конфигурации по умолчанию в папку доступных сайтов Apache, после чего активируем его.

Теперь он точно будет доступен по адресу www.domen1.com/squirrelmail. Но это не совсем удобно.
Поэтому проделаем следующее:

 

sudo nano /etc/apache2/sites-available/squirrelmail

 

Закомментируем следующие строки в файле настроек:

 

# alias /squirrelmail /usr/share/squirrelmail

 

Уберем символы комментария в начале строк со следующего блока:

 

# users will prefer a simple URL like http://webmail.example.com

DocumentRoot /usr/share/squirrelmail

ServerName webmail.domen1.com

Если для вашего сервера apache активирован SSL, то можно убрать комментарии с секции mod_rewrite для того, чтобы обеспечить наилучшую безопасность системы.
Сохраните файл. Потом проверьте настройки apache:

 

sudo apache2ctl -t

Если все нормально — перегрузите apache:

 

sudo /etc/init.d/apache2 reload

Теперь мы можете заходить как domain1.com/squirrelmail/ или webmail.domain1.com если предпочитаете виртуальный хост.

Настроим squirrelmail, чтобы вы могли не только увидеть его стартовую страничку, но и проверить свою почту.

 

sudo squirrelmail-configure

Откроется интерфейс конфигурации веб-клиента.

Нажмите 2 (+Enter) чтобы войти в секцию настроек сервера. Нажмите A, чтобы редактировать настройки IMAP.

Нажмите 8 чтобы изменить программу авторизации. введите courier.

 

courier

Теперь нажмем 7, чтобы изменить настройки безопасности secure IMAP. Введите Y для активации.
Введите 5 для редактирования порта IMAP. Введите значение 993.
Нажмите S для сохранения настроек. И «Enter».
Нажмите Q, чтобы выйти из программы настроек.

Сейчас вы можете зайти на страницу domain1.com/squirrelmail/ или webmail.domain1.com и попробовать проверить свою почту, залогинившись.

 

 

Источник: http://blog.laptev.info/2009/ubuntu-mail-server-1.html http://blog.laptev.info/2009/ubuntu-mail-server-2.html