因為之前學的主要都是Windows Base的東西,所以在很多費用上比起Linux的solution來多了很多,而在新的公司老闆又比較重視成本(不是只有這間拉,只是說服不了這間的老闆),剛好Linux這方面的東西自己又碰的比較少。所以呢,就有了下面的規劃。
公司絕大部分的使用者會的都是windows系統,而小弟在linux管理windows系統的上面不清楚有哪些比較好的套件(像是檔案管理、權限控管、帳號集中管控等),所以採用的是windows網域的方式(windows server 2003),架設DC將所有的使用者、電腦、資源等納入AD進行控管。
謹以此篇感謝ServerTeam同仁對小弟在Linux Debian上的指導。
George23
DickyHsu
Aman(postfix+sasl+amavisd-new+mcafee+procmail+spamassassin)。
2 目的:
為節省成本、節省人力負擔(統一帳號管理),以linux的mail套件postfix取代M$ Exchange的mail功能。
3 計畫:修改認證流程,讓linux系統能夠向AD網域取得帳號密碼。
(※絕大部分的想法都是源自於旗標出版股份有限公司 施威銘研究室著 異質平台整合方案一書,小弟對linux真的很遜,什麼script、command都不會,要用得時候就上鳥哥的網站去查或是找書看,請參考上述的書籍13、14章。)。
4 實做:因為其他linux distribution在安裝套件時有太多要考慮的(相依性),按照小弟的功力是完全負荷不了,所以小弟用的linux distribution為Debian GNU/Linux 3.1 testing。
===========================================================================
1 設定winbind及修改系統認證方式
1.1 安裝SAMBA
1.1.1 檢查是否安裝SAMBA
- 代碼: 選擇全部
dpkg -l |grep samba
1.1.2 安裝SAMBA套件
- 代碼: 選擇全部
apt-get install samba
1.2 加入windows 2003 網域
1.2.1 修改samba設定檔
- 代碼: 選擇全部
vim /etc/samba/smb.conf
- 代碼: 選擇全部
#======================= Global Settings =======================
[global]
workgroup = DomainName
realm = DomainName.net.tw
server string = %h server (Samba %v)
netbios name = mail1
wins support = yes
wins server = 192.168.0.1
security = ads
encrypt passwords = true
password server = DC-hq.DomainName.net.tw
1.2.2 修改hosts設定檔(如果你的DNS可以解析到網域的主機,就不用做此動作了。)
- 代碼: 選擇全部
vim /etc/hosts
- 代碼: 選擇全部
127.0.0.1 localhost.localdomain localhost mail1 mail1.DomainName.net.tw
192.168.0.1 DC-hq.DomainName.net.tw DomainName.net.tw
1.2.3 修改Kerberos相關的訂定檔
1.2.3.1 安裝krb5-admin-server
- 代碼: 選擇全部
apt-get install krb5-admin-server
1.2.3.2 修改krb5.conf設定檔
- 代碼: 選擇全部
vim /etc/krb5.conf
- 代碼: 選擇全部
[libdefaults]
default_realm = DC-HQ.DOMAINNAME.NET.TW s 網域DC主機
[realms]
[u]DOMAINNAME.NET.TW [/u]= {
↑ 網域DC主機
kdc = [u]DC-HQ.DOMAINNAME.NET.TW[/u]
↑ 網域DC主機
admin_server = [u]DC-HQ.DOMAINNAME.NET.TW[/u]
↑ 網域DC主機
default_domain = [code]DOMAINNAME.NET.TW [/code]s 網域名稱
}
[domain_realm]
.DomainName.net.tw = [u]DOMAINNAME.NET.TW [/u]s 網域名稱
DomainName.net.tw = [u]DOMAINNAME.NET.TW [/u]s 網域名稱
1.2.3.3
- 代碼: 選擇全部
vim /etc/krb5kdc/kdc.conf
- 代碼: 選擇全部
[realms]
DOMAINNAME.NET.TW = {
↑網域名稱
1.2.3.4 安裝krb5-clients
- 代碼: 選擇全部
apt-get install krb5-clients
1.2.4 測試跟DC的連線
- 代碼: 選擇全部
kinit administrator@DOMAINNAME.NET.TW s測試連線
↑網域管理者帳號 @ 網域名稱,要大寫
Password for administrator@DOMAINNAME.NET.TW: s 輸入管理者的密碼
若是沒有任何訊息,就表示成功了。
1.2.5 重新啟動Samba伺服器
- 代碼: 選擇全部
/etc/init.d/samba restart
1.2.6 加入網域
- 代碼: 選擇全部
net ads join
到網域控制站檢查是否加入,成功會出現像下面的字串:
Using short domain name -- DOMAINNAME
Joined 'WMAIL' to realm 'DOMAINNAME.NET.TW'
1.3 安裝WINBIND
- 代碼: 選擇全部
apt-get install winbind
1.4 確認NSS函式庫
- 代碼: 選擇全部
updatedb
locate libnss_winbind.so
/lib/libnss_winbind.so.2 s 會出現此訊息
1.5 確認PAM函式庫
- 代碼: 選擇全部
locate pam_winbind.so
/lib/security/pam_winbind.so s 會出現此訊息
1.6 編輯NSS設定檔
- 代碼: 選擇全部
vim /etc/nsswitch.conf
- 代碼: 選擇全部
passwd: compat winbind
group: compat winbind
1.7 Winbind相關服務設定
- 代碼: 選擇全部
vim /etc/samba/smb.conf
- 代碼: 選擇全部
idmap uid = 10000-20000 a 設定網域帳號uid以後使用的範圍
idmap gid = 10000-20000 a 設定網域帳號gid以後使用的範圍
template shell = /bin/false a 設定網域帳號的使用者shell
template homedir = /home/winnt/%D/%U a 設定網域使用者的家目錄
winbind use default domain = yes a 設定不在getent passwd時出現網域名稱
1.8 修改/etc/login.defs檔案,以避免網域及本機帳號uid/gid衝突
- 代碼: 選擇全部
UID_MIN 1000
UID_MAX 9999
GID_MIN 100
GID_MAX 9999
修改完/etc/login.defs檔案,重新啟動winbind
- 代碼: 選擇全部
/etc/init.d/winbind restart
1.9 測試是否能取得網域帳號
- 代碼: 選擇全部
wbinfo –u
getent passwd
1.10 設定pam.d認證
1.10.1
- 代碼: 選擇全部
vim /etc/pam.d/common-auth
- 代碼: 選擇全部
auth sufficient pam_winbind.so <--------加入這行
auth required pam_unix.so nullok_secure
1.10.2
- 代碼: 選擇全部
vim /etc/pam.d/common-account
- 代碼: 選擇全部
account sufficient pam_winbind.so <--------加入這行
account required pam_unix.so
2 郵件系統:小弟只會postfix
2.1 安裝Postfix
- 代碼: 選擇全部
apt-get install postfix
2.2 安裝IMAP、IMAPS及POP3、POP3S套件
- 代碼: 選擇全部
apt-get install dovecot
2.2.1 dovecot 套在預設時,只啟動 imap 及 imaps,並沒有啟動 pop3 及 pop3s,因此,你必須修改 /etc/dovecot.conf 檔案,在 protocols 參數後面加入您要的通訊協定,如: protocols = imap imaps pop3 pop3s
2.2.2
- 代碼: 選擇全部
/etc/init.d/dovecot restart
2.2.3 替網域帳號建立home目錄
2.2.3.1 建立awk,
- 代碼: 選擇全部
vim mknthomedir.awk
- 代碼: 選擇全部
#!/bin/awk
BEGIN {
FS=":"
#uidmin設定為/etc/samba/smb.conf中uidmin的值
# uidmax設定為/etc/samba/smb.conf中uidmax的值
#僅針對UID範圍為設定中及群組為Domain User的帳號,進行家目錄的產生
uidmin=10000
uidmax=20000
}
{
if ( $3 >= uidmin && $3 <= uidmax && $4 == 10000) {
print "\nmake directory " $6 "\nchown " $3 "." $4 " " $6
system ( "mkdir -p " $6 "; chown –R " $3 "." $4 " " $6 )
}
}
- 代碼: 選擇全部
getent passwd | awk -f mknthomedir.awk
2.3 安裝postfix認證套件
- 代碼: 選擇全部
apt-get install sasl2-bin postfix-tls libsasl2 libsasl2-dev libsasl2-modules libsasl7
2.4 設定postfix
2.4.1
- 代碼: 選擇全部
vim /etc/postfix/sasl/smtpd.conf
- 代碼: 選擇全部
pwcheck_method: saslauthd
#pwcheck_method: pam
mech_list: login plain
#saslauthd_path:/var/run/saslauthd/mux
2.4.2
- 代碼: 選擇全部
vim /etc/postfix/main.cf
- 代碼: 選擇全部
myhostname = wbd.DomainName.net.tw
mydomain = DomainName.net.tw
myorigin = $myhostname
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = wbd, wbd.DomainName.net.tw, localhost, DomainName.net.w
relayhost =
mynetworks = 127.0.0.0/8
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
smtpd_client_restrictions = permit_sasl_authenticated
2.4.3
- 代碼: 選擇全部
vim /etc/postfix/master.cf
- 代碼: 選擇全部
smtp inet n - n - - smtpd
2.4.4
- 代碼: 選擇全部
vim /etc/default/saslauthd
START=yes
MECHANISMS="pam"
2.4.5
- 代碼: 選擇全部
chown -R postfix:postfix /var/run/saslauthd --> 每次開機都要做一次
2.4.6 將此指令寫到 /etc/rc2.d/S99saslauth,記得要 chmod 755 /etc/rc2.d/S99saslauth,這樣每次開機都會執行
2.4.7
- 代碼: 選擇全部
/etc/init.d/saslauthd restart
2.4.8
- 代碼: 選擇全部
/etc/init.d/postfix restart
3 郵件防毒及郵件過濾系統
3.1 安裝套件
3.1.1 防毒
3.1.1.1 install mcafee
3.1.1.2
- 代碼: 選擇全部
wget http://debian.marlow.dk/dists/woody/virus/pool/lib/libstdc++2.8_2.90.29-2.deb
3.1.1.3
- 代碼: 選擇全部
dpkg –i libstdc++2.8_2.90.29-2.deb
3.1.1.4 到 http://www.nai.com/us/downloads/evals/ 下載 McAfee VirusScan Command Line Scanner for Linux 或是直接下載
- 代碼: 選擇全部
wget http://download.nai.com/products/evaluation/virusscan/english/cmdline/linux/v4.32/intel/vlnx432e.tar.Z
http://download.nai.com/products/evaluation/virusscan/english/cmdline/linux/v4.40/vlnx440e.tar.Z
3.1.1.5
- 代碼: 選擇全部
tar -zxvf vlnx440e.tar.Z
3.1.1.6
- 代碼: 選擇全部
chown 755 install-uvscan
3.1.1.7
- 代碼: 選擇全部
./install-uvscan
3.1.2 濾信(有需要濾信才要裝)
3.1.2.1
- 代碼: 選擇全部
apt-get install spamc
3.1.2.2
- 代碼: 選擇全部
apt-get install spamassassin
3.1.2.3
- 代碼: 選擇全部
apt-get install amavisd-new
3.1.2.3.1 裝完之後看一下 /var/log/syslog 有沒有類似的訊息【Jun 5 00:30:00 debian amavis[1743]: Found primary av scanner NAI McAfee AntiVirus (uvscan) at /usr/local/bin/uvscan】
3.1.2.4
- 代碼: 選擇全部
apt-get install procmail
3.1.3 安裝解壓縮的程式,如果有人寄壓縮檔來的話還是要一一解開來看看是不是夾雜的病毒。(如果發現無法安裝unrar,請自行修改/etc/apt/sourcelist檔案的testing為unstable來安裝)
3.1.3.1
- 代碼: 選擇全部
apt-get install bzip2 unrar
3.2 設定
3.2.1 修改/etc/postfix/master.cf
- 代碼: 選擇全部
# ==========================================================================
# service type private unpriv chroot wakeup maxproc command + args
# (yes) (yes) (yes) (never) (100)
# ==========================================================================
smtp inet n - n - - smtpd
#smtp inet n - n - - smtpd –o content_filter=spamassassin:
#628 inet n - - - - qmqpd
pickup fifo n - - 60 1 pickup
cleanup unix n - - - 0 cleanup
qmgr fifo n - - 300 1 qmgr
#qmgr fifo n - - 300 1 nqmgr
rewrite unix - - - - - trivial-rewrite
bounce unix - - - - 0 bounce
defer unix - - - - 0 bounce
flush unix n - - 1000? 0 flush
proxymap unix - - n - - proxymap
smtp unix - - - - - smtp
#smtp inet n - n - - smtp –o content_filter=spamassassin:
relay unix - - - - - smtp
# -o smtp_helo_timeout=5 -o smtp_connect_timeout=5
showq unix n - - - - showq
error unix - - - - - error
local unix - n n - - local
virtual unix - n n - - virtual
lmtp unix - - n - - lmtp
#vscan unix - n n - 10 pipe user=amavis argv=/usr/sbin/amavisd-new ${sender} ${recipient}
#localhost:10025 inet n - n - - smtpd -o content_filter=
smtp-amavis unix - - n - 2 smtp -o smtp_data_done_timeout=1200 -o disable_dns_lookups=yes
127.0.0.1:10025 inet n - n - - smtpd -o content_filter= -o local_recipient_maps= -o relay_recipient_maps= -o smtpd_restriction_classes= -o smtpd_client_restrictions= -o smtpd_helo_restrictions= -o smtpd_sender_restrictions= -o smtpd_recipient_restrictions=permit_mynetworks,reject -o mynetworks=127.0.0.0/8 -o strict_rfc821_envelopes=yes -o smtpd_error_sleep_time=0 -o smtpd_soft_error_limit=1001 -o smtpd_hard_error_limit=1000
#### 上面這四行不需要寫在同一行,妳要寫成一行也是可以,只不過不方便看﹔第二跟第三行前面記得要空隔 ###
#
# Interfaces to non-Postfix software. Be sure to examine the manual
# pages of the non-Postfix software to find out what options it wants.
#
# maildrop. See the Postfix MAILDROP_README file for details.
#
maildrop unix - n n - - pipe
flags=DRhu user=vmail argv=/usr/local/bin/maildrop -d ${recipient}
#spamassassin unix - n n - - pipe flags=Rq user=nobody argv=/usr/bin/spamc -d 127.0.0.1 -f -p 783 -t 30 -e /usr/sbin/sendmail -i -f ${sender} -- ${recipient}
# flags=Rq user=nobody argv=/usr/bin/spamc -f -e /usr/sbin/sendmail -oi -f ${sender} ${recipient}
#user=filter argv=/usr/local/bin/sa-filter -f ${sender} -- ${recipient}
#
# The Cyrus deliver program has changed incompatibly, multiple times.
cyrus unix - n n - - pipe
flags=R user=cyrus argv=/usr/sbin/cyrdeliver -e -m "${extension}" ${user}
# Cyrus 2.1.5 (Amos Gouaux)
#cyrus unix - n n - - pipe
# user=cyrus argv=/cyrus/bin/deliver -e -r ${sender} -m ${extension} ${user}
uucp unix - n n - - pipe
flags=Fqhu user=uucp argv=uux -r -n -z -a$sender - $nexthop!rmail ($recipient)
ifmail unix - n n - - pipe
flags=F user=ftn argv=/usr/lib/ifmail/ifmail -r $nexthop ($recipient)
bsmtp unix - n n - - pipe
flags=Fq. user=bsmtp argv=/usr/lib/bsmtp/bsmtp -d -t$nexthop -f$sender $recipient
scalemail-backend unix - n n - 2 pipe
flags=R user=scalemail argv=/usr/lib/scalemail/bin/scalemail-store ${nexthop} ${user} ${extension}
# only used by postfix-tls
#tlsmgr fifo - - n 300 1 tlsmgr
#smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes
#587 inet n - n - - smtpd -o smtpd_enforce_tls=yes -o smtpd_sasl_auth_enable=yes
3.2.2
- 代碼: 選擇全部
vim /etc/postfix/main.cf
- 代碼: 選擇全部
content_filter = smtp-amavis:[127.0.0.1]:10024
加入上面這行
3.2.3
- 代碼: 選擇全部
vim /etc/procmailrc
- 代碼: 選擇全部
:0fw
* < 50000
| /usr/bin/spamassassin
:0: # 這三行是將垃圾信丟掉的設定
* ^X-Spam-Status: Yes # 我怕誤判
/dev/null # 所以沒有加上。
3.2.4
- 代碼: 選擇全部
vim /etc/spamassassin/local.cf
- 代碼: 選擇全部
# SpamAssassin config file for version 2.5x
# generated by http://www.yrex.com/spam/spamconfig.php (version 1.01)
# How many hits before a message is considered spam.
required_hits 5.0
# Whether to change the subject of suspected spam
rewrite_subject 1
# Text to prepend to subject if rewrite_subject is used
subject_tag *****SPAM*****
# Encapsulate spam in an attachment
report_safe 1
# Use terse version of the spam report
use_terse_report 0
# Enable the Bayes system
use_bayes 1
# Enable Bayes auto-learning
auto_learn 1
# Enable or disable network checks
skip_rbl_checks 0
use_razor2 1
use_dcc 1
use_pyzor 1
# Mail using languages used in these country codes will not be marked
# as being possibly spam in a foreign language.
ok_languages all
# Mail using locales used in these country codes will not be marked
# as being possibly spam in a foreign language.
ok_locales all
3.2.4.1
- 代碼: 選擇全部
mkdir -p /nonexistent/.spamassassin/user_prefs
3.2.4.2
- 代碼: 選擇全部
vim /etc/default/spamassassin
3.3 測試
3.3.1 用 amavis 的身份執行 /usr/local/bin/uvscan 如果沒有錯誤的話就可以了。
- 代碼: 選擇全部
debian:~# su - amavis
amavis@debian:~$ /usr/local/bin/uvscan
This program is more than 6 months old. New viruses come out all the
time - we would suggest that you upgrade your copy.
Usage:
uvscan [--afc] [--allole] [--analyse | --analyze]
[-c | --clean] [--cleandocall] [--config file]
[--dam] [-d | --dat | --data-directory] [--delete]
[--exclude file] [-e | --exit-on-error] [--extlist]
[--extensions EXT1[,EXT2...]] [--extra file]
[--fam] [-f | --file file] [--floppya] [--floppyb]
[-h | --help] [--ignore-compressed] [--ignore-links] [--load file]
[--mailbox] [--manalyse | --manalyze | --macro-heuristics]
[--maxfilesize XXX] [--mime] [-m | --move directory]
[--noboot] [--nocomp] [--nodecrypt] [--nodoc] [--noexpire]
[--norename] [--one-file-system]
[--panalyse | --panalyze] [-p | --atime-preserve | --plad]
[--program] [-r | --recursive | --sub]
[--secure] [-s | --selected] [--summary]
[-u | --unzip] [-v | --verbose] [--version] [--virus-list]
[-] {file / directory}
A target has not been specified for scanning!
Thank you for choosing to evaluate VirusScan from Network Associates.
This version of the software is for Evaluation Purposes Only and may be
used for up to 30 days to determine if it meets your requirements. To
license the software, or to obtain assistance during the evaluation
process, please call (408) 988-3832. If you choose not to license the
software, you need to remove it from your system. All use of this
software is conditioned upon compliance with the license terms set forth
in the README.TXT file.
3.3.2
- 代碼: 選擇全部
tail -f /var/log/syslog
- 代碼: 選擇全部
Jun 5 00:48:24 debian postfix/smtpd[716]: disconnect from web41008.mail.yahoo.com[66.218.93.7]
Jun 5 00:48:25 debian amavis[771]: (00771-01) Clam Antivirus-clamd: Can't connect to UNIX socket /var/run/clamav/clamd.ctl: No such file or directory, retrying (2)
Jun 5 00:48:31 debian amavis[771]: (00771-01) Clam Antivirus-clamd: Can't connect to UNIX socket /var/run/clamav/clamd.ctl: No such file or directory, retrying (3)
- 代碼: 選擇全部
vim /etc/amavis/amavisd.conf
- 代碼: 選擇全部
將 clamav 的區段加上 #
### http://www.clamav.net/
#['Clam Antivirus-clamd',
# \&ask_daemon, ["CONTSCAN {}\n", "/var/run/clamav/clamd.ctl"],
# qr/\bOK$/, qr/\bFOUND$/,
# qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
### http://www.clamav.net/
# ['Clam Antivirus - clamscan', 'clamscan',
# '--stdout --no-summary -r {}', [0], [1],
# qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
3.3.4
- 代碼: 選擇全部
/etc/init.d/amavis restart
3.3.5 如果不要回報病毒,修改 /etc/amavis/amavisd.conf 設定,將$virus_admin = "postmaster\@$mydomain"; 行加上 #,如果有其他的相關資訊就一併拿掉。
3.3.6 定時更新病毒碼
- 代碼: 選擇全部
crontab -e
- 代碼: 選擇全部
00 * * * * "/usr/bin/wget "http://download.nai.com/products/mcafee-avert/daily_dats/DAILYDAT.ZIP" -O /tmp/DAILYDAT.ZIP ; /usr/bin/unzip -o /tmp/DAILYDAT.ZIP -d /usr/local/uvscan" 2&>1 > /dev/null
3.3.7
4 Web Mail
4.1 安裝openwebmail,選擇auth_pam.pl、apache & apache-ssl
- 代碼: 選擇全部
apt-get install openwebmail
4.2 增加openwebmail的pam認證設定
- 代碼: 選擇全部
vim /etc/pam.d/openwebmail
- 代碼: 選擇全部
#%PAM-1.0
@include common-auth
@include common-account
@include common-session
4.3
- 代碼: 選擇全部
vim /etc/openwebmail/openwebmail.conf
- 代碼: 選擇全部
domainnames mail1.DomainName.net.tw
global_addressbook /usr/lib/cgi-bin/openwebmail/etc/address.book
enable_webdisk no
enable_sshterm no
enable_pop3 no
enable_changepwd no
default_iconset Cool3D.Chinese.Traditional
default_bgrepeat no
default_fontsize 11pt
default_msgsperpage 20
default_sendbuttonposition both
default_replywithorigmsg at_end
<default_signature>
---------------------------------------------
Digital Family Center (http://www.DomainName.net.tw)
</default_signature>
4.4
- 代碼: 選擇全部
vim /etc/apache/http.conf
- 代碼: 選擇全部
AddDefaultCharset off
4.5 在/var/www/底下建立一個index.html檔案
- 代碼: 選擇全部
vim /var/www/index.html
- 代碼: 選擇全部
<html><head>
<meta http-equiv="Refresh"
content="0;URL=http://your_server/cgi-bin/openwebmail/openwebmail.pl">
</head></html>
4.6
- 代碼: 選擇全部
apt-get install apache-ssl
4.7 修改 /etc/apache-ssl/httpd.conf
- 代碼: 選擇全部
再最後一行加入
Include /etc/openwebmail/apache.conf
5 自動化作業
5.1 自動更新及建立AD網域使用者家目錄
5.1.1
- 代碼: 選擇全部
vim /root/mknthomedir.awk
- 代碼: 選擇全部
#!/bin/awk
#uidmin設定為/etc/samba/smb.conf中uidmin的值
# uidmax設定為/etc/samba/smb.conf中uidmax的值
#僅針對UID範圍為設定中及群組為Domain User的帳號,進行家目錄的產生
BEGIN {
FS=」:」
uidmin=10000
uidmax=20000
}
{
if ( $3 >= uidmin && $3 <= uidmax && $4 == 10000) {
print 「\nmake directory 「 $6 「\nchown 「 $3 「:」 $4 「 「 $6
system ( 「mkdir –p 「 $6 「; chown –R 「 $3 「:」 $4 「 「 $6 )
}
}
5.1.2
5.1.3
- 代碼: 選擇全部
crontab –e
- 代碼: 選擇全部
0 * * * * getent passwd | awk –f /root/mknthomedir.awk
#設定每小時產生一次使用者家目錄
5.2 自動更新及建立郵件群組
5.2.1 分析
5.2.1.1 配合AD網域使用者帳戶中,所有使用者的帳戶全名前加入部門代碼;進而讓linux系統能從getent passwd中獲得的可分析的資料,再針對第五欄位$5進行處理,見5.2.1.2。
定時寫入檔案:將結果寫入到/etc/alias,並透過crontab –e寫入進行定時更新。
$1帳號:$2密碼:$3UID:$4GID:$5全名:$6家目錄:$7
5.2.1.2 從$5前五碼進行判斷:
- 代碼: 選擇全部
3XXXX表示為DOMAINNAME:將所有前五碼開頭為3XXXX的皆歸入為00000全公司這個群組。
31100表示為:將所有前五碼開頭為311XX的皆歸入為31100這個群組。
32100表示為:將所有前五碼開頭為321XX的皆歸入為32100這個群組。
33000表示為:將所有前五碼開頭為33XXX的皆歸入為33000這個群組。
33100表示為:將所有前五碼開頭為331XX的皆歸入為33100這個群組。
33200表示為:將所有前五碼開頭為332XX的皆歸入為33200這個群組。
33300表示為:將所有前五碼開頭為333XX的皆歸入為33300這個群組。
33400表示為:將所有前五碼開頭為334XX的皆歸入為33400這個群組。
33500表示為:將所有前五碼開頭為335XX的皆歸入為33500這個群組。
33600表示為:將所有前五碼開頭為336XX的皆歸入為33600這個群組。
33700表示為:將所有前五碼開頭為337XX的皆歸入為33700這個群組。
35000表示為:將所有前五碼開頭為35XXX的皆歸入為35000這個群組。
35100表示為:將所有前五碼開頭為351XX的皆歸入為35100這個群組。
35200表示為:將所有前五碼開頭為352XX的皆歸入為35200這個群組。
35300表示為:將所有前五碼開頭為353XX的皆歸入為35300這個群組。
36000表示為:將所有前五碼開頭為36XXX的皆歸入為36000這個群組。
36100表示為:將所有前五碼開頭為361XX的皆歸入為36100這個群組。
36200表示為:將所有前五碼開頭為362XX的皆歸入為36200這個群組。
37000表示為:將所有前五碼開頭為37XXX的皆歸入為37000這個群組。
37100表示為:將所有前五碼開頭為371XX的皆歸入為37100這個群組。
37200表示為:將所有前五碼開頭為372XX的皆歸入為37200這個群組。
37300表示為:將所有前五碼開頭為373XX的皆歸入為37300這個群組。
37400表示為:將所有前五碼開頭為374XX的皆歸入為37400這個群組。
38000表示為:將所有前五碼開頭為38XXX的皆歸入為38000這個群組。
38100表示為:將所有前五碼開頭為381XX的皆歸入為38100這個群組。
39000表示為:將所有前五碼開頭為39XXX的皆歸入為39000這個群組。
39100表示為:將所有前五碼開頭為391XX的皆歸入為39100這個群組。
5.2.2 實作
5.2.2.1
- 代碼: 選擇全部
vim /root/mkalias.awk
- 代碼: 選擇全部
#!/bin/awk
BEGIN {
FS=":"
}
{
g3xxxx = substr($5,1,1)
g3yyxx = substr($5,1,3)
g3yxxx = substr($5,1,2)
g3xxyy = substr($5,4,2)
if ( g3xxxx ~ /^3/ && g3xxyy ~ /^00/ ){
g00000 = g00000 "," $1;
if ( g3yyxx ~ /^311/ ){
g31100 = g31100 "," $1;
} else if ( g3yyxx ~ /^321/ ){
g32100 = g32100 "," $1;
} else if ( g3yxxx ~ /^33/ ){
g33000 = g33000 "," $1;
if ( g3yyxx ~ /^331/ ){
g33100 = g33100 "," $1;
} else if ( g3yyxx ~ /^332/ ){
g33200 = g33200 "," $1;
} else if ( g3yyxx ~ /^333/ ){
g33300 = g33300 "," $1;
} else if ( g3yyxx ~ /^334/ ){
g33400 = g33400 "," $1;
} else if ( g3yyxx ~ /^335/ ){
g33500 = g33500 "," $1;
} else if ( g3yyxx ~ /^336/ ){
g33600 = g33600 "," $1;
} else if ( g3yyxx ~ /^337/ ){
g33700 = g33700 "," $1;
}
} else if ( g3yxxx ~ /^35/ ){
g35000 = g35000 "," $1;
if ( g3yyxx ~ /^351/ ){
g35100 = g35100 "," $1;
} else if ( g3yyxx ~ /^352/ ){
g35200 = g35200 "," $1;
} else if ( g3yyxx ~ /^353/ ){
g35300 = g35300 "," $1;
}
} else if ( g3yxxx ~ /^36/ ){
g36000 = g36000 "," $1;
if ( g3yyxx ~ /^361/ ){
g36100 = g36100 "," $1;
} else if ( g3yyxx ~ /^362/ ){
g36200 = g36200 "," $1;
}
} else if ( g3yxxx ~ /^37/ ){
g37000 = g37000 "," $1;
if ( g3yyxx ~ /^371/ ){
g37100 = g37100 "," $1;
} else if ( g3yyxx ~ /^372/ ){
g37200 = g37200 "," $1;
} else if ( g3yyxx ~ /^373/ ){
g37300 = g37300 "," $1;
} else if ( g3yyxx ~ /^374/ ){
g37400 = g37400 "," $1;
}
} else if ( g3yxxx ~ /^38/ ){
g38000 = g38000 "," $1;
if ( g3yyxx ~ /^381/ ){
g38100 = g38100 "," $1;
}
} else if ( g3yxxx ~ /^39/ ){
g39000 = g39000 "," $1;
if ( g3yyxx ~ /^391/ ){
g39100 = g39100 "," $1;
}
}
}
}
END {
print "00000: " substr(g00000,2);
print "31100: " substr(g31100,2);
print "32100: " substr(g32100,2);
print "33000: " substr(g33000,2);
print "33100: " substr(g33100,2);
print "33200: " substr(g33200,2);
print "33300: " substr(g33300,2);
print "33400: " substr(g33400,2);
print "33500: " substr(g33500,2);
print "33600: " substr(g33600,2);
print "33700: " substr(g33700,2);
print "35000: " substr(g35000,2);
print "35100: " substr(g35100,2);
print "server: " substr(g35200,2);
print "35300: " substr(g35300,2);
print "36000: " substr(g36000,2);
print "36100: " substr(g36100,2);
print "36200: " substr(g36200,2);
print "37000: " substr(g37000,2);
print "37100: " substr(g37100,2);
print "37200: " substr(g37200,2);
print "37300: " substr(g37300,2);
print "37400: " substr(g37400,2);
print "38000: " substr(g38000,2);
print "38100: " substr(g38100,2);
print "39000: " substr(g39000,2);
print "39100: " substr(g39100,2);
}
5.2.2.2
- 代碼: 選擇全部
vim /root/RenewAlias.bash
- 代碼: 選擇全部
#!/bin/bash
rm DomainAccAlias
rm TempAlias
getent passwd | awk -f mkalias.awk > DomainAccAlias
cat NativeAlias > TempAlias
cat DomainAccAlias >> TempAlias
cp TempAlias /etc/aliases
newaliases
5.2.2.3
- 代碼: 選擇全部
cp /etc/aliases /root/NativeAlias
5.2.2.4
- 代碼: 選擇全部
crontab –e
- 代碼: 選擇全部
每小時執行一次
0 * * * * sh /root/RenewAlias.bash
5.2.3 這樣就完成了,以後系統每小時會自動更新郵件群組一次。
5.3 自動化建立OpenWebMail公用通訊錄
5.3.1 如何設定OpenWebMail使用公用通訊錄
- 代碼: 選擇全部
vim /etc/openwebmail/openwebmail.conf
- 代碼: 選擇全部
global_addressbook /usr/lib/cgi-bin/openwebmail/etc/address.book
5.3.2
- 代碼: 選擇全部
vim RenewAddressBook.bash
- 代碼: 選擇全部
#!/bin/bash
getent passwd | awk -f mkAddressBook.awk > /root/UserMailList
recode utf-8..big5 /root/UserMailList
cat /root/UserMailList > /usr/lib/cgi-bin/openwebmail/etc/address.book
cat /root/GroupMailList >> /usr/lib/cgi-bin/openwebmail/etc/address.book
## mkAddressBook.awk作為更新使用者通訊錄的SCRIPT,存放到UserMailList
## recode utf-8..big5 /root/UserMailList因為從AD抓過來的資料為UTF-8,所以透過程式轉換為BIG5
##自行安裝recode a apt-get install recode
## GroupMailList存放群組郵件的清單,日後群組有異動時修改這個文件。
5.3.3
- 代碼: 選擇全部
vim mkAddressBook.awk
#!/bin/awk
BEGIN {
FS=":"
}
{
g3xxxx = substr($5,1,1)
g3xxyy = substr($5,4,2)
if ( g3xxxx ~ /^3/ && g3xxyy ~ /^00/ ){
print $5 "@@@" $1 "@mail1.DomainName.net.tw@@@";
}
}
5.3.4
- 代碼: 選擇全部
vim GroupMailList
- 代碼: 選擇全部
姓名稱呼 @@@電子郵件位址@@@備註
5.3.5
- 代碼: 選擇全部
crontab -e
- 代碼: 選擇全部
1 * * * * sh /root/RenewAddressBook.bash
5.4 防止USER使用收信軟體傳送或接收Web Mail的信件。
5.4.1
- 代碼: 選擇全部
vim /etc/inetd.con
5.4.2
- 代碼: 選擇全部
vim /etc/hosts.allow
- 代碼: 選擇全部
in.qpopper: 127.0.0.1
#設定只讓該程序由127.0.0.1進入使用
5.4.3
- 代碼: 選擇全部
vim /etc/hosts.deny
- 代碼: 選擇全部
in.qpopper: ALL
#設定該程序拒絕所有USER