Uživatelské nástroje

Nástroje pro tento web


linux-mailserver

Postfix,Courier,dnscache (Debian Sarge)

1. Úvod

Co je vůbec cílem článku? Potřebuji vyměnit stávající mailserver (15 klientů) za nový ve velice krátkém čase. Proto si píšu postup, jak zvládnout migraci v co nejkratším čase. Určitě víte, že když něco děláte načisto bez podkladů, ladění jednotlivých aplikací trvá neskutečně dlouho, protože se člověk častokrát zastaví na banálních věcech. Na mailserveru nyní běží

  • sendmail MTA
  • cyrus POP3 a IMAP server
  • bind DNS server
  • filtrování spamu (spamassassin)
  • clamav

Pro novou instalaci jsem vybral

  • postfix MTA (TLS/SASL)
  • courier-{pop,impa}-ssl
  • dhcp3-server
  • spamassassin
  • clamav (antivir)
  • dnscache (djbware od DJB)

To je zatím vše a jdeme na to.

Nainstalujeme si „čistý“ Debian stable (nyní aktuální ve verzi Sarge). Zkusíme nepracovat s žádnými backports a dalšími jinými repositáři. Doplníme /etc/apt/sources.list o contrib a non-free :

deb http://ftp.cz.debian.org/debian/ stable main contrib non-free
deb-src http://ftp.cz.debian.org/debian/ stable main contrib non-free
deb http://security.debian.org/ stable/updates main contrib non-free

Zupdatujeme debian a doinstalujeme, co stejně budeme časem potřebovat pro různé testy.

apt-get update
apt-get upgrade
apt-get install mc ssh syslog-ng mutt iproute iptraf tcpdump iftop nmap gawk arj unzoo unrar lha

2. Denyhosts - zabezpečujeme ssh

Na začátku hned porušíme výše zmíněnou informaci, že do systému nebudeme dávat jiné věci než z debian frepositáře. Ok, budu se snažit aby to byla první a poslední aplikace mimo repositář (jen pro nedočkavé, v Debian Etch už je denyhosts jako balíček). Na server se nám bude velice brzo někdo dobývat. Dobyvatele pořešíme už v zárodku a server raději zabezpečíme. Nejbolavější je určitě ssh-čko. Danny mi doporučil šikovnou věcičku http://denyhosts.sf.net/ (díky za to). Je to závislé na pythonu, kouká se to do logfilu, kde je napsáno, že se někdo na server dobývá a po několika neúspěšných pokusech šupne jeho ip adresu do /etc/hosts.deny a je od něj pokoj :-)

Denyhosts stáhneme z webu a podle postupu v README nainstalujeme. Denyhosts běží v python-u, proto potřebuje pro python pár nezbytných balíčků:

apt-get install python python2.3-dev

Stáhneme si příslušný balíček (v té době byl aktuální Denyhosts-2.6.tar.gz), rozbalíme a v instalaci postupujeme podle README.txt:

tar -xvzpf denyhosts-xy.tar.gz
python setup.py install
cp denyhosts.cfg-dist denyhosts.cfg
cd /etc/init.d
ln -s /usr/share/denyhosts/deamon-control-dist denyhosts

V /usr/share/denyhosts/denyhost.cfg odkomentujeme a zakomanetujeme příslušné řádky takto:

# Redhat or Fedora Core:
#SECURE_LOG = /var/log/secure
# Mandrake, FreeBSD or OpenBSD: 
SECURE_LOG = /var/log/auth.log
...
# Redhat/Fedora:
#LOCK_FILE = /var/lock/subsys/denyhosts
# Debian
LOCK_FILE = /var/run/denyhosts.pid

Pak už jen zrestartujeme denyhosts a vše jede správně, jak má :-) :

/etc/init.d/denyhosts restart

3. Networking

V Sarge vypadají síťové služby takto

cat /etc/network/interfaces

# WAN
auto eth1
iface eth1 inet dhcp

Na WAN portu dostávám v našem případě ip adresu přes dhcp. Ti, kdo mají statickou ip adresu od poskytovatele, si ji nastaví ručně. Nyní si nakonfigurujeme síťové služby pro LAN i WAN

3.1 LAN - dhcp-server

Než nainstalujeme dhcp server pro LAN-ku, přidáme LAN-ce ip adresu a restartneme síťové služby, že? :-)

cat >> /etc/network/interfaces << EOF

auto eth0
iface eth0 inet static
    address 192.168.1.1
    netmask 255.255.255.0
