GJ homepage




GJ homepage






hip@avatar:~$ man --help


HOME
LINUX
ARCHIWUM

Postfix + postgresql + SMTP auth + postfix.admin + reszta ...

o czym jest ten dokument.
Niniejszy dokument opisuje instalację MTA Postfix (zamiast sendmaila) z
takimi dodatkami jak:- dane userów w bazie danych (postgresql, ale są też
opisy pod mysqla)- SMTP AUTH (poprzez cyrus-sasl)- zarządzanie postfixem
poprzez www (Postfix.Admin)- odbiór poczty przez POP3 (courier-imap)-
ochrona antywirusowa (clamav) i antyspamowa (spamassasin)
Wszystko to było testowane na Slackware 10.1, postfix-2.2.5,
cyrus-sasl-2.1.21, postfixadmin-2.1.0 . Sądzę jednak że może artykuł może być
pomocny również przy innych dystrybucjach i wersjach oprogramowania.


po co?
Podstawowe pytanie: w czym postfix jest lepszy od innych MTA ? Wg. mnie
sendmail odpada z powodu braku obsługi wirtualnych userów w SQL (userzy w bazie
to porządek na serwerze + łatwa obsługa poprzez www). Qmail jest świetny ale
chora licencja powoduje że zmuszeni jesteśmy do instalowania mnóstwa pathy i
dodatków. Co do Exima się nie wypowiadam bo nie znam.
Podsumowując: na bazie postfixa można stworzyć wydajny i łatwo zarządzalny
system pocztowy. I o tym właśnie poniżej.

spis treści
- postgresql-
cyrus-sasl-
postfix-
postfix -
konfiguracja- postfix.admin-
courier-authlib-
courier-imap-
clamav-
amavis-new-
postfix -
zarządzanie

postgresql
Postgres musi być zainstalowany a ścieżka /usr/local/pgsql/lib dodana do
pliku /etc/ld.so.conf. Jeśli nie ma to:
echo "/usr/local/pgsql/lib" >>
/etc/ld.so.confldconfig
następnie tworzymy użytkownika bazy i tabele:

su postgres/usr/local/pgsql/bin/createuser -ADP
postfix/usr/local/pgsql/bin/createdb -O postfix -E LATIN2
postfix/usr/local/pgsql/bin/psql -U postfix -d postfix -f
postfix_pgsql.sql
zawartość pliku postfix_pgsql.sql: -- tworzy bazy dla postfixa i Postfix.Admina
-- sam postfix potrzebuje jedynie tabel alias, domain i mailbox
--
--
-- Table structure for table admin
--
CREATE TABLE "admin" (
"username" character varying(255) NOT NULL default '',
"password" character varying(255) NOT NULL default '',
"created" timestamp with time zone default now(),
"modified" timestamp with time zone default now(),
"active" boolean NOT NULL default true,
Constraint "admin_key" Primary Key ("username")
);
COMMENT ON TABLE admin IS 'Postfix.Admin';
--
-- Table structure for table alias
--
CREATE TABLE alias (
address character varying(255) NOT NULL default '',
goto text NOT NULL,
domain character varying(255) NOT NULL default '',
created timestamp with time zone default now(),
modified timestamp with time zone default now(),
active boolean NOT NULL default true,
-- PRIMARY KEY ("address"),
-- KEY address ("address"),
Constraint "alias_key" Primary Key ("address")
);
COMMENT ON TABLE alias IS 'Postfix.Admin';
--
-- Table structure for table domain
--
CREATE TABLE domain (
domain character varying(255) NOT NULL default '',
description character varying(255) NOT NULL default '',
aliases integer NOT NULL default 0,
mailboxes integer NOT NULL default 0,
maxquota integer NOT NULL default 0,
transport character varying(255) default NULL,
backupmx smallint NOT NULL default 0,
created timestamp with time zone default now(),
modified timestamp with time zone default now(),
active boolean NOT NULL default true,
-- PRIMARY KEY ("domain"),
-- KEY domain ("domain"),
Constraint "domain_key" Primary Key ("domain")
);
COMMENT ON TABLE domain IS 'Postfix.Admin';
--
-- Table structure for table domain_admins
--
CREATE TABLE domain_admins (
username character varying(255) NOT NULL default '',
domain character varying(255) NOT NULL default '',
created timestamp with time zone default now(),
active smallint NOT NULL default 1
-- KEY username ("username")
);
COMMENT ON TABLE domain_admins IS 'Postfix.Admin';
--
-- Table structure for table log
--
CREATE TABLE log (
timestamp timestamp with time zone default now(),
username character varying(255) NOT NULL default '',
domain character varying(255) NOT NULL default '',
action character varying(255) NOT NULL default '',
data character varying(255) NOT NULL default ''
-- KEY timestamp ("timestamp")
);
COMMENT ON TABLE log IS 'Postfix.Admin';
--
-- Table structure for table mailbox
--
CREATE TABLE mailbox (
username character varying(255) NOT NULL default '',
password character varying(255) NOT NULL default '',
name character varying(255) NOT NULL default '',
maildir character varying(255) NOT NULL default '',
quota integer NOT NULL default 0,
domain character varying(255) NOT NULL default '',
created timestamp with time zone default now(),
modified timestamp with time zone default now(),
active smallint NOT NULL default 1,
transport character varying(9) NOT NULL DEFAULT 'virtual' ,
-- PRIMARY KEY ("username"),
-- KEY username ("username"),
Constraint "mailbox_key" Primary Key ("username")
);
COMMENT ON TABLE mailbox IS 'Postfix.Admin + pole transport';
--
-- Table structure for table vacation
--
CREATE TABLE vacation (
email character varying(255) NOT NULL default '',
subject character varying(255) NOT NULL default '',
body text NOT NULL,
cache text NOT NULL,
domain character varying(255) NOT NULL default '',
created timestamp with time zone default now(),
active smallint NOT NULL default 1,
-- PRIMARY KEY ("email"),
-- KEY email ("email")
Constraint "vacation_key" Primary Key ("email")
);
COMMENT ON TABLE vacation IS 'Postfix.Admin';


