基于FreeBSD操作系統的安全電子郵件系統架設_Mail服務器教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!
      Qmail是世界上安裝使用量僅次于Linux/Unix上缺省使用的Sendmail的郵件服務器軟件。Qmail配置較Sendmail簡單,而且速度較之要快,所以在本郵件系統的架設過程中我選擇了Qmail作為郵件服務器的核心。

      一個郵件服務器主要包括三個主要的功能,郵件傳輸代理MTA(Mail Transport Agent)、郵件分發代理MDA(Mail Delevery Agent)和郵件用戶代理MUA(Mail User Agent)。Qmail軟件包實現了這三個基本的功能,之所以說其只實現了郵件服務器的基本功能是因為它沒有實現很多郵件服務器需要的功能,這些功能有些是安全和防止垃圾郵件方面,比如SMTP驗證、APOP功能、Relay控制功能和對使用者IP地址的限定等等,還有一些擴展的功能象Webmail功能、虛擬域、基于數據庫的用戶管理、郵件列表、自動轉發它也不能提供。

      好在現在Qmail流行開來,有了不少自由軟件聯盟來為Qmail添磚加瓦,這些人們自發組織起來的聯盟開發了能夠補償Qmail不足的一些補丁。這些軟件補丁主要包括:

      Ucspi-tcp-0.88 (tcpsever服務程序,提供對IP地址限定功能)
      Checkpassword-0.81 (把/etc/passwd的用戶和密碼作為POP3的用戶和密碼進行驗證)
      Ezmlm-0.53(支持郵件列表功能)
      vpopmail-5.2.2(這個重要,提供虛擬域和數據庫支持)
      Qmailadmin-0.35 (虛擬域的web管理工具)
      Autorespond-1.0.0 (自動回復程序,Ezmlm需要)
      Sqwebmail-1.2.0 webmail (一個CGI的Webmail系統)
      Vqsignup-0.4 (提供web方式的用戶郵箱注冊)
      qmail-smtpd-auth-0.26 (提供SMTP認證功能)
      cmd5checkpw-0.22 (提供認證加密算法)

      因為安裝期間涉及的軟件眾多,如果不能搞清楚各個軟件在郵件服務器中所起到的作用將會感到滿頭霧水。基本的Qmail系統和整個郵件系統的架構如圖1和圖2所示:



      圖1 Qmail基本功能結構圖



      圖2 郵件服務器總體架構
      有了這些架構在軟件安裝和調試的過程中會感覺非常的清晰明快。

      在安裝進行之前必須要有DNS的支持,如果你的服務器IP地址沒有被DNS解析可以自己運行named deamon作為Dns服務器,并給自己分配一個域名,然后把自己的IP放到/etc/resolve.conf中。我這里是 mail.itp.swjtu.edu.cn。
      首先要安裝Qmail的基本系統。詳細步驟如下:(mail.itp.swjtu.edu.cn替換成相應的郵件服務器的域名)
      建立必要的用戶和用戶組
      # pw groupadd nofiles
      # pw useradd alias -g nofiles -d /var/qmail/alias -s /nonexistent
      # pw useradd qmaild -g nofiles -d /var/qmail -s /nonexistent
      # pw useradd qmaill -g nofiles -d /var/qmail -s /nonexistent
      # pw useradd qmailp -g nofiles -d /var/qmail -s /nonexistent
      # pw groupadd qmail
      # pw useradd qmailq -g qmail -d /var/qmail -s /nonexistent
      # pw useradd qmailr -g qmail -d /var/qmail -s /nonexistent
      # pw useradd qmails -g qmail -d /var/qmail -s /nonexistent
      創建安裝目錄,解壓安裝軟件源代碼包
      # mkdir /var/qmail #創建安裝目錄缺省為/var/qmail
      # tar zxvf qmail-1.03.tar.gz #解開源碼
      # cd qmail-1.03.tar.gz #進入源碼目錄
      進行安裝
      # make setup check #安裝拷貝文件
      #./config-fast mail.itp.swjtu.edu.cn #添加域名到/var/qmail/control目錄下的文件中
      # (cd ~alias; touch .qmail-postmaster .qmail-mailer-daemon .qmail-root)
      # chmod 644 ~alias/.qmail*
      拷貝MDA執行代碼
      # cp /var/qmail/boot/home to /var/qmail/rc #拷貝home腳本到缺省啟動位置
      # csh -cf '/var/qmail/rc &' 啟動MDA部分

      由于現在有兩種比較流行的郵箱目錄形式:/home/$user/Mailbox和/home/$user/Maildir/,郵件分發代理MDA要判斷郵件往哪一個郵箱分發郵件所以必須正確配置/var/qmail/rc文件,Mailbox是用一個文件來保存$user用戶的所有郵件,而 Maildir/方式是采用目錄的方式來保存用戶的每一封郵件,效率比前者高且減少了錯誤幾率。所以推薦使用Maildir/格式,因為rc文件缺省采用 Mailbox格式所以我們打開該文件將‘Mailbox’替換成為‘Maildir/’保存,kill掉剛才前面用rc啟動的qmail-send等進程并且重新啟動MDA。

       

      用Inetd啟動smtp模塊:
      相當于運行了/var/qmail/bin/tcp-env /var/qmail/bin/qmail-smtpd
      編輯/etc/inetd.conf,找到smtp模塊,去除其前面的注釋“#”號
      # killall –HUP inetd #重新啟動Inetd服務將smtp帶起
      到整個時候你已經可以通過郵件客戶端比如Foxmail連接smtp服務了,整個服務器目前沒有任何驗證功能,什么用戶什么地址都加以轉發。
      因為目前還沒有安裝用來做用戶名和密碼監測的工具,如果只使用FreeBSD的系統用戶名和密碼文件(/etc/passwd)來作為認證那僅僅安裝checkpasswd工具就可以了,安裝方法如下:
      # tar zxvf Checkpassword-0.81.tar.gz //解包
      # cd checkpassword-0.81
      # make //編譯源代碼
      # make install check //安裝-拷貝checkpasswd到/bin/目錄
      安裝完成之后可以用下面的命令測試一下checkpasswd是否工作正常。
      (注:qmail-popup的運行語法是“qmail-popup 服務器域名 運行的子程序”,在這里域名是mail.itp.swjtu.edu.cn,子程序是驗證程序checkpasswd。)
      # /var/qmail/bin/qmail-popup mail.itp.swjtu.edu.cn /bin/checkpassword pwd
      +OK <...@ mail.itp.swjtu.edu.cn >
      user zhp //輸入用戶名 'zhp'
      +OK
      pass Friend //輸入密碼'Friend'
      /usr/home/zhp/ //認證成功返回zhp用戶的用戶目錄
      (-ERR authorization failed) //認證失敗則這樣顯示
      如果工作正常就可以把pop3服務的啟動代碼輸入到/etc/inetd.conf文件中了。加入如下字符到該文件中后用“#killall –HUP inetd”重新啟動inetd服務。
      pop3 stream tcp nowait root /var/qmail/bin/qmail-popup qmail-popup mail.swjtu.edu.cn /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir //中間不換行
      到這個階段,你的服務器已經可以通過smtp和pop3承擔基本的郵件收發任務了,用Foxmail測試一下,如果一切順利就繼續了。
      接下來的工作就是利用vpopmail軟件來讓服務器支持虛擬域。因為現在這個階段的郵件服務器僅僅能夠對FreeBSD上的用戶提供郵件服務,如果每增加一個郵件用戶都要給系統增加一個用戶的話,不但浪費資源而且會帶來安全的隱患,而且現在的這個服務器僅僅支持一個域名 mail.itp.swjtu.edu.cn。vpopmail提供了虛擬域的功能同時也把基于/etc/passwd的認證轉為基于 /home/vpopmail/domain/%domain%/passwd.cdb (vpopmail缺省安裝在/home/vpopmail,%domain%是建立的虛擬域名)的認證,也可以選擇通過數據庫存儲用戶的注冊信息,這里就以mysql數據庫為例。

      為了簡單起見,在這里我假設用戶已經安裝了Mysql服務器并且工作正常。我們只要著手vpopmail的安裝和配置就可以了。

      先解包、然后配置為以mysql數據庫方式認證、編譯、安裝。
      # tar zxvf vpopmail-5.2.2.tar.gz
      # cd vpopmail-5.2.2
      # ./configure –enable-mysql=y --enable-roaming-users=y
      //聲明用mysql方式認證并支持漫游用戶
      # pw group add -g 89 vchkpw //建立用戶組vchkpw
      # adduser vpopmail //創建用戶vpopmail,不用pw user add是因為adduser會創建一個用戶目錄/home/vpopmail
      # make //編譯
      # make install-strip //安裝到/home/vpopmail
      Vpopmail安裝好了,checkpasswd當然就要“退休”了。Vpopmail中用來取代checkpasswd軟件的模塊是vchkpw。還是編輯/etc/inetd.conf,把前面設置的pop3那行改為
      pop3 stream tcp nowait root /var/qmail/bin/qmail-popup qmail-popup mail.itp.swjtu.edu.cn home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir
      //中間不換行
      再用killall-HUP inetd重新啟動就可以基于mysql數據庫進行認證了。當然我們現在還沒有常見任何域和用戶,現在談認證還太早。用下列命令創建域名和用戶。
      # cd /home/vpopmail/bin
      # ./vadddomain mail.itp.swjtu.edu.cn 123456 //創建虛擬域,如果是第一次創建會連 接mysql數據庫建立一個vpopmail的數據庫
      # ./vadduser zhp@mail.itp.swjtu.edu.cn Friend //創建用戶zhp

      (注:在連接數據庫的時候vpopmail可能會錯誤的去找/usr/local/mysql/tmp/mysql.sock作為和mysql進行連接的渠道,一般mysql.sock被安裝到了/tmp/mysql.sock處,用

       

      # mkdir /usr/local/mysql/tmp
      # ln –s /tmp/mysql.sock /usr/local/mysql/tmp/mysql.sock
      命令建立一個符號連接一般就不會出錯了。不過具體問題還要具體分析。)

      用vadddomain 和vadduser命令來向mysql數據庫里面而不是/etc/passwd里面添加用戶確實科學可許多但總不能每增加一個用戶都去麻煩我們的管理員吧!為了方便的注冊用戶,這不有了Vqsingup軟件包提供了基于WEB的注冊功能。其前提當然需要一個Web服務器,所以鼎鼎有名的Apache擔當此任就最合適不過了。

      如果你的vpopmail和apache都是安裝在缺省的/home/vpopmail和/user/local/apache目錄下面,這個軟件的安裝就簡單了。
      # tar zxvf vqsignup-0.5.tar.gz
      # cd vqsignup-0.5
      # make
      # make install
      如果你的apache裝到了別處比如/usr/local/www,那你要找到Makefile把cgibindir = /usr/local/apache/cgi-bin 改為cgibindir = /usr/local/www/cgi-bin。
      可能要修改一下相應文件的權限才能在瀏覽器中看到注冊的頁面。
      # cd /usr/local/apache/cgi-bin/vqsignup
      # chown vpopmail vqsignup.cgi
      # chgrp vchkpw vqsignup.cgi
      # chmod ug+s vqsignup.cgi
      要說到這里還沒有完,還必須修改那個vqsignup.html文件,把你的可以用域名替換掉那些‘test.com’等東西,其實還有一些路徑的問題軟件包還沒有處理好,這里一下說不清楚,懂一些網頁的人應該能輕松搞定,html文件夾內的一些信息提示文件都可以加以漢化和美化一下。安裝后的樣子如圖。
      (http://mail.itp.swjtu.edu.cn/vqsignup.html)

      圖3 sqsignup新用戶注冊頁面
      用Inetd來啟動smtp和pop3有個問題,就是不能限制來訪者的IP,這樣固然有不安全因素。所以現在很多郵件服務器網站都采用tcpserver工具來保護自己的網站免受惡意攻擊。下面是安裝過程:
      # tar zxvf ucspi-tcp-0.88.tar.gz
      # cd ucspi-tcp-0.88
      # make //編譯
      # make setup check //執行檔tcpserver將被安裝于 /usr/local/bin 中。
      現在我們來改變pop3的運行方式:先把/etc/inetd.conf中的pop3部分刪除或者加‘#’注釋掉,運行killall –HUP inetd關掉pop3;然后創建一個/pop3.sh腳本加入下面的執行代碼:
      /usr/local/bin/tcpserver -H -R 0 pop3 /var/qmail/bin/qmail-popup mail.itp.swjtu.edu.cn /home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir &
      里面的參數你只要看懂個大概就行了。保存文件后用chmod +x /pop3.sh給文件加上執行屬性,最后用sh /pop3.sh執行腳本,pop3就運行在后臺了。

      說了這么多,可是smtp還沒有認證功能呢,這樣我們的服務器會被任何人用來relay他們的垃圾郵件。由于qmail本身不提供認證功能,實現這個功能只能靠第三方的插件來實現了,比較有名氣的就是qmail-smtpd-auth-0.26 和cmd5checkpw-0.22的組合。由于是打補丁需要qmail的源代碼。假設qmail-1.03.tar.gz、qmail-smtpd- auth-0.31.tar.gz在同一目錄,則進入該目錄后做如下操作:
      # tar zxvf qmail-1.03.tar.gz
      # tar zxvf qmail-smtpd-auth-0.31.tar.gz
      # cp README.auth base64.c base64.h ../qmail-1.03
      # patch -d ../qmail-1.03 < auth.patch
      # ../qmail-1.03/make qmail-smtpd
      # cp ../qmail-1.03/qmail-smtpd /var/qmail/bin/qmail-smtpd-auth
      上面的操作實際上是把打了補丁的qmail-smtp執行檔單獨編譯了一下然后拷貝到了/var/qmail/bin下另取名為qmail-smtpd-auth。
      接下來安裝cmd5checkpw-0.22
      #tar zxvf cmd5checkpw-0.22
      #cd cmd5checkpw-0.22
      #make
      #mkdir /usr/man //在FreeBSD中缺省沒有這個目錄
      #make install
      最后編寫smtp的執行腳本
      /usr/local/bin/tcpserver -H -R -l 0 -t 1 -v -p -x /etc/tcp.smtp.cdb -u 89 -g 89 0 smtp /var/qmail/bin/qmail-smtpd.auth /home/vpopmail/bin/vchkpw /bin/true /bin/cmd5checkpw /bin/true 2>&1 &
      \\中間沒有分行

      同前面講到的/pop3.sh一樣編成一個/smtp.sh可執行腳本,在執行前把 /etc/inetd.conf中smtp的項目屏蔽或刪除并用killall –HUP inetd關閉前面打開的smtp服務。sh /smtp.sh之后你的服務器就已經有smtp認證功能了。

       

      看看我們的Foxmail要怎么設置,如圖4:
       
      圖4 Foxmail中認證的設置
      現在只能用Foxmail在操作郵件的收發,其實還有一個好工具可以提供方便的Webmail服務,它就是sqwebmail。
      我沒有用該軟件的原版,找了個漢化的版本。安裝過程如下:
      # tar xvfz sqwebmail-1.2.0.tar.gz
      # cd sqwebmail-1.2.0
      # ./configure --without-authpam --without-authuserdb --enable-webpass=no --without-authpwd --without-authshadow --with-mimetypes=/usr/local/apache/conf/mime.types
      # make configure-check
      # make //編譯
      # make check
      # make install-strip
      # make install-configure
      如果一些順利那就大工告成,在客戶機上打開瀏覽器,輸入http://mail.itp.swjtu.edu.cn/cgi-bin/sqwebmail,出現下面的頁面:

      圖5 sqwebmail的登陸界面

      圖6 sqwebmail的登陸后的界面
      最后為了讓服務器在啟動的時候自動加載smtp.sh和pop3.sh,我們把它們拷貝到/usr/local/etc/rc.d/目錄下面,把# csh -cf '/var/qmail/rc &' 這行啟動MDA服務的腳本加到smtp.sh或pop3.sh中就可以了。記住一定要給這兩個文件可執行的權限。由于時間倉促,這份手稿可能有遺漏之處,而且還有很多安裝過程也沒有搞懂,希望得到各位高手的指教.

      來源:網絡搜集//所屬分類:Mail服務器教程/更新時間:2013-04-14
      相關Mail服務器教程