EOF
/etc/init.d/networking restart

A nyní už můžeme nainstalovat dhcp server. Upravíme rozsah LAN-ky a restartneme dhcp server. Pokud je potřeba, můžeme podle MAC adres přidělovat pevné ip adresy před dhcp. To už lehce můžeme nakonfigovat později.

apt-get install dhcp3-server
cat >> /etc/dhcp3/dhcpd.conf << EOF
#
# LAN
subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.20 192.168.1.70;
  option routers 192.168.1.1;
}
# popripade muze pridat i na MAC pridelena IP-cky
#
# Hosty s ip podle MAC adresy
#host MONPC  {
# hardware ethernet 00:00:5d:f5:00:00;
# fixed-address 192.0.0.11;
#}
EOF
/etc/init.d/dhcp3-server restart

Při instalaci se nás dhcp server ptá, na kterém rozhraní bude dhcp server pracovat. To se jinak nastavuje v /etc/default/dhcp3-server

3.2 Firewall - iptables

Nastavíme si iptables podle představ resp., jak jste PARANOIDNÍ :-) Nejsem žádný guru na iptables, proto pořeším jen základní věci. Pro výmaz všech pravidel jsem použil script z http://www.petricek.cz/. Viz. výpis.

#!/bin/bash
# verze 01

#howto get ip WAN address
INET_IFACE="eth1"
# get WAN ip via ip route
#INET_IP=`ip add show dev $INET_IFACE | grep "inet "| awk -F " " '{print $2}' | awk -F "/" '{print $1}'`
# get WAN ip via ifconfig
INET_IP=`ifconfig $INET_IFACE | grep cast | awk -F " " '{print $2}' | awk  -F ":" '{print $2}'`
echo "WAN address=$INET_IP"
LAN1_IP="192.168.1.1/32"
LAN1_BCAST="192.168.1.255/32"
LAN1_IFACE="eth0"
LO_IFACE="lo"
LO_IP="127.0.0.1/32"

IPTABLES=`which iptables`

# cistime iptables
function delete_chain() {
        echo -n "$1/$2: ";
        while [ -z "`$IPTABLES -t $1 -D $2 1 2>&1 `" ]; do
                echo -n "#"
        done
        echo " OK";
}

$IPTABLES -t filter -P INPUT ACCEPT
$IPTABLES -t filter -P OUTPUT ACCEPT
$IPTABLES -t filter -P FORWARD ACCEPT

delete_chain filter INPUT;
delete_chain filter OUTPUT;
delete_chain filter FORWARD;
delete_chain filter IN_FW;
delete_chain filter logdrop;
delete_chain filter syn-flood;

$IPTABLES -X IN_FW 2> /dev/null;
$IPTABLES -X logdrop 2> /dev/null;
$IPTABLES -X syn-flood 2> /dev/null;
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT

delete_chain nat PREROUTING;
delete_chain nat OUTPUT;
delete_chain nat POSTROUTING;

$IPTABLES -t mangle -P PREROUTING ACCEPT
$IPTABLES -t mangle -P OUTPUT ACCEPT

delete_chain mangle PREROUTING;
delete_chain mangle OUTPUT;

# nyni zacneme neco teprve nastavovat
/sbin/depmod -a
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_REJECT
/sbin/modprobe ipt_MASQUERADE
/sbin/modprobe ip_conntrack_ftp
echo "1" > /proc/sys/net/ipv4/ip_forward

