Konfigurasi Fetchmail + Sendmail pada Linux untuk POP3 Server

October 8, 2007

Tulisan ini dibuat karena untuk memenuhi kebutuhan pop3 server di kantor penulis yang sebelumnya menggunakan ServenG4 buatan Apple. Setelah dipikir-pikir, ditimbang-timbang dan dicari-cari, penulis merasa dengan distro RedHat + Sendmail lah yang tepat mengenai sasaran kebutuhan penulis. Pertimbangan waktu yang mendesak dan pemahaman penulis tentang linux juga menjadi alasan penulis memilih distro dan aplikasi MTA ini.

Semoga penulisan ini bermanfaat bagi orang banyak, khususnya bagi yang kebingungan mencari alternative penggunaan OS windows untuk Pop3 server. Wassalam ; Dwi Nugroho.

 

Install Redhat 9.0 sebagai server dan pastikan service dns dan email terinstall didalamnya.

  • Beri nama host apa.ajah.deh
  • IP 192.168.1.9 / 255.255.255.0
  • DNS 202.158.*.* / 202.158.*.*
  • Tambahkan search domain.com pada file /etc/resolv.conf

 

 

Setelah selesai, check apakah service iptables berjalan, dengan perintah :

# iptables –L

 

Jika service iptables masih berjalan, matikan dengan perintah :

# /etc/rc.d/init.d/iptables stop

# chkconfig –level 345 iptables off

# iptables –L

Check apakah sendmail sudah terinstall dengan perintah :

# rpm –qa |grep sendmail

 

Ubah baris pada /etc/hosts dengan :

127.0.0.1 mailserver.domain.com

 

 

Ubah status disable = yes menjadi disable = no, pada file /etc/xinetd.d/ipop3

 

 

Set konfigurasi pada /etc/mail/sendmail.mc sesuai dengan yang dibutuhkan, seperti :

 

divert(-1)dnl

dnl #

dnl # This is the sendmail macro config file for m4. If you make changes to

dnl # /etc/mail/sendmail.mc, you will need to regenerate the

dnl # /etc/mail/sendmail.cf file by confirming that the sendmail-cf package is

dnl # installed and then performing a

dnl #

dnl # make -C /etc/mail

dnl #

include(`/usr/share/sendmail-cf/m4/cf.m4′)dnl

VERSIONID(`setup for Red Hat Linux’)dnl

OSTYPE(`linux’)dnl

dnl #

dnl # Uncomment and edit the following line if your outgoing mail needs to

dnl # be sent out through an external mail server:

dnl #

dnl define(`SMART_HOST’,`smtp.your.provider’)

dnl #

define(`confDEF_USER_ID’,“8:12′’)dnl

define(`confTRUSTED_USER’, `smmsp’)dnl

dnl define(`confAUTO_REBUILD’)dnl

define(`confTO_CONNECT’, `1m’)dnl

define(`confTRY_NULL_MX_LIST’,true)dnl

define(`confDONT_PROBE_INTERFACES’,true)dnl

define(`PROCMAIL_MAILER_PATH’,`/usr/bin/procmail’)dnl

define(`ALIAS_FILE’, `/etc/aliases’)dnl

dnl define(`STATUS_FILE’, `/etc/mail/statistics’)dnl

define(`UUCP_MAILER_MAX’, `2000000′)dnl

define(`confUSERDB_SPEC’, `/etc/mail/userdb.db’)dnl

define(`confPRIVACY_FLAGS’, `authwarnings,novrfy,noexpn,restrictqrun’)dnl

define(`confAUTH_OPTIONS’, `A’)dnl

define(`confMAX_MESSAGE_SIZE’,`5000000′)dnl

dnl #

dnl # The following allows relaying if the user authenticates, and disallows

dnl # plaintext authentication (PLAIN/LOGIN) on non-TLS links

dnl #

dnl define(`confAUTH_OPTIONS’, `A p’)dnl

dnl #

dnl # PLAIN is the preferred plaintext authentication method and used by

dnl # Mozilla Mail and Evolution, though Outlook Express and other MUAs do

dnl # use LOGIN. Other mechanisms should be used if the connection is not

dnl # guaranteed secure.

dnl #

dnl TRUST_AUTH_MECH(`EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN’)dnl