cyrus-sasl
Cyrus-sasl odpowiada za sprawdzanie hasła przy wysyłaniu poczty - chyba
najskuteczniejsza metoda by nie stać się open relayem. Hasła przechowywane są
jawnie w bazie. Mi to zdecydowanie nie odpowiada, więc oprócz źródeł ściągam
patcha szyfrującego hasła w md5 (wtedy pasują te z /etc/shadow - wystarczy je
tylko przekopiować).
wget
ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-sasl-2.1.21.tar.gzwget
http://frost.ath.cx/software/cyrus-sasl-patches/dist/2.1.19/cyrus-sasl-2.1.19-checkpw.c.patch
następnie rozpakowujemy źródła, kopiujemy do nich patcha i aplikujemy go
komendą
patch -p0 < cyrus-sasl-2.1.19-checkpw.c.patch
kompilujemy i instalujemy:
./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
--enable-login --enable-plain --enable-sql --with-gnu-ld --with-saslauthd
--with-pgsql=/usr/local/pgsql --with-openssl=/usrmakemake install
tworzymy plik /usr/lib/sasl2/smtpd.conf, wpisujemy tam: pwcheck_method: auxprop
auxprop_plugin: sql
allowanonymouslogin: no
allowplaintext: yes
mech_list: PLAIN LOGIN
srp_mda: md5

srvtab: /dev/null
opiekeys: /dev/null

password_format: crypt

sql_user: postfix
sql_passwd: haslodobazy
sql_hostnames: 127.0.0.1
sql_database: postfix
sql_statement:select password from mailbox where username='%u@%r'

ustawiamy odpowiednie prawa dost. do pliku i tworzymy katalog tymczasowy:
chown root.root /usr/lib/sasl2/smtpd.confchmod 640
/usr/lib/sasl2/smtpd.confmkdir -p /var/state/saslauthd
uruchamiać demona poniższą komendą. Nie zapomnij dodać tego do skryptów
startowych systemu.
/usr/sbin/saslauthd -a shadow

postfix
tworzenie usera - zapamiętaj UID i GID
groupadd -g 800 postfixuseradd -g 800 -u 800
postfixgroupadd postdrop
ściągamy żródła postfixa - linki są na http://postfix.org/
wget ftp://ftp.cvut.cz/postfix/official/postfix-2.2.5.tar.gz
ściągamy z http://web.onda.com.br/nadal patcha do
quoty, potem kopiujemy go do katalogu ze źródłami postfixa, rozgzipowujemy i
aplikujemy
patch -p1 < postfix-2.2.5-vda.patch
kompilujemy i instalujemy postfixa
make makefiles AUXLIBS="-lssl -lcrypto -L/usr/lib -lsasl2
-L/usr/local/pgsql/lib -lpq" \CCARGS="-DUSE_TLS -DUSE_SASL_AUTH
-I/usr/include/sasl -DHAS_PGSQL -I/usr/local/pgsql/include" \OPT="-O2"
DEBUG=""makemake install

