Anda di halaman 1dari 74

Server Mail

Sudah menjadi fakta bahwa selama bertahun-tahun Sendmail merupakan Mail Transfer
Agent (MTA, baca mail server) di lingkungan Unix. Sendmail sendiri mempunyai sejarah
panjang dalam masalah keamanan, dan terkenal dengan banyaknya pilihan untuk
mengkonfigurasikannya. Beberapa contoh masalah keamanan di Sendmail misalnya :

• MIME Buffer Overflow Bug. Beberapa badan riset independen menemukan bahwa
beberapa klien e-mail thd Sendmail Versi 8.9.1 berpotensi untuk diserang MIME
header-based attack. Hal ini dapat terjadi jika sebuah mail membawa header
MIME yang tidak diformat dengan benar akan menyebabkan buffer overflow. Isu
ini dapat dibaca di
http://www.cert..org/advisories/CA-
98.10.mime_buffer_overflows.html.
• HELO Buffer overflow. Pada versi 8.9, jika seseorang memberikan perintah
HELO dan diikuti string/karakter lebih dari 1 Kb, atau kurang lebih 855 karakter,
akan menyembunyikan identitas pengirim.

Selain sendmail, banyak bermunculan beberapa Mail Transfer Agent sebagai alternatif.
qmail, Exim dan Postfix merupakan mailer yang banyak digunakan. Bab ini akan
membahas secara singkat, bagaimana mengkonfigurasikan dan menjalankan 2 MTA,
yakni Sendmail dan qmail.

Subsections

• Sendmail
o Menjalankan sendmail sebagai Daemon.
 Slackware
 SuSE
 RedHat
o POP3 di Sendmail
o Administrasi Sendmail
 Alias sendmail (sendmail aliases)
 Personal Mail Forwarding
o Sendmail.cf
 Bagaimana membuat konfigurasi sendmail (sendmail.cf)?
 sendmail.cf di SuSE
 sendmail.cf di RedHat
• qmail
o Instalasi qmail
o Seting mbox
o Seting Maildir
o Test mengirim e-mail
o Seting Klien Windows 9x atau Windows NT
o Program Tambahan qmail (Add on)

• Ringkasan

Sendmail
Sendmail adalah program yang mengimplementasikan kebutuhan umum fasilitas mail
routing antar jaringan, yang bekerja dibawah sistem UNIX. Sendmail memiliki pilihan
yang sangat banyak dan fleksibel untuk dikonfigurasikan. Sendmail merupakan MTA
yang sangat terkenal, dan terdapat hampir disemua OS unix yang ada saat ini, disusun
berdasarkan :

• RFC821 (Simple Mail Transport Protocol),


• RFC822 (Internet Mail Headers Format),
• RFC1123 (Internet Host Requirements),
• RFC2045 (MIME),
• RFC1869 (SMTP Service Extensions),
• RFC1652 (SMTP 8BITMIME Extension),
• RFC1870 (SMTP SIZE Extension),
• RFC1891 (SMTP Delivery Status Notifications),
• RFC1892 (Multipart/Report),
• RFC1893 (Mail System Status Codes),
• RFC1894 (Delivery Status Notifications),
• RFC1985 (SMTP Service Extension for Remote Message Queue Starting),
• RFC2033 (Local Message Transmission Protocol).

Pada saat instalasi Linux, sendmail secara otomatis akan terinstall serta dapat difungsikan
untuk mengirim (SMTP) dan membaca e-mail, menyediakan sistem e-mail alias yang
besar dan menangani mailing list.

Mengingat semua fiturnya sangat fleksibel untuk dikonfigurasikan, sendmail mempunyai


file konfigurasi yang sangat besar (biasanya di /etc/sendmail.cf). Hal ini menyulitkan
pengguna biasa untuk mengkonfigurasikan secara manual. Meskipun demikian banyak
program bantu (biasanya berupa skrip atau macro) yang memudahkan
pengadministrasian sendmail.

Subsections

• Menjalankan sendmail sebagai Daemon.


o Slackware
o SuSE
o RedHat

• POP3 di Sendmail
• Administrasi Sendmail
o Alias sendmail (sendmail aliases)
o Personal Mail Forwarding

• Sendmail.cf
o Bagaimana membuat konfigurasi sendmail (sendmail.cf)?
o sendmail.cf di SuSE
o sendmail.cf di RedHat

Menjalankan sendmail sebagai Daemon.

Untuk dapat menerima dan mengirim e-mail, baik dalam lingkup internet dan intranet,
sendmail harus dijalan pada saat pertama kali komputer dihidupkan (sebagai daemon).
Secara default, Linux akan menjalankannya sebagai daemon.

Subsections

• Slackware
• SuSE
• RedHat

Slackware

Untuk menjalankan sendmail sebagai daemon di Slackware, skripnya dapat ditemukan di


/etc/rc.d/rc.M. Secara keseluruhan, skrip tersebut menjalankan semua daemon pada
modus multi user. Untuk skrip sendmail, dapat ditemukan di baris 54

# Start the sendmail daemon:

if [ -x /usr/sbin/sendmail ]; then

echo "Starting sendmail daemon (/usr/sbin/sendmail -bd -q15m)..."

/usr/sbin/sendmail -bd -q15m


Pertama kali script diatas akan mengecek keberadaan program sendmail, jika ada maka
akan dijalankan perintah dibawahnya jika tidak akan dilewatkan. Untuk pilihan -q adalah
memberitahu sendmail berapa lama untuk memproses antrian mail. Contoh diatas adalah
memproses setiap satu jam (-q1h). Contoh lain, misalnya diubah menjadi (-q30m) artinya
akan diproses dalam waktu 30 menit. Disarankan untuk memproses antrian ini dalam
waktu yang tidak terlalu lama. Hal ini disebabkan karena antrian yang besar akan
berpengaruh terhadap kinerja server, dan tentu akan berpengaruh terhadap kinerja
jaringan secara keseluruhan. Pilihan -bd menunjukkan bahwa sendmail dijalankan
sebagai daemon dan menunggu (listen) di port 25 (SMTP) TCP untuk mail yang tidak
terlalu lama. Hal ini disebabkan karena antrian yang besar akan berpengaruh terhadap
kinerja server, dan tentu akan berpengaruh terhadap kinerja jaringan secara keseluruhan.
Pilihan -bd menunjukkan bahwa sendmail dijalankan sebagai daemon dan menunggu
(listen) di port 25 (SMTP) TCP untuk mail yang datang.

SuSE

Skrip untuk menjalankan, mematikan, mengecek status dan merestart daemon sendmail
di SuSE terletak di /etc/rc.d/init.d/sendmail. Berikut kutipannya :

#! /bin/sh

# Copyright (c) 1996 S.u.S.E. Gmbh Fuerth, Germany. All rights

# reserved.

# Author: Florian La Roche <florian@suse.de>, 1996, 1997

# Werner Fink <werner@suse.de>, 1996

. /etc/rc.config

# Determine the base and follow a runlevel link name.

base=${0##*/}

link=${base#*[SK][0-9][0-9]}
# Force execution if not called by a runlevel directory.

test $link = $base && SMTP=yes

test "$SMTP" = yes || exit 0

if test -z "$SENDMAIL_ARGS" ; then

SENDMAIL_ARGS="-bd -q30m -om"

fi

# The echo return value for success (defined in /etc/rc.config).

return=$rc_done

case "$1" in

start)

echo -n "Initializing SMTP port. (sendmail)"

startproc /usr/sbin/sendmail $SENDMAIL_ARGS || return=$rc_failed

echo -e "$return"

;;

stop)

echo -n "Shutting down SMTP port:"

killproc -TERM /usr/sbin/sendmail || return=$rc_failed

echo -e "$return"

;;

restart)

$0 stop && $0 start || return=$rc_failed

;;

reload)

echo -n "Reload service sendmail"


killproc -HUP /usr/sbin/sendmail || return=$rc_failed

echo -e "$return"

;;

status)

echo -n "Checking for service sendmail: "

checkproc /usr/sbin/sendmail && echo OK || echo No process

;;

*)

echo "Usage: $0 {start|stop|status|restart|reload}"

exit 1

esac

# Inform the caller not only verbosely and set an exit status.

test "$return" = "$rc_done" || exit 1

exit 0

Untuk mengadministrasikannya, tersedia pilihan start, stop, status, restart,


reload. Misalnya untuk melihat status sendmail :

# /etc/rc.d/init.d/sendmail status

RedHat

RedHat memiliki skrip yang agak mirip dengan SuSE untuk menadministrasikan daemon
sendmail. Skrip tersebut dapat ditemukan pula di /etc/rc.d/init.d/sendmail.

#!/bin/sh

# sendmail This shell script takes care of starting and stopping

# sendmail.
#

# chkconfig: 2345 80 30

# description: Sendmail is a Mail Transport Agent, which is the

# program\

# that moves mail from one machine to another.

# processname: sendmail

# config: /etc/sendmail.cf

# pidfile: /var/run/sendmail.pid

# Source function library.

. /etc/rc.d/init.d/functions

# Source networking configuration.

. /etc/sysconfig/network

# Source sendmail configureation.

if [ -f /etc/sysconfig/sendmail ] ; then

. /etc/sysconfig/sendmail

else

DAEMON=yes

QUEUE=1h

fi

# Check that networking is up.

[ ${NETWORKING} = "no" ] && exit 0


[ -f /usr/sbin/sendmail ] || exit 0

RETVAL=0

# See how we were called.

case "$1" in

start)

# Start daemons.

echo -n "Starting sendmail: "

/usr/bin/newaliases > /dev/null 2>&1

for i in virtusertable access domaintable mailertable ; do

if [ -f /etc/mail/$i ] ; then

makemap hash /etc/mail/$i < /etc/mail/$i

fi

done

daemon /usr/sbin/sendmail $([ "$DAEMON" = yes ] && echo -bd)\

$([ -n "$QUEUE" ] && echo -q$QUEUE)

