2008年1月13日 星期日

NTP server 設定

安裝套件:
ntp: NTP server的主要套件啦,包括設定檔以及執行檔等等,都是這個套件提供的;

tzdata: 套件名稱為『 Time Zone data 』的縮寫,提供了各個時區對應的顯示格式。

主要檔案:
/etc/ntp.conf: ntp的主要設定檔.
/usr/sbin/ntpd: ntp的daemon, 啟動時會讀取ntp.conf的設定.
/usr/sbin/ntpdate: ntp的client, 用來連接NTP server.
/bin/date: 可以顯示或修改時間, 但不會存到BIOS.
/sbin/hwclock: root才能執行,把時間寫入BIOS.

ntp是使用類似於DNS的階層式的架構, 每一層稱為stratum, 下層stratum會向上曾同步, 最多可以有15層.在Linux架設ntp server主要設定ntp.conf

ntp.conf中可以用restrict參數來限制連線, 其用法是:
restrict [ip] mask [netmask_ip] [parameter]
parameter有:
  1. ignore 拒絶所有ntp連線,
  2. nomodify 用戶不能修改,
  3. noquery 用戶不能查詢,等於不提供網絡校時,
  4. notrap 不提供trap ( remote event logging ),
  5. notrust 拒絶沒有認証的用戶.
如沒加任何parameter代表不設任何限制,另外上層的NTP server必須在被允許的清單內才能同步.
設定上層NTP server:
server [ ip or hostname ] [ prefer ]
其中prefer代表優先使用

設定記錄BIOS與NTP server震盪的誤差:
driftfile [可以被ntpd寫入的目錄及檔案 ]

設定以certificate來控制權限:
key [ keyfile]

另外在 /etc/sysconfig/ntpd裡面的SYNC_HWCLOCK改為yes:
SYNC_HWCLOCK=yes
可以就會把ntpd同步的時間寫入BIOS中

Client可以用ntpdate [ip or hostname]來與NTP server同步時間,然後用hwclock -w寫入BIOS即可.
在/etc/crontab中加入
10 5 * * * /usr/sbin/ntpdate server_ip && /sbin/hwclock -w
可以在每天5:10時與server_ip同步時間.

port number

ntp udp 123

2008年1月10日 星期四

Postfix > Extmail transport的設定

Extmail預設是使用maildrop作virtual mailbox 的transport, 但因為我公司的郵件帳號比較特別, 同一domain的郵件地址會分佈在兩個不同的mailserver上面, 所以必須使用/etc/postfix/transport來各別指定.

首先maildrop可以在master.cf裡設定,其主要作用是以pipe的方式直接把郵件存在用戶的郵箱裡,maildrop可以經過各變數(如${user}, ${nexthop}, ${recipient})等得出郵箱的用戶名及PATH,關於maildrop的設定可以參考MAILDROP_README.

為了要各別處理郵件帳號,需要用到transport檔案,屬於本機Extmail的帳號可以直接設為maildrop, 其他的帳號可以用relay:[ip]:port來redirect到其他mailserver.

/etc/postfix/transport example:

user1@example.com maildrop
user2@example.com maildrop
exuser@example.com relay:[192.168.0.1]:25

2008年1月9日 星期三

Postfix > Extmail裡webmail不受smtpd_recipient_restrictions控制的問題

在設好Extmail,讓它能和Postfix正常運作後,發現了一個問題,用smtp連線的用戶能正常受到Postfix中main.cf裡面的smtp_recipient_restrictions控制,但經webmail發出去的信卻好像不受smtp_recipient_restrictions控制,可能是安裝Extmail時沒有設定好,但又找不到問題所在.於是從測試郵件中的header尋找線索.

在一輪測試後發現一般用smtp連線所發出去的郵件是經過master.cf裡smtp inet那個transport出去的,而webmail發的郵件是從pickup出去的,也許問題就出在這裡,pickup沒有調用main.cf裡的smtp_recipient_restrictions.

於是嘗試修改master.cf, 在pickup這個transport下加上options:
-o myhostname=pickup.example.com
-o content_filter=smtp:[127.0.0.1]:25
其中myhostname只是為了在郵件header中方便確認經過pickup的位置及時間, 可以不加,example.com是隨便輸入的,而content_filter會把郵件傳送給smtp (注意是smtp unix, 而不是smtp inet),然後會以smtp protocol送到127.0.0.1:25中,然後就會經過smtpd_recipient_restrictions處理.

若不直接丟給port 25,中間還可以經過其他的處理,如在master.cf中加上127.0.0.1:10026這個transport來處理
127.0.0.1:10026 inet n - n - - smtpd
-o myhostname=redirect.example.com
-o content_filter=[127.0.0.1]:10024
10024是我的Postfix上amavisd的port, 這會把信丟給amavisd, 同樣方法可以針對不同的transport在中間加多層選項及防毒軟件.

Postfix > master.cf的內容

前陣子為了要限制一部份公司裡的郵件帳號,不讓他們發送郵件到公司以外的地方,於是打算用smtpd_restriction_classes來區分受限制及不受限制的帳號,然後用master.cf設定,以下是一些關於master.cf的內容.

master.cf裡面主要是定義各種transport,每一個row代表一個transport, 有些row是以空白開頭的,那是代表同屬於上一row的transport的一些額外設定值.每個column代表transport的設定值,有以下幾個:
  1. service name: 代表名字,名字的命名方法受另一設定值type所影響.
  2. type: transport的類型, 分別有inet, unix及fifo.
      • inet代表network sockets,可以用IP:port為命名方式,可以只用port命名,代表在本機上,IP可以host取代, port也可以用/etc/services裡的服務取代.
      • unix代表Unix domain socket, 用於同一主機的兩個processes溝通用,需要用特別的file作溝通用,命名方式就像unix的file命名,但要去掉directory部份.
      • fifo,與unix類似.
  3. private: 是否只給Postfix自己使用, y代表是, n代表否, -代表default, default為y. inet的應該設定為n,否則其他processes不能使用.
  4. unpriv: unprivileged account能否使用, Postfix以mail_owner的設定值運行(default為postfix),該account只能做他基本的需求.unpriv為y代表unprivileged account可以執行, n代表要有root權限才能執行.
  5. chroot: 是否以chroot方式運行,chroot的位置定義在master.cf裡的queue_directory.
  6. wakeup: 有些service需要定時執行,如pickup, flush, qmgr.數字代表秒數, 後面加?代表有使用的才會被叫醒, 0代表永不叫醒, default為0, 一般只有少數需要被叫醒,通常Postfix都已設定好,無需自行設定.
  7. maxproc: 同時能調用的數目,0為無限, 如無指定則以main.cf中的default_process_limit為值,default為100.
  8. command: 實際執行的指令程式, 指令程式的位置應該要在main.cfdaemon_directory裡面,default為/usr/libexec/postfix. 可以加-v來log, -D來debug.
另外可以在每個transport下一row以空白開頭,然後加-o加override一些main.cf裡的設定,如:

smtp-quick unix - - n - - smtp
-o smtp_connect_timeout=5s

這樣就建立了一個smtp-quick transport, 所有設定值都會以main.cf的設定為準, 除了smtp_connect_timeout以外.