postfix konfiguracja
w pliku /etc/postfix/main.cf ustawiam myhostname = host.mojadomena.pl
mydomain = mojadomena.pl

home_mailbox = Maildir/

virtual_uid_maps = static:800
virtual_gid_maps = static:800
virtual_minimum_uid = 800
virtual_mailbox_base = /var/spool/mail/virtual
virtual_alias_maps = pgsql:/etc/postfix/pgsql_virtual_alias_maps.cf
virtual_alias_domains = $virtual_alias_maps
virtual_mailbox_domains = pgsql:/etc/postfix/pgsql_virtual_domains_maps.cf
virtual_mailbox_maps = pgsql:/etc/postfix/pgsql_virtual_mailbox_maps.cf
virtual_mailbox_limit = 512000000
virtual_mailbox_limit_maps = pgsql:/etc/postfix/pgsql_virtual_limit_maps.cf
virtual_mailbox_limit_inbox = yes
virtual_mailbox_limit_override = yes
#opcja odpowiadająca za zwroty przy pełnej skrzynce:
virtual_overquota_bounce = yes
virtual_create_maildirsize = yes
transport_maps = pgsql:/etc/postfix/pgsql_transport.cf

tworzę następujące pliki: #/etc/postfix/pgsql_virtual_alias_maps.cf
user = postfix
password = haslodobazy
hosts = localhost
dbname = postfix
table = alias
select_field = goto
where_field = address
# /etc/postfix/pgsql_virtual_domains_maps.cf
user = postfix
password = haslodobazy
hosts = localhost
dbname = postfix
table = domain
select_field = description
where_field = domain
# /etc/postfix/pgsql_virtual_mailbox_maps.cf
user = postfix
password = haslodobazy
hosts = localhost
dbname = postfix
table = mailbox
select_field = maildir
where_field = username
# /etc/postfix/pgsql_virtual_limit_maps.cf
user = postfix
password = haslodobazy
hosts = localhost
dbname = postfix
table = mailbox
select_field = quota
where_field = username
# /etc/postfix/pgsql_transport.cf
user = postfix
password = haslodobazy
hosts = localhost
dbname = postfix
table = mailbox
select_field = transport
where_field = username

