För guiden används vpopmail för att hantera virtuella domäner och mailkonton.
/etc/tcp.smtp.cdb, /home/vpopmail/etc/tcp.smtp.cdb eller /etc/tcp/smtp.cdb ?
Efter många delade meningar om vart man ska lägga CDB filerna för tcpserver, så har jag bestämt mig för att följa den metod som JMS använder, dvs att lägga filerna inne i /etc/tcp. Fördelen är att alla cdb filer ligger samlade under samma ställe, och att man kan se till att 'tcprules' får rättigheter att uppdatera filerna. Som JMS förklarar så är tcpserver är inte enbart för qmail, av den anledningen ska inte filerna heller läggas inne i qmail's katalogstruktur, och inte heller under '/home/vpopmail'.Den "klassiska" installationen av vpopmail har alltid använt UID och GID 89 för vchkpw användaren och gruppen. I OpenBSD har dessa idn varit upptagna sedan ett bra tag tillbaks, och vi måste därför antingen låta systemet välja UID och GID själv, eller tilldela egna IDn vid skapande av grupper och användare.
För att få samma id på alla servrar som installeras, och ev. ska dela filsystem för mailboxarna senare så väljer vi att tilldela egna UID och GID.
groupadd -g 2109 vchkpw useradd -g vchkpw -m -d /home/vpopmail -s /sbin/nologin -u 7797 vpopmail mkdir -p ~vpopmail/etc/ echo "localhost|0|vpopmail_edit|vpass|vpopmail" > ~vpopmail/etc/vpopmail.mysql chmod 640 ~vpopmail/etc/vpopmail.mysql
mkdir -p /etc/tcp echo '127.0.0.1:allow,RELAYCLIENT=""' >/etc/tcp/smtp qmailctl cdb
pkg_add bzip2
cd /usr/local/src wget http://switch.dl.sourceforge.net/sourceforge/vpopmail/vpopmail-5.4.27.tar.bz2 tar xfj vpopmail-5.4.27.tar.bz2 cd vpopmail-5.4.27/ ./configure --enable-roaming-users=y --enable-ip-alias-domains=y \ --enable-auth-module=mysql --enable-libdir=/usr/local/mysql/lib/mysql \ --disable-many-domains --enable-auth-logging=y --enable-sql-logging=y \ --enable-clear-passwd=y --enable-qmail-ext --enable-logging=e \ --enable-tcpserver-path=/etc/tcp/ --enable-tcpserver-file=/etc/tcp/smtp \ --enable-tcprules-prog=/usr/local/bin/tcprules \ --enable-rebuild-tcpserver-file --enable-mysql-limits \ --enable-valias=yFörklaringar till alla parametrar till 'configure' (popup)
make make install-strip
echo >>//var/cron/tabs/root "# Remove comment on the line below to clean up expired entries in the relay db" echo >>//var/cron/tabs/root "#42 * * * * /home/vpopmail/bin/clearopensmtp 2>&1 >/dev/null" EDITOR=ee crontab -eEfter att du aktiverat den automatiska rensningen av relay DBn så länkar du in qmail-pop3d i /services för att starta POP3 servicen:
ln -s /var/qmail/supervise/qmail-pop3d /service
/home/vpopmail/bin/vadddomain test.com testpw /home/vpopmail/bin/vadduser nisse@test.com nissepw /home/vpopmail/bin/vadduser kalle@test.com kallepwFör att undvika problem framöver med att ta bort mailkonton eller domäner måste tabellen 'vlog' skapas. Detta görs enklast genom att göra en misslyckad inloggning mot servern via POP3, och om du inte vill prata POP med servern, så kan du ladda ner eller skapa en liten PHP fil som gör det åt dig:
fixa-vlog-problem
<?php $pop3=fsockopen('localhost',110); $line = fgets($pop3, 1024); print $line; fputs($pop3,"user fixa_vlog@problemet.nu\r\n"); $line = fgets($pop3, 1024); print $line; fputs($pop3,"pass fel_pass\r\n"); $line = fgets($pop3, 1024); print $line; ?>
wget http://www.bsd-guide.net/openbsd-mailserver/files/qmail/fixa-vlog-problem php fixa-vlog-problem
Felmeddelandet om att tabellen 'vpopmail.problemet_nu' inte finns kan du strunta i. Det är en del av lösningen på problemet.
Kolla att domänen lagts upp i databasen:
mysql -u vpopmail_edit -pvpass vpopmail -e "show tables"Du bör få upp:
+--------------------+ | Tables_in_vpopmail | +--------------------+ | deny_from | | dir_control | | lastauth | | limits | | relay | | test_com | | vlog | +--------------------+
Kolla sen att de användare du skapade ("nisse" och "kalle") finns i tabellen för domänen:
mysql -u vpopmail_edit -pvpass vpopmail -e "select * from test_com"Det du får upp bör se ut något såhär:
+------------+------------------------------------+--------+--------+------------+--------------------------------------------+----------+-----------------+ | pw_name | pw_passwd | pw_uid | pw_gid | pw_gecos | pw_dir | pw_shell | pw_clear_passwd | +------------+------------------------------------+--------+--------+------------+--------------------------------------------+----------+-----------------+ | postmaster | $1$GXUNSzAJ$8BjCRmwSVv1no2.o6rfTt0 | 0 | 0 | Postmaster | /home/vpopmail/domains/test.com/postmaster | NOQUOTA | testpw | | nisse | $1$GXUNSzAJ$y5Kyq3QTVY5WT5HrpT8Y01 | 0 | 0 | nisse | /home/vpopmail/domains/test.com/nisse | NOQUOTA | nissepw | | kalle | $1$GXUNSzAJ$jf03l3ccjIQS6b175ipqu. | 0 | 0 | kalle | /home/vpopmail/domains/test.com/kalle | NOQUOTA | kallepw | +------------+------------------------------------+--------+--------+------------+--------------------------------------------+----------+-----------------+
Kolla att det skapats kataloger för att lagra domänens och användarnas mail i ("pw_dir" i ovanstående resultat ska existera):
find /home/vpopmail/domains/test.com -type dAlla kataloger i "test.com" i "/home/vpopmail" listas:
/home/vpopmail/domains/test.com /home/vpopmail/domains/test.com/postmaster /home/vpopmail/domains/test.com/postmaster/Maildir /home/vpopmail/domains/test.com/postmaster/Maildir/new /home/vpopmail/domains/test.com/postmaster/Maildir/cur /home/vpopmail/domains/test.com/postmaster/Maildir/tmp /home/vpopmail/domains/test.com/nisse /home/vpopmail/domains/test.com/nisse/Maildir /home/vpopmail/domains/test.com/nisse/Maildir/new /home/vpopmail/domains/test.com/nisse/Maildir/cur /home/vpopmail/domains/test.com/nisse/Maildir/tmp /home/vpopmail/domains/test.com/kalle /home/vpopmail/domains/test.com/kalle/Maildir /home/vpopmail/domains/test.com/kalle/Maildir/new /home/vpopmail/domains/test.com/kalle/Maildir/cur /home/vpopmail/domains/test.com/kalle/Maildir/tmp
Om allt är ok så här långt (och om det inte är det så får du felsöka), så är det dags att prova ta bort en användare. Med kommandot vdeluser tar man bort en användare:
/home/vpopmail/bin/vdeluser kalle@test.comKör samma kommandon som tidigare för att se att användaren försvunnit från databasen och från "/home/vpopmail/test.com":
mysql -u vpopmail_edit -pvpass vpopmail -e "select * from test_com" find /home/vpopmail/domains/test.com -type d
om "kalle" har försvunnit både från databas och "/home/vpopmail/test.com" så är allt ok.
Dags att ta bort test-domänen:
/home/vpopmail/bin/vdeldomain test.comKolla igen att allt fungerat som det ska:
# mysql -u vpopmail_edit -pvpass vpopmail -e "select * from test_com" ERROR 1146 (42S02) at line 1: Table 'vpopmail.test_com' doesn't exist # find /home/vpopmail/domains/test.com -type d find: /home/vpopmail/domains/test.com: No such file or directoryOm det ser ut sådär så är domänen och de kvarvarande användarna borttagna.
/home/vpopmail/bin/vadddomain test.com testpw /home/vpopmail/bin/vadduser nisse@test.com nissepw /home/vpopmail/bin/vadduser kalle@test.com kallepw
Nu kan du, för att testa, skicka ett mail genom att prata SMTP med servern (byt ut min IP mot den adress du använder på servern, testa gärna från en annan dator på ditt nät för att se att relay-biten fungerar som den ska):
$ telnet 192.168.0.3 25 Trying 192.168.0.3... Connected to 192.168.0.3. Escape character is '^]'. 220 spambox3.bsd-guide.net ESMTP helo testburken.com 250 spambox3.bsd-guide.net ehlo testburken.com 250-spambox3.bsd-guide.net 250-STARTTLS 250-SIZE 0 250-PIPELINING 250 8BITMIME mail from: <din riktiga mailadress> 250 ok rcpt to: <nisse@test.com> 250 ok data 354 go ahead Subject: testar lite smtp-prat testar skriva ett mail genom att prata lite smtp med servern. . 250 ok 1210459033 qp 866 quit 221 spambox3.bsd-guide.net Connection closed by foreign host. $
Testa också att skicka ett mail till din riktiga mailadress, ex:
mail from: <nisse@test.com> rcpt to: <peo@bsd-guide.net>
Detta ska avbrytas efter 'rcpt to' kommandot om du provar från en annan datorn på ditt nätverk:
553 sorry, that domain isn't in my list of allowed rcpthosts (#5.7.1)
Om allt ser ut ungefär så, så är allt ok, annars har du inte följt min guide.. Nu bör du kunna hämta mailet via POP, och det testar vi genom att prata POP3 med servern:
$ telnet 192.168.0.3 110 Trying 192.168.0.3... Connected to 192.168.0.3. Escape character is '^]'. +OK <18927.1210459559@spambox3.bsd-guide.net> user nisse@test.com +OK pass nissepw +OK list +OK 1 372 . retr 1 +OK Return-Path: <peo@bsd-guide.net> Delivered-To: nisse@test.com Received: (qmail 32687 invoked from network); 11 May 2008 00:45:07 +0200 Received: from blaha.blaha.net (HELO testburken.com) (213.xx.xxx.xx) by spambox3.bsd-guide.net with SMTP; 11 May 2008 00:45:07 +0200 Subject: testar lite smtp-prat testar skriva ett mail genom att prata lite smtp med servern. . quit +OK Connection closed by foreign host. $
Efter att du hämtat mail från servern så ska du också kunna skicka mail ("POP before SMTP"). Den IP-adress du visade för servern när du hämtade mail ska alltså automatiskt ha hamnat i /etc/tcp/smtp.cdb och i relay-tabellen i databasen för vpopmail. Detta kan du kolla genom att lista allt i relay-tabellen på samma sätt som exemlpena med användarna ovan använde:
mysql -u vpopmail_edit -pvpass vpopmail -e "select * from relay"
Du kan kolla att det går att skicka mail till andra adresser (utanför servern) genom att prata SMTP med servern igen (använd ex. nisse@test.com som avsändare och en av dina riktiga mailadresser som mottagare)
För att det ska fungera krävs det givetvis att du testar från samma
dator du provade POP-funktionen från, och att denna dator inte är hårdkodad i
din /etc/tcp/smtp fil (som localhost ovan).
De enda adresser som alltid ska finnas i /etc/tcp/smtp är
de som alltid ska kunna skicka mail till vem som helst, utan att behöva ha ett giltigt mailkonto på
din server. Ofta är detta enbart "localhost" + kanske ett fåtal fasta IP-adresser (interna eller
publika) till servrar som ingår i det nät mailservern läggs upp för.
smtp.cdb innehåller tillfälligt fler adresser, efter att dessa autentiserat sig via POP3 inloggning. Att kolla innehållet i en CDB fil görs enklast med DJB's CDB paket (installationen beskrivs på nästa sida):
cdbdump < /etc/tcp/smtp.cdb