1,1 Top

define(`confTO_IDENT’, `0′)dnl

dnl FEATURE(delay_checks)dnl

FEATURE(`no_default_msa’,`dnl’)dnl

FEATURE(`smrsh’,`/usr/sbin/smrsh’)dnl

FEATURE(`mailertable’,`hash -o /etc/mail/mailertable.db’)dnl

FEATURE(`virtusertable’,`hash -o /etc/mail/virtusertable.db’)dnl

FEATURE(redirect)dnl

FEATURE(always_add_domain)dnl

FEATURE(use_cw_file)dnl

FEATURE(use_ct_file)dnl

dnl #

dnl # The -t option will retry delivery if e.g. the user runs over his quota.

dnl #

FEATURE(local_procmail,`’,`procmail -t -Y -a $h -d $u’)dnl

FEATURE(`access_db’,`hash -T -o /etc/mail/access.db’)dnl

FEATURE(`blacklist_recipients’)dnl

EXPOSED_USER(`root’)dnl

FEATURE(`accept_unresolvable_domains’)dnl

dnl #

FEATURE(`relay_entire_domain’)dnl

FEATURE(`relay_mail_from’)dnl

FEATURE(`relay_based_on_MX’)dnl

dnl #

dnl # Also accept email sent to “localhost.localdomain” as local email.

dnl #

LOCAL_DOMAIN(`domain.com’)dnl

dnl #

dnl # The following example makes mail from this host and any additional

dnl # specified domains appear to be sent from mydomain.com

dnl #

MASQUERADE_AS(`domain.com’)dnl

dnl #

dnl # masquerade not just the headers, but the envelope as well

dnl #

FEATURE(masquerade_envelope)dnl

dnl #

dnl # masquerade not just @mydomainalias.com, but @*.mydomainalias.com as well

dnl #

FEATURE(masquerade_entire_domain)dnl

dnl #

dnl MASQUERADE_DOMAIN(localhost)dnl

dnl MASQUERADE_DOMAIN(localhost.localdomain)dnl

dnl MASQUERADE_DOMAIN(mydomainalias.com)dnl

dnl MASQUERADE_DOMAIN(mydomain.lan)dnl

MAILER(smtp)dnl

MAILER(procmail)dnl

 

Setelah mengadakan perubahan pada sendmail.mc, jangan lupa untuk mengompile file tersebut dengan perintah :

 

# make –C /etc/mail

 

Perintah diatas hanya akan mengompile file sendmail.mc dan tidak akan mengompile sendmail.cf, untuk itu anda harus jalankan perintah

# m4 /etc/mail/sendmail.mc > /etc/sendmail.cf

 

Perintah tersebut untuk mengcopy semua file perubahan yang ada di sendmail.mc ke sendmail.cf. ( Kalau perintah tersebut tidak dilakukan maka beberapa service tidak berjalan dengan benar, seperti port 25 masih akan dipegang oleh mailserver sehingga user lain tidak dapat mengirim email )

 

Tambahkan pada file /etc/mail/access baris 192.168.1 RELAY

Kemudian lakukan compiling dengan perintah # makemap hash /etc/mail/access.db < /etc/mail/access

Baris tersebut akan memberikan akses kepada user pada jaringan 192.168.1 untuk dapat mengirim email ke internet.

Buat user di linux sebagai username untuk mengambil email yang sudah di fetch dari isp.

1 # adduser cm

# passwd cm

2 # adduser bimo

# passwd bimo

 

Agar user local dapat menerima email sesuai dengan usernamenya, definisikan masing-masing alamat email beserta username yang akan menerima email tersebut pada file /etc/mail/virtusertable, seperti pada contoh berikut :

vi /etc/mail/virtusertable

cabe.merah@domain.com cm

testing@domain.com testing

sinatrio.bimo@domain.com bimo

^wq