for interface in /proc/sys/net/ipv4/conf/*/rp_filter; do
    echo "1" > ${interface}
done

$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP

$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to $INET_IP
#$IPTABLES -t nat -A PREROUTING -p tcp --dport 80 -i ! $INET_IFACE \
#         -d ! $INET_IP -j REDIRECT --to-port 3128
$IPTABLES -t mangle -A PREROUTING -p tcp --sport ssh -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A PREROUTING -p tcp --dport ssh -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A PREROUTING -p tcp --sport ftp -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A PREROUTING -p tcp --dport telnet -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A PREROUTING -p tcp --sport ftp-data -j TOS --set-tos Maximize-Throughput

$IPTABLES -A FORWARD -p tcp ! --syn -m state --state NEW -j DROP
$IPTABLES -A FORWARD -i $LAN1_IFACE -j ACCEPT
#$IPTABLES -A FORWARD -i $INET_IFACE -o $LAN1_IFACE -j ACCEPT
$IPTABLES -A FORWARD -i $INET_IFACE -o $LAN1_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT
#$IPTABLES -A FORWARD -m limit --limit 12/h -j LOG --log-prefix "FORWARD drop:"

$IPTABLES -A INPUT -i $INET_IFACE -p tcp ! --syn -m state --state NEW -j DROP

$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 21 -j ACCEPT
$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 22 -j ACCEPT
$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 25 -j ACCEPT
$IPTABLES -A INPUT -i $INET_IFACE -p UDP --dport 53 -j ACCEPT
$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 53 -j ACCEPT
$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 80 -j ACCEPT
$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 143 -j ACCEPT # imap
$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 993 -j ACCEPT # imaps
$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 995 -j ACCEPT # pop3s
$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 110 -j ACCEPT # pop3 -plain text  zakazeme :-)
$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 1194 -j ACCEPT
$IPTABLES -A INPUT -i $INET_IFACE -p UDP --dport 1194 -j ACCEPT
$IPTABLES -A INPUT -i $INET_IFACE -p TCP --dport 5000 -j ACCEPT
$IPTABLES -A INPUT -i $INET_IFACE -p UDP --dport 5000 -j ACCEPT

$IPTABLES -A INPUT -i $INET_IFACE -p ICMP --icmp-type echo-request -j ACCEPT
$IPTABLES -A INPUT -i $LO_IFACE -j ACCEPT
$IPTABLES -A INPUT -i $LAN1_IFACE -d $LAN1_IP -j ACCEPT
$IPTABLES -A INPUT -i $LAN1_IFACE -d $INET_IP -j ACCEPT
$IPTABLES -A INPUT -i $LAN1_IFACE -d $LAN1_BCAST -j ACCEPT
$IPTABLES -A INPUT -i $LAN1_IFACE -p udp --dport 67 -j ACCEPT
$IPTABLES -A INPUT -d $INET_IP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -m limit --limit 12/h -j LOG --log-prefix "INPUT drop:"

$IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --sport ssh -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --dport ssh -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --sport ftp -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --dport ftp -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --dport telnet -j TOS --set-tos Minimize-Delay
$IPTABLES -t mangle -A OUTPUT -o $INET_IFACE -p tcp --sport ftp-data -j TOS --set-tos Maximize-Throughput

$IPTABLES -A OUTPUT -s $LO_IP -j ACCEPT
$IPTABLES -A OUTPUT -s $LAN1_IP -j ACCEPT
$IPTABLES -A OUTPUT -s $INET_IP -j ACCEPT
$IPTABLES -A OUTPUT -o $LAN1_IFACE -p UDP --dport 68 --sport 67 -j ACCEPT
#$IPTABLES -A OUTPUT -j LOG --log-prefix "OUTPUT drop: 

Firewall pravidla jsem si dal do /etc/init.d/firewall.sh a zajistil, aby pravidla byly spouštěny ve všech run-levels. Samozřejmě provedeme restart firewallu, aby nám to k něčemu bylo, že? Pak se můžeme podívat, co jsme s naším firewall scriptem udělali :-)

update-rc firewall.sh defaults
/etc/init.d/firewall.sh restart
iptables -L -v

3.3 WAN port, nastavení dns

Když máme ip adresu na WAN portu přidělovanou přes dhcp, tak vám dhclient může přepsat /etc/resolv.conf podle vašeho providera. Aby jsme mohli využívat náš nakonfigurovaný dns server, resp. dnscache potřebujeme, aby se v /etc/resolv.conf objevila ip adresa našeho routeru (LAN ip adresa 192.168.1.1). Přidáme do /etc/dhclient.conf potřebná nastavení. Ještě předtím si raději stáhneme dnscache, abychom ji pak mohli snadno nainstalovat a koukneme, co nám dhclient přidal do /etc/resolv.conf:

apt-get install daemontools-installer djbdns-installer
get-djbdns
cat >> /etc/dhclient.conf << EOF
prepend domain-name-servers 192.168.1.1;
request subnet-mask, broadcast-address, time-offset, routers, host-name;

EOF
/etc/init.d/networking restart
cat /etc/resolv.conf

search 
nameserver 192.168.1.1

Dhclient nám přepral /etc/resolv.conf podle jeho nového nastavení. Nyní je správný čas na instalaci dnscache, která nám bude cachovat dns dotazy.

4. Djbdns (dnscache)

Nyní nainstalujeme dnscache. Dnscache jsem zvolil aplikaci D.J.Bernsteina - djbdns. Instaluje se velice jednoduše ze zdrojových kódů podle licence DJB:

apt-get install daemontools-installer djbdns-installer
build-daemontools
build-djbdns
mkdir /var/djbdns
dnscache-conf dnscache dnslog /var/djbdns/dnscache 192.168.1.1
touch /var/djbdns/dnscache/root/ip/192.168
ln -s /var/djbdns/dnscache /service/dnscache
ping -c 2 gmail.com
PING gmail.com (216.239.57.83) 56(84) bytes of data.
64 bytes from cw-in-f83.google.com (216.239.57.83): icmp_seq=1 ttl=239 time=215 ms
64 bytes from cw-in-f83.google.com (216.239.57.83): icmp_seq=2 ttl=239 time=210 ms

Dnscache nám nyní cachuje dns dotazy. Co víc si můžeme přát :-)

5. Courier (IMAP,POP3 i s SSL)

Za IMAP a POP3 jsem vybral Courier.

apt-get install courier-imap-ssl courier-pop-ssl

Nastavíme /etc/courier/{pop3d.conf,imapd.conf} dle potřeb (firma, misto, atd.), vygenerujeme si certifikáty a restartujeme službu:

cd /etc/courier
mkpopcert
mkimapcert

V /etc/courier/authdaemonrc pozměníme authmodulelist na „authuserdb authpam authshadow“ a službu zrestartujeme.

/etc/init.d/courier-authdaemon restart

Takto se nám opírá autorizace o naše známá „shadow“ hesla, která mají přidělení jednotlivý uživatelé k účtům. Ano, tento způsob je asi vhodný pro malý počet lidí. Zkousnout se to určitě dá. Když je větší firma, tak představa, že by měl každý uživatel ssh účet, se mi vůbes nezamlouvá. Pak je asi lepší řešit uživatele virtuálně.

6. MUTT - nastavení

Mutt si instaluji, páč je textový a „lehký“ a dá se pohodlně nastavit nejen pro testovací účely. Pro mail spool budeme používat Maildir (djb produkt) u každého uživatele. Aby se nám při zřizování uživatele již tento adresář vytvořil, dáme Maildir do /etc/skel. Pak můžeme vytvořit uživatele.

cd /etc/skel
maildirmake Maildir
useradd petr # 1.user
ls /home/petr
Maildir

Mutt naučíme, aby uměl pracovat s Maidir-em (viz. http://www.elho.net/mutt/maildir/):

su - petr
mkdir .mutt
cat >> /home/petr/.mutt/muttrc << EOF
set mbox_type=Maildir

set folder="~/Maildir"
set mask="!^\\.[^.]"
set mbox="~/Maildir"
set record="+.Sent"
set postponed="+.Drafts"
set spoolfile="~/Maildir"

my_hdr From: petr@my-mailserver.cz
set realname = "Petr Podrabsky"

mailboxes `echo -n "+ "; find ~/Maildir -type d -name ".*" -printf "+'%f'"`
EOF

7. Postfix - MTA

Nainstalujeme si MTA postfix:

apt-get install postfix

Budeme mít Internet site. Vyplníme mail hostname Nyní chodí pošta uživatelům do mbox-u /var/mail/<user>. Postfix říká, kam dávat poštu, proto mu sdělíme, že chceme, aby doručoval zprávy do Maildiru a přidáme náš subnet k mým sítím

echo "" >> /etc/postfix/main.cf
echo "home_mailbox = Maildir/">> /etc/postfix/main.cf
cat /etc/postfix/main.cf | grep mynetworks 
mynetworks = 192.168.1.0/24, 127.0.0.0/8
echo "root: petr@localhost" >> /etc/postfix/aliases
newaliases
/etc/init.d/postfix restart

Nyní máme základ hotov. MTA nyní umí zprávy přehazovat do Maildir-u. Zprávy měly nyní chodit ven i na náš mailserver. S Maildir-em umi pracovat Courier, který z něj umí číst zprávy přes POP3 a IMAP. Vyzkoušíme si čtení zpráv přes POP3 a IMAP

8. Testy POP3,IMAP

Pošleme se jednu testovací zprávu a můžeme testovat, zda nám chodí POP3 a IMAP.

echo To:petr | /usr/sbin/sendmail

petr@mail-king:~$ telnet localhost 110
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
+OK Hello there.
user petr
+OK Password required.
pass heslouzivatelepetr
+OK logged in.
list
+OK POP3 clients that break here, they violate STD53.
1 562
.
quit
+OK Bye-bye.
Connection closed by foreign host.
petr@mail-king:~$ 

Skvělé. A Ještě můžeme vyzkoušet i IMAP:

petr@mail-king:~$ telnet localhost 143
Trying 127.0.0.1...
Connected to localhost.localdomain.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA 
IDLE ACL ACL2=UNION STARTTLS] Courier-IMAP ready. Copyright 1998-2004 Double Precision, Inc.  See 
COPYING for distribution information.
AA LOGIN petr heslouzivatelepetr
AA OK LOGIN Ok.
AB SELECT Inbox
* FLAGS (\Draft \Answered \Flagged \Deleted \Seen \Recent)
* OK [PERMANENTFLAGS (\* \Draft \Answered \Flagged \Deleted \Seen)] Limited
* 1 EXISTS
* 1 RECENT
* OK [UIDVALIDITY 1169939434] Ok
* OK [MYRIGHTS "acdilrsw"] ACL
AB OK [READ-WRITE] Ok
ZZ LOGOUT
* BYE Courier-IMAP server shutting down
ZZ OK LOGOUT completed
Connection closed by foreign host.

Nyní vyzkoušíme POP3S a IMAPS. Pošleme z Internetu nějakou poštu k uživateli a zpět.

openssl s_client -crlf -connect my-server.cz:995 # POP3S
openssl s_client -crlf -connect my-server.cz:993 # IMAPS

Vše jede, jak z praku.

9. Postfix TLS/SASL

Nejdříve doinstalujeme potřebné programy:

apt-get install libsasl2-modules sasl2-bin postfix-tls

Nyní zařídíme v /etc/postfix/main.cf TLS pro šifrování spojení a SASL pro ověřování jména a hesla v postfixu a vygenerujeme si pro postfix pem certifikát:

cat >> /etc/postfix/main.cf << EOF

# TLS
smtp_use_tls = yes
smtp_tls_note_starttls_offer = yes

smtpd_use_tls = yes
smtpd_tls_auth_only = yes
smtpd_tls_key_file = /etc/postfix/ssl/postfix.pem
smtpd_tls_cert_file = /etc/postfix/ssl/postfix.pem
smtpd_tls_received_header = yes
smtpd_tls_loglevel = 1
smtpd_tls_session_cache_timeout = 3600s

# SASL
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_local_domain = $myhostname
smtpd_sasl_security_options = noanonymous
smtpd_sasl_application_name = smtpd

EOF

mkdir /etc/postfix/ssl
openssl req -new -x509 -nodes -days 3650 -out /etc/postfix/ssl/postfix.pem \
     -keyout /etc/postfix/ssl/postfix.pem

Nyní jsme u rozhodnutí, jak bude SASL v postfixu ověřovat jméno/heslo pro odesílání pošty. SASL je možné nastavit tak, že se bude ověřovat jméno/heslo vůči stávajícím uživatelským účtům nebo se bude ověřovat vůči sasl databázi, kde jsou jména a hesla nadefinovana sólo. Nejdříve zkusíme nastavit SASL vůči stávajícím účtům.

cat > /etc/postfix/sasl/smtpd.conf << EOF
# overovani SASL vuci uzivatelskym uctum
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN
EOF

Postfix pracuje v prostředí chroot, proto vytvoříme pro saslauth deamona adresář v chrootu postfixu. V /etc/init.d/saslauthd upravíme začátek scriptu a zajistime spouštění SASL po restartu s nastavením mechanismu autentizace. Hned můžeme otestovat, zda nám sasl funguje.

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

cat /etc/init.d/saslauthd | more
...
PARAMS="-m /var/spool/postfix/var/run/saslauthd"
# original PID file 
#PIDFILE="/var/run/${NAME}/saslauthd.pid"
# new PID file
PIDFILE="/var/spool/postfix/var/run/${NAME}/saslauthd.pid"
...

cat > /etc/default/saslauthd << EOF
# spousteni saslauthd po restartu
START=yes

MECHANISMS="pam"
EOF

testsaslauthd -u user -p heslo -f /var/spool/postfix/var/run/saslauthd/mux
0: OK "Success."

Řekneme našemu postfixu, že může odesílat maily i mimo naši doménu, nadefinujeme pár pravidel ohledně blokovaných domén. Nyní můžeme pomocí TLS/SASL s ověřením přes uživatelské jméno a heslo posílat poštu odkudkoliv a kamkoliv přes naš SMTP server. Relay přes náš SMTP server není možné, jelikož spamer nezná jméno a heslo uživatele na serveru.

cat >> /etc/postfix/main.cf << EOF
smtpd_recipient_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_non_fqdn_sender,
    reject_non_fqdn_recipient,
    reject_unknown_recipient_domain,
    reject_unauth_destination,
    reject_rbl_client relays.ordb.org,
    reject_rbl_client opm.blitzed.org,
    reject_rbl_client list.dsbl.org,
    reject_rbl_client multihop.dsbl.org,
    reject_rbl_client sbl.spamhaus.org,
    reject_rbl_client cbl.abuseat.org,
    reject_rhsbl_sender rhsbl.sorbs.net, 
    permit
EOF

Pokud chceme ověřovat oproti sasl2 databázi, tak změníme /etc/postfix/sasl/smtpd.conf takto:

cat > ./smtpd.conf << EOF
# overovani SASL vuci sasl databazi
pwcheck_method: auxprop
mech_list: PLAIN LOGIN

EOF
saslpasswd2 -c -a smtpauth test1
zadame si heslo

Nyní budeme schopni naše MTA odesílat maily kdekoliv z Internetu.

Vyzkoušíme a uvidíme. Třeba pomocí:

openssl s_client -starttls smtp -crlf -connect mail-king.dyndns.org:25

ZATIM TO FUNGUJE AZ SEMKA !!!!!!

10. SPAMassassin

Na filtraci spamů se dá použít spamassassin s Bayesovým filterem. Na http://www.yrex.com/spam/spamconfig.php si můžeme podle otázek nechat vygenerovat config pro spamassassin. Ještě nastavíme /etc/postfix/master.cf:

#
smtp      inet  n       -       -       -       -       smtpd                
          -o content_filter=spamassassin
#
#
spamassassin unix -     n       n       -       -       pipe
        user=nobody argv=/usr/bin/spamc -f -e
        /usr/sbin/sendmail -oi -f ${sender} ${recipient}

Nakonec spamassassin v /etc/default/spamassassin povolíme (ENABLED=1) a můžeme zrestartovat

/etc/init.d/spamassassin restart

11. Admin pro uživatele

Pokud chceme některým uživatelům povolit administrátorská práva, můžeme to udělat několika způsoby. Asi nejznámější způsoby jsou pomocí:

  • sudo
  • wheel group

Pomocí sudo může uživatel při opravnění provádět příkazy, které může provádět jen administrátor (root). Sudo nainstalujeme snadno

apt-get install sudo

V /etc/sudoers nstavíme uživatele a jeho práva a pak už můžeme provádět příkazy bez toho, že bychom se museli přehlásit k účtu root (petr nemá v sudoers žádná práva a danny má v sudoers nastavena úplná práva).

petr@mail-king:~$ sudo cat /var/log/syslog
petr is not in the sudoers file.  This incident will be reported.

danny@mail-king:~$ sudo cat /var/log/syslog | tail -n 1
Feb 24 15:17:33 mail-king postfix/qmgr[13655]: 32ED520E061: removed

U druhého způsobu přidáme do systému skupinu wheel

addgroup wheel

V /etc/pam.d/su odkomentujeme řádky:

auth       required   pam_wheel.so
auth       sufficient pam_wheel.so trust

Do skupiny adm a wheel doplníme potřebného uživatele

usermod -G adm,wheel petr

Pak se může uživatel petr dostat k administrátorovi pomocí su bez hesla administrátora

petr@mail-king:~$ su
mail-king:/home/petr#

12. Uživatelé a kvóty

13. Doplňky

Pro postfix a server si doladíme několik doplňků, které nám něco řeknou o systému, mailserveru a dalších aplikacích.

13.1 Logwatch

Logwatch je jednoduchá aplikace, která nám sbírá z logů informace a každý den nám zašle souhrnné informace.

apt-get install logwatch

13.2 APACHE2 + mailgraph

Mailgraph ve spolupráci s apachem nám grafdicky znázorní, kolik zpráv se proflákalo systémem tam a zpět (http://nas-mailserver/cgi-bin/mailgraph.cgi/).

apt-get install apache2 mailgraph

13.3 Clamav - antivir

Pro uživatele dáme na server antivir. V repositáři je clamav.

apt-get install clamav libclamav1 clamav-daemon
linux-mailserver.txt · Poslední úprava: 2013/08/06 21:41 (upraveno mimo DokuWiki)