Ниже описан процесс установки почтового сервера на основе MTA Exim. В качестве платформы будет использована CentOS версии 6.8
Для полноценной работы понадобятся дополнительные пакеты, такие как: Dovecot v2, MySQL, Clamav и Postfixadmin.
Введение
Exim - будет заниматься отправкой и получением писем от других почтовых серверов
Dovecot - доставка почты к почтовому клиенту от почтового сервера.
MySQL - в базе MySQL будут содержаться такие данные как наш домен company.kz, имена почтовых учетных записей, пароли и т.д.
ClamAV- это антивирус задача которого проверка почтовых сообщений на предмет вирусов
Post
RoundCube - веб интерфейс для пользователей почтового сервера, этот интерфейс позволяет работать с почтовым ящиком. Пользователь в нем просматривает почтовые сообщения, отправлять письма и т.д.Если Вы хотите реальный почтовый сервер, Вам понадобится:
- Белый статический IP адрес. Обычно эти IP адреса выдает провайдер.
- Зарегистрированное доменное имя - company.ru. Можете воспользоватся любым регистратором, например www.reg.ru
- Два DNS сервера которые будут отвечать за домен - company.ru. Бывает так, что после регистрации домена регистратор дает свои DNS сервера в пользование. Можно уговорить провайдера поддерживать Ваш домен, а можно настроить свои DNS сервера
- PTR запись которая правильно резолвит Ваш почтовый хост (111.222.333.444 -> mail.company.ru). Обычно PTR запись прописывает провайдер, поэтому админ обращается к провайдеру с запросом занести PTR запись вида - IP адрес -> mail.company.ru
Исходные данные
Домен - point.local
Обычно домен покупают у регистраторов доменов. Если у вас другой домен, например "company.ru", измените "point.local" на "company.ru" в конфигурационных файлах.
Имя хоста почтового сервера - mx.point.local
Здесь обычно задают имя компьютера, в основном ставят "mail.point.local" или "mail.company.ru".
IP адрес почтового сервера - 192.168.1.2
Если ваш почтовый должен работать в глобальной сети, то вам понадобится взять у провайдера реальный статический IP адрес. Его в народе еще называют как "белый".
У меня в моем примере используется "серый" - IP адрес, чтобы показать как работает почтовый сервер этого достаточно.
Краткое содержание:
1. Настройка сетевого адаптера
2. Подключение необходимых репозитариев
3. Установка СУБД MySQL, создание базы данных VEXIM
4. Установка Postfixadmin
5. Установка ClamAV
6. Установка и настройка Dovecot
7. Установка и настройка Exim
8. Отключаем Postfix
9. Добавление сервисов в автозагрузку
10. Выставляем права на почтовые каталоги
11. Настройка DNS сервера
12. Настройка PostfixAdmin
13. Установка и настройка RoundCube Web Mail
14. Настройка фаерволла iptables
15. Установка Fail2ban
1. Настройка сетевого адаптера
Наш сервер имеет всего один сетевой адаптер, после установки CentOS, настройки этого адаптера хранятся в файле "/etc/sysconfig/network-scripts/ifcfg-eth0".
По умолчанию этот файл содержит следующие настройки
# cat /etc/sysconfig/network-scripts/ifcfg-eth0
1 2 3 4 |
DEVICE="eth0" HWADDR="08:00:27:79:17:85" NM_CONTROLLED="yes" ONBOOT="no" |
Следует дописать в этот файл дополнительные настройки, подправим содержимое этого файла:
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
Чтобы внести текст в файл, нажмите клавишу "INS" -это активирует режим редактирования, переведет вас с режима просмотра в режим редактирования. После чего вводите новые данные. Обычно после нажатия "INS", текст вставляется комбинацией "SHISFT"+"INS".
По окончанию ввода текста, нажмите кнопку "ESC" и потом нажмите одновременно кнопки "SHIFT и два раза нажать "z" или введите ":w!" и потом нажмите "ENTER" - это делается для сохранения файла и выхода с редактора.
Поиск файла в редакторе vi делается путем нажатия кнопки "/", далее вводится текст который нужно найти.
123456789 DEVICE="eth0"HWADDR="08:00:27:79:17:85"NM_CONTROLLED="no"ONBOOT="yes"GATEWAY=192.168.1.250IPADDR=192.168.1.2NETMASK=255.255.255.0BROADCAST=192.168.1.255
Перезапускаем сетевую службу:
# service network restart
Вписываем адреса DNS серверов:
# vi /etc/resolv.conf
1 2 |
nameserver 192.168.1.2 //Первичный DNS nameserver 111.222.333.444 //Вторичный DNS |
Здесь IP адреса:
192.168.1.2 - это IP нашего почтового сервера, он также будет и DNS сервером
111.222.333.444 - адрес DNS сервера провайдера
Перезапустим сетевую службу, чтобы внесенные нами изменения вступили в силу:
# service network restart
Проверьте, выход в Интернет на сервере:
# ping google.ru
Наличие Интернета - обязательно!
2. Подключим необходимые репозитарии:
rpm -Uvh http://dl.atrpms.net/el6-i386/atrpms/stable/atrpms-repo-6-7.el6.i686.rpm
3. Установка СУБД MySQL, создание базы данных VEXIM
Установим СУБД MySQL:
# yum -y install mysql-server mysql
# service mysqld start
Создадим базу данных Vexim:
# mysql -p
1 2 3 |
mysql> CREATE DATABASE vexim; mysql> GRANT ALL ON vexim.* to vexim@localhost identified by 'password'; mysql> quit |
4. Установка Postfixadmin
Установим зависимости для Postfixadmin:
1 |
# yum -y install httpd php php-imap php-mbstring php-common php-pdo php-mysql php-cli mc |
Скачаем Postfixadmin и настроим его:
# cd /var/www/html
# wget http://sourceforge.net/projects/postfixadmin/files/postfixadmin/postfixadmin-2.3.7/postfixadmin-2.3.7.tar.gz/download
# tar -xvzf postfixadmin-2.3.7.tar.gz
# mv postfixadmin-2.3.7/ postfixadmin
# cd postfixadmin
Меняем параметры:
# vi config.inc.php
$CONF['configured'] = true;
$CONF['database_type'] = 'mysql';$CONF['database_host'] = 'localhost';$CONF['database_user'] = 'vexim';$CONF['database_password'] = 'password'$CONF['database_name'] = 'vexim';$CONF['encrypt'] = 'dovecot:CRAM-MD5';$CONF['dovecotpw'] = "/usr/bin/doveadm pw";
5. Установка ClamAV
Установим Clamav:
# yum -y install clamav
# freshclam -v
# freshclam -d
6. Установка и настройка Dovecot
Установим Dovecot:
# yum install dovecot dovecot-mysql -y
# mv /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf-orig
Настроим Dovecot, создайте файл /etc/dovecot/dovecot.conf:
# vi /etc/dovecot/dovecot.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# 2.0.9: /etc/dovecot/dovecot.conf # OS: Linux 2.6.32-358.6.2.el6.i686 i686 CentOS release 6.4 (Final) auth_default_realm = point.local auth_mechanisms = plain login cram-md5 base_dir = /var/run/dovecot/ disable_plaintext_auth = no dotlock_use_excl = yes first_valid_gid = 6 first_valid_uid = 26 listen = * mail_location = maildir:/var/vmail/%d/%u mail_privileged_group = mail passdb { args = /etc/dovecot/dovecot-mysql.conf driver = sql } protocols = imap pop3 service auth { unix_listener auth-client { group = exim mode = 0660 user = exim } unix_listener auth-master { group = exim mode = 0600 user = exim } user = root } ssl = no userdb { args = /etc/dovecot/dovecot-mysql.conf driver = sql } verbose_proctitle = yes protocol imap { imap_client_workarounds = delay-newmail tb-extra-mailbox-sep } protocol pop3 { pop3_client_workarounds = outlook-no-nuls oe-ns-eoh pop3_uidl_format = %08Xu%08Xv } protocol lda { auth_socket_path = /var/run/dovecot/auth-master postmaster_address = admin@point.local } |
1 |
Создадим файл /etc/dovecot/dovecot-mysql.conf для доступа Dovecot к MySQL базе.
# vi /etc/dovecot/dovecot-mysql.conf
#File: /etc/dovecot/dovecot-mysql.conf
123456 driver = mysqlconnect = host=localhost dbname=vexim user=vexim password=passworddefault_pass_scheme = CRAM-MD5password_query = SELECT `username` as `user`, `password` FROM `mailbox` WHERE `username` = '%n@%d' AND `active`='1'user_query = SELECT 93 AS `uid`, 93 AS `gid` FROM `mailbox` WHERE `username` = '%n@%d' AND `active`='1'
7. Установка и настройка Exim
Установим сам Exim:
# yum install exim exim-mysql -y
# mv /etc/exim/exim.conf /etc/exim/exim.conf-orig
Теперь настроим Exim, создадим конфиг файл /etc/exim/exim.conf
# vi /etc/exim/exim.conf
#######################
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 |
#MAIN CONFIGURATION SETTINGS# ####################### primary_hostname = mx.point.local hide mysql_servers = localhost/vexim/vexim/password domainlist local_domains = ${lookup mysql{SELECT `domain` \ FROM `domain` WHERE \ `domain`='${quote_mysql:$domain}' AND \ `active`='1'}} domainlist relay_to_domains = ${lookup mysql{SELECT `domain` \ FROM `domain` WHERE \ `domain`='${quote_mysql:$domain}' AND \ `active`='1'}} hostlist relay_from_hosts = localhost:127.0.0.0/8:192.168.1.0/24 #add the hosts from which you allow relaying here acl_not_smtp = acl_not_smtp acl_smtp_rcpt = acl_check_rcpt acl_smtp_data = acl_check_data av_scanner = clamd:/var/run/clamav/clamd.socket # spamd_address = 127.0.0.1 783 qualify_domain = point.local qualify_recipient = point.local allow_domain_literals = false exim_user = exim exim_group = exim never_users = root rfc1413_query_timeout = 0s sender_unqualified_hosts = +relay_from_hosts recipient_unqualified_hosts = +relay_from_hosts ignore_bounce_errors_after = 45m timeout_frozen_after = 15d helo_accept_junk_hosts = 192.168.1.0/24 auto_thaw = 1h smtp_banner = "$primary_hostname, ESMTP EXIM $version_number" smtp_accept_max = 50 smtp_accept_max_per_connection = 25 smtp_connect_backlog = 30 smtp_accept_max_per_host = 20 split_spool_directory = true remote_max_parallel = 15 return_size_limit = 70k message_size_limit = 64M helo_allow_chars = _ smtp_enforce_sync = true log_selector = \ +all_parents \ +connection_reject \ +incoming_interface \ +lost_incoming_connection \ +received_sender \ +received_recipients \ +smtp_confirmation \ +smtp_syntax_error \ +smtp_protocol_error \ -queue_run syslog_timestamp = no ####################################### # ACL CONFIGURATION # Specifies access control lists for incoming SMTP mail ####################################### begin acl acl_not_smtp: deny message = Sender rate overlimit - $sender_rate / $sender_rate_period ratelimit = 50 / 1h / strict accept acl_check_rcpt: deny message = "You blacklisted" condition = ${lookup{$sender_host_name}nwildlsearch{black.list}{yes}} deny message = "Lookup failed" condition = ${if eq{$host_lookup_failed}{1}} deny sender_domains = !+local_domains ratelimit = 5/1h/leaky/$authenticated_id message = Bite my shiny metal shaper! accept hosts = : deny message = "incorrect symbol in address" domains = +local_domains local_parts = ^[.] : ^.*[@%!/|] deny message = "incorrect symbol in address" domains = !+local_domains local_parts = ^[./|] : ^.*[@%!] : ^.*/\\.\\./ accept local_parts = postmaster domains = +local_domains deny message = "HELO/EHLO required by SMTP RFC" condition = ${if eq{$sender_helo_name}{}{yes}{no}} accept authenticated = * deny message = "Your IP in HELO - access denied!" hosts = * : !+relay_from_hosts condition = ${if eq{$sender_helo_name}\ {$sender_host_address}{true}{false}} deny condition = ${if eq{$sender_helo_name}\ {$interface_address}{yes}{no}} hosts = !127.0.0.1 : !localhost : * message = "My IP in your HELO! Access denied!" deny condition = ${if match{$sender_helo_name}\ {\N^\d+$\N}{yes}{no}} hosts = !127.0.0.1 : !localhost : * message = "Incorrect HELO string" # filter spammers from dynamic ips deny message = "your hostname is bad (adsl, poll, ppp & etc)." condition = ${if match{$sender_host_name} \ {adsl|dialup|pool|peer|dhcp} \ {yes}{no}} warn set acl_m0 = 30s warn hosts = +relay_from_hosts:4.3.2.1/32:192.168.1.0/24 #disable waits for 'friendly' hosts set acl_m0 = 0s warn logwrite = Delay $acl_m0 for $sender_host_name \ [$sender_host_address] with HELO=$sender_helo_name. Mail \ from $sender_address to $local_part@$domain. delay = $acl_m0 accept domains = +local_domains endpass message = "No such user" verify = recipient accept domains = +relay_to_domains endpass message = "i don't know how to relay to this address" verify = recipient deny message = "you in blacklist - $dnslist_domain \n $dnslist_text" dnslists = opm.blitzed.org : \ cbl.abuseat.org : \ bl.csma.biz accept hosts = +relay_from_hosts deny message = "Homo hominus lupus est" acl_check_data: # check for viruses deny malware = * message = "Your message contains viruses: $malware_name" # if needed - add spam filtering here # permit everything else accept ######################### # ROUTERS CONFIGURATION # Specifies how addresses are handled ############################################# # THE ORDER IN WHICH THE ROUTERS ARE DEFINED IS IMPORTANT! # An address is passed to each router in turn until it is accepted. ############################################# begin routers dnslookup: driver = dnslookup domains = ! +local_domains transport = remote_smtp ignore_target_hosts = 0.0.0.0 : 127.0.0.0/8 no_more system_aliases: driver = redirect allow_fail allow_defer data = ${lookup mysql{SELECT `goto` FROM `alias` WHERE \ `address`='${quote_mysql:$local_part@$domain}' OR \ `address`='${quote_mysql:@$domain}'}} dovecot_user: driver = accept condition = ${lookup mysql{SELECT `goto` FROM \ `alias` WHERE \ `address`='${quote_mysql:$local_part@$domain}' OR \ `address`='${quote_mysql:@$domain}'}{yes}{no}} transport = dovecot_delivery ############################## # TRANSPORTS CONFIGURATION ############################## # ORDER DOES NOT MATTER # Only one appropriate transport is called for each delivery. ####################################### begin transports remote_smtp: driver = smtp # interface = 4.3.2.1 #your public ip address, if it's the main server ip - you could skip this parameter. if it's an alias- it must be specified in clear dovecot_delivery: driver = pipe command = /usr/libexec/dovecot/deliver -d $local_part@$domain message_prefix = message_suffix = delivery_date_add envelope_to_add return_path_add log_output user = exim address_pipe: driver = pipe return_output address_reply: driver = autoreply ########################### # RETRY CONFIGURATION ########################### begin retry * * F,2h,15m; G,16h,1h,1.5; F,4d,6h ############################ # REWRITE CONFIGURATION ############################ begin rewrite ################################ # AUTHENTICATION CONFIGURATION ################################ begin authenticators auth_plain: driver = dovecot public_name = PLAIN server_socket = /var/run/dovecot/auth-client server_set_id = $auth1 auth_login: driver = dovecot public_name = LOGIN server_socket = /var/run/dovecot/auth-client server_set_id = $auth1 auth_cram_md5: driver = dovecot public_name = CRAM-MD5 server_socket = /var/run/dovecot/auth-client server_set_id = $auth1 |
1 |
Создаем файл /etc/exim/black.list
# vi /etc/exim/black.list
12345678910111213141516171819202122232425 ^.*\d+[-\.]\d+[-\.]\d+.*^.*[-\.]dynamic[-\.].*^.*[-\.]static[-\.].*^.*[-\.]dyn[-\.].*^.*[-\.]adsl[-\.].*^.*[-\.]cable[-\.].*^.*[-\.]pool[-\.].*^.*[-\.]broadband[-\.].*^.*[-\.]user[-\.].*^.*[-\.]in-addr[-\.].*^.*[-\.]customer[-\.].*^.*[-\.]fibertel[-\.].*^.*[-\.]cdma[-\.].*^.*[-\.]client[-\.].*^.*[-\.]catv[-\.].*^.*[-\.]xdsl[-\.].*^.*[-\.]comcast[-\.].*^.*[-\.]dhcp[-\.].*^.*[-\.]ppp[-\.].*^.*[-\.]dial[-\.].*^.*[-\.]fbx[-\.].*^.*[-\.]kabel[-\.].*^.*[-\.]peer[-\.].*
1
7. Отключаем Postfix
# alternatives --config mta
# chkconfig --level 123456 postfix off
# service postfix stop
# yum remove postfix -y
Также отключим цепочку RH-Input:
# setup
Firewall Configuration -> Firewall Enabled -> Убираем галочку
Отключаем SELINUX:
# vi /etc/selinux/config
1 |
SELINUX=disabled |
9. Добавление сервисов в автозагрузку
# chkconfig clamav on
# chkconfig mysqld on
# chkconfig httpd on
# chkconfig exim on
# chkconfig dovecot on
10. Выставляем права на почтовые каталоги
Важно правильно выставить права доступа на важные папки,
у многих начинающих возникают проблемы именно с этой частью настройки Exim.
# usermod -a -G exim clamav
# chmod -Rf g+w /var/spool/exim
# chmod -Rf g+s /var/spool/exim
# chown exim:exim -R /var/spool/exim
# chown clamav:clamav -R /var/run/clamav/
Создаем почтовый каталог
# mkdir /var/vmail
# chown exim:exim -R /var/vmail
11. Настройка DNS сервера
Если у вас есть зарегистрированное доменное имя "company.ru" и два DNS сервера регистратора или хостера то, данный пункт настройки DNS сервера - можно пропустить! При этом в файле - /etc/resolv.conf, должны быть указаны только IP адреса DNS серверов вашего провайдера, не надо вставлять туда IP адреса DNS хостера или вашего регистратора домена.
Для того чтобы протестировать почтовый сервер, настройте Bind. Этот пакет позволить настроить DNS сервер.
Первым делом проверяем - используется ли наш DNS сервер для разрешения запросов:
# cat /etc/resolv.conf
1 2 |
nameserver 192.168.1.2 nameserver 111.222.333.444 |
Наш сервер DNS будет авторитарным для зоны "point.local", запрос о зоне "point.local" будет выдаваться нашим DNS-ком, а другие которые он не сможет обработать уйдут на сервер DNS провайдера.
Наш почтовый сервер имеет следующий IP адрес 192.168.1.2, он еще у нас должен быть и DNS сервером. Поэтому везде в настройках DNS сервера меняем IP адрес на наш 192.168.1.2
# yum install bind -y
# vi /etc/sysconfig/network
1 2 3 |
NETWORKING=yes NETWORKING_IPV6=no HOSTNAME=mx.point.local |
# vi /etc/hosts
1 |
192.168.1.2 mx.point.local mx |
Удаляем Network Manager (NM):
# service NetworkManager stop
# chkconfig NetworkManager off
# yum remove dnsmasq -y
# vi /etc/resolv.conf
1 2 3 4 |
search point.local nameserver 192.168.1.2 nameserver 127.0.0.1 nameserver 111.222.333.444 |
Здесь IP адреса:
192.168.1.2 - наш DNS сервер
111.222.333.444 - IP адрес DNS сервера провайдера
Сохраняем на всякие пожарные основной конфигурационный файл демона "named":
# mv /etc/named.conf /etc/named.conf.orig
Создаем чистый конфиг файл с настройками внизу:
# vi /etc/named.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
// // named.conf // // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS // server as a caching only nameserver (as a localhost DNS resolver only). // // See /usr/share/doc/bind*/sample/ for example named configuration files. // options { listen-on port 53 { 127.0.0.1; 192.168.1.2; }; # ставим внешний IP интерфейса directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { any; }; # меняем, даем обращатся всем allow-query-cache { localhost; 10.0.0.0/24; }; # меняем, добавляем локальную сеть если она есть allow-recursion { localhost; 10.0.0.0/24;}; # меняем, добавляем локальную сеть если она есть forwarders { 111.222.333.444; 444.555.666.777; }; # добавляем, ip dns провайдера dnssec-enable no; dnssec-validation no; dnssec-lookaside auto; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; # Зона прямого просмотра "point.local" zone "point.local" { type master; file "point.local.fwd"; allow-update {none;}; allow-transfer {192.168.1.10; }; //вторичный DNS }; # Наша обратная зона просмотра "point.local" zone "1.168.192.in-addr.arpa" { type master; file "point.local.rev"; allow-update {none;}; allow-transfer {192.168.1.10; }; }; include "/etc/named.rfc1912.zones"; |
Создаем файл прямого просмотра зоны - point.local (forward zone)
# vi /var/named/point.local.fwd
1 2 3 4 5 6 7 8 9 10 11 |
$ORIGIN point.local. $TTL 3D @ SOA mx.point.local. root.point.local. (12 4h 1h 1w 1h) @ IN NS mx.point.local. @ IN MX 10 mail.point.local. mx.point.local. IN A 192.168.1.2 www IN A 192.168.1.2 mail IN A 192.168.1.2 |
Создаем файл обратного просмотра зоны - point.local (reverse zone)
# vi /var/named/point.local.rev
Здесь за место 1.168.192 - надо указать свою под сеть в обратном порядке.
А также в при добавлении PTR записи требуется ставить последнею цифру IP адреса,
у нас эта цифра 2, так как IP адрес почтового сервере оканчивается на 2 (192.168.1.2)
$ORIGIN 1.168.192.in-addr.arpa.
1 2 3 4 5 |
$TTL 3D @ SOA mx.point.local. root.point.local. (12 4h 1h 1w 1h) @ IN NS mx.point.local. 2 IN PTR mx.point.local. |
# service named start
# chkconfig named on
Проверка работы DNS:
# dig point.local
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53153 ;; flags: qr aa rd; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1 ;; WARNING: recursion requested but not available ;; QUESTION SECTION: ;point.local. IN A ;; ANSWER SECTION: point.local. 3600 IN A 192.168.1.2 ;; AUTHORITY SECTION: point.local. 3600 IN NS mx.point.local. ;; ADDITIONAL SECTION: mx.point.local. 3600 IN A 192.168.1.2 ;; Query time: 8 msec ;; SERVER: 192.168.1.2#53(192.168.1.2) ;; WHEN: Wed Aug 17 05:03:48 2011 ;; MSG SIZE rcvd: 78 |
# nslookup mx.point.local
# nslookup 192.168.1.2
# nslookup -type=MX point.local
hostname -f
1 |
mx.point.local |
# reboot
12. Настройка PostfixAdmin
Здесь мы настроим веб интерфейс под названием - PostfixAdmin. Этот интерфейс управляет почтовым сервером. В нем можно: добавлять обслуживаемые домены для почты, открывать или удалять почтовые учетные записи, настраивать функцию автоответчика на определённые ящики и т.д.
Зайдите в PostfixAdmin, для этого запустите браузер и введите адрес: http://127.0.0.1/postfixadmin/setup.php
В окошке "Change setup password" введите свой пароль два раза. Запомните его, он нам пригодится в дальнейшем.
Во втором окошке появится HASH нашего пароля (шифрованный пароль). Скопируйте эту "белеберду" в буфер.
После того как вы скопировали "hash" в буфер обмена, его нужно вставить в файл:
/var/www/html/postfixadmin/config.inc.php
Откройте этот файл и найдите в нем строчку:
1 |
$CONF['setup_password'] = 'changeme'; |
За место "changeme" ставим наш hash который скопировали в буфер. Получится так:
1 |
$CONF['setup_password'] = '6c5af4c72af213f0acac5f21d8f95ca1:e59172283d2bb72a5992af8ddc15332cde62f003'; |
И еще поставьте NO здесь:
1 |
$CONF['emailcheck_resolve_domain']='NO'; |
Сохраните файл.
Зайдите еще раз на страничку: http://127.0.0.1/postfixadmin/setup.php
Создайте учетку Админа, например "administrator@point.local", определите его пароль.
Нажмите на кнопке "Add Admin", появится надпись:
Admin has been added!
(administrator@point.local)
Запомните адрес админа и пароль.
Теперь уже заходим на страничку http://127.0.0.1/postfixadmin/
Вводим почтовый адрес админа и пароль.
Добавляем домен "point.local": Domain List - > New Domain -> point.local
1 2 3 |
Aliases - Ставим 0 Mailboxes - Ставим 0 |
Галочка Add default mail aliases
После появится надпись:
1 2 |
Domain has been added! (point.local) |
Создадим первый почтовый ящик, я создал "linux@point.local".
Меню Virtual List -> Add MailBox ->
Username - linux
Password - 123 (sample)
Теперь пришло время тестировать наш почтовый сервер.
Найдите в локальной сети свободный компьютер, настройте сетевые настройки так чтобы он видел почтовый сервер.
Сетевой адрес должен быть в под сети сервера. Не забудьте указать ДНС сервер, у меня он имеет IP адрес почтового сервера.
Откройте почтовый клиент Outlook, укажите адрес вашего сервера и логин/пароль учетной записи linux@point.local
1 2 3 4 5 |
SMTP/POP3 server: point.local Учетная запись (Account name): linux@point.local Пароль (password): 123 |
Отправьте себе тестовое письмо!
13. Установка и настройка RoundCube Web Mail
На данном этапе у нас есть удобный веб интерфейс для администратора почтового сервера, но нет веб интерфейса для пользователей. Этот досадное недоразумение решается установкой RoundCube:
# rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
# yum install php php-xml php-mcrypt php-intl php-sqlite php-pgsql
# cd /var/www/html
# wget http://sourceforge.net/projects/roundcubemail/files/roundcubemail/0.9.5/roundcubemail-0.9.5.tar.gz/download
# tar xvfz roundcubemail-0.9.5.tar.gz
# mv roundcubemail-0.9.5 roundcube
Cоздаем файл roundcube.conf:
# vi /etc/httpd/conf.d/roundcube.conf
Вписываем следующее:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
Alias /webmail /var/www/html/roundcube <Directory /var/www/html/roundcube> AddType application/x-httpd-php .php .php3 .php4 .phtml # forcing open_base dir do not affect anything php_admin_value open_basedir / # AddDefaultCharset UTF-8 AddType text/x-component .htc <IfModule mod_php4.c> php_flag display_errors Off php_flag log_errors On php_value error_log logs/errors php_value upload_max_filesize 5M php_value post_max_size 6M php_value memory_limit 64M </IfModule> <IfModule mod_php5.c> php_flag display_errors Off php_flag log_errors On php_value error_log logs/errors php_value upload_max_filesize 5M php_value post_max_size 6M php_value memory_limit 64M </IfModule> <FilesMatch "(\.inc|\~)$"> Order allow,deny Deny from all </FilesMatch> Order deny,allow Allow from all </Directory> |
1 2 3 |
или |
<VirtualHost *:8080>
DocumentRoot /var/www/user1/site/roundcube.test.t
ServerName roundcube.test.t
ServerAlias www.roundcube.test.t ^webmail.*
CustomLog /var/log/httpd/roundcube.test.t-access.log combined
ErrorLog /var/log/httpd/roundcube.test.t-error.log
<IfModule mod_fcgid.c>
SuexecUserGroup user1 user1
<Directory /var/www/user1/site/roundcube.test.t>
Options +ExecCGI
AllowOverride All
AddHandler fcgid-script .php
FCGIWrapper /var/www/user1/php-cgi/php.cgi .php
Order allow,deny
Allow from all
</Directory>
</IfModule>
</VirtualHost>
server {
listen 80;
server_name roundcube.test.t www.roundcube.test.t;
location ~ /.ht {
deny all;
}
location ~* .(jpg|swf|jpeg|gif|png|css|js|ico)$ {
root /var/www/user1/site/roundcube.test.t;
}
location ~ ^/webmail($|/.*) {
alias /var/www/user1/site/roundcube.test.t$1;
}
location / {
proxy_pass http://127.0.0.1:8080;
}
}
Далее создаем базу данных и пользователя:
# mysqladmin -p create roundcubemail
# mysql -p
1 |
mysql> GRANT ALL ON roundcubemail.* TO roundcube@localhost IDENTIFIED BY 'password'; |
1 |
mysql> quit |
# service httpd restart
# chown apache:apache -R /var/www/html/roundcube/temp
# chown apache:apache -R /var/www/html/roundcube/logs
Ставим свой часовой пояс:
# vi /etc/php.ini
1 |
date.timezone = Asia/Almaty |
или
1 |
date.timezone = Europe/Moscow |
Далее идем по адресу http://127.0.0.1/roundcube/installer/ и устанавливаем по умолчанию, не меняя никаких настроек, кроме двух полей, где нужно указать название базы данных и пароль. В нашем случае название базы будет "roundcubemail", а пароль указанный ранее 'password'. А также следует включить опцию 'htmleditor' в 'always'. В процессе настройки надо обязательно согласится на создание схемы базы Roundcube (Create Database Scheme). В противном случае будет ошибка.
По окончании установки веб интерфейса, Вам будет предложено скачать и сохранить два конфигурационных файла:
1. db.inc.php
2. main.inc.php
Эти два файла требуется переместить в папку:
1 |
/var/www/html/roundcube/config/ |
Далее открываем файл /var/www/html/roundcube/config/main.inc.php и в нем меняем алгоритм по умолчанию на:
1 |
# vi /var/www/html/roundcube/config/main.inc.php |
$rcmail_config['imap_auth_type'] = cram-md5;
А также ставим IP адрес своего почтового хоста здесь:
1 |
$rcmail_config['default_host'] = '192.168.1.2'; |
Если пароль к базе Roundcube был введен с ошибкой, его можно сменить в файле
1 |
# vi /var/www/html/roundcube/config/db.inc.php |
1 |
$rcmail_config['db_dsnw'] = 'mysql://roundcube:password@localhost/roundcubemail'; |
Здесь:
roundcube - имя пользователя базы roundcubemail
password - пароль доступа к базе
roundcubemail - сама база веб Интерфейса RoundCube
Если все прошло успешно, удаляем директорию установщика в целях безопасности.
1 |
# rm -R -f /var/www/html/roundcube/installer |
Пытаемся зайти с Веб интерфейса, в браузере вводим адрес:
1 |
http://point.local/webmail |
или
1 |
http://point.local/roundcube |
Будет выведено окошко, где надо указать:
- логин
- пароль
- сервер
Вводим например:
- логин: user@point.local
- пароль: 123456
- сервер: point.local
14. Настройка фаерволла iptables
Создаем файл с правилами фаерволла:
1 |
# vi /etc/sysconfig/firewall.sh |
#Очистка всех цепочек
iptables -F
iptables -F -t nat
iptables -F -t mangle
iptables -X
iptables -X -t nat
iptables -X -t mangle
#Политика по умолчанию - запретить все, что не разрешено
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
#Разрешаем обращение к lo интерфейсу
iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A OUTPUT -o lo -p all -j ACCEPT
#Пропускать уже инициированные, а также их дочерние пакеты на вход
iptables -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
#Пропускать новые, инициированные, а также их дочерние на выход
iptables -A OUTPUT -p all -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#Разрешаем пинги с внeшнего интерфейса
iptables -A INPUT -i eth0 -p ICMP -j ACCEPT
iptables -A OUTPUT -o eth0 -p ICMP -j ACCEPT
#Разрешаем доступ по SSH на 1234 порт сервера
iptables -A INPUT -p tcp --dport 1234 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1234 -j ACCEPT
#Разрешаем WWW на 80 порт (для Roundcube и Postfixadmin)
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -j ACCEPT
#Разрешаем почтовый доступ по портам 143 (IMAP), 110(POP3) и 25 (SMTP).
iptables -A INPUT -p tcp -m multiport --dports 25,110,143 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --sports 25,110,143 -j ACCEPT
#Разрешаем ходить DNS запросам по UDP протоколу
iptables -A OUTPUT -p udp -m udp --dport 53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p udp -m udp --dport 53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
#Разрешаем ходить DNS запросам по TCP протоколу
iptables -A OUTPUT -p tcp -m tcp --dport 53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 53 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
# Лимитируем запросы по DNS порту
iptables -A INPUT -p udp --dport 53 -m hashlimit --hashlimit-name DNS --hashlimit-above 20/second \
--hashlimit-mode srcip --hashlimit-burst 100 --hashlimit-srcmask 28 -j DROP
Даем права на запуск файла (исполняемый файл):
1 |
# chmod +x /etc/sysconfig/firewall.sh |
Вставляем автозапуск скрипта во время загрузки ОС:
# vi /etc/rc.d/rc.local
1 |
/etc/sysconfig/firewall.sh |
15. Установка Fail2ban
На сервер часто ломятся разные роботы (боты), подбирая пароли и логины. Логи почтовой системы от этих ботов растут, и самое главное в конце концов не исключено что, бот подберет правильную пару логин/пароль. Утилита Fail2Ban помогает утихомирить ботов, блокируя через iptables ip адреса хостов ботов.
# yum install fail2ban -y
Откройте файл - /etc/fail2ban/jail.conf
# vi /etc/fail2ban/jail.conf
И добавьте в конец файла следующий текст:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
[roundcube-banhammer] enabled = true filter = roundcube.banhammer action = iptables-multiport[name=roundcube, port="http,https", protocol=tcp] logpath = /var/log/maillog findtime = 3600 maxretry = 5 bantime = 3600 [dovecot-banhammer] enabled = true filter = dovecot.banhammer action = iptables-multiport[name=dovecot, port="pop3,pop3s,imap,imaps", protocol=tcp] logpath = /var/log/maillog maxretry = 5 findtime = 300 bantime = 3600 ignoreip = 127.0.0.1 192.168.1.2 [exim-banhammer] enabled = true filter = exim.banhammer action = iptables-multiport[name=Exim, port="smtp,smtps", protocol=tcp] #sendmail[name=exim-spam, dest=admin@company.ru, sender=fail2ban@localhost] logpath = /var/log/exim/main.log maxretry = 2 bantime = 18000 ignoreip = 127.0.0.1 192.168.1.2 |
Здесь IP адрес:
192.168.1.2 - за место этого IP адреса указываем Ваш внешний белый адрес который не будет проверятся fail2ban. Если их два, указываем их через пробел.
Создаем файл - /etc/fail2ban/filter.d/roundcube.banhammer.conf:
# vi /etc/fail2ban/filter.d/roundcube.banhammer.conf
1 2 3 |
[Definition] failregex = roundcube: (.*) Error: Login failed for (.*) from <HOST>\. ignoreregex = |
Создаем файл - /etc/fail2ban/filter.d/dovecot.banhammer.conf:
# vi /etc/fail2ban/filter.d/dovecot.banhammer.conf
1 2 3 |
[Definition] failregex = (?: pop3-login|imap-login): .*(?:Authentication failure|Aborted login \(auth failed|Aborted login \(tried to use disabled|Disconnected \(auth failed).*rip=(?P<host>\S*),.* ignoreregex = |
Создаем файл - /etc/fail2ban/filter.d/exim.banhammer.conf
# vi /etc/fail2ban/filter.d/exim.banhammer.conf
1 2 |
[Definition] failregex = [\] .*(?:rejected by local_scan|Unrouteable address|Dnsbl blocked|Sender verify failed|relay not permitted|Unknown user) |
Ставим fail2ban в автозагрузку:
# chkconfig fail2ban on
Стартуем демона fail2ban:
# service fail2ban start
16 Возможные проблемы:
1 2 |
failed to expand "${lookup mysql{SELECT `domain` FROM `domain` WHERE `domain`='${quote_mysql:$domain}' AND `active`='1'}}" while checking a list: lookup of "SELECT `domain` FROM `domain` WHERE `domain`='satti-telecom.net' AND `active`='1'" gave DEFER: MYSQL connection failed: Access denied for user 'vexim'@'localhost' (using password: YES) </code>решение: |
забыл прописать пароль во второй строчки /etc/exim/exim.conf
1 2 3 |
hide mysql_servers = localhost/vexim/vexim/password |
Проблема:
1 2 |
1T4U6H-0008Ga-Q2 malware acl condition: clamd: unable to connect to UNIX socket /var/run/clamav/clamd.socket (No such file or directory) |
1 2 3 4 5 6 |
[root@ns etc]# freshclam -v ERROR: Please edit the example config file /etc/freshclam.conf ERROR: Can't open/parse the config file /etc/freshclam.conf [root@ns etc]# ls -l /etc/freshclam.conf -rw-rw-rw- 1 root root 7768 авг. 22 18:04 /etc/freshclam.conf </code>Решение: |
надо закоментировать в конфигурационном файле /etc/freshclam.conf две строчки:
1 2 |
# Comment or remove the line below. # Example |
или
1 |
# touch /var/lib/clamav/clamd.sock |
1 |
# chown clamav:clamav /var/lib/clamav/clamd.sock |
А потом прописать путь к нему в файле /etc/clamd.d/clamav.conf
1 |
1 |
1 2 3 |
1 |
1. Делаем шифрованный пароль при помощи команды |
1
|
dovecot pw -s MD5-CRYPT -p password | sed 's/{MD5-CRYPT}//' |
1 |
2. Заходи в mysql |
1
|
mysql -u root –p |
1 |
3. Выбираем базу |
1
|
use postfixadmin; |
1 |
4. Смотрим учетку администратора. |
1
|
select * from admin; |
1 |
5. Меняем пароль |
1
|
update admin set password= 'хеш пароль' where username= 'admin@blablabla.ru' ; |
1 |
1 |
1 |
1 |