Почтовый сервер для бизнеса:
Почтовый сервер на HP ProLiant MicroServer. Apache22, Exim с панелью управления доменом Vexim, PF- фильтр (PFFW).
Операционная система FreeBSD 9.1
Оборудование:
HP RroLiant MicroServer. (конечно можно купить с контролеером RAID, но
у нас бюджетный вариант… RAID1 средствами операционной системы…
HP ProLiant server (HP Micro G7 N54L NHP 250GB EU Svr (704941-421)) ~ цена 8500руб.
HDD
2x2GB объединим средствами FreeBSD в RAID1
1x2GB /backup (По желанию можно добавить после, в любой момент)
Устанавливаем FreeBSD — описаний этому процесу полно, в данной статье не…
После установки FreeBSD:
Подробное описание — https://www.freebsd.org/doc/ru/books/handbook/geom-mirror.html
1. Для создания массива (предполагается, что FreeBSD установлена на первый жесткий диск ad0)
sysctl kern.geom.debugflags=17 — Включаем вывод дополнительной отладочной информации.
gmirror label -vb round-robin gm0 /dev/ad0 — Создаём зеркало.
Фря должна высказаться-
Metadata value stored on /dev/ad0.
Done.
gmirror load — Инициализируем GEOM
Добавляем автоматическую загрузку модуля ядра:
cat >> /boot/loader.conf
geom_mirror_load=«YES»
^D
Редактируем /etc/fstab (vi /etc/fstab — необходимо знание нескольких команд при работе с редактором vi!)
Добавлем /dev/mirror и исправляем ad на gm
Приблизительно должно быть так:
# Device Mountpoint FStype Options Dump Pass#
/dev/mirror/gm0s1b none swap sw 0 0
/dev/mirror/gm0s1a / ufs rw 1 1
/dev/mirror/gm0s1d /usr ufs rw 0 0
/dev/mirror/gm0s1f /home ufs rw 2 2
#/dev/mirror/gm0s2d /store ufs rw 2 2
/dev/mirror/gm0s1e /var ufs rw 2 2
/dev/acd0 /cdrom cd9660 ro,noauto 0 0
shutdown -r now — Перезагрузка
mount — Проверяем разделы
gmirror insert gm0 /dev/ad1 — Добавляем второй диск в зеркало
gmirror status — Проверяем состояние зеркала
***
В случае порчи одного из дисков
gmirror forget gm0
gmirror insert gm0 /dev/ad1
***
Чтобы не пропустить информацию о новых статьях нашего сайта, можно подписаться на новостную e-mail рассылку, если конечно она у нас есть.
Продолжаем настройку FreeBSD:
cp /usr/share/examples/etc/make.conf /etc/make.conf
portsnap fetch extract update
ставим из портов, сначало хотел из pkg_add, но оказалось после проверки portaudit, проги — старые, пришлось делать portupgrade.
поэтому:
cd /usr/port/shell/bash
make install clean
и остальные по аналогии:
mc-light
cvsup-without-gui
lynx
portupgrade
portaudit
sudo
fastest_cvsup
fastest_cvsup -c ru
portaudit -Fda
Если всё нормально — проверим версию Perl
perl-v
Добавим, проверим perl в make.conf
mcedit /etc/make.conf
если с perl не всё ок, то:
portupgrade perl
и снимаем комментарии со строк про CVSUP:
SUP_UPDATE=
SUP= /usr/local/bin/cvsup
SUPFLAGS= -g -L 2
SUPHOST= cvsup5.ru.FreeBSD.org
SUPFILE= /usr/share/examples/cvsup/standard-supfile
PORTSSUPFILE= /usr/share/examples/cvsup/ports-supfile
DOCSUPFILE= /usr/share/examples/cvsup/doc-supfile
пересобираем ядро:
cd /usr/src/sys/i386/conf/
cp GENERIC SERVER
cat >> SERVER
ident SERVER
maxuser 0
nooptions INET6
options SMP
options ACCEPT_FILTER_DATA
options ACCEPT_FILTER_HTTP
options DEVICE_POLLING
options HZ=2000
options SUIDDIR
options PREEMPTION
options IPI_PREEMPTION
device pf
device pflog
device pfsync
device carp
options ALTQ
options ALTQ_CBQ
options ALTQ_RED
options ALTQ_RIO
options ALTQ_HFSC
options ALTQ_CDNR
options ALTQ_PRIQ
options ALTQ_NOPCC
options ALTQ_DEBUG
В ручную подредактируем:
ident SERVER
maxuser 0
Закоментируем не наш процесор.
cat /etc/pf.conf
mcedit pf.conf
ext_if=»re0″
int_if=»rl0″
lan_net=»192.168.10.0/24″
ext_ip=»188.168.7.80″
table <our_server> { 7.0.1.12/29, 188.10.209.2, 89.146.6.153 }
udp_services=»{ domain, ntp }»
icmp_types=»{ echoreq, unreach}»
set skip on lo0
set timeout { interval 10, frag 30 }
set timeout { tcp.first 120, tcp.opening 30, tcp.established 86400 }
set timeout { tcp.closing 900, tcp.finwait 45, tcp.closed 90 }
set timeout { udp.first 60, udp.single 30, udp.multiple 60 }
set timeout { icmp.first 20, icmp.error 10 }
set timeout { other.first 60, other.single 30, other.multiple 60 }
set timeout { adaptive.start 0, adaptive.end 0 }
set limit { states 10000, frags 5000 }
set loginterface $int_if
set optimization normal
set block-policy drop
set require-order yes
set fingerprints «/etc/pf.os»
set state-policy if-bound
scrub in all
block all
antispoof quick for $int_if inet
pass in on $int_if from $lan_net to any
pass out on $int_if from any to $lan_net
# Ping
#pass in on $ext_if proto icmp from any to any
#pass in on $int_if proto icmp from any to any
#Исходящие
pass out on $ext_if proto tcp all modulate state flags S/SA
pass out on $ext_if proto { udp, icmp } all keep state
#
pass in log on $ext_if proto tcp from <our_server> to $ext_ip port ssh keep state
##############
Некоторые добавки для информации ( никуда добавлять не надо):
Пропускаем traceroute
pass out on $ext_if inet proto udp from any to any port 33433 >< 33626 keep state
почтовый и web-сервер:
tcp_services = «{ ssh, smtp, domain, www, pop3, auth, pop3s }»
udp_services = «{ domain }»
block all
pass out proto tcp to any port $tcp_services keep state
pass proto udp to any port $udp_services keep state
Перечитать конфигурационный файл
pfctl -f /etc/pf.conf
Из локальной
ограничение по количеству разрешенных портов:
client_out = «{ ftp-data, ftp, ssh, domain, pop3, auth, nntp, http, https, 446, cvspserver, 2628, 5999, 8000, 8080 }»
Совместно с правилом:
pass inet proto tcp from $localnet to any port $client_out flags S/SA keep state
—
pass in on $ext0_if inet proto tcp from any to (self) port { smtp, ssh, imap, pop3, https }
#############
cat >> /etc/rc.conf
pf_enable=»YES»
pf_program=»/sbin/pfctl»
pf_flags=»»
pf_rules=»/etc/pf.conf»
pflog_enable=»YES»
pflog_logfile=»/var/log/pf.log»
pflog_program=»/sbin/pflogd»
pflog_flags=»»
Логи PF пишет в бинарном формате, поэтому если смотреть его обычным способом, увидем сплошные крякозябры.
Читать его можно с помощью tcpdump:
tcpdump -n -e -ttt -r /var/log/pf.log
В режиме реального времени:
tcpdump -n -e -ttt -i pflog0
cd /usr/src
make buildworld
make buildkernel KERNCONF=SERVER
make installkernel KERNCONF=SERVER
reboot
Далее перезагрузка и проверяем работу PF:
pfctl -sa
NTPd — /etc/ntp.conf
cat >> rc.conf
ntpd_enable=»YES»
ntpd_sync_on_start=»YES»
Лог ntpd /etc/newsyslog.conf строку:
/var/log/ntp.log 644 3 100 * J
добавить в /etc/ntp.conf
server 0.ru.pool.ntp.org iburst maxpoll 9 prefer
server 1.ru.pool.ntp.org iburst maxpoll 9 prefer
logfile /var/log/ntp.log
restrict default ignore
driftfile /etc/ntp.drift
restrict 127.0.0.1
Разрешить синхронизацию машинам из сети:
restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap
touch /etc/ntp.drift
chmod 400 /etc/ntp.drift
Коррекция времени:
data 1307271053.15
2013 07мес 27число 10:53 15сек
service ntpd restart
Редактируем /etc/ssh/sshd_config
Делаем доступ по ключу.
AllowUsers Ivan Egor Max
Protocol 2
Редактируем /etc/ssh/sshd_config
MaxAuthTries 3
MaxSessions 4
RSAAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
PermitEmptyPasswords no
UsePAM no
Banner /etc/ssh/ssh_message
cat > /etc/ssh/ssh_message
**Attention! Authorized only key**
Копируем ключ с другого сервера, если есть:
scp /home/user/location/myfile [email protected]:/home/user/to/new/location/
Можно обратно:
scp [email protected]:/full/from/path/to/file /path/to/put/location
Отслеживаем трафик pftop:
cd /usr/ports/sysutils/pftop
make install clean
Ускорение скорости резолвинга за счет использования PowerDNS
cd /usr/ports/dns/powerdns-recursor
make install clean
cat >> /etc/rc.conf
pdns_recursor_enable=»YES»
Делаем установленный DNS сервер основным:
mcedit /etc/resolv.conf
В самый верх добавляем следующее:
nameserver 127.0.0.1
reboot
—————————
Далее ставим и настраиваем базу данных:
cd /usr/ports/databases/mysql51-server/
make WITH_XCHARSET=all
make install
Редактируем rc.conf:
cat >> /etc/rc.conf
mysql_enable=»YES»
mysql_limit=»YES»
Зоздаем my.cnf для MySQL:
cp /usr/local/share/mysql/my-small.cnf /etc/my.cnf
Запускаем MySQL сервер:
/usr/local/etc/rc.d/mysql-server start
Проверяем:
ps -ax | grep mysql
Задаем пароль MySQL root:
mysqladmin -u root password 8PassRooN2
проверяем заход по паролю:
mysql -uroot -p
Enter password:
P.S
Нужно сразу для Vexim доусановить php5-pdo (иначе разбитый лоб, мрачные мысли — как уйти из жизни, как уйти из жизни без боли, суицид со скандалом, или вот такие надписи MYSQL_ATTR_INIT_COMMAND, PHP Fatal error: Undefined class constant ‘MYSQL_ATTR_INIT_COMMAND’ WordPress › Support » MYSQL_ATTR_INIT_COMMAND, но, о чём это я, да, всё просто:
/usr/ports/databases/php5-pdo_mysql
и когда будем устанавливать Vexim — никаких портов — скачиваем с домашнего сайта:
Вобще, я ставил из портов, но потм? пришлось сделал make deintall, всё из за variables.php — этот грёбаный оборот — мне все нервы истрепал — Strict Standards: Non-static method DB::connect() should not be called statically in variables.php
***
<?php
/* SQL Database login information */
require_once «DB.php»;
include_once dirname(__FILE__) . «/i18n.php»;
$sqlserver = «unix+localhost»;
$sqltype = «mysql»;
$sqldb = «vexim»;
$sqluser = «vexim»;
$sqlpass = «CHANGE»;
$dsn = «$sqltype://$sqluser:$sqlpass@$sqlserver/$sqldb»;
$db = DB::connect($dsn);
if (DB::isError($db)) { die ($db->getMessage()); }
$db->setFetchMode(DB_FETCHMODE_ASSOC);
…
***
$db = DB::connect($dsn);
забросил борьбу и скачал с айта vxim2.
вобщем make deintall
дальше
pw groupadd vexim -g 90
pw useradd vexim -u 90 -g vexim -d /usr/local/mail -m -s /nonexistant
cd ~
fetch https://github.com/avleen/vexim2/archive/master.zip
или
wget https://github.com/avleen/vexim2/archive/master.zip
распаковываем
***
Как распаковать tar.gz в текущую директорию:
tar xvfz filename.tar.gz
Аналогично для tar.bz2.
tar jxvf filename.tar.bz2
Как упаковать файлы в tar.gz:
tar cvfz filename.tar.gz dir
Аналогично для tar.bz2.
tar cvfj filename.tar.bz2 dir
***
unzip master.zip
копируем
cp vexim /usr/local/www/vexim
Дальше нужно будет из папки setup залить в базу mysql — базу vexim
для этого:
предварительно посмотреть id vexim
id vexim
uid=90(vexim) gid=90(vexim) groups=90(vexim)
cd ~
perl /root/vexim2-master/setup/create_db.pl —actype=mysql -uid=90 —gid=90 —mailstore=/usr/local/mail
но это…
cd /usr/ports/devel/libtool/
make install clean
cd /usr/ports/www/apache22
make config
+suExec user
+suExec
make
make install clen
cd /usr/ports/lang/php5
make config
Options for php5 5.2.11_1
[X] CLI Build CLI version
[X] CGI Build CGI version
[X] APACHE Build Apache module
[ ] DEBUG Enable debug
[X] SUHOSIN Enable Suhosin protection system (not for jails)
[X] MULTIBYTE Enable zend multibyte support
[ ] IPV6 Enable ipv6 support
[X] MAILHEAD Enable mail header patch
[X] REDIRECT Enable force-cgi-redirect support (CGI only)
[X] DISCARD Enable discard-path support (CGI only)
[X] FASTCGI Enable fastcgi support (CGI only)
[X] PATHINFO Enable path-info-check support (CGI only)
make install clean
создаем php.ini:
cp /usr/local/etc/php.ini-development /usr/local/etc/php.ini
Именно development!
+ Добавить date.timezone =»Europe/Moscow»
Найти где лежат файлы find / -name ‘php.ini*’
Идем в конфигурационный файл апача:
mcedit /usr/local/etc/apache22/httpd.conf
Ищем строку:<IfModule dir_module> и прописываем index.php,
Должно быть так:
<IfModule dir_module>
DirectoryIndex index.php index.html
Далее ищем строку:<IfModule mime_module> и добавляем:
AddType application/x-httpd-php .php и
AddType application/x-httpd-php-source .phps
Т.е. должно быть так:
<IfModule mime_module>
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
Так же необходимо разрешить работу с виртуальными хостами.
По умолчанию эта возможность закоментирована.
Ищем строку
Virtual hosts
и раскоментируем:
Include etc/apache22/extra/httpd-vhosts.conf
об этом чуть ниже, и более подробно.
Ставим расширения PHP:
cd /usr/ports/lang/php5-extensions/
make
Options for php5-extensions 1.3
[X] BCMATH bc style precision math functions
[X] BZ2 bzip2 library support
[X] CALENDAR calendar conversion support
[X] CTYPE ctype functions
[X] CURL CURL support
[X] DBA dba support
[ ] DBASE dBase library support
[X] DOM DOM support
[X] EXIF EXIF support
[X] FILEINFO fileinfo support
[X] FILTER input filter support
[ ] FRIBIDI FriBidi support
[X] FTP FTP support
[X] GD GD library support
[X] GETTEXT gettext library support
[X] GMP GNU MP support
[X] HASH HASH Message Digest Framework
[X] ICONV iconv support
[X] IMAP IMAP support
[ ] INTERBASE Interbase 6 database support (Firebird)
[X] JSON JavaScript Object Serialization support
[ ] LDAP OpenLDAP support
[X] MBSTRING multibyte string support
[ ] MCRYPT Encryption support
[ ] MHASH Crypto-hashing support
[X] MING ming shockwave flash support
[ ] MSSQL MS-SQL database support
[X] MYSQL MySQL database support
[ ] MYSQLI MySQLi database support
[X] NCURSES ncurses support (CLI only)
[ ] ODBC unixODBC support
[X] OPENSSL OpenSSL support
[X] PCNTL pcntl support (CLI only)
[X] PCRE Perl Compatible Regular Expression support
[X] PDF PDFlib support (implies GD)
[X] PDO PHP Data Objects Interface (PDO)
[X] PDO_SQLITE PDO sqlite driver
[ ] PGSQL PostgreSQL database support
[X] POSIX POSIX-like functions
[X] PSPELL pspell support
[ ] READLINE readline support (CLI only)
[ ] RECODE recode support
[X] SESSION session support
[ ] SHMOP shmop support
[X] SIMPLEXML simplexml support
[X] SOAP SOAP support
[X] SOCKETS sockets support
[X] SPL Standard PHP Library
[ ] SQLITE sqlite support
[ ] SYBASE_CT Sybase database support
[ ] SYSVMSG System V message support
[ ] SYSVSEM System V semaphore support
[ ] SYSVSHM System V shared memory support
[X] TIDY TIDY support
[X] TOKENIZER tokenizer support
[ ] WDDX WDDX support (implies XML)
[X] XML XML support
[X] XMLREADER XMLReader support
[ ] XMLRPC XMLRPC-EPI support
[X] XMLREADER XMLReader support
[X] XMLRPC XMLRPC-EPI support
[X] XMLWRITER XMLWriter support
[X] XSL XSL support (Implies DOM)
[X] YAZ YAZ support (ANSI/NISO Z39.50)
[X] ZIP ZIP support
[X] ZLIB ZLIB support
make install
cd /usr/local/www/apache22/data
Создаем файл index.php для проверки:
cat > index.php
<?php
phpinfo();
?>
Редактируем rc.conf:
mcedit /etc/rc.conf
Добавляем:
apache22_enable=»YES»
Запускаем apache
apachectl start
Заходим https://IP_adress видим информацию о сервере.
=================================
ip local — 192.168.10.240
Идем в конфигурационный файл апача:
mcedit /usr/local/etc/apache22/httpd.conf
Добавляем: слушать порт 80, 8010, 8025 по локальному адресу, ибо управлять почтовыми
доменами и создавать пользователей из Интернета мы пока не будем, в целях безопасности.
Listen 192.168.10.240:80
Listen 192.168.10.240:8025
Listen 192.168.10.240:8010
Ищем строку:<IfModule dir_module> и прописываем index.php,
Должно быть так:
<IfModule dir_module>
DirectoryIndex index.php index.html
Далее ищем строку:<IfModule mime_module> и добавляем:
AddType application/x-httpd-php .php и
AddType application/x-httpd-php-source .phps
Т.е. должно быть так:
<IfModule mime_module>
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
Так же необходимо разрешить работу с виртуальными хостами.
По умолчанию эта возможность закоментирована.
Ищем строку
#Virtual hosts
и раскоментируем:
Include etc/apache22/extra/httpd-vhosts.conf
Конфигурим виртуальный хост на apache:
mcedit /usr/local/etc/apache22/extra/httpd-vhosts.conf
Должно быть так:
…
NameVirtualHost 192.168.10.240:80
NameVirtualHost 192.168.10.240:8025
NameVirtualHost 192.168.10.240:8010
#
# VirtualHost example:
# Almost any Apache directive may go into a VirtualHost container.
# The first VirtualHost section is used for all requests that do not
# match a ServerName or ServerAlias in any <VirtualHost> block.
#
<VirtualHost 192.168.10.240:80>
ServerAdmin [email protected]
DocumentRoot «/usr/local/www/apache22/data»
ServerName mail.maildomen.ru
ErrorLog «/var/log/mail.maildomen.ru-error_log»
CustomLog «/var/log/mail.maildomen.ru-access_log» common
</VirtualHost>
<VirtualHost 192.168.10.240:8025>
ServerAdmin [email protected]
DocumentRoot «/usr/local/www/vexim»
ServerName localhost
ErrorLog «/var/log/192.168.10.240-error_log»
CustomLog «/var/log/192.168.10.240-access_log» common
#ServerAlias www.mail.maildomen.ru
<Directory «/usr/local/www/vexim»>
# Options -Indexes FollowSymLinks
AllowOverride None
Options None
Order Allow,deny
Allow from all
</Directory>
</VirtualHost>
<VirtualHost 192.168.10.240:8010>
ServerAdmin [email protected]
DocumentRoot «/usr/local/www/phpMyAdmin»
ServerName localhost
ErrorLog «/var/log/phpmyadmin-error_log»
CustomLog «/var/log/phpmyadmin-access_log» common
#ServerAlias mytest.com
Alias /pma/ «/usr/local/www/phpMyAdmin/»
<Directory «/usr/local/www/phpMyAdmin/»>
Options none
AllowOverride Limit
Order Deny,Allow
Deny from all
Allow from 192.168.10.0/24
</Directory>
</VirtualHost>
Проверяем синтаксис конфигурационного файла apache:
apachectl -t
Syntax OK
mkdir -p /etc/ssl/certs
cd /etc/ssl/certs
openssl req -x509 -newkey rsa:1024 -keyout mail.pem -out mail.pem -days 3650 -nodes
Country Name (2 letter code) [CA]: RU
State or Province Name (full name) [Quebec]: Moscow
Locality Name (eg, city) [Montreal]: Moscow
Organization Name (eg, company) [Open Network Architecture]: Maildome Co.
Organizational Unit Name (eg, section) [Internet Department]: IT
Common Name (eg, YOUR name) []: mail.maildome.ru
Email Address []: [email protected]
chmod 440 /etc/ssl/certs/mail.pem
chgrp mail /etc/ssl/certs/mail.pem
cd /usr/ports/mail/exim
make
Выбираем интересующие опции и убираем ненужные,
make install clean
mcedit /etc/rc.conf
Добавляем:
exim_enable=»YES»
sendmail_enable=»NONE»
Выключаем sendmail
/etc/rc.d/sendmail stop
правим /etc/mail/mailer.conf
cat /etc/mail/mailer.conf
# $FreeBSD: release/9.1/etc/mail/mailer.conf…
# Execute the «real» sendmail program, named /usr/libexec/sendmail/sendmail
#
sendmail /usr/local/sbin/exim
send-mail /usr/local/sbin/exim
mailq /usr/local/sbin/exim -bp
newaliases /usr/local/sbin/exim -bi
hoststat /usr/local/sbin/exim
purgestat /usr/local/sbin/exim
Ну и правим конфиг под свои нужды…
***
cat /usr/local/etc/exim/configure
primary_hostname = mail.maildomen.ru
hide mysql_servers = localhost/exim_db/exim/exim_password
domainlist local_domains = ${lookup mysql{select domain from domains where domain=’${domain}’}}
domainlist relay_to_domains = ${lookup mysql{select domain from domains where domain=’${domain}’}}
hostlist relay_from_hosts = localhost : 127.0.0.1
acl_smtp_rcpt = acl_check_rcpt
acl_smtp_data = acl_check_data
tls_certificate = /etc/ssl/certs/mail.pem
tls_privatekey = /etc/ssl/certs/mail.pem
daemon_smtp_ports = 25 : 465
tls_on_connect_ports = 465
qualify_domain = maildomain.ru
allow_domain_literals = false
exim_user = exim
exim_group = mail
never_users = root
host_lookup = *
rfc1413_hosts = *
rfc1413_query_timeout = 5s
ignore_bounce_errors_after = 2h
timeout_frozen_after = 7d
return_size_limit = 10K
split_spool_directory = true
syslog_timestamp = no
begin acl
acl_check_rcpt:
acl_check_rcpt:
accept hosts = :
deny domains = +local_domains
local_parts = ^[.] : ^.*[@%!/|]
deny domains = !+local_domains
local_parts = ^[./|] : ^.*[@%!] : ^.*/\\.\\./
accept senders=${lookup mysql{SELECT senders FROM whitelist \
WHERE senders=’${quote_mysql:$sender_address}’}}
deny message = HELO/EHLO required by SMTP RFC
condition = ${if eq{$sender_helo_name}{}{yes}{no}}
deny message = Go Away! You are spammer.
condition = ${if match{$sender_host_name} \
{bezeqint\\.net|net\\.il|dialup|dsl|pool|peer|dhcp} \
{yes}{no}}
deny message = rejected because $sender_host_address \
is in a black list at $dnslist_domain\n$dnslist_text
hosts = !+relay_from_hosts
!authenticated = *
log_message = found in $dnslist_domain
dnslists = bl.spamcop.net : \
cbl.abuseat.org : \
dnsbl.njabl.org : \
pbl.spamhaus.org
warn
set acl_m0 = 25s
warn
hosts = +relay_from_hosts
set acl_m0 = 0s
warn
authenticated = *
set acl_m0 = 0s
warn
logwrite = Delay $acl_m0 for $sender_host_name \
[
***
Далее необходимо скопировать конфигурационные файлы из проекта Vexim:
cd /usr/local/etc/exim/
cp /usr/local/share/doc/vexim/docs/*.conf ./
cp /usr/local/share/doc/vexim/docs/configure ./
Создание ключа и ssl-сертификата для Apache2
openssl req -new -x509 -days 3650 -keyout server.key -out server.pem (server.crt)
На вопрос «Enter PEM pass phrase:» отвечаем паролем, подтверждаем и запоминаем
Apache будет спрашивать пароль у при загрузке, можно избежать млишние вопросы:) Поэтому снимаем пароль с ключа:
cp server.key{,.orig}
openssl rsa -in server.key.orig -out server.key
rm server.key.orig
=================================================
Полезные команды при работе с SSL-сертификатами
Создание ключа для SSL-сертификата.
openssl req -batch -noout -new -newkey rsa:2048 -nodes -keyout cert.key
Генерация CSR-запроса:
openssl req -new -key cert.key -out cert.csr
Имя домена на который создается запрос прописывается в Common Name! Это важно, A challenge password и An optional company name вводить не нужно (просто нажимаем enter).
Создание ключа и запроса с данными одной командой:
openssl req -batch -new -newkey rsa:2048 -nodes -keyout cert.key -subj ‘/C=RU/ST=Moscow/L=Moscow/O=Jingel Inc/OU=Research team/e[email protected]/CN=example.com’ -out cert.csr
Создание ключа и самоподписанного сертификата одной командой:
openssl req -newkey rsa:1024 -nodes -keyout server.key -out server.crt -x509 -days 3650 -subj \
«/C=XX/ST=XX/L=XX/O=XX/OU=XX/CN=example.com/emailAddress=»[email protected]
Убрать пароль с ключа (необходимо когда сертификат ставится руками в конфигурацию Apache иначе он при запуске будет просить пароль):
openssl rsa -in cert.key -out cert.key
вводим пароль с консоли (либо -passin pass:supersecretpassw0rd что менее секурно так как пароль сохраняется в .history)
Посмотреть данные CSR:
openssl req -noout -text -in cert.csr
Данные сертификата (проверить кем выдан например):
openssl x509 -noout -text -in cert.crt
Проверить, что ключ соответствует сертификату:
openssl x509 -noout -modulus -in cert.crt | openssl md5
openssl rsa -noout -modulus -in cert.key | openssl md5
Проверить выдачу HTTPS:
openssl s_client -connect localhost:443 -state -debug
GET / HTTP/1.0
Для почты:
openssl s_client -connect localhost:993 -showcerts
На операционной системе Windows (в IIS в частности) используется PFX-контейнер, его можно создать из файлов ключа и сертификата командой:
openssl pkcs12 -export -in certificate.crt -inkey certificate.key -out certificate.pfx
Как изменить ssl-сертификат, выданный при регистрации сервера?
cd /usr/local/etc/apache22/
openssl req -new -newkey rsa:1024 -nodes -keyout server.key -x509 -days 5000 -out server.crt
==========================================
Настройка HTTPS. Создание саподписанного SSL сертификата
Делаем следующее:
cd /usr/local/etc/apache22/
openssl req -new -newkey rsa:1024 -nodes -keyout server.key -x509 -days 3650 -out server.crt
смотрим в /usr/local/etc/apach22/httpd.conf, должно быть раскоментированно:
Include etc/apache22/extra/httpd-ssl.conf
mcedit etc/apache22/extra/httpd-ssl.conf
Listen 443
<VirualHost_default_:443>
DocumentRoot «/usr/local/www/data»
ServerName mail.maildomen.ru
ServerAdmin [email protected]
ErrorLog «/var/log/httpds-error.log»
TransferLog «/var/log/httpds-access.log»
….
SSLCertificateFile «/usr/local/etc/apace22/server.crt»
SSLCertificateKeyFile «/usr/local/etc/apace22/server,key»
…
<VirtualHost>
Если нужно правим /etc/pfconf
нужно открыть порты наружу…
Пока всё. Статья, больше написанна в рекламных целях, т.е., могут быть не точности, но ход и конфиги родные.
PS. Можем оказать посильную помошь в настройке вашего сервера
Apache, Exim, Postfix, FreeBSD, Dovecot и пр.
Оказываем услуги по поддержке и раскрутке вашего домена, а также по настройке сайта.
Принимаются поправеи и коментарии.
Респект. Толково. Жаль, что наткнулся только тогда когда поимел проблемы с MYSQL_ATTR_INIT_COMMAND, следуя другим примерам.