RETVAL=$?

echo

[ $RETVAL -eq 0 ] && touch /var/lock/subsys/sendmail

;;

stop)

# Stop daemons.

echo -n "Shutting down sendmail: "

killproc sendmail
RETVAL=$?

echo

[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/sendmail

;;

restart|reload)

$0 stop

$0 start

RETVAL=$?

;;

status)

status sendmail

RETVAL=$?

;;

*)

echo "Usage: sendmail {start|stop|restart|status}"

exit 1

esac

exit $RETVAL

RedHat menggunakan /etc/rc.d/init.d/.function untuk menyimpan fungsi dan variabel


skripnya. Sendmail bisa diadministrasikan dengan menjalankan perintah (sebagaimana di
SuSE) start, stop, restart, status. Misalnya untuk menghentikan daemon sendmail :

# /etc/rc.d/init.d/sendmail stop
POP3 di Sendmail

Agar user dapat mengambil e-mail secara remote, maka perlu dipasang POP3 Server.
Dalam hal ini, sendmail tidak mendukungnya, dan untuk dapat menjalankan POP3 harus
menggunakan program tambahan lain. Secara default, jika anda instal pine (klien e-mail)
saat instalasi, maka program tersebut secara otomatis menyertakan ipop3d yang
melayani pengguna di port 110. Tidak ada konfigurasi secara khusus.

Dari sisi user, cukup menunjuk mesin Linux sebagai SMTP server (yang dilayani oleh
sendmail) dan POP3 server (yang dilayani oleh ipop3d). Misalnya untuk klien Outlook
Express, seting untuk servernya bisa lewat Tools - Accounts - Mail - Add - Mail.
Pada bagian E-mail Server Names, cukup isikan nama server Linux, atau alamat IP-nya.
Jika diisi nama server, perlu diperhatikan seting MX Record pada DNS servernya. Untuk
ujicoba memastikan bahwa sistem berjalan baik, isikan terlebih dahulu nomor IP-nya.

Gambar 8

E-mail Server Names di Outlook Express

Administrasi Sendmail

Subsections

• Alias sendmail (sendmail aliases)


• Personal Mail Forwarding

Alias sendmail (sendmail aliases)

Fungsi alias disini adalah untuk :

• Memberikan nama alternatif kepada setiap user


• Mailing list

Biasanya untuk aliases ini disimpan di /etc/aliases yang merupakan file teks. Format
penulisannya yaitu :

Alias: penerima, [penerima, ...]


Alias ini biasanya digunakan untuk menerima khusus seperti postmaster atau root. Pada
saat membuat aliasnya dapat digunakan hanya nama atau alamat lengkap, contoh :
anggap bahwa domain yang digunakan adalah nuts.com

# special names

postmaster: root

root: wars

# accept first-intial_last-name@ nuts.com

kacang: anda@peanut

tanah: andajuga@walnut

# a mailing list

admin: wars, root, anda@peanut , andajuga@walnut , fade2blac@pecan ,


sipoer

owner-admin: root

jika ada e-mail yang dikirim kan ke alamat diatas maka akan disampaikan kepada user
yang ada disebelah kanan alias, contoh bila ada e-mail yang ditujukan ke
postmaster@nuts.com akan dikirimkan ke user root dan begitupun dengan alias admin
maka akan dikirim ke user wars, root, anda@peanut dan seterusnya.

Untuk alias ini sendmail tidak langsung mengenal pada saat ada penambahan ataupun
pengurangan data, untuk supaya dapat dikenal maka harus dilakukan perintah
newaliases atau sendmail -bi oleh user root.

Personal Mail Forwarding

Untuk forwarding ini selain dapat dilakukan oleh aliases juga dapat dilakukan dengan
menambahkan file .forward pada direktori user masing-masing dan ini bisa dilakukan
oleh user yang bersangkutan sementara untuk aliases hanya dapat dilakukan oleh
superuser atau root, jadi apabila user ingin memindahkan alamat e-mailnya cukup dengan
membuat personal mail forwarding ini. Contoh user wars akan dipindahkan ke user wars
yang ada di domain domain.com

Berarti isi dari file .forward ini adalah :

Wars@domain.com

Apabila ada e-mail untuk user wars@nuts.com akan secara otomatis dikirim lagi ke user

wars@domain.com

Biasanya .forward ini digunakan untuk forwarding sementara. Dan semua konfigurasi
untuk sendmail ini ditentukan oleh file /etc/sendmail.cf.

Sendmail.cf

Seperti telah disebutkan sebelumnya bahwa semua konfigurasi sendmail ini terdapat file
/etc/sendmail.cf yang berisi bermacam-macam konfigurasi yang secara umum dibagi
3 fungsi utama yaitu :

• Mendefinisikan lingkungan sendmail ( sendmail environment )


• Menuliskan kembali alamat-alamat pada sintak yang benar (tepat) untuk mail
penerima.
• Memetakan alamat-alamat kepada intruksi yang dibutuhkan untuk mengirimkan
e-mail.

Didalam sendmail.cf ini juga dapat dibentuk beberapa macro, rule untuk
mendefiniskan lingkungan yang akan digunakan sendmail.

Bagaimana membuat konfigurasi sendmail (sendmail.cf)?

Untuk memudahkan dalam memanfaatkan semua fasilitas dan kelebihan sendmail


sebaiknya kode sumber (source code) dari sendmail disertakan pada linux yang diinstall,
atau untuk mendapatkan versi terbaru sendmail dapat diambil di situs :
http://www.sendmail.org .

Gunakan m4 script untuk memudahkan feature yang ada, contoh file m4 dengan nama
file locallinux.mc :

# File Name : locallinux.mc

divert(0)dnl