setelah disave compile file tersbut dengan perintah

# makemap hash /etc/mail/virtusertable.db < /etc/mail/virtusertable

Buat file .fetchmailrc dibawah user root. vi /root/.fetchmailrc dan isikan sebagai berikut :

Set daemon 360

Set syslog

Poll mail.isp.com proto pop3

User “cabe.merah%domain.com with pass “artileri” is cm here

User “sinatrio.bimo%domain.com” with pass “bimo” is bimo here

 

Simpan.

 

File diatas artinya, bahwa fetchamail akan mengambil email atas nama account dari cabe.merah%domain.com dengan password untuk masuk ke isp, kemudian di transfer ke mailbox user cm atau bimo.

 

 

Ubah permission file .fetchmailrc menjadi 710. dengan perintah

# chmod 710 .fetchmailrc

Sampai pada tahap ini dapat dikatakan sendamil dan fetchmail telah selesai dilakukan dan tinggal mengkonfigurasi pada mail client dari user.

 

 

Pembatasan 1 atau beberapa alamat email agar tidak dapat keluar

 

1. Create user dan password. Misalnya dengan username bs

2. Tambahkan pada file # /etc/mail/virtusertable baris :

 

blegedes.saru@domain.com bs

 

^wq

 

3. Lakukan compile dengan command # makemap hash /etc/mail/virtusertable.db < /etc/mail/virtusertable

4. Selesai

 

 

MEMBUAT MILIS DEPARTMENT

 

Kadang ada email yang perlu dapat diterima bukan hanya oleh 1 email address saja melainkan dengan hanya mengirimkan ke satu alamat email dapat diterima oleh beberapa user. Contoh : marketing@domain.com

Cara membuatnya adalah :

 

Buat user marketing

# adduser marketing

# passwd marketing

 

Tambahkan di /root/.fetchmailrc baris :

User “marketing%domain.com” with pass “marketing” is marketing here

 

Kemudian buat file marketing dengan isi username yang akan dapat menerima email tersebut. # vi /etc/mail/marketing

cm

bimo

^wq

 

Buat rules di /etc/aliases dengan menambahkan baris :

# Person who should get root’s mail

#root: marc

marketing :include:/etc/mail/marketing

^wq

 

setelah disave jangan lupa untuk meng-compile file aliases tersebut dengan perintah

# newaliases

 

Arti pada baris di dalam /etc/aliases diatas adalah : siapapun yang mengirimkan email ke marketing@domain.com, akan diteruskan ke alamat email yang ada di dalam file /etc/mail/marketing.

Jika pada /etc/aliases tidak dibuat, maka user local tidak dapat mengirim email ke email marketing@domain.com tersebut.

 

Tambahkan pada /etc/mail/virtusertable masing-masing alamat email dan username yang berhak menerima email yang ditujukan ke alamat email tersebut.

 

Kemudian login ke user marketing

Pada home drive marketing, buat file .forward dengan cara

# vi .forward ( lalu isikan username yang dapat menerima email untuk marketing tersebut ). Contoh

# vi .forward

cm

bimo

^wq

 

Kalau konfigurasi diatas tidak dibuat, maka user dari luar tidak dapat mengirim email ke marketing@domain.com atau yang sifatnya milis.

 

 

DONE

 

 

PROCMAIL ( FILTERING EMAIL )

 

Untuk beberapa kebutuhan, email yang masuk dan keluar juga dapat difilter. Contoh kasus yang terjadi di IM&A adalah setiap email yang masuk dan yang keluar selalu di Cc kan ke postmaster. Dalam hal ini, kita akan menggunakan jasa file .procmailrc dari masing-masing users. Caranya adalah sbagai berikut :

 

Log in sebagai user

Buat file .procmailrc dengan cara # vi .procmailrc

Lalu isikan baris

PATH=/usr/bin:/bin

MAILDIR=/var/spool/mail

DEFAULT=$MAILDIR/$USER

 

 

:0

* ^From.*