ustawiamy odpowiednie uprawnienia
chmod 640 /etc/postfix/*.cfchown root
/etc/postfix/*.cfchgrp postfix /etc/postfix/*.cf
i uruchamiamy postfixa
postfix start
trzeba oczywiście dodać skrypt startowy, choćby taki: #!/bin/sh
#
# Start the Postfix server
#
case "$1" in
'start')
/usr/sbin/postfix start ;;
'stop')
/usr/sbin/postfix stop ;;
'restart')
/usr/sbin/postfix reload ;;
*)
echo "usage $0 start|stop|restart" ;;
esac


postfix.admin
Postfix.Admin to zestaw skryptów oferujący pracę na trzech poziomach:-
dla admina: dodawanie domen, kont, wyznaczanie adminów domen itp.- dla
adminów domen zarządzanie: kontami w domenie (dodawanie, kasowanie, itp.)-
dla userów: zmiana hasła, ustawianie przekierowań
pobieramy postfix.admina ze strony http://high5.net/postfixadminrozpakowujemy,
udostępniamy poprzez apacza i edytujemy plik config.ini.php.ja ustawiam w
nim opcje: $CONF['domain_path'] = 'YES';
$CONF['domain_in_mailbox'] = 'NO';
$CONF['quota'] = 'YES';

następnie uruchamiamy go poprzez www i jeśli setup pokazał OK to usuwamy
pliczek setup.phpteraz pod
adresami:http://mojadomenka.pl/katalog-postfixadmina/admin - jest panel
adminahttp://mojadomenka.pl/katalog-postfixadmina/ - jest panel adminów
domenhttp://mojadomenka.pl/katalog-postfixadmina/users - jest panel
userów

courier-authlib
Courier-authlib to biblioteki odpowiadające za autoryzację pop3.Ściągamy
źródłą ze strony http://www.courier-mta.org/authlib,
rozpakowujemy i NIE JAKO ROOT wykonujemy:
./configure --with-authpgsql
--with-pgsql-libs=/usr/local/pgsql/lib
--with-pgsql-includes=/usr/local/pgsql/include/make

i już jako root:
make install
teraz czas na konfigurację
cd /usr/local/etc/authlibmv authdemonrc.dist
authdemonrcmv authpgsqlrc.dist authpgsqlrc
authdemonrc jest w porządku, natomiast w authpgsqlrc ustawiamy: PGSQL_HOST localhost
PGSQL_PORT 5432
PGSQL_USERNAME postfix
PGSQL_PASSWORD haslodobazy

PGSQL_DATABASE postfix
PGSQL_USER_TABLE mailbox
PGSQL_CRYPT_PWFIELD password
# PGSQL_CLEAR_PWFIELD password
# DEFAULT_DOMAIN example.com

PGSQL_UID_FIELD 800
PGSQL_GID_FIELD 800
PGSQL_LOGIN_FIELD username
PGSQL_HOME_FIELD '/var/spool/mail/virtual/'
PGSQL_NAME_FIELD name
PGSQL_MAILDIR_FIELD maildir


courier-imap
Curier-imapa ściągamy z http://www.courier-mta.org/imap.
Rozpakowujemy i też NIE JAKO ROOT kompilujemy:
./configure --without-ipv6
--enable-unicode=iso-8859-1,utf-8,iso-8859-2 --disable-sievemake

i już jako root:
make installcd /usr/lib/courier-imap/etcmv pop3d.dist
pop3d
tworzymy jeszcze skrypt startowy, np. taki jak poniżej: #!/bin/sh
#
# Start the courier-imap
#

case "$1" in
'start')
/usr/local/libexec/courier-authlib/authdaemond &
/usr/lib/courier-imap/libexec/pop3d.rc start
;;
'stop')
killall authdaemond
/usr/lib/courier-imap/libexec/pop3d.rc stop
;;
*)
echo "usage $0 start|stop|restart" ;;
esac


clamav
Skaner antywirusowy ClamAV pobieramy z http://download.sourceforge.net/clamav.
Dodajemy użytkownika i grupę, następnie kompilujemy i instalujemy:
groupadd clamavuseradd -g clamav -s /bin/false -c "clamav
user" clamav./configuremakemake install
edytujemy plik konfiguracyjny /usr/local/etc/clamav.conf ustawiając takie
opcje jak poniżej (reszta bez zmian)#Example
LogFile /var/log/clamd.log
LogVerbose
PidFile /var/amavis/clamd.pid
LocalSocket /var/amavis/clamd.sock
User amavis #(User amavis a nie clamav żeby uniknąć problemów na styku amavis-clamd.)

można już uruchomić demona i ustawić prawa do pliku z logami
/usr/local/sbin/clamdchown amavis /var/log/clamd.log
Jeszcze skrypt startowy:#!/bin/sh
# Start/stop/restart clamd.

clamd_start() {
if [ -x /usr/local/sbin/clamd ]; then
echo "Starting clamav Daemon"
/usr/local/sbin/clamd
fi
}

clamd_stop() {
killall clamd
}

clamd_restart() {
clamd_stop
sleep 1
clamd_start
}

case "$1" in
'start')
clamd_start
;;
'stop')
clamd_stop
;;
'restart')
clamd_restart
;;
*)
echo "usage $0 start|stop|restart"
esac


amavis-new
Amavis-new jest interfejsem pośredniczącym pomiędzy MTA (u nas postfixem) a
programami do filtrowania treści (skanery antywirusowe i antyspamowe). Pobrać go
można z http://www.ijs.si/software/amavisd/#download.
Następnie rozpakowujemy go, wchodzimy do środka i instalujemy w nasp.
sposób:
groupadd amavisuseradd -g amavis -s /bin/bash -c "amavis
user" amavismkdir -p /var/amavis/tmpmkdir -p /var/amavis/dbchown -R
amavis.amavis /var/amavischmod 750 /var/amaviscp amavisd
/usr/local/sbin/chown root /usr/local/sbin/amavisdchmod 755
/usr/local/sbin/amavisdcp amavisd.conf /etc/chown root
/etc/amavisd.confchmod 644 /etc/amavisd.confmkdir
/var/virusmailschown amavis.amavis /var/virusmailschmod 750
/var/virusmail
Amavis jest programem perlowym, który do poprawnego działania potrzebuje
szeregu modułów (szczegóły w INSTALL). Najprostszym sposobem ich instalacji jest
skorzystanei z modułu CPAN, który pobierze i zainstaluje moduły bezpośrednio z
archiwum CPAN. Spokojnie - mimo pokaźnej listy nie zaśmieci to nam systemu,
wszystko instaluje się w drzewku perla. Wystarczy wykonać poniższe komendy i
potem klikać na domyślne odpowiedzi.
perl -MCPAN -e shell
wszystkie opcje domyślnie (enter) dopóki ne spyta o kraj z mirrorem.
Wybieramy Europę i Polskę a potem wg. uznania (ja wybieram sunsite.icm.edu.pl)
potem znowu entery dopóki nie dostaniemy linni poleceń cpan (cpan> ), wtedy
dajemy komendy:
install Archive::Tarinstall Archive::Zipinstall
Compress::Zlibinstall Convert::TNEFinstall install
Convert::UUlibinstall MIME::Base64install MIME::Decoderinstall
Net::Serverinstall Unix::Sysloginstall BerkeleyDBinstall
Digest::MD5install Time::HiResinstall Mail::SpamAssassinquit
kolejny krok to edycja /etc/amavisd.conf . Ja ustawnaim w nim: $mydomain = 'moja.domena.pl';
$daemon_user = 'amavis';
$daemon_group = 'amavis';
#$DO_SYSLOG = 1;
$LOGFILE = "/var/log/amavis.log";
$virus_admin = undef;
$virus_quarantine_to = undef;
$spam_quarantine_to = '/var/virusmails';

oraz odhashowuję opcje dla "Clam Antivirus-clamd" i "Clam Antivirus -
clamscan" (w pliku jest to jasno zaznaczone), a dla clamd poprawiam#\&ask_daemon, ["CONTSCAN {}\n", '/var/amavis/clamd'],
\&ask_daemon, ["CONTSCAN {}\n", '/var/amavis/clamd.sock'],

teraz można uruchomić amavisa (/usr/local/sbin/amavisd), sprawdzić co mamy w
logach i utworzyć skrypty startowe #!/bin/sh
# Start the Amavis
#

amavis_start() {
# Start daemons.
rm -fr /var/amavis/amavis*.sock
echo "Starting amavis daemon "
/usr/local/sbin/amavisd
}

amavis_stop() {
# Stop daemons.
echo "Shutting down amavis daemon "
killall amavisd
rm -fr /var/amavis/amavis*.sock
}

amavis_restart() {
amavis_stop
sleep 2
amavis_start
}

case "$1" in
start)
amavis_start
;;
stop)
amavis_stop
;;
restart|reload)
amavis_restart
;;
*)
echo "Usage: amavis {start|stop|restart}"
esac

Przystosowujemy postfixa do współpracy z amavisem.Do /etc/postfix/main.cf
dodajemy:# AMaViS
content_filter=smtp-amavis:127.0.0.1:10024

zaś do /etc/postfix/master.cf:smtp-amavis unix - - y - 2 smtp
-o smtp_data_done_timeout=1200
-o disable_dns_lookups=yes
127.0.0.1:10025 inet n - n - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_client_restrictions=
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000

restartujemy postfixa i to powinno być wszystko

postfix - zarządzanie
przede wszystkim postfix.admin
postsuper - zarządzanie kolejką
migracja mailbox - maildir
FIX ME

podsumowanie
Mam nadzieję że powyższe dziełko komuś się przyda. Przedstawione konfiguracje
u mnie działają, ale nie daję gwarancji że będą u Ciebie. W razie problemów
sprawdź logi, a potem google. Jeśli to nic nie da to możesz do mnie napisać, ale
raczej nie licz na odpowiedź.
Autor: Grzegorz Jemielity     ©2005     ver:
2005-12-12
Prawa autorskie jak w GNU GPL: możesz powyższy dokument
rozpowszechniać, kopiować i modyfikować, ale podaj link do oryginału
(http://hip.ipadmin.info/index.php?d=1&co=postfix).







Wyszukiwarka

Podobne podstrony:
homepage dm
HP System Management Homepage Installation Guide (March 2008)
Guide HomePage
HOMEPAGE
homepage
Welcome to the Homepage of the University of Dundee
Dieter Viebach´s Stirlingmotor Homepage
HomePage
HP System Management Homepage Installation Guide (September 2008)
homepage mac com r ed brown PhotoAlbum2 d20070715 t122745
homepage
html ustawianie jako homepage

więcej podobnych podstron