VERSIONID(`@(#)sendmail.mc 8.9.1 ')

OSTYPE(linux)dnl
DOMAIN(generic)dnl

FEATURE(always_add_domain)dnl

FEATURE(access_db, dbm -o /var/adm/sendmail/accessdb)dnl

FEATURE(blacklist_recipients)dnl

FEATURE(genericstable, hash -o /var/adm/sendmail/genericstable)dnl

FEATURE(virtusertable, hash -o /var/adm/sendmail/virtusertable)dnl

MAILER(local)dnl

MAILER(smtp)dnl

Setelah itu jalankan program m4 yang biasanya terletak pada direktori /usr/sbin

# m4 ../m4/cf.m4 locallinux.mc > sendmail.cf

Perintah diatas akan membentuk file konfigurasi sendmail, yaitu sendmail.cf setelah itu
pindahkan sendmail.cf ini ke direktori /etc dan lakukan restart sendmail, dengan
menjalankan script yang ada pada direktori /etc/rc.d/rc.init/sendmail restart.

Berikut ini adalah contoh sendmail.cf yang telah ditambahkan beberapa fitur seperti
contoh di atas. Dimana ada fungsi untuk filter e-mail tertentu berdasarkan Header E-mail
Reply-To atau berdasarkan Subject e-mail.

# ####################################################################

# Copyright (c) 1998 Sendmail, Inc. All rights reserved.

# Copyright (c) 1983, 1995 Eric P. Allman. All rights reserved.

# Copyright (c) 1988, 1993

# The Regents of the University of California. All rights


reserved.

# By using this file, you agree to the terms and conditions set

# forth in the LICENSE file which can be found at the top level of

# the sendmail distribution.

#
######################################################################

######################################################################

#####

##### SENDMAIL CONFIGURATION FILE

#####

##### built by root@ns1.ut.astra.co.id on Wed Feb 23 11:41:37 GMT+0700


2000

##### in /data/source/sendmail-8.9.1/cf/cf

##### using ../ as configuration include directory

#####

######################################################################

######################################################################

##### @(#)cfhead.m4 8.22 (Berkeley) 5/19/98 #####

##### @(#)cf.m4 8.29 (Berkeley) 5/19/98 #####

##### @(#)sendmail.mc 8.9.1 #####

##### @(#)linux.m4 8.10 (Berkeley) 5/19/98 #####

##### @(#)generic.m4 8.9 (Berkeley) 5/19/98 #####

##### @(#)redirect.m4 8.10 (Berkeley) 5/19/98 #####

##### @(#)use_cw_file.m4 8.6 (Berkeley) 5/19/98 #####


##### @(#)always_add_domain.m4 8.6 (Berkeley) 5/19/98 #####

##### @(#)access_db.m4 8.8 (Berkeley) 5/19/98 #####

##### @(#)blacklist_recipients.m4 8.9 (Berkeley) 5/19/98 #####

##### @(#)genericstable.m4 8.7 (Berkeley) 5/19/98 #####

##### @(#)virtusertable.m4 8.7 (Berkeley) 5/19/98 #####

##### @(#)proto.m4 8.223 (Berkeley) 6/30/98 #####

# level 8 config file format

V8/Berkeley

# override file safeties - setting this option compromises system


security

# need to set this now for the sake of class files

#O DontBlameSendmail=safe

O DontBlameSendmail=GroupWritableDirPathSafe,
forwardfileinunsafedirpath,
GroupWritableAliasFile

##################
# local info #

##################

Cwlocalhost

# file containing names of hosts for which we receive e-mail

Fw/etc/sendmail.cw

CGut.astra.co.id

C{DomainMilisBlocking} onelist.com

# my official domain name

# ... define this only if sendmail cannot automatically determine your


domain

#Dj$w.Foo.COM

CP.

# "Smart" relay host (may be null)

DS

# operators that cannot be in local usernames (i.e., network indicators)

CO @ % !

# a class with just dot (for identifying canonical names)

C..

# a class with just a left bracket (for identifying domain literals)


C[[

# Generics table (mapping outgoing addresses)

Kgenerics hash -o /etc/mail/genericstable

# Virtual user table (maps incoming users)

Kvirtuser hash -o /etc/mail/virtusertable

# Access list database (for spam stomping)

Kaccess dbm -o /etc/mail/accessdb

# Blocking Mailing List Database

Kmilis hash -o /etc/mail/milis

# User list Database

Kuserut hash -o /etc/mail/userut

# Resolve map (to check if a host exists in check_mail)

Kresolve host -a<OK> -T<TEMP>

# Hosts that will permit relaying ($=R)

FR-o /etc/mail/relay-domains
# who I send unqualified names to (null means deliver locally)

DR

# who gets all local e-mail traffic ($R has precedence for unqualified
names)

DH

# dequoting map

Kdequote dequote

# class E: names that should be exposed as from this host, even if we


masquerade

# class L: names that should be delivered locally, even if we have a


relay

# class M: domains that should be converted to $M

#CL root

#CE root

CEroot postmaster news uucp mailer-daemon rdist nobody daemon pop imap

# who I masquerade as (null for no masquerading) (see also $=M)

DM

# my name for error messages

DnMAILER-DAEMON

CPREDIRECT
# Configuration version number

DZ8.9.1

###############

# Options #

###############

# strip message body to 7 bits on input?

O SevenBitInput=False

# 8-bit data handling

O EightBitMode=pass8

# wait for alias file rebuild (default units: minutes)

#O AliasWait=5m

# location of alias file

O AliasFile=/etc/aliases

# minimum number of free blocks on filesystem

#O MinFreeBlocks=100

# maximum message size

O MaxMessageSize=2097152
# substitution for space (blank) characters

O BlankSub=.

# avoid connecting to "expensive" mailers on initial submission?

O HoldExpensive=False

# checkpoint queue runs after every N successful deliveries

#O CheckpointInterval=10

# default delivery mode

O DeliveryMode=background

# automatically rebuild the alias database?

#O AutoRebuildAliases

# error message header/file

#O ErrorHeader=/etc/sendmail.oE

# error mode

#O ErrorMode=print

# save Unix-style "From_" lines at top of header?

#O SaveFromLine

# temporary file mode


#O TempFileMode=0600

# match recipients against GECOS field?

#O MatchGECOS

# maximum hop count

#O MaxHopCount=17

# location of help file

O HelpFile=/usr/local/lib/sendmail.hf

# ignore dots as terminators in incoming messages?

#O IgnoreDots

# name resolver options

#O ResolverOptions=+AAONLY

# deliver MIME-encapsulated error messages?

O SendMimeErrors=True

# Forward file search path

O
ForwardPath=$z/.forward.$w+$h:$z/.forward+$h:$z/.forward.$w:$z/.forward

# open connection cache size

O ConnectionCacheSize=2
# open connection cache timeout

O ConnectionCacheTimeout=5m

# persistent host status directory

#O HostStatusDirectory=.hoststat

# single thread deliveries (requires HostStatusDirectory)?

#O SingleThreadDelivery

# use Errors-To: header?

O UseErrorsTo=False

# log level

O LogLevel=9

# send to me too, even in an alias expansion?

#O MeToo

# verify RHS in newaliases?

O CheckAliases=False

# default messages to old style headers if no special punctuation?

O OldStyleHeaders=True

# SMTP daemon options


#O DaemonPortOptions=Port=esmtp

# privacy flags

O PrivacyOptions=authwarnings

# who (if anyone) should get extra copies of error messages

#O PostMasterCopy=Postmaster

# slope of queue-only function

#O QueueFactor=600000

# queue directory

O QueueDirectory=/var/spool/mqueue

# timeouts (many of these)

#O Timeout.initial=5m

#O Timeout.connect=5m

#O Timeout.iconnect=5m

#O Timeout.helo=5m

#O Timeout.mail=10m

#O Timeout.rcpt=1h

#O Timeout.datainit=5m

#O Timeout.datablock=1h

#O Timeout.datafinal=1h

#O Timeout.rset=5m

#O Timeout.quit=2m
#O Timeout.misc=2m

#O Timeout.command=1h

#O Timeout.ident=30s

#O Timeout.fileopen=60s

O Timeout.queuereturn=5d

#O Timeout.queuereturn.normal=5d

#O Timeout.queuereturn.urgent=2d

#O Timeout.queuereturn.non-urgent=7d

O Timeout.queuewarn=4h

#O Timeout.queuewarn.normal=4h

#O Timeout.queuewarn.urgent=1h

#O Timeout.queuewarn.non-urgent=12h

#O Timeout.hoststatus=30m

# should we not prune routes in route-addr syntax addresses?

#O DontPruneRoutes

# queue up everything before forking?

O SuperSafe=True

# status file

O StatusFile=/etc/mail/sendmail.st

# time zone handling:

# if undefined, use system default

# if defined but null, use TZ envariable passed in


# if defined and non-null, use that info

#O TimeZoneSpec=

# default UID (can be username or userid:groupid)

O DefaultUser=daemon

# list of locations of user database file (null means no lookup)

#O UserDatabaseSpec=/etc/userdb

# fallback MX host

#O FallbackMXhost=fall.back.host.net

# if we are the best MX host for a site, try it directly instead of


config err

#O TryNullMXList

# load average at which we just queue messages

#O QueueLA=8

# load average at which we refuse connections

#O RefuseLA=12

# maximum number of children we allow at one time

#O MaxDaemonChildren=12

# maximum number of new connections per second


#O ConnectionRateThrottle=3

# work recipient factor

#O RecipientFactor=30000

# deliver each queued job in a separate process?

#O ForkEachJob

# work class factor

#O ClassFactor=1800

# work time factor

#O RetryFactor=90000

# shall we sort the queue by hostname first?

#O QueueSortOrder=priority

# minimum time in queue before retry

#O MinQueueAge=30m

# default character set

#O DefaultCharSet=iso-8859-1

# service switch file (ignored on Solaris, Ultrix, OSF/1, others)

#O ServiceSwitchFile=/etc/service.switch
# hosts file (normally /etc/hosts)

#O HostsFile=/etc/hosts

# dialup line delay on connection failure

#O DialDelay=10s

# action to take if there are no recipients in the message

#O NoRecipientAction=add-to-undisclosed

# chrooted environment for writing to files

#O SafeFileEnvironment=/arch

# are colons OK in addresses?

#O ColonOkInAddr

# how many jobs can you process in the queue?

#O MaxQueueRunSize=10000

# shall I avoid expanding CNAMEs (violates protocols)?

#O DontExpandCnames

# SMTP initial login message (old $e macro)

O SmtpGreetingMessage=$j Sendmail $v/$Z; $b

# UNIX initial From header format (old $l macro)

O UnixFromLine=From $g $d
# From: lines that have embedded newlines are unwrapped onto one line

#O SingleLineFromHeader=False

# Allow HELO SMTP command that does not include a host name

#O AllowBogusHELO=False

# Characters to be quoted in a full name phrase (@,;:\()[] are


automatic)

#O MustQuoteChars=.

# delimiter (operator) characters (old $o macro)

O OperatorChars=.:%@!/[]+

# shall I avoid calling initgroups(3) because of high NIS costs?

#O DontInitGroups

# are group-writable :include: and .forward files (un)trustworthy?

#O UnsafeGroupWrites

# where do errors that occur when sending errors get sent?

#O DoubleBounceAddress=postmaster

# what user id do we assume for the majority of the processing?

#O RunAsUser=sendmail
# maximum number of recipients per SMTP envelope

#O MaxRecipientsPerMessage=100

# shall we get local names from our installed interfaces?

#O DontProbeInterfaces

# No Vrfy and expn

Opnovrfy

Opnoexpn

###########################

# Message precedences #

###########################

Pfirst-class=0

Pspecial-delivery=100

Plist=-30

Pbulk=-60

Pjunk=-100

#####################

# Trusted users #

#####################

# this is equivalent to setting class "t"

#Ft/etc/sendmail.ct
Troot

Tdaemon

Tuucp

#########################

# Format of headers #

#########################

H?P?Return-Path: <$g>

HReceived: $?sfrom $s $.$?_($?s$|from $.$_)

$.by $j ($v/$Z)$?r with $r$. id $i$?u

for $u; $|;

$.$b

H?D?Resent-Date: $a

H?D?Date: $a

H?F?Resent-From: $?x$x <$g>$|$g$.

H?F?From: $?x$x <$g>$|$g$.

H?x?Full-Name: $x

# HPosted-Date: $a

# H?l?Received-Date: $b

H?M?Resent-Message-Id: <$t.$i@$j>

H?M?Message-Id: <$t.$i@$j>

################################################################

# Mailing List Rules ( Base on Reply-To Header ) #

# Contoh Rule untuk memblock mailing list dengan #


# berdasarkan Header Reply-To dan disimpan di file milis #

################################################################

HReply-To: $>Check_RplyTo

D{MPat}REJECT

D{MMsg}User unknown

SCheck_RplyTo

R$* $: < $1 >

R$+ < $* > < $2 >

R< $* > $+ < $1 >

R<> $@ < @ >

R< $+ > $: $1

R$*@$={DomainMilisBlocking} $#error $: 553 ${MMsg} Block


Mailing-List dari Onelist

R$* $: $( milis $1 $)

R${MPat} $#error $: 553 ${MMsg}

###############################################################

# Mailing List Rules ( Base on Subject Header ) #

# Contoh untuk memblok mailinglist/E-mail #

# berdasarkan subject #

###############################################################
HSubject: $>Check_Subject

D{MPat1}[http://come.to/konyol]

D{MMsg1}User unknown

SCheck_Subject

R${MPat1} $* $#error $: 553 ${MMsg1}

######################################################################

######################################################################

#####

##### REWRITING RULES

#####

######################################################################

######################################################################

############################################

### Ruleset 3 - Name Canonicalization ###

############################################

S3

# handle null input (translate to <@> special case)

R$@ $@ <@>
# strip group: syntax (not inside angle brackets!) and trailing
semicolon

R$* $: $1 <@> mark addresses

R$* < $* > $* <@> $: $1 < $2 > $3 unmark <addr>

R@ $* <@> $: @ $1 unmark @host:...

R$* :: $* <@> $: $1 :: $2 unmark


node::addr

R:include: $* <@> $: :include: $1 unmark


:include:...

R$* [ $* : $* ] <@> $: $1 [ $2 : $3 ] unmark IPv6


addrs

R$* : $* [ $* ] $: $1 : $2 [ $3 ] <@> remark if


leading colon

R$* : $* <@> $: $2 strip colon if


marked

R$* <@> $: $1 unmark

R$* ; $1 strip trailing


semi

R$* < $* ; > $1 < $2 > bogus bracketed


semi

# null input now results from list:; syntax

R$@ $@ :; <@>

# strip angle brackets - note RFC733 heuristic to get innermost item

R$* $: < $1 > housekeeping <>

R$+ < $* > < $2 > strip excess on


left

R< $* > $+ < $1 > strip excess on


right

R<> $@ < @ > MAIL FROM:<>


case
R< $+ > $: $1 remove
housekeeping <>

# make sure <@a,@b,@c:user@d> syntax is easy to parse - undone later

R@ $+ , $+ @ $1 : $2 change all ","


to ":"

# localize and dispose of route-based addresses

R@ $+ : $+ $@ $>96 < @$1 > : $2 handle <route-


addr>

# find focus for list syntax

R $+ : $* ; @ $+ $@ $>96 $1 : $2 ; < @ $3 > list syntax

R $+ : $* ; $@ $1 : $2; list syntax

# find focus for @ syntax addresses

R$+ @ $+ $: $1 < @ $2 > focus on domain

R$+ < $+ @ $+ > $1 $2 < @ $3 > move gaze right

R$+ < @ $+ > $@ $>96 $1 < @ $2 > already


canonical

# do some sanity checking

R$* < @ $* : $* > $* $1 < @ $2 $3 > $4 nix colons in


addrs

# convert old-style addresses to a domain-based address

R$- ! $+ $@ $>96 $2 < @ $1 .UUCP > resolve uucp


names
R$+ . $- ! $+ $@ $>96 $3 < @ $1 . $2 > domain
uucps

R$+ ! $+ $@ $>96 $2 < @ $1 .UUCP > uucp subdomains

# if we have % signs, take the rightmost one

R$* % $* $1 @ $2 First make them


all @s.

R$* @ $* @ $* $1 % $2 @ $3 Undo all but


the last.

R$* @ $* $@ $>96 $1 < @ $2 > Insert < > and


finish

# else we must be a local name

R$* $@ $>96 $1

################################################

### Ruleset 96 - bottom half of ruleset 3 ###

################################################

S96

# handle special cases for local names

R$* < @ localhost > $* $: $1 < @ $j . > $2 no


domain at all

R$* < @ localhost . $m > $* $: $1 < @ $j . > $2 local


domain

R$* < @ localhost . UUCP > $* $: $1 < @ $j . > $2 .UUCP


domain
R$* < @ [ $+ ] > $* $: $1 < @@ [ $2 ] > $3 mark
[a.b.c.d]

R$* < @@ $=w > $* $: $1 < @ $j . > $3 self-


literal

R$* < @@ $+ > $* $@ $1 < @ $2 > $3 canon


IP addr

# if really UUCP, handle it immediately

# try UUCP traffic as a local address

R$* < @ $+ . UUCP > $* $: $1 < @ $[ $2 $] . UUCP . > $3

R$* < @ $+ . . UUCP . > $* $@ $1 < @ $2 . > $3

# pass to name server to make hostname canonical

R$* < @ $* $P > $* $: $1 < @ $[ $2 $3 $] > $4

# local host aliases and pseudo-domains are always canonical

R$* < @ $=w > $* $: $1 < @ $2 . > $3

R$* < @ $j > $* $: $1 < @ $j . > $2

R$* < @ $=M > $* $: $1 < @ $2 . > $3

R$* < @ $* $=P > $* $: $1 < @ $2 $3 . > $4

R$* < @ $* . . > $* $1 < @ $2 . > $3

##################################################

### Ruleset 4 - Final Output Post-rewriting ###


##################################################

S4

R$* <@> $@ handle <> and


list:;

# strip trailing dot off possibly canonical name

R$* < @ $+ . > $* $1 < @ $2 > $3

# eliminate internal code - should never get this far!

R$* < @ *LOCAL* > $* $1 < @ $j > $2

# externalize local domain info

R$* < $+ > $* $1 $2 $3 defocus

R@ $+ : @ $+ : $+ @ $1 , @ $2 : $3 <route-addr>
canonical

R@ $* $@ @ $1 ... and exit

# UUCP must always be presented in old form

R$+ @ $- . UUCP $2!$1 u@h.UUCP => h!u

# delete duplicate local names

R$+ % $=w @ $=w $1 @ $2 u%host@host =>


u@host
##############################################################

### Ruleset 97 - recanonicalize and call ruleset zero ###

### (used for recursive calls) ###

##############################################################

S97

R$* $: $>3 $1

R$* $@ $>0 $1

######################################

### Ruleset 0 - Parse Address ###

######################################

S0

R$* $: $>Parse0 $1 initial parsing

R<@> $#local $: <@> special case error msgs

R$* $: $>98 $1 handle local hacks

R$* $: $>Parse1 $1 final parsing

# Parse0 - do initial syntax checking and eliminate local addresses.

# This should either return with the (possibly modified) input

# or return with a #error mailer. It should not return with a

# #mailer other than the #error mailer.


#

SParse0

R<@> $@ <@> special case error msgs

R$* : $* ; <@> $#error $@ 5.1.3 $: "List:; syntax illegal for


recipient addresses"

#R@ <@ $* > < @ $1 > catch "@@host" bogosity

R<@ $+> $#error $@ 5.1.3 $: "User address required"

R$* $: <> $1

R<> $* < @ [ $+ ] > $* $1 < @ [ $2 ] > $3

R<> $* <$* : $* > $* $#error $@ 5.1.3 $: "Colon illegal in host name


part"

R<> $* $1

R$* < @ . $* > $* $#error $@ 5.1.2 $: "Invalid host name"

R$* < @ $* .. $* > $* $#error $@ 5.1.2 $: "Invalid host name"

# now delete the local info - note $=O to find characters that cause
forwarding

R$* < @ > $* $@ $>Parse0 $>3 $1 user@ => user

R< @ $=w . > : $* $@ $>Parse0 $>3 $2 @here:... -> ...

R$- < @ $=w . > $: $(dequote $1 $) < @ $2 . > dequote


"foo"@here

R< @ $+ > $#error $@ 5.1.3 $: "User address required"

R$* $=O $* < @ $=w . > $@ $>Parse0 $>3 $1 $2 $3 ...@here -> ...

R$- $: $(dequote $1 $) < @ *LOCAL* > dequote


"foo"

R< @ *LOCAL* > $#error $@ 5.1.3 $: "User address required"

R$* $=O $* < @ *LOCAL* >


$@ $>Parse0 $>3 $1 $2 $3 ...@*LOCAL* ->
...

R$* < @ *LOCAL* > $: $1

# Parse1 - the bottom half of ruleset 0.

SParse1

# handle numeric address spec

R$* < @ [ $+ ] > $* $: $>98 $1 < @ [ $2 ] > $3 numeric


internet spec

R$* < @ [ $+ ] > $* $#esmtp $@ [$2] $: $1 < @ [$2] > $3 still


numeric: send

# handle virtual users

R$+ < @ $=w . > $: < $(virtuser $1 @ $2 $@ $1 $: @ $) > $1 < @


$2 . >

R<@> $+ + $* < @ $* . >

$: < $(virtuser $1 + * @ $3 $@ $1 $: @ $) > $1


+ $2 < @ $3 . >

R<@> $+ + $* < @ $* . >

$: < $(virtuser $1 @ $3 $@ $1 $: @ $) > $1 + $2


< @ $3 . >

R<@> $+ < @ $+ . > $: < $(virtuser @ $2 $@ $1 $: @ $) > $1 < @ $2


. >

R<@> $+ $: $1

R< error : $- $+ > $* $#error $@ $(dequote $1 $) $: $2

R< $+ > $+ < @ $+ > $: $>97 $1


# short circuit local delivery so forwarded e-mail works

R$=L < @ $=w . > $#local $: @ $1 special local names

R$+ < @ $=w . > $#local $: $1 regular local


name

# resolve remotely connected UUCP links (if any)

# resolve fake top level domains by forwarding to other hosts

# pass names that still have a host to a smarthost (if defined)

R$* < @ $* > $* $: $>95 < $S > $1 < @ $2 > $3 glue on


smarthost name

# deal with other remote names

R$* < @$* > $* $#esmtp $@ $2 $: $1 < @ $2 >


$3 user@host.domain

# handle locally delivered names

R$=L $#local $: @ $1 special local


names

R$+ $#local $: $1 regular local


names

#######################################################################
####
### Ruleset 5 - special rewriting after aliases have been expanded
###

#######################################################################
####

S5

# deal with plussed users so aliases work nicely

R$+ + * $#local $@ $&h $: $1

R$+ + $* $#local $@ + $2 $: $1 + *

# prepend an empty "forward host" on the front

R$+ $: <> $1

# see if we have a relay or a hub

R< > $+ $: < $H > $1 try hub

R< > $+ $: < $R > $1 try relay

R< > $+ $: < > < $1 $&h > nope, restore


+detail

R< > < $+ + $* > $* < > < $1 > + $2 $3 find the user
part

R< > < $+ > + $* $#local $@ $2 $: @ $1 strip the extra


+

R< > < $+ > $@ $1 no +detail

R$+ $: $1 $&h add +detail


back in

R< local : $* > $* $: $>95 < local : $1 > $2 no host


extension
R< error : $* > $* $: $>95 < error : $1 > $2 no host
extension

R< $- : $+ > $+ $: $>95 < $1 : $2 > $3 < @ $2 >

R< $+ > $+ $@ $>95 < $1 > $2 < @ $1 >

###################################################################

### Ruleset 95 - canonify mailer:[user@]host syntax to triple ###

###################################################################

S95

R< > $* $@ $1 strip off null


relay

R< error : $- $+ > $* $#error $@ $(dequote $1 $) $: $2

R< local : $* > $* $>CanonLocal < $1 > $2

R< $- : $+ @ $+ > $*<$*>$* $# $1 $@ $3 $: $2<@$3> use literal user

R< $- : $+ > $* $# $1 $@ $2 $: $3 try qualified


mailer

R< $=w > $* $@ $2 delete local


host

R< $+ > $* $#relay $@ $1 $: $2 use unqualified


mailer

###################################################################

### Ruleset CanonLocal - canonify local: syntax ###

###################################################################

SCanonLocal
# strip trailing dot from any host name that may appear

R< $* > $* < @ $* . > $: < $1 > $2 < @ $3 >

# handle local: syntax - use old user, either with or without host

R< > $* < @ $* > $* $#local $@ $1@$2 $: $1

R< > $+ $#local $@ $1 $: $1

# handle local:user@host syntax - ignore host part

R< $+ @ $+ > $* < @ $* > $: < $1 > $3 < @ $4 >

# handle local:user syntax

R< $+ > $* <@ $* > $* $#local $@ $2@$3 $: $1

R< $+ > $* $#local $@ $2 $: $1

###################################################################

### Ruleset 93 - convert header names to masqueraded form ###

###################################################################

S93

# handle generics database

R$+ < @ $=G . > $: < $1@$2 > $1 < @ $2 . > @ mark

R$+ < @ *LOCAL* > $: < $1@$j > $1 < @ *LOCAL* > @ mark

R< $+ > $+ < $* > @ $: < $(generics $1 $: $) > $2 < $3 >

R< > $+ < @ $+ > $: < $(generics $1 $: $) > $1 < @ $2 >

R< $* @ $* > $* < $* > $@ $>3 $1 @ $2 found qualified


R< $+ > $* < $* > $: $>3 $1 @ *LOCAL* found
unqualified

R< > $* $: $1 not found

# special case the users that should be exposed

R$=E < @ *LOCAL* > $@ $1 < @ $j . > leave exposed

R$=E < @ $=M . > $@ $1 < @ $2 . >

R$=E < @ $=w . > $@ $1 < @ $2 . >

# handle domain-specific masquerading

R$* < @ $=M . > $* $: $1 < @ $2 . @ $M > $3 convert


masqueraded doms

R$* < @ $=w . > $* $: $1 < @ $2 . @ $M > $3

R$* < @ *LOCAL* > $* $: $1 < @ $j . @ $M > $2

R$* < @ $+ @ > $* $: $1 < @ $2 > $3 $M is null

R$* < @ $+ @ $+ > $* $: $1 < @ $3 . > $4 $M is not null

###################################################################

### Ruleset 94 - convert envelope names to masqueraded form ###

###################################################################

S94

R$* < @ *LOCAL* > $* $: $1 < @ $j . > $2

###################################################################

### Ruleset 98 - local part of ruleset zero (can be null) ###

###################################################################
S98

# addresses sent to foo@host.REDIRECT will give a 551 error code

R$* < @ $+ .REDIRECT. > $: $1 < @ $2 . REDIRECT . > < ${opMode}


>

R$* < @ $+ .REDIRECT. > <i> $: $1 < @ $2 . REDIRECT. >

R$* < @ $+ .REDIRECT. > < $- > $# error $@ 5.1.1 $: "551 User has
moved; please try " <$1@$2>

######################################################################

### LookUpDomain - search for domain in access database

###

### Parameters:

### <$1> - key (domain name)

### <$2> - default (what to return if not found in db)

### <$3> - passthru (additional data passed unchanged


through)

######################################################################

SLookUpDomain

R<$+> <$+> <$*> $: < $(access $1 $: ? $) > <$1> <$2> <$3>

R<?> <$+.$+> <$+> <$*> $@ $>LookUpDomain <$2> <$3> <$4>

R<?> <$+> <$+> <$*> $@ <$2> <$3>

R<$*> <$+> <$+> <$*> $@ <$1> <$4>


######################################################################

### LookUpAddress - search for host address in access database

###

### Parameters:

### <$1> - key (dot quadded host address)

### <$2> - default (what to return if not found in db)

### <$3> - passthru (additional data passed through)

######################################################################

SLookUpAddress

R<$+> <$+> <$*> $: < $(access $1 $: ? $) > <$1> <$2> <$3>

R<?> <$+.$-> <$+> <$*> $@ $>LookUpAddress <$1> <$3> <$4>

R<?> <$+> <$+> <$*> $@ <$2> <$3>

R<$*> <$+> <$+> <$*> $@ <$1> <$4>

######################################################################

### ParseRecipient - Strip off hosts in $=R as well as possibly

### $* $=m or the access database.

### Check user portion for host separators.

###

### Parameters:

### $1 - full recipient address

###

### Returns:

### parsed, non-local-relaying address

######################################################################
SParseRecipient

R$* $: <?> $>Parse0 $>3 $1

R<?> $* < @ $* . > <?> $1 < @ $2 > strip trailing dots

R<?> $- < @ $* > $: <?> $(dequote $1 $) < @ $2 > dequote


local part

# if no $=O character, no host in the user portion, we are done

R<?> $* $=O $* < @ $* > $: <NO> $1 $2 $3 < @ $4>

R<?> $* $@ $1

R<NO> $* < @ $* $=R > $: <RELAY> $1 < @ $2 $3 >

R<NO> $* < @ $* > $: $>LookUpDomain <$2> <NO> <$1 < @ $2 >>

R<$+> <$+> $: <$1> $2

R<RELAY> $* < @ $* > $@ $>ParseRecipient $1

R<$-> $* $@ $2

######################################################################

### check_relay - check hostname/address on SMTP startup

######################################################################

SLocal_check_relay

Scheck_relay

R$* $: $1 $| $>"Local_check_relay" $1

R$* $| $* $| $#$* $#$3

R$* $| $* $| $* $@ $>"Basic_check_relay" $1 $| $2
SBasic_check_relay

# check for deferred delivery mode

R$* $: < ${deliveryMode} > $1

R< d > $* $@ deferred

R< $* > $* $: $2

R$+ $| $+ $: $>LookUpDomain < $1 > <?> < $2 >

R<?> < $+ > $: $>LookUpAddress < $1 > <OK> < $1 >

R<OK> < $* > $: $1

R<RELAY> < $* > $: $1

R<REJECT> $* $#error $@ 5.7.1 $: "550 Access denied"

R<DISCARD> $* $#discard $: discard

R<$+> $* $#error $@ 5.7.1 $: $1

######################################################################

### check_mail - check SMTP `MAIL FROM:' command argument

######################################################################

SLocal_check_mail

Scheck_mail

R$* $: $1 $| $>"Local_check_mail" $1

R$* $| $#$* $#$2

R$* $| $* $@ $>"Basic_check_mail" $1
SBasic_check_mail

# check for deferred delivery mode

R$* $: < ${deliveryMode} > $1

R< d > $* $@ deferred

R< $* > $* $: $2

R<> $@ <OK>

R$* $: <?> $>Parse0 $>3 $1 make domain


canonical

R<?> $* < @ $+ . > $* <?> $1 < @ $2 > $3 strip trailing


dots

# Handle user from ut.astra.co.id

R<?> $* < @ $=w > $* $: <USER $( userut $1 $: ? $)> $1 < @ $2 > $3

R<USER ?> $* < @ $* > $* $#error $@ 5.7.1 $: "550 Access Denied"

R< $* > $* < @ $* > $* $: <?> $2 < @ $3 > $4

# handle non-DNS hostnames (*.bitnet, *.decnet, *.uucp, etc)

R<?> $* < $* $=P > $* $: <OK> $1 < @ $2 $3 > $4

R<?> $* < @ $+ > $* $: <? $(resolve $2 $: $2 <PERM> $) > $1 < @ $2


> $3

R<? $* <$->> $* < @ $+ > $*

$: <$2> $3 < @ $4 > $5

# handle case of @localhost on address

R<$+> $* < @localhost > $: < ? $&{client_name} > <$1> $2 < @localhost >

R<$+> $* < @localhost.$m >


$: < ? $&{client_name} > <$1> $2 <
@localhost.$m >

R<$+> $* < @localhost.UUCP >

$: < ? $&{client_name} > <$1> $2 <


@localhost.UUCP >

R<? $=w> <$+> $* <?> <$2> $3

R<? $+> <$+> $* $#error $@ 5.5.4 $: "553 Real domain name


required"

R<?> <$+> $* $: <$1> $2

# lookup localpart (user@)

R<$+> $* < @ $+ > $* $: <USER $(access $2@ $: ? $) > <$1> $2 < @ $3


> $4

# no match, try full address (user@domain rest)

R<USER ?> <$+> $* < @ $* > $*

$: <USER $(access $2@$3$4 $: ? $) > <$1> $2 < @


$3 > $4

# no match, try address (user@domain)

R<USER ?> <$+> $+ < @ $+ > $*

$: <USER $(access $2@$3 $: ? $) > <$1> $2 < @


$3 > $4

# no match, try (sub)domain (domain)

R<USER ?> <$+> $* < @ $+ > $*

$: $>LookUpDomain <$3> <$1> <>

# check unqualified user in access database

R<?> $* $: <USER $(access $1@ $: ? $) > <?> $1

# retransform for further use

R<USER $+> <$+> $* $: <$1> $3


# handle case of no @domain on address

R<?> $* $: < ? $&{client_name} > $1

R<?> $* $@ <OK> ...local


unqualed ok

R<? $+> $* $#error $@ 5.5.4 $: "553 Domain name required"

...remote is not

# check results

R<?> $* $@ <OK>

R<OK> $* $@ <OK>

R<TEMP> $* $#error $@ 4.1.8 $: "451 Sender domain must


resolve"

R<PERM> $* $#error $@ 5.1.8 $: "501 Sender domain must


exist"

R<RELAY> $* $@ <RELAY>

R<DISCARD> $* $#discard $: discard

R<REJECT> $* $#error $@ 5.7.1 $: "550 Access denied"

R<$+> $* $#error $@ 5.7.1 $: $1 error from


access db

######################################################################

### check_rcpt - check SMTP `RCPT TO:' command argument

######################################################################

SLocal_check_rcpt

Scheck_rcpt

R$* $: $1 $| $>"Local_check_rcpt" $1

R$* $| $#$* $#$2

R$* $| $* $@ $>"Basic_check_rcpt" $1
SBasic_check_rcpt

# check for deferred delivery mode

R$* $: < ${deliveryMode} > $1

R< d > $* $@ deferred

R< $* > $* $: $2

R$* $: $>ParseRecipient $1 strip relayable


hosts

# blacklist local users or any host from receiving mail

R$* $: <?> $1

R<?> $+ < @ $=w > $: <> <USER $1> <FULL $1@$2> <HOST $2> <$1 < @
$2 >>

R<?> $+ < @ $* > $: <> <FULL $1@$2> <HOST $2> <$1 < @ $2 >>

R<?> $+ $: <> <USER $1> <$1>

R<> <USER $+> $* $: <$(access $1 $: $)> $2

R<> <FULL $+> $* $: <$(access $1 $: $)> $2

R<OK> <FULL $+> $* $: <$(access $1 $: $)> $2

R<> <HOST $+> $* $: <$(access $1 $: $)> $2

R<OK> <HOST $+> $* $: <$(access $1 $: $)> $2

R<> <$*> $: $1

R<OK> <$*> $: $1

R<RELAY> <$*> $: $1

R<REJECT> $* $#error $@ 5.2.1 $: "550 Mailbox disabled for


this recipient"

R<$+> $* $#error $@ 5.2.1 $: $1 error


from access db
# anything terminating locally is ok

R$+ < @ $=w > $@ OK

R$+ < @ $* $=R > $@ OK

R$+ < @ $* > $: $>LookUpDomain <$2> <?> <$1 < @ $2 >>

R<RELAY> $* $@ RELAY

R<$*> <$*> $: $2

# check for local user (i.e. unqualified address)

R$* $: <?> $1

R<?> $+ < @ $+ > $: <REMOTE> $1 < @ $2 >

# local user is ok

R<?> $+ $@ OK

R<$+> $* $: $2

# anything originating locally is ok

R$* $: <?> $&{client_name}

# check if bracketed IP address (forward lookup != reverse lookup)

R<?> [$+] $: <BAD> [$1]

# pass to name server to make hostname canonical

R<?> $* $P $: <?> $[ $1 $2 $]

R<$-> $* $: $2

R$* . $1 strip trailing


dots

R$@ $@ OK
R$=w $@ OK

R$* $=R $@ OK

R$* $: $>LookUpDomain <$1> <?> <$1>

R<RELAY> $* $@ RELAY

R<$*> <$*> $: $2

# check IP address

R$* $: $&{client_addr}

R$@ $@ OK originated locally

R0 $@ OK originated locally

R$=R $* $@ OK relayable IP address

R$* $: $>LookUpAddress <$1> <?> <$1>

R<RELAY> $* $@ RELAY relayable IP address

R<$*> <$*> $: $2

R$* $: [ $1 ] put brackets around


it...

R$=w $@ OK ... and see if it is


local

# anything else is bogus

R$* $#error $@ 5.7.1 $: "550 Relaying denied"

######################################################################

######################################################################

#####
##### MAILER DEFINITIONS

#####

######################################################################

######################################################################

##################################################

### Local and Program Mailer specification ###

##################################################

##### @(#)local.m4 8.30 (Berkeley) 6/30/98 #####

Mlocal, P=/bin/mail, F=lsDFMAw5:/|@qrmn9, S=10/30, R=20/40,

T=DNS/RFC822/X-Unix,

A=mail -r $g -d $u

Mprog, P=/bin/sh, F=lsDFMoqeu9, S=10/30, R=20/40, D=$z:/,

T=X-Unix,

A=sh -c $u

# Envelope sender rewriting

S10

R<@> $n errors to mailer-daemon

R@ <@ $*> $n temporarily bypass Sun


bogosity
R$+ $: $>50 $1 add local domain if
needed

R$* $: $>94 $1 do masquerading

# Envelope recipient rewriting

S20

R$+ < @ $* > $: $1 strip host part

# Header sender rewriting

S30

R<@> $n errors to mailer-daemon

R@ <@ $*> $n temporarily bypass Sun


bogosity

R$+ $: $>50 $1 add local domain if


needed

R$* $: $>93 $1 do masquerading

# Header recipient rewriting

S40

R$+ $: $>50 $1 add local domain if


needed
#

# Common code to add local domain name (only if always-add-domain)

S50

R$* < @ $* > $* $@ $1 < @ $2 > $3 already fully


qualified

R$+ $@ $1 < @ *LOCAL* > add local


qualification

#####################################

### SMTP Mailer specification ###

#####################################

##### @(#)smtp.m4 8.38 (Berkeley) 5/19/98 #####

Msmtp, P=[IPC], F=mDFMuX, S=11/31, R=21, E=\r\n, L=990,

T=DNS/RFC822/SMTP,

A=IPC $h

Mesmtp, P=[IPC], F=mDFMuXa, S=11/31, R=21, E=\r\n, L=990,

T=DNS/RFC822/SMTP,

A=IPC $h

Msmtp8, P=[IPC], F=mDFMuX8, S=11/31, R=21, E=\r\n, L=990,

T=DNS/RFC822/SMTP,

A=IPC $h

Mrelay, P=[IPC], F=mDFMuXa8, S=11/31, R=61, E=\r\n, L=2040,

T=DNS/RFC822/SMTP,

A=IPC $h
#

# envelope sender rewriting

S11

R$+ $: $>51
$1 sender/recipient common

R$* :; <@> $@ list:; special


case

R$* $: $>61 $1 qualify


unqual'ed names

R$+ $: $>94 $1 do masquerading

# envelope recipient rewriting -

# also header recipient if not masquerading recipients

S21

R$+ $: $>51
$1 sender/recipient common

R$+ $: $>61 $1 qualify


unqual'ed names

# header sender and masquerading header recipient rewriting

#
S31

R$+ $: $>51
$1 sender/recipient common

R:; <@> $@ list:; special


case

# do special header rewriting

R$* <@> $* $@ $1 <@> $2 pass null host


through

R< @ $* > $* $@ < @ $1 > $2 pass route-addr


through

R$* $: $>61 $1 qualify


unqual'ed names

R$+ $: $>93 $1 do masquerading

# convert pseudo-domain addresses to real domain addresses

S51

# pass <route-addr>s through

R< @ $+ > $* $@ < @ $1 > $2 resolve <route-


addr>

# output fake domains as user%fake@relay

# do UUCP heuristics; note that these are shared with UUCP mailers
R$+ < @ $+ .UUCP. > $: < $2 ! > $1 convert to UUCP
form

R$+ < @ $* > $* $@ $1 < @ $2 > $3 not UUCP form

# leave these in .UUCP form to avoid further tampering

R< $&h ! > $- ! $+ $@ $2 < @ $1 .UUCP. >

R< $&h ! > $-.$+ ! $+ $@ $3 < @ $1.$2 >

R< $&h ! > $+ $@ $1 < @ $&h .UUCP. >

R< $+ ! > $+ $: $1 ! $2 < @ $Y > use UUCP_RELAY

R$+ < @ $+ : $+ > $@ $1 < @ $3 > strip mailer:


part

R$+ < @ > $: $1 < @ *LOCAL* > if no UUCP_RELAY

# common sender and masquerading recipient rewriting

S61

R$* < @ $* > $* $@ $1 < @ $2 > $3 already fully


qualified

R$+ $@ $1 < @ *LOCAL* > add local


qualification

# relay mailer header masquerading recipient rewriting

#
S71

R$+ $: $>61 $1

R$+ $: $>93 $1

sendmail.cf di SuSE

Untuk menghasilkan file sendmail.cf di SuSE, bisa dilakukan secara otomatis oleh yast.
Lewat account root, jalankan yast.

# yast

Masuk kebagian System Administration - Network Configuration - Configure


Sendmail. Disitu sudah ada pilihan :

1. Host with permanent network connection


2. Single user machine without network connection
3. Host with temporarily network connection (modem/ISDN)
4. Do not instal /etc/sendmail.cf

Pilih sesuai dengan kebutuhan anda, dan yast secara otomatis akan membuat file
sendmail.cf yang sederhana, namun dapat langsung difungsikan.

sendmail.cf di RedHat

Untuk RedHat, file konfigurasi sendmail.cf bisa dibuat melalui LinuxConf, pada bagian
Config - Server Task - Sendmail Basic Information. Pilihan yang ada akan
memudahkan anda untuk mengkonfigurasikannya :

• Present your system as

Nama domain utama yang dipergunakan.

• Accept e-mail for your domain

Biasanya sendmail hanya menerima domain name yang benar/FQDN (Fully


Qualified Domain Name). Dengan mengaktifkan pilihan ini, sendmail juga akan
menerima e-mail dengan domain yang didahului nama server.

• Mail Server
Nama server mail utama. Hal ini bisa terjadi jika dalam satu intranet terdapat
banyak server mail.

• Mail Gateway

Nama server mail yang meneruskan e-mail anda (fasilitas forward). Hal ini
berlaku misalnya pada jaringan dengan satu mail server yang meneruskan semua
e-mail yang keluar (ke Internet)

• Mail Gateway Protocol

Protocol yang dipergunakan untuk menghubungi mail gateway. Untuk ESMTP,


jangan lupa untuk mengisikan nama domain yang lengkap. Sedangkan UUCP
(Unix to Unix Copy Protocol) cukup diisikan nama server.

• Features

Beberapa pilihan untuk layanan sendmail. Pilihan tersebut adalah :

• Relay Control

Mengontrol siapa saja yang boleh menggunakan sendmail anda untuk relay.

• No batching for uucp mail

E-mail yang menggunakan UUCP akan langsung dikirimkan (tidak diantrikan


terlebih dahulu). Hal ini mengurangi lalu lintas dalam jaringan.

• Max size for UUCP users

Ukuran maksimal untuk pengguna UUCP.

• Deliver locally to users

Dipergunakan biasanya untuk pseudo user.

• No masquerade for users

Nama user yang tidak dimasquerade (lihat pilihan present your system as).

• Special routing database enabled

Pilih jika ingin menggunakan routing khusus.

• Special routing database format


Database yang digunakan oleh sendmail. Biasanya menggunakan format dbm.

• Local Delivery Agent

Pilih jika ingin menggunakan program lain untuk mendistribusikan e-mails ecara
lokal. Biarkan kosong dan linuxconf akan melakukan probing, dan memilihkan
program yang cocok untuk mesin linux anda.

• Don't try to deliver immediately

E-mail tidak langsung dikirim, melainkan diantrikan terlebih dahulu (dengan


perintah sendmail -q)

• Process queue every (minutes)

Interval waktu untuk mengirimkan e-mail yang antri (qeued).

• Support bogus mail client (HELO)

Beberapa klien e-mail menghasilkan urutan HELO secara tidak beraturan.


Biasanya sendmail akan menolak e-mailnya. Dengan pilihan ini sendmail akan
lebih toleran dan menerimanya sebagai e-mail yang valid.

Agar dapat di Relay jangan lupa dapftarkan domain mail server yang bersangkutan ke file
/etc/sendmail.cw.

qmail
qmail merupakan pengganti yang lebih modern dari sendmail, disusun oleh Dan
Bernstein. Beberapa situs besar yang menggunakan qmail diantaranya Hotmail (untuk
outgoing mail), USA.net (untuk outgoing e-mail), Yahoo! mail, Network Solutions,
listserv.acsu.buffalo.edu (menggunakan qmail sejak 1996), XOOM.com,
onelist.com (yang tellah merger dengan E-group, perusahaan besar penyedia mailing
list gratis), Red Hat's mailing lists, Hypermart.net, dan FSmail.net.

Subsections

• Instalasi qmail
• Seting mbox
• Seting Maildir
• Test mengirim e-mail
• Seting Klien Windows 9x atau Windows NT
• Program Tambahan qmail (Add on)

Instalasi qmail

Pertama, download terlebih dahulu program qmail dalam bentuk kode sumber (source
code). Daftar server yang menyediakan qmail dapat Anda lihat di
http://www.qmail.org dan dapat Anda pilih mirror yang terdekat. Saat ini mirror di
Indonesia yang masih aktif adalah http://qmail.indosite.co.id.

Catatan :
Binary qmail dalam format RPM (Redhat Package Manager) dapat diperoleh di
ftp://moni.msci.memphis.edu/pub/qmail. Yang akan Anda bahas di sini adalah
instalasi program yang mempunyai format kode sumber (source code)
Setelah download programnya secara lengkap, Anda mulai dengan mengekstrak dari
bentuk zip dan tar ball. Dianjurkan untuk melakukan proses instalasi sebagai root.

# gunzip qmail-1.0.03.tar.gz | tar xvf-

Kemudian sebelum instalasi, tentukan terlebih dahulu direktori utama yang menyimpan
program qmail. Secara default adalah /var/qmail. Selain itu, jika server tempat Anda
instalasi sudah menjalankan sendmail sebagai MTA, dianjurkan untuk menyimpan
terlebih dahulu surat-surat yang masih antre untuk dikirim. Atau lebih aman lagi matikan
daemon sendmail.

Setelah itu, buat direktori tempat di mana qmail disimpan.

# mkdir /var/qmail

Langkah selanjutnya, buat qmail user dan grup sebelum instalasi dimulai.

# groupadd nofiles

# useradd -g nofiles -d /var/qmail/alias alias

# useradd -g nofiles -d /var/qmail qmaild

# useradd -g nofiles -d /var/qmail qmaill

# useradd -g nofiles -d /var/qmail qmailp

# groupadd qmail

# useradd -g qmail -d /var/qmail qmailq

# useradd -g qmail -d /var/qmail qmailr

# useradd -g qmail -d /var/qmail qmails


Setelah itu kompilasi dapat dijalankan.

qmail-1.0.03#./make setup check

qmail-1.0.03#./config

Selain perintah config, untuk mengkonfigurasikan qmail dalam mesin Anda, Anda dapat
menjalankan perintah config-fast nama.domain.Anda sebagai alternatif instalasi lebih
singkat.

qmail-1.0.03#./config-fast nama.domain.anda

Nama domain ini akan dipergunakan secara default dalam pengalamatan domain e-
mailnya. Anda bisa bikin sembarang untuk implementasi intranet. Dengan perintah
config-fast nama domain ini, skrip config akan menuliskan nama.domain.anda ke dalam
file control/me, control/local dan control/rcpthosts sehingga qmail secara
default akan menerima e-mail dari nama.domain.anda. Untuk pemberian nama domain
yang resmi (bisa diakses dari luar) harus menggunakan nama domain yang memenuhi
standar (Fully Qualified Domain Name). Konsultasikan dengan ISP atau penyedia jasa
hosting untuk bisa memperoleh nama domain resmi.

Catatan :
Untuk lebih mengenal direktori direktori yang dibuat oleh qmail, Anda dapat membaca
FAQ yang terletak di /var/qmail/doc setelah instalasi selesai.
Selesai menjalankan skrip config bisa dikatakan proses instalasi telah selesai. Namun
sebelum Anda menjalankan qmail ada beberapa hal yang perlu disetup.

Pertama Anda perlu membuat alias. Alias akan menangani e-mail dengan user tidak
dikenal. qmail secara default tidak membundel paketnya untuk mendukung /etc/alias.
Jika Anda ingin menggunakan file tersebut, maka perlu ditambahkan aplikasi pendukung
bernama fast forward. Aplikasi ini bersama aplikasi pendukung lainnya dapat Anda
peroleh di homepage qmail. Untuk mengaktifkan alias, jalankan perintah berikut :

#touch alias/qmail-postmaster

#chmod 644 alias/qmail-postmaster

#touch alias/qmail-mailer-daemon

#chmod 644 alias/qmail-mailer-daemon

#touch alias/qmail-root

#chmod 644 alias/qmail-root

Alias postmaster akan menangani e-mail yang ditujukan kepada postmaster. Alias mailer
daemon akan menangani setiap e-mail yang bounce (tidak bisa diteruskan). Sedangkan
alias root dipergunakan untuk menangani e-mail yang ditujukan kepada root. Anda dapat
menambahkan alias lainnya, seperti qmail-default yang akan menerima setiap e-mail
dengan username yang tidak dikenal.

Langkah berikutnya adalah seting Mailbox. Pada umumnya, Mail Transfer Agent
menggunakan dua format dalam menangani e-mail.

1. Format mbox

E-mail disimpan dalam sebuah file. Setiap kali ada surat masuk atau keluar,
ditambahkan (embed) secara otomatis kedalam file yang bersangkutan. Dengan
demikian ukuran file mbox ini bertambah setiap kali ada penambahan e-mail.

Kelemahan dari format ini, jika di tengah-tengah download e-mail ada gangguan,
maka pada sesi berikutnya Mail User Agent (MUA/Klien e-mail; program untuk
mengirim, mendownload dan membaca e-mail) akan mencoba mengulang lagi
download e-mailnya. Sesi terdahulu yang terputus di tengah jalan dianggap gagal.
Selain itu kemungkinan besar format mbox akan rusak.

2. Format Maildir

Maildir merupakan format yang anti crash, dan lebih reliabel dibandingkan
format mbox. Namun belum banyak MUA (Mail User Agent - klien e-mail) yang
mendukung format maildir ini.

qmail mendukung kedua format tersebut. Anda diberi kebebasan untuk memilihnya,
namun dianjurkan untuk menggunakan format maildir.

Seting mbox

Sendmail dalam mendistribusikan e-mail secara lokal menggunakan binmail. Secara


default, binmail akan mengirimkan mail ke dalam folder/var/spool/mail/nama_user.
qmail menggunakan qmail-local untuk distribusi lokal, dan langsung menyimpannya
kenama_user/Mailbox. Prosedur untuk menggantikan dari
/var/spool/mail/nama_user adalah :

1. Pindahkan semua /var/spool/mail/nama_user ke dalam nama_user/Mailbox.


Demi keamanan, jalankan dalam proses single mode. Jika server masih dalam
keadaan berjalan, berikan pesan broadcast kepada semua user untuk keluar dari
jaringan.

# init 1 (menuju modus singel user)

# cd /var/spool/mail
# cp nama_user /home/nama_user/Mailbox

# rm nama_user

2. Kemudian sebagai root buat link simbolik dari nama_user/Mailbox ke dalam


/var/spool/mail/nama_user. Lakukan ini untuk semua user. Berikan mode
1777 untuk folder /var/spool/mail untuk menghindarkan penghapusan link
secara tidak sengaja.

# cd /home/nama_user

# ln Mailbox /var/spool/mail/nama_user

Lakukan ini untuk semua user. Seting pada klien Windows 9x atau Windows NT
akan dibahas dalam bagian lain.

Di beberapa program mail, tidak dapat menangani link simbolik. Untuk itu harus
langsung ditujukan ke nama_user/Mailbox daripada /var/spool/mail/nama_user
pada saat chek e-mail. Untuk program procmail misalnya, ganti
SYSTEM_MBOX dalam config.h dan lakukan kompilasi ulang. Pada beberapa
versi terbaru, Anda dapat mendefinisikan MAILSPOOLHOME dalam
src/authenticate.c.

Untuk mengoptimalkan kemampuan klien e-mail membaca e-mail dalam jumlah


banyak (yang kadang-kadang menjadi lebih lambat karena membaca link
simbolik dari Mailbox), Anda dapat tujukan langsung klien e-mailnya untuk
membaca nama_user/Mailbox.

3. Sebagian besar klien e-mail, masukkan "setenv MAIL $HOME/Mailbox" jika


menggunakan shell csh ke dalam .cshrc dan "MAIL=$HOME/Mailbox; export
MAIL" jika menggunakan shell bash ke dalam .profile secara umum.
4. elm: ganti "mailbox" ke "Mailbox" pada baris 388 dari file newmbox.c dan
lakukan kompilasi ulang. elm dalam membaca e-mail selalu melihat $MAIL, tapi
jika Anda tidak mengganti ini, maka elm akan mengalami masalah saat dua user
membaca mail secara simultan.
5. pine: Masukkan "inbox-path=Mailbox" dalam file pine.conf. Atau jika masing-
masing user mempunyai konfigurasi sendiri, minta kepada user untuk mengganti
konfigurasi inbox-path-nya.

Seting Maildir

Untuk menggunakan format Maildir dalam menangani setiap mail yang masuk ke alamat
Anda, jalankan perintah :

$ maildirmake $HOME/Maildir

$ echo ./Maildir/ > /.qmail


Jangan lupa setelah Maildir tambahkan slash sebagaimana dituliskan di atas. Jalankan
proses tersebut terhadap setiap user. Untuk MUA (mail client) yang hanya mendukung
format mbox, qmail menyertakan program maildir2mbox yang dijalankan bersama
wrapper elq dan pineq. Dengan demikian, setiap kali Anda menjalankan pine atau elm,
wrapper tersebut akan memanggil program maildir2mbox, sehingga MUA favorit Anda
tidak akan bermasalah menggunakan format maildir.

Catatan:
Variasi dapat dibuat dengan menerapkan format Maildir pada user tertentu, dan format
mbox pada user lainnya. Penerapan ini cukup ideal, jika anda mempunyai user yang
mengambil e-mail lewat POP3 secara remote dan lokal. Untuk user yang mengambil e-
mail secara remote, diterapkan format maildir, dan yang lokal diterapkan format mbox.
Langkah selanjutnya adalah mengkopi file-file yang berada dalam
/var/qmail/boot/home ke dalam /var/qmail/rc.

# cd /var/qmail/boot/home

# cp * /var/qmail/rc.

Test mengirim e-mail

Selesai mengkopi, Anda persiapkan untuk test kirim e-mail antar user. Langkah pertama
adalah menjalankan program qmail.

#csh -cf '/var/qmail/rc &'

Jika qmail sudah berjalan, maka dalam gile log Anda (biasanya /var/log/messages)
akan memberikan pesan :

qmail: status: local 0/10 remote 0/20

Jalankan perintah ps untuk mengetahui program-rogram qmail yang sedang berjalan.


Suite qmail yang siap melayani pengiriman mail Anda adalah :

qmail-send, dijalankan oleh qmails;

qmail-lspawn, dijalankan oleh root;

qmail-rspawn, dijalankan oleh qmailr;

and qmail-clean, dijalankan oleh qmailq;

splogger, dijalankan oleh qmaill, untuk mencatat aktivitas qmail ke


file log.

$ ps ax | more

(grep hasil ps ax)


Jika semua program qmail sudah berjalan dengan baik, coba kirim e-mail secara lokal.
Gantikan aku berikut kepada salah satu username yang terdaftar di mesin Anda (atau
username Anda).

$ echo to: aku | /var/qmail/bin/qmail-inject

Segera setelah Anda jalankan perintah di atas, file log Anda akan mencatat kurang lebih
sebagai berikut :

qmail: new msg 53

qmail: info msg 53: bytes 246 from <aku@domain.com> qp 20345 uid 666

qmail: starting delivery 1: msg 53 to local aku@domain.com

qmail: status: local 1/10 remote 0/20

qmail: delivery 1: success: did_1+0+0/

qmail: status: local 0/10 remote 0/20

qmail: end msg 53

Catatan :
53 adalah nomor inode dan 20345 adalah nomor proses. Di komputer Anda mungkin
akan tampak lain. Sedangkan domain.com adalah domain yang Anda konfigurasikan
pada saat instalasi.
Test berikutnya adalah mengirim e-mail kepada user sembarang (tidak terdaftar sebagai
user).

$ echo to: sembarangan | /var/qmail/bin/qmail-inject

Pada file log Anda akan tampak sebagai berikut :

qmail: new msg 53

qmail: info msg 53: bytes 246 from <aku@domain.com> qp 20351 uid 666

qmail: starting delivery 2: msg 53 to local sembarangan@domain.com

qmail: status: local 1/10 remote 0/20

qmail: delivery 2: failure: No_such_address.__#5.1.1_/

qmail: status: local 0/10 remote 0/20

qmail: bounce msg 53 qp 20357

qmail: end msg 53


qmail: new msg 54

qmail: info msg 54: bytes 743 from <> qp 20357 uid 666

qmail: starting delivery 3: msg 54 to local aku@domain.com

qmail: status: local 1/10 remote 0/20

qmail: delivery 3: success: did_1+0+0/

qmail: status: local 0/10 remote 0/20

qmail: end msg 54

Segera setelah itu, buka mailbox Anda, maka akan terlihat di situ e-mail yang bounce
(balik lagi).

Jika mesin Linux Anda mempunyai nomor IP resmi dan terdaftar dalam salah satu name
server, maka Anda dapat melakukan seting MX Record. Namun jika server Linux Anda
mengunakan dial-up untuk koneksi ke internet, maka solusinya adalah menggunakan
program tambahan (add on) untuk qmail yang bernama serialmail dan tcp-ucspi.
Silakan lihat di bagian program tambahan qmail.

Selain menjalankan test lewat qmail-inject, Anda dapat mengirim e-mail langsung lewat
smtp qmail.

% telnet 127.0.0.1 25

Trying 127.0.0.1...

Connected to 127.0.0.1.

Escape character is ']'.

220 domain ESMTP

helo katro

250 nama.domain.Anda

mail <aku@nama.domain.Anda>

250 ok

rcpt <aku@nama.domain.Anda>

250 ok

data
354 go ahead

Subject: testing

Ngetes doang nehhh.

250 ok 812345679 qp 12345

quit

221 nama.domain.Anda

Connection closed by foreign host.

Untuk meyakinkan qmail Anda berjalan dengan baik, lakukan beberapa test terhadap user
langsung menggunakan klien e-mail. Untuk workstation Windows 9x atau NT, klien e-
mailnya harus disetup terlebih dahulu untuk bisa memanfaatkan qmail yang baru saja
berjalan.

Seting Klien Windows 9x atau Windows NT

Klien Windows 9x ataupun Windows NT dapat menggunakan qmail sebagai mail


servernya. Seting umum yang harus dilakukan adalah memasukkan nomor IP (atau nama
mesin qmail yang terdaftar dalam MX record jika server Anda menjalankan name server)
ke dalam konfigurasi smtp dan pop3 server.

Pada klien Outlook Express, buka tools-account-mail. Buat account baru, dengan
aturan :

• Username : isi dengan username yang dipakai untuk login ke mesin linux
• Alamat e-mail : namauser@nama.domain. Anda (ingat saat instalasi qmail
./config-fast nama.domain.Anda)
• Smtp server, isi dengan nomor IP mesin linux Anda
• Pop3 server, sama dengan di atas, isi dengan nomor IP mesin linux.

Selanjutnya, Anda bisa menjalankan beberapa tes untuk saling berkirim satu sama lain
dalam satu jaringan. Untuk MUA yang lain, seperti Eudora, Pegasus, Netscape
Messenger, pada prinsipnya sama. Username, alamat e-mail, smtp server dan pop3 server.

Program Tambahan qmail (Add on)

1. serialmail
Program yang mengirimkan E-mail dari Maildir ke SMTP luar. Program ini cocok
jika anda menggunakan koneksi dial up ke Internet.

2. ucspi-tcp

Program tcpserver yang dipergunakan untuk menjalankan qmail (selain lewat


inetd).

3. daemontools

Program yang mengadministrasi qmail sebagai daemon. Misalnya menghentikan


dan memulai kembali daemon qmail, penambahan fasilitas logging yang lebih
komprehensif.

4. qmailanalog

Program yang membantu menganalisa aktivitas qmail. Misalnya berapa banyak e-


mail yang didistribusikan? Siapa yang menerima e-mail? Kapan? Apakah e-mail
berhasil dikirim? Atau gagal? Apa sebab kegagalannya? Dan sebagainya.

5. dot-forward

Program yang membaca file .forward yang ada di Sendmail di bawah qmail.

6. fastforward

Program yang menangani forwarding di qmail dengan menggunakan database


cdb.

7. checkpassword

Program yang memberikan metode pengecekan password sederhana terhadap


semua aplikasi yang dijalankan di bawah root.

Selain itu banyak program-program bantu lainnya yang dikembangkan oleh sukarelawan
di seluruh dunia. Daftar terakhirnya dapat anda lihat di situs qmail, http://www.qmail.org
atau http://qmail.indosite.co.id untuk mirror di Indonesia.

Ringkasan
Pada bab ini telah dibahas bersama bagaimana mengkonfigurasikan qmail sebagai MTA
server untuk distribusi lokal. Jika Anda berencana menggunakannya sebagai mail server
internet, pastikan untuk mengeset Mail Record pada name server yang punya otorisasi
untuk merawat domain yang Anda miliki.
Selain sendmail dan qmail masih ada exim, dan postfix yang juga banyak dipakai. Jika
anda menangani dan memelihara mail server, usahakan untuk selalu terinformasikan
berita-berita terbaru, terutama tentang bug. Biasanya para pengembang program ini
menginformasikannya lewat mailing list.

Anda mungkin juga menyukai