1. Požadavky
2. Odkazy
3. Instalace Postfixadmin 2.x
Připojte se pomocí SSH k FreeBSD serveru, připojte se k vytvořenému jail, kde je již nainstalován NGINX server (jexec www tcsh) a nainstalujte Postfixadmin 2.x balíček pomocí správce balíčků pkg.
pkg install postfixadmin2
4. Příprava SQL databáze for Postfixadmin
Připojte se k již vytvořenému jail s instalací PostgreSQL serveru (nebo nainstalujte SQL server do aktuálního jail) a vytvořte uživatele a databázi pro Postfixadmin.
createuser --pwprompt --encrypted --no-createrole --no-createdb postfix
psql template1
-- create group
CREATE ROLE mailman WITH USER postfix;
-- create database
CREATE DATABASE mail OWNER mailman;
-- enable crypto module for crypted passwords
\c mail
CREATE EXTENSION pgcrypto;
- Poznámka: Nezapomeňte nastavit autentizační soubor '/mnt/sql/pgsql/data/pg_hba.conf' pro uživatele 'postfix' a znovu načíst konfiguraci PostgreSQL.
5. Nastavení Postfixadmin
Budeme upravovat soubor 'config.inc.php', kde přidáme nastavení spojení k PostgreSQL databázi.
$CONF['database_host'] = 'localhost';
$CONF['database_user'] = 'postfix';
$CONF['database_password'] = 'yourpassword';
$CONF['database_name'] = 'mail';
Nastavíme WWW adresu Postfixadmin instalace a výchozí e-mailové aliasy.
$CONF['admin_email'] = 'postmaster@yourdomain.com';
$CONF['default_aliases'] = array (
'abuse' => 'abuse@yourdomain.com',
'hostmaster' => 'hostmaster@yourdomain.com',
'postmaster' => 'postmaster@yourdomain.com',
'webmaster' => 'webmaster@yourdomain.com'
);
Vybereme typ šifrování uživatelských hesel. V příkladu je použito MD5 šifrování kvůli jednoduššímu ladění v rámci kombinace Postfixadmin, Dovecot a Roundcube. Doporučuji použít lepší typ šifrování např. CRYPT-MD5, který je také podporován všemi zmíněnými aplikacemi. Protože Postfixadmin nepodporuje všechny typy šifrování, budete muset aplikovat připojený patch, který umožní použít typ šifry DES, Blowfish, SHA256 nebo SHA512.
- Poznámka: Stejný typ šifrování musí být použit při konfiguraci postfix nebo dovecot!
A nakonec nastavíme v konfiguračním souboru, že konfigurace je dokončena.
Postfixadmin nevyžaduje zápis do souborů, proto můžete nechat jako vlastníka souborů uživatele root (nebo jiného uživatele) nebo můžete nastavit vlastníka souborů stejného, jaký je použit pro web server (např. www-data nebo apache). Uživatel, nastavený pro web server, musí mít právo pro čtení těchto souborů.
6. Nastavení Postfixadmin v rámci NGINX serveru
Protože využijeme již existující instalaci NGINX serveru, bude postačující vytvořit pouze jeden nový konfigurační soubor pro Postfixadmin např. '/usr/local/etc/nginx/nginx.conf.postfixadmin'. V tomto příkladu je nastavena konfigurace WWW serveru tak, že veškeré příchoyí požadavky jsou přesměrovány na zabezpečené SSL spojení.
server {
listen 80;
listen 443;
server_name postfix.yourdomain.com *.postfix.yourdomain.com;
return 301 https://www.postfix.yourdomain.com$request_uri;
}
server {
listen 443 ssl;
server_name www.postfix.yourdomain.com;
add_header X-Frame-Options DENY;
ssl on;
ssl_certificate /usr/local/etc/nginx/ssl/postfix.crt;
ssl_certificate_key /usr/local/etc/nginx/ssl/postfix.key;
root /usr/local/www/postfixadmin;
index index.php index.html index.htm;
access_log /var/log/postfixadmin_access.log;
error_log /var/log/postfixadmin_error.log;
error_page 404 /404.html;
include /usr/local/etc/nginx/nginx.conf.php;
}
Aktualizujte hlavní konfigurační soubor NGNIX přidáním řádky uvedené níže pře poslední uzavírací závorku '}'.
include /usr/local/etc/nginx/nginx.conf.postfixadmin;
SSL/TLS certifikáty se vytvoří následujícími příkazy (nebo můžete požít své vlastní SSL/TLS certifikáty).
cd /usr/local/etc/nginx/ssl/
openssl req -new -x509 -nodes -out postfix.crt -keyout postfix.key -days 3650
chmod 640 /usr/local/etc/nginx/ssl/*
A nakonec znovu načtěte NGIX konfiguraci.
7. Nastavení MX domén a e-mailů v Postfixadmin
Nyní otevřete WWW prohlížeč, připojte se na adresu 'https://www.postfix.yourdomain.com/setup.php' a vytvořte uživatele administrátor. Podle instrukcí pak aktualizujte soubor 'config.inc.php'. Po aktualizaci konfiguračního souboru se můžete přihlasit jako administrátor na adrese 'https://www.postfix.yourdomain.com/' a vytvořit pomocí webového rozhraní MX domény a e-mailové adresy uživatelů podle potřeby.
8. Postfixadmin patch.
Tento patch řeší problémy s PostgreSQL SQL dotazy a přidává podporu dalších šifrovacích metod DES, Blowfish, SHA256 and SHA512. Je vytořen na základě http://sourceforge.net/p/postfixadmin/patches/121/. Změnou je pouze aktualizace u šifrování Blowfish, kdy je podporován pouze starý algoritmus.
Pro použití nových šifrovacích metod aktulizujte konfigurační soubor 'config.inc.php' nasledujícími řádky.
// CRYPT_STD_DES, CRYPT_MD5, CRYPT_BLOWFISH, CRYPT_SHA256, CRYPT_SHA512
$CONF['encrypt'] = 'php_crypt';
$CONF['encrypt_php_crypt_hash'] = 'CRYPT_SHA512';
Patch nainstalujete následujícím způsobem. Vytvořte nový soubor 'functions.inc.php.patch' v adresáři '/usr/local/www/postfixadmin' s níže uvedeným obsahem a napište následující příkaz 'patch < functions.inc.php.patch' v tomto adresáři.
+++ functions.inc.php 2015-04-22 11:08:00.000000000 +0200
@@ -1134,6 +1134,61 @@
return $password;
}
+function random_string($characters, $length) {
+ $string = '';
+ for ($p = 0; $p < $length; $p++) {
+ // should really use a stronger randomness source
+ $string .= $characters[mt_rand(0, strlen($characters)-1)];
+ }
+ return $string;
+}
+
+function generate_crypt_salt($hash_type='CRYPT_MD5') {
+ // generate a salt (with magic matching chosen hash algorithm) for the PHP crypt() function
+
+ // most commonly used alphabet
+ $alphabet = './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
+
+ switch ($hash_type) {
+ case 'CRYPT_STD_DES':
+ $alphabet = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
+ $length = 2;
+ $salt = random_string($alphabet, $length);
+ return $salt;
+
+ case 'CRYPT_MD5':
+ $length = 12;
+ $algorithm = '1';
+ $salt = random_string($alphabet, $length);
+ return sprintf('$%s$%s', $algorithm, $salt);
+
+ case 'CRYPT_BLOWFISH':
+ $length = 22;
+ $cost = 10;
+// if (version_compare(PHP_VERSION, '5.3.7') >= 0) {
+// $algorithm = '2y'; // bcrypt, with fixed unicode problem
+// } else {
+ $algorithm = '2a'; // bcrypt
+// }
+ $salt = random_string($alphabet, $length);
+ return sprintf('$%s$%02d$%s', $algorithm, $cost, $salt);
+
+ case 'CRYPT_SHA256':
+ $length = 16;
+ $algorithm = '5';
+ $salt = random_string($alphabet, $length);
+ return sprintf('$%s$%s', $algorithm, $salt);
+
+ case 'CRYPT_SHA512':
+ $length = 16;
+ $algorithm = '6';
+ $salt = random_string($alphabet, $length);
+ return sprintf('$%s$%s', $algorithm, $salt);
+
+ default:
+ die("unknown hash type: '$hash_type'");
+ }
+}
/**
@@ -1181,6 +1236,30 @@
$password = crypt ($pw, $salt);
}
+ elseif ($CONF['encrypt'] == 'php_crypt') {
+ // use PHPs crypt(), which uses the system's crypt()
+ // same algorithms as used in /etc/shadow
+ // algorithm is chosen by specifying salt with correct magic
+ // tested on linux
+ if (strlen($pw_db) > 0) {
+ // salt provided. send entire password hash for crypt() to figure out
+ $salt = $pw_db;
+ }
+ else {
+ // no salt; create new password hash
+ if(isset($CONF['encrypt_php_crypt_hash'])) {
+ // user preferred crypt type
+ $salt_type = $CONF['encrypt_php_crypt_hash'];
+ } else {
+ $salt_type = 'CRYPT_MD5';
+ }
+ // get salt for preferred hash type
+ $salt = generate_crypt_salt($salt_type);
+ }
+ // send it to PHPs crypt()
+ $password = crypt($pw, $salt);
+ }
+
elseif ($CONF['encrypt'] == 'cleartext') {
$password = $pw;
}
@@ -1569,9 +1648,9 @@
if($CONF['database_type']=='pgsql') {
// return either true or false (unquoted strings)
if($bool) {
- return 't';
- }
- return 'f';
+ return 'true';
+ }
+ return 'false';
}
elseif($CONF['database_type'] == 'mysql' || $CONF['database_type'] == 'mysqli') {
if($bool) {
Komentáře