{

: c

! postmaster

 

^wq

 

Arti dari baris diatas adalah email dari manapun yang ditujukan ke user tersebut ( misal dn ) akan di Cc kan ke postmaster.

 

 

Membuat milis department untuk internal

1. Create user internal

2. Passwd internal

3. Buat file dengan nama internal di /etc/mail/ yang isi dari file tersebut adalah nama-nama / user name yang berhak menerima email tersebut. Lalu di save.

4. Buka /etc/aliases dan tambahkan file tersebut ke dalamnya

internal: :include:/etc/mail/internal

lalu lakukan # newaliases

5. Tambahkan pada /etc/mail/virtusertable, alamat email internal@domain.com beserta username nya.

internal@domain.com internal

lalu lakukan kompile dengan command # makemap hash /etc/mail/virtusertable.db < /etc/mail/virtusertable

6. DONE

 

 

 

 

 

 

 

 

 

 

Contoh hasil # netstat –a yang bener :

 

Proto Recv-Q Send-Q Local Address Foreign Address State

tcp 0 0 *:1024 *:* LISTEN

tcp 0 0 mailserver.inkemar:1025 *:* LISTEN

tcp 0 0 *:pop3 *:* LISTEN

tcp 0 0 *:sunrpc *:* LISTEN

tcp 0 0 *:ssh *:* LISTEN

tcp 0 0 mailserver.inkemari:ipp *:* LISTEN

tcp 0 0 *:smtp *:* LISTEN

tcp 0 0 192.168.1.9:ssh 192.168.1.6:3374 ESTABLISHED

udp 0 0 *:1024 *:*

udp 0 0 *:642 *:*

udp 0 0 *:sunrpc *:*

udp 0 0 *:631 *:*

Active UNIX domain sockets (servers and established)

Proto RefCnt Flags Type State I-Node Path

unix 2 [ ACC ] STREAM LISTENING 3048 /tmp/.font-unix/fs7100

unix 11 [ ] DGRAM 2347 /dev/log

unix 2 [ ] DGRAM 3153

unix 2 [ ] DGRAM 3102

unix 2 [ ] DGRAM 2951

unix 2 [ ] DGRAM 2915

unix 2 [ ] DGRAM 2891

unix 2 [ ] DGRAM 2816

unix 2 [ ] DGRAM 2553

unix 2 [ ] DGRAM 2408

unix 2 [ ] DGRAM 2355


Lebaran dan Pembantu Mudik

October 8, 2007

Sekarang H-5 Hari Raya Idul  Fitri. Umat Islam di seluruh dunia sebentar lagi akan menikmati hari kemenangan setelah 1 bulan lamanya berpuasa untuk lebih men-sucikan diri dan hati. Begitu juga kami, aku dan keluarga kecilku juga tengah bersiap menyambut hari kemenangan itu. Dan mungkin juga 2 orang yang membantu di rumah kami. Dengan ditandai dengan mudiknya 2 orang pembantu kami dirumah, maka beralih lah seluruh kegiatan dan tanggung jawab teknis pembatu kami ke istri saya. Hmmm…. sekarang tidak lagi dia mengurus konsep saja tetapi juga masalah teknis ditangani mulai dari mencuci baju, menjemur, setrika, bikin makanan bergizi buat juniorku, kerja di kantor, belanja, dll dll.

Sudah menjadi tradisi (bukan saja untuk kalangan artis), kalau pembantu mudik akan cukup merepotkan. Tapi apa mau dikata lagi ? semua orang berhak untuk mengajukan cuti kan ? entah itu pada saat hari raya atau hari lain…. kita harus menghargai mereka juga yang sudah setahu tidak bertemu sanak saudara di kampung halaman.

Kemarin di mobil kami sempat bertanya kepada pembantu-pembantu kami tentang apa yang akan mereka lakukan di kampung halaman mereka nanti ? dan mereka umumnya menjawab mereka akan jalan-jalan disana, ke pantai, ke rumah saudara dan sebagainya. Pasti asyik ya…..

Keasyikan itu tentu saja harus kita bayar dengan mengerjakan seluruh tanggung jawab mereka di rumah kami.. hehehehe…..