顯示文章

這裡允許您檢視這個會員的所有文章。請注意, 您只能看見您有權限閱讀的文章。


主題 - dandy

頁: [1]
1
RHEL5的yum無痛升級法 (php5.3.1-1+mysql5.1.41-1)
--Written by Dandy


2
RHEL5升級JDK 6 Update 17+Tomcat 6.0.20筆記
-written by Dandy
====================
RHEL5內建的JDK是gij (GNU libgcj) version 4.1.1的Java 1.4.2,這版本跟一些系統不大合,也稍嫌有點舊,所以趁升級Tomcat 6時順便來換掉,
一般RHEL 5目前都僅支援到Apache Tomcat 5及JRE 5, 無法以yum安裝,以下為更新步驟:

3
Network 討論版 / 中華電信Hinet處理事件簿
« 於: 2005-10-01 22:41 »
<這是去年1月的事件>
敝人從民國89年起申請使用ADSL,至今已有5年的歷史,費用從當年的三千多降到目前的799+1500=2299,速度從當年的512/64,去年7月為了架站申請改為雙向512,這是因為費率上只較512/64多出100多元,所以從去年7月就繳2299到現在,但由於阿扁成功連任,學生代表於抗爭時反應ADSL太貴,於是中華電信開始大降價,到這個月連降兩次,我想想實在忍不住了,開始研究Hinet ADSL費率,結果實在是出乎我意料之外的糟糕,首先,我感興趣的有這幾項:
1.8M/640非固定--目前的收費為550+650=1200,這居然比3M/640的1200+949=2149還貴上許多,何解?在深入瞭解後,才知道"集縮比"這個名詞,簡單說,Hinet的8M/640在集縮比的規劃上比較高,據說為12~20:1,3M/640約為4:1,所以在速度穩定性上起伏比較大,我跑了電信局詢問後,居然小姐跟我說不收違約金(以我的情形應該是要的),好!二話不說,馬上申請換,結果後來考慮到穩定性及架站的方便性,再電話詢問一次,居然跟我說換固3不收違約金,但是要親自去中華電信辦理,好,再一次二話不說,cacel掉8M/640.

2.2M/512K固3--其實我對固定ip是比較感興趣,因為雖然非固定制從2M以上就提供鎖定一個ip做為固定ip的服務,但這個還是需要透過PPPoE來連線,對架站來說頗不方便,所以二次造訪電信局便申請這項業務,結果碰到一個比較熟悉規定的小姐,在那邊嚕了半片,在詳查費率規定後,得出一個結論,我必須繳交1000+3000=4000的違約金,她說是因為雙向512的約比較嚴格...我一聽幾乎傻眼,腦子開始轉出一些solution:
(1)直接停掉雙向512--不行,違約金還是要繳,電路年資的折扣以後就沒有了
(2)等到七月再停掉雙向512--不行,而且電路違約金+網路違約金=4000(雙向512內規定電話違約金1000一定要滿兩年,非固定滿一年)
(3)保留電路,換裝2M/512--這樣除違約金3000要收以外,也不能享有699+799=1498的新申請費率,而必須照牌告費率999+699=1698,每月大概省掉600x12=7200-3000=4200,應該還可以接受,可是居然跟我說不送禮品無線AP+網卡,算一算也不大划算
(4)乾脆連電話都停掉,賴掉違約金--不行,會造成欠費,其他名下電話也會一併停掉
(5)最後...好像都出在合約的問題上面,我不記得簽過這樣的合約呀..耶~,不記得會不會就是沒有?請小姐從總局傳真我當初簽的合約來看,果然合約並沒載明這些不公平條款,哈~~這下沒簽約,所以也不存在違約問題,原因是我當初從512/64換成雙向512時,只填了一張異動單,裡面根本不會有這些條款,所以,小姐看我想拿異動單去申訴了,趕緊請出主管,動用權限解除3000的違約金,直接昇級轉換成2M/512,但是還是照牌告費率計算999+699=1698,我還是答應了,為什麼呢?因為這樣是延續我雙向512的約,也就是我頂多再一年就可以解約,而繳699+799=1498必須多一年,照Hinet目前的降價方式,難保兩年會降到什麼地步...而且我還有ADSL8折,電路9折的年資折扣.

這次事件的處理,有幾個心得:
1.Hinet訂價策略實在是紊亂,造成一項業務有多個版本的說法
2.Hinet約聘人員太多,素質太差,不管電話客服,櫃台人員都一樣,所以要繳違約金的請多去碰碰運氣,搞不好就不用繳
3.態度良好的請主管(一般是股長)出來談,應該可以爭取到一些空間
4.請對自己的合約仔細閱讀

<這個月的事件>
由於不小心翻到hinet的網頁,忽然想起ADSL的約好像已經到期了,打電話問一下,果然在七月底就到期了,再翻一下Hinet ADSL的網頁,果不其然,又有策略大降價
http://www.adsl.hinet.net/3ip/index.htm
首先8M/640固3果然已經跑出來了,而且變成1299+650=1949,比原先的2M/512=1698多一點點,而現在的2M/512是1448,比之前少了250元/月,更遭糕的是,原先合約內就可以申請異動,但是不會主動告知,於是二話不說,重新到中華電信櫃台換約,資料填寫中,跟承辦小姐吐說,咦~你很好像約滿了都不會主動告知喔,他很不好意思的說,因為客戶如果沒有主動要求換約,表示用得很滿意....嗯,真是一個..好理由.
所以,使用hinet的下列幾點心得:
1.請注意自己的合約日期,固接撥接都一樣,約滿了就去換
2.請多注意hinet的promotion網頁
固接:http://www.adsl.hinet.net/3ip/index.htm
撥接:http://www.promotion.hinet.net/index.htm
3.如果你不換約,表示你很有錢,每個月多繳一些錢給hinet,或用同樣的$$使用較低的頻寬
4.記得重新換約有贈品,贈品有3com wireless ap set, dvd燒錄器等
5.hinet"絕對"不會主動通知你任何的期約內容,而且會希望你傻傻的一直繳

4
database 討論版 / ORACLE replication memo筆記
« 於: 2005-09-28 16:36 »
貼一些舊筆記
*****************************************************
My ORACLE replication memo
            --written by Dandy
*****************************************************
<<<手動>>>
*Replication同步oracle步驟

1.查看是否支援Advance replication.
SQL>select * from v$option where parameter='Advanced replication'

2.確認啟始參數(init*.ora)

db_domain = test.com.cn
global_names = true

# The following parameters are needed for the Advanced Replication Option
job_queue_processes = 4
job_queue_interval = 60
distributed_transactions = 10
open_links = 4

3.設定tnsname,加入異地連結,使得下列連結能成功:
(假設local為BB)

tnsping AA
sqlplus scott/tiger@AA.test.com

4.測試資料庫全域名稱和公共的資料庫鏈結

SQL>create public database link AA1 connect to scott identified by tiger using 'AA';
資料庫連結已被建立
SQL>select * from global_name@AA1;

GLOBAL_NAME
--------------------------------------------------------------------------------
AA.TEST.COM

5.建立管理資料庫複製的用戶repadmin,並授權。
(用system登入)
SQL>create user repadmin identified by repadmin default tablespace users temporary tablespace temp;
SQL>execute dbms_defer_sys.register_propagator('repadmin');
SQL>grant execute any procedure to repadmin;
SQL>grant lock any table to repadmin;

6.在資料庫複製的用戶repadmin下創建私有的資料庫鏈結。
(用repadmin登入)
SQL>create database link AA1 connect to repadmin identified by repadmin using 'AA';

7.測試這個私有的資料庫鏈結
SQL>select * from global_name@AA1;

GLOBAL_NAME
--------------------------------------------------------------------------------
AA.TEST.COM

8.創建或選擇資料庫欲複製的用戶和物件,授權給用戶,資料庫物件必須有主關鍵字。
假設我們用ORACLE裏舉例用的scott用戶,dept表。


<<<使用Replication Manager>>>
*Replication同步oracle步驟

1.查看是否支援Advance replication.
SQL>select * from v$option where parameter='Advanced replication'

2.確認啟始參數(init*.ora)

db_domain = test.com.cn
global_names = true

# The following parameters are needed for the Advanced Replication Option
job_queue_processes = 4
job_queue_interval = 60
distributed_transactions = 10
open_links = 4

3.設定tnsname,加入異地連結,使得下列連結能成功:
(假設local為BB)

tnsping AA
sqlplus scott/tiger@AA.test.com

4.測試資料庫全域名稱和公共的資料庫鏈結

SQL>create public database link AA1 connect to scott identified by tiger using 'AA';
資料庫連結已被建立
SQL>select * from global_name@AA1;

GLOBAL_NAME
--------------------------------------------------------------------------------
AA.TEST.COM

5.開啟DBA Studio,以system登入,
  (1)啟動replicaiton manager,
      Multimaster Replication--多資料庫複製
      Snapshot Replication--快照複製(2部oracle複製)
  選Snapshot Replication
  (2)Master Site按右鍵選Setup Master Site
  (3)將欲同步的兩部oracle加入
  (4)輸入資料過程中儘量保留預設值。(schedule time 或可改為30秒,async測試用)設一次就好
  (5)完成後產生repadmin/repadmin的帳號,以後以此帳號登入.
  (6)完成後各在2個oracle產生DB link,以repadmin/repadmin登入,按test測試連線是否正常,不正常則檢查tnsname.

6.disconnect後以repadmin/repadmin登入,設定sync Master Groups
  (1)啟動replicaiton manager,Master Groups按右鍵選Create
  (2)General頁面的name填入SCOTT_SYNC
  (3)Object 頁面點Add,選SCOTT,勾Tables,將scott的table全選入(如果我們選的table沒有primary key,
      這時replication manager會要求我們一定要選好primary key。)
  (4)Master Sites頁面選Add,將Public database link打勾,選已經設定好的AA1.TEST.COM.
      Propagation選synchronous。如果這時所有的site這些table資料內容都一致,必須
      uncheck Copy row data。否則資料量多(>10000筆)時,會有問題。
  (5)最後點Create.

7.啟動replicaiton manager,Master Groups會出現剛建立的Master Group scott_sync
   status 為quisced,正常狀態為normal。

=====================
Asynchronous 非即時同步
=====================
1.由於synchronous在資料不一致或網路反應過慢時會lock住table不能異動資料,所以一般採用asynchronous同步
2.asynchronous的資料同步流程為:
---(1)產生Admin Request ==>(2)在timestamp的interval(時間間隔)產生defferd data(即將要複製資料的queue)
==>(3),判斷有無衝突,無衝突則異動到remote端的table中,有衝圖則依據xx的resolution規則處理或直接產生error
3.若同步停止仍會lock住table.
4.設定如下:
--(1)以repadmin登入replication manager,在Multimaster Replication的Master Groups按右鍵選Create(假設之前的Setup Master Site
已完成.
  (2)共有三頁次,第一頁General,填入欲replicate的物件名稱
  (3)第二頁Object,選擇欲同步的物件,如table,view,等
  (4)第三頁Master Site,選擇欲同步的oracle site,local site為Master Definition Site,其他則為Master Site.按Add選
  Public database links,下面Available links會出現之前Setup Master Site所設定過的site,點一下按ok,
  (5)出現遠端site的選項,分成Propagation(複製方式)--Asynchronous(非即時)和Synchronous(即時)
  (6)右邊的Use existing object是使用存在的物件與否,Copy row data表示同步時需不需要複製資料,若資料量多可能
  會造成同步非常緩慢,此時利用(A)export(B)import(C)Create物件,此選項取消可快速完成.
  (7)Creat
  (8)依照個別同步的table設定衝突規則









<P.S.>若產生錯誤無法清除,在SYSTEM.REPCAT$_REPCAT的Table裡可找到資料砍掉.

5
database 討論版 / 監控資料庫性能的SQL
« 於: 2005-09-28 16:33 »
這個是抄別人的,出處不好意思忘了~

監控資料庫性能的SQL
1. 監控事件的等待
select event,sum(decode(wait_Time,0,0,1)) "Prev",
          sum(decode(wait_Time,0,1,0)) "Curr",count(*) "Tot"
  from v$session_Wait
  group by event order by 4;

2. 回滾段的爭用情況
    select name, waits, gets, waits/gets "Ratio"
    from v$rollstat a, v$rollname b
    where a.usn = b.usn;

3. 監控表空間的 I/O 比例
    select df.tablespace_name name,df.file_name "file",f.phyrds pyr,
    f.phyblkrd pbr,f.phywrts pyw, f.phyblkwrt pbw
    from v$filestat f, dba_data_files df
    where f.file# = df.file_id
    order by df.tablespace_name;

4. 監控文件系統的 I/O 比例
    select substr(a.file#,1,2) "#", substr(a.name,1,30) "Name",
    a.status, a.bytes, b.phyrds, b.phywrts
    from v$datafile a, v$filestat b
    where a.file# = b.file#;

5.在某個用戶下找所有的索引
    select user_indexes.table_name, user_indexes.index_name,uniqueness, column_name
    from user_ind_columns, user_indexes
    where user_ind_columns.index_name = user_indexes.index_name
    and user_ind_columns.table_name = user_indexes.table_name
    order by user_indexes.table_type, user_indexes.table_name,
    user_indexes.index_name, column_position;

6. 監控 SGA 的命中率
    select a.value + b.value "logical_reads", c.value "phys_reads",
    round(100 * ((a.value+b.value)-c.value) / (a.value+b.value)) "BUFFER HIT RATIO"
    from v$sysstat a, v$sysstat b, v$sysstat c
    where a.statistic# = 38 and b.statistic# = 39
    and c.statistic# = 40;

7. 監控 SGA 中字典緩衝區的命中率
    select parameter, gets,Getmisses , getmisses/(gets+getmisses)*100 "miss ratio",
    (1-(sum(getmisses)/ (sum(gets)+sum(getmisses))))*100 "Hit ratio"
    from v$rowcache
    where gets+getmisses <>0
    group by parameter, gets, getmisses;

8. 監控 SGA 中共用緩存區的命中率,應該小於1%
    select sum(pins) "Total Pins", sum(reloads) "Total Reloads",
    sum(reloads)/sum(pins) *100 libcache
    from v$librarycache;
    select sum(pinhits-reloads)/sum(pins) "hit radio",sum(reloads)/sum(pins) "reload percent"
    from v$librarycache;

9. 顯示所有資料庫物件的類別和大小
    select count(name) num_instances ,type ,sum(source_size) source_size ,
    sum(parsed_size) parsed_size ,sum(code_size) code_size ,sum(error_size) error_size,
    sum(source_size) +sum(parsed_size) +sum(code_size) +sum(error_size) size_required
    from dba_object_size
    group by type order by 2;

10. 監控 SGA 中重做日誌緩存區的命中率,應該小於1%
    SELECT name, gets, misses, immediate_gets, immediate_misses,
    Decode(gets,0,0,misses/gets*100) ratio1,
    Decode(immediate_gets+immediate_misses,0,0,
    immediate_misses/(immediate_gets+immediate_misses)*100) ratio2
    FROM v$latch WHERE name IN ('redo allocation', 'redo copy');

11.  監控記憶體和硬碟的排序比率,最好使它小於 .10,增加 sort_area_size
    SELECT name, value FROM v$sysstat WHERE name IN ('sorts (memory)', 'sorts (disk)');

12. 監控當前資料庫誰在運行什?SQL語句
    SELECT osuser, username, sql_text from v$session a, v$sqltext b
    where a.sql_address =b.address order by address, piece;

13. 監控字典緩衝區
    SELECT (SUM(PINS - RELOADS)) / SUM(PINS) "LIB CACHE" FROM V$LIBRARYCACHE;
    SELECT (SUM(GETS - GETMISSES - USAGE - FIXED)) / SUM(GETS) "ROW CACHE" FROM V$ROWCACHE;
    SELECT SUM(PINS) "EXECUTIONS", SUM(RELOADS) "CACHE MISSES WHILE EXECUTING" FROM V$LIBRARYCACHE;
    後者除以前者,此比率小於1%,接近0%?好。
    SELECT SUM(GETS) "DICTIONARY GETS",SUM(GETMISSES) "DICTIONARY CACHE GET MISSES"
    FROM V$ROWCACHE

14. 找ORACLE字元集
    select * from sys.props$ where name='NLS_CHARACTERSET';

15. 監控 MTS
    select busy/(busy+idle) "shared servers busy" from v$dispatcher;
    此值大於0.5時,參數需加大
    select sum(wait)/sum(totalq) "dispatcher waits" from v$queue where type='dispatcher';
    select count(*) from v$dispatcher;
    select servers_highwater from v$mts;
    servers_highwater接近mts_max_servers時,參數需加大

16. 碎片程度
    select tablespace_name,count(tablespace_name) from dba_free_space group by tablespace_name
    having count(tablespace_name)>10;
    alter tablespace name coalesce;
    alter table name deallocate unused;
    create or replace view ts_blocks_v as
    select tablespace_name,block_id,bytes,blocks,'free space' segment_name from dba_free_space
    union all
    select tablespace_name,block_id,bytes,blocks,segment_name from dba_extents;
    select * from ts_blocks_v;
    select tablespace_name,sum(bytes),max(bytes),count(block_id) from dba_free_space
    group by tablespace_name;
    查看碎片程度高的表
    SELECT segment_name table_name , COUNT(*) extents
    FROM dba_segments WHERE owner NOT IN ('SYS', 'SYSTEM') GROUP BY segment_name
    HAVING COUNT(*) = (SELECT MAX( COUNT(*) ) FROM dba_segments GROUP BY segment_name);

17. 表、索引的存儲情況檢查
    select segment_name,sum(bytes),count(*) ext_quan from dba_extents where
    tablespace_name='&tablespace_name' and segment_type='TABLE' group by tablespace_name,segment_name;
    select segment_name,count(*) from dba_extents where segment_type='INDEX' and owner='&owner'
    group by segment_name;

18、找使用CPU多的用戶session
    12是cpu used by this session
    select a.sid,spid,status,substr(a.program,1,40) prog,a.terminal,osuser,value/60/100 value
    from v$session a,v$process b,v$sesstat c
    where c.statistic#=12 and c.sid=a.sid and a.paddr=b.addr order by value desc;

6
database 討論版 / ORACLE memo小技巧
« 於: 2005-09-28 16:29 »
貼一些舊筆記
*****************************************************
My ORACLE memo
            --written by Dandy
*****************************************************

*Oracle 資料檔案datafile遺失或誤砍的補救方式
--1.在資料庫啟動時,開啟svrmgrl,以internal連接=>
   SVRMGRL>CONNECT INTERNAL
  2.將損毀的DATAFILE離線   =>
     SVRMGRL>ALTER DATABASE DATAFILE 'D:\Oracle\oradata\LOCALDB\SOLE.ORA'OFFLINE;
  3.將損毀的DATAFILE離線並刪除=>
     SVRMGRL>ALTER DATABASE DATAFILE 'D:\Oracle\oradata\LOCALDB\SOLE.ORA'OFFLINE DROP;
  4.重新關閉並啟動資料庫
  5.CONNECT SYSTEM 看是否復原

*ORA-01599 Rollback Segment超出預設值,無法啟動oracle
--將多出的rollback segment OFFLINE或更改init.ora內max_rollback_segments的值
======================================================================================
*ORACLE的邏輯備份指令
備份=>/ora805/bin/exp system/PASSWORD FILE=0218.dmp BUFFER=40960 FULL=Y GRANTS=Y
還原=>/ora805/bin/imp system/PASSWORD FILE=0218.dmp BUFFER=40960 FULL=Y GRANTS=Y
個別user備份=>exp scott/tiger file=scott.dmp log=log.txt
個別user還原=>imp scott/tiger file=scott.dmp show=y log=log.txt

用DBA還原個別user的資料:
imp system/manager fromuser=scott touser=scott file=0319.dmp show=y buffer=40960
======================================================================================
*建立表格空間(TABLESPACE)
SQL>CREATE TABLESPACE "SPACE_NAME" LOGGING DATAFILE 'PATH\DBFILENAME' SIZE 5M;

======================================================================================
*建立倒回區段(ROLLBACK SEGMENT),加上 PUBLIC開機將自動載入
SQL>CREATE PUBLIC ROLLBACK SEGMENT "SEGMENT_NAME" TABLESPAE "SPACE_NAME";
SQL> ALTER ROLLBACK SEGMENT "SEGMENT_NAME" ONLINE;

======================================================================================
*建立新使用者,並授權
SQL>CREATE USER "USERNAME" IDENTIFIED BY "PASSWORD" DEFAULT TABLESPACE "SPACE_NAME" TEMPORARY TABLESPACE "SPACE_NAME";
SQL>GRANT CONNECT,RESOURCE TO "USERNAME";

======================================================================================
*重建Oracle的Demo資料庫(Scott or other account)
--.找到utlsampl.sql,
SQL>@utlsampl.sql

======================================================================================
*在oracle裡用 SQL 語言單獨查詢 date type 中的 年 ,月 , 日
-->select to_char( sysdate , 'YYYY' ) FROM DUAL ==> 2000

======================================================================================
*Sequence
SELECT tablename_fieldname.nextval FROM dual    每執行一次數值會依設定增加或減少
SELECT tablename_fieldname.currval FROM dual    取得目前的Counter數值

======================================================================================
*oracle要查系統的現在時間
SQL>select sysdate from dual;

======================================================================================
*計算相差幾個月的方法
=>使用months_between(d1,d2)

======================================================================================
*長度超過2000 bytes時,SQL會出錯,因為Oracle不允許 SQL指令中的字串長度超過2000字元, 比較有效的方法是利用 stored procedure .
=>解決方法就是用 set serveroutput on size 或 dbms_output.enable()設定足夠大的 buffer

======================================================================================
*Oracle中,如何將圖檔存入欄位中
=>1.宣告欄位為LongRaw
    2.宣告欄位為Varchar2,長度自訂,用來存放圖形的路徑與檔名
    <PL/SQL>
    READ_IMAGE_FILE(:TEST.PATH, 'JFIF', 'TEST.IG');
    :TEST.PATH用來存放SELECT出來的路徑檔名
    EX:SELECT 出一筆'C:\IMAGE\TEST.JPG' DATA,  就是READ_IMAGE_FILE('C:\IMAGE\TEST.JPG','JFIF','TEST.IG')
    'JFIF'是SHOW JPEG格式

======================================================================================    
*要清除死掉或是要中斷某一使用者的連線
=>alter system kill session 'sid,serial#';

======================================================================================
*忘了system的密碼
=>看internal有沒有設密碼,若無,則以internal登入,
    ALTER USER ORACLE IDENTIFIED BY 密碼

======================================================================================    
*看連線資訊(Session)
=>select * from v$session;

======================================================================================
*Oracle 8.1.6@使用者無法 drop
=>drop user jog cascade;

======================================================================================
*php連到oracle
=>int ora_logon(string user, string password);

======================================================================================
*OEM2.04無法安裝在NT上,停在複製voc.ico然後就不動了
=>1)控制台->先改為english. 重開機.
    2)安裝在不同的目錄(有別於DEFAULT_HOME)

======================================================================================    
*oracle-如何將多建的欄位刪除?
=>
ALTER TABLE employee DROP COLUMN address;
or
ALTER TABLE employee DROP (address);

======================================================================================
*追蹤所有使用者的使用紀錄(包括使用了哪些SQL程序)
=>用 SQL Trace 及 TKPROF,去看 Oracle Tuning 手冊, Using the SQL Trace Facility and TKPROF 那一章,
AUDIT SQL statement 不會記錄這些東西,
只會記錄用到哪一種 SQL 指令的代碼,
不會記錄整個 SQL 指令....

<ex>
SELECT *  FROM sys.v_$sqlarea  WHERE parsing_user_id =
(SELECT DISTINCT user#  FROM sys.v_$session WHERE username = 'THE_USER_NAME');

v$seqarea 的 sql_text 只有前 1000 字元, 並非全部的 SQL 指令,
從 v$sqltext 才可組合出完整的 SQL 指令,

======================================================================================
*搜尋物件
=> select object_name from all_objects where object_name like '%NLS%'

======================================================================================
*從一個已存在的 Database Instance 中查它的 Character set
=>
1.select * from V$NLS_PARAMETERS;
2.select * from NLS_DATABASE_PARAMETERS
3.SELECT v.name, DECODE ( n.value, NULL, v.value, n.value ) value  , v.description
 FROM NLS_DATABASE_PARAMETERS n, V$PARAMETER v WHERE n.parameter(+) = UPPER(v.name)
  and name = 'nls_language' ORDER BY v.name

*Oracle Tunning
=>
1.DB block size大小要設OS block的倍數,read data 比較有效率
2.

======================================================================================
*Partition Pruning
=>oracle 8 支援 partition table (分割表格), 將一個大的表格,切分成不同的部份,可以存在不同的地方,
加速 disk io 來做資料的選取 , partition pruning 是可以讓sql 直接執行所要存取的 分割區( partition)  ,
而將其他不必要的patition 排除在外.

======================================================================================
*如何更改 oracle Table 欄名
=>無法直接更改欄名,只能 add 一個新欄名, 再 update, 再將舊的 drop.

======================================================================================
*自Oracle8i之後,exp多了一個參數QUERY=利用這個選項可以把某些部份予以匯出
   例如:
   exp scott/tiger tables=emp query=\"where deptno=10\"

======================================================================================  
*Oracle8i如何取出第5筆到第10筆資料?
=>  SELECT * FROM   your_table WHERE  rowid in (
          SELECT rowid FROM your_table WHERE rownum <= 10 MINUS
            SELECT rowid FROM your_table WHERE rownum < 5);

======================================================================================
*Oracle 沒有recno,只能用rowid識別資料的"行(row)",
轉換成第幾行則用rowno

======================================================================================
*在Oracle將字串轉日期的作法
=>select to_char(to_date('18/00/00','hh24/mi/ss'),'hh24/mi/ss') from dual;

======================================================================================
*  Oracle shutdown的時間
=>其實 shutdown normal 所需的時間比較不一定,如果線上有某個 user 死都不 logout ,  那 DB 就無法被shutdown 下來 !!
  如果是 Oracle 8 以上 ,
  可以改用 shutdown transactional 或 shutdown immedaite

======================================================================================  
*我用 Oracle 8 [Exp80] 匯出的 Dmp 檔, 如何讓 Oracle 7 Import 進入系統?
=>在 export 前需要先在 Oracle 8 的 sys 帳號下執行 catexp7.sql
然後在匯出...
but 你在匯入&匯出時所使用的export, import工具版本必須相同
ex..你使用exp80匯出..就應該用imp80匯入...

======================================================================================
*啟動/關閉archive log 模式
--1、管理器
SVRMGR> connect internal
SVRMGR> shutdown
SVRMGR> startup mount [dbname]
SVRMGR> alter database [dbname] archivelog;   --起用自動歸檔模式
SVRMGR> archive log start         --啟用自動歸檔模式,重啟資料庫後,按init.ora配置
SVRMGR> alter database [dbname] open;   --打開資料庫
SVRMGR> exit

  2、修改資料庫初始化文件,定義歸檔模式(自動)、歸檔日誌志文件保存路徑、歸檔日誌文件命名方法
修改/oracle/8.1.7/dbs/init.ora,
取消以下幾句的注解

log_archive_start = true
log_archive_dest_1 = "location=C:\Oracle\oradata\oradb\archive"
log_archive_format = %%ORACLE_SID%%T%TS%S.ARC

  3、重新啟動資料庫
 
======================================================================================  
*Oracle Database有三種關閉方式:
(在svrmgrl使用:)
1.shutdown normal
  正常方式關閉資料庫。

2.shutdown immediate
  立即方式關閉資料庫。
  在SVRMGRL中執行shutdown immediate,資料庫並不立即關閉,
  而是在Oracle執行某些清除工作後才關閉(終止會話、釋放會話資源),
  當使用shutdown不能關閉資料庫時,shutdown immediate可以完成資料庫關閉的操作。

3.shutdown abort
  直接關閉資料庫,正在訪問資料庫的會話會被突然終止,
  如果資料庫中有大量操作正在執行,這時執行shutdown abort後,重新啟動資料庫需要很長時間。

======================================================================================  
*改變使用者密碼再原封不動改回去
SQL> conn system/manager
SQL> select password from dba_users where username='USER1';(用戶名一定要用大寫)
結果:1F8E5A929B6861AC(這就是此用戶的密碼)
SQL> alter user USER1 identified by aaa;(改變此用戶的密碼)
SQL> conn user1/aaa(用此用戶連接)
SQL> 執行你想要的操作...
SQL> conn system/manager
SQL> alter user USER1 identified by values '1F8E5A929B6861AC';(改回原有密碼)

======================================================================================

7
貼一些舊筆記~
這個是沿路從RH6.2/ora815修改上來的,如有繆誤,請見諒
*****************************************************
ORACLE v8.1.7 FOR Linux Red Hat Enterprise AS 3.0 安裝筆記
            --written by Dandy
*****************************************************

1.以 root 的身分簽入,建立使用者 oracle 及群組 dba,並使oracle的群組為dba。

  #groupadd dba
  #useradd oracle -g dba

2.先用下列指令檢查系統內是否有安裝並符合下列套件,若不符合請安裝
  #rpm -q glibc
  #rpm -q tcl

應該會得到下列結果:
 *glibc-2.3.2-95.3 --(GLIBC package version 2.1 or higher)
 *tcl-8.3.5-92     --(TCL library version 7.5 or higher)http://www.scriptics.com

3.因為RHEL 3.0的binutils與Oracle 8i有不相容的情況,所以可採用RedHat7.0
所附的binutils-2.10.0.18-1.i386.rpm,
或從此下載,
ftp://ftp.redhat.com/pub/redhat/linux/7.0/en/os/i386/RedHat/RPMS/binutils-2.10.0.18-1.i386.rpm

或使用較穩的binutils-2.10.91.0.4-1.i386.rpm
http://www.kernel.org/pub/linux/devel/binutils/binutils-2.10.91.0.4-1.i386.rpm

#rpm -Uvh --force --nodeps binutils-2.10.91.0.4-1.i386.rpm

4.由於Oracle 8i的開發平台是建立在glibc 2.1(RedHat 6.2)上,所以在RedHat 7.x以上就無法正常運作,
  所以在安裝RedHat 7.x以上時須選擇Red Hat Linux 6.2相容套件,並執行下列指令:
  $export LD_ASSUME_KERNEL=2.2.5
 
  <***>此指令非常重要,也可在執行runInstaller.sh之前執行

<***>因為Oracle 8i跟RedHat 7的glibc 2.3不相容,會產生建立資料庫時的錯誤,
所以需要glibc 2.1 compatibility SDK, i386-glibc-2.1-linux.tar.gz,
由http://ftp.valinux.com/pub/support/hjl/glibc/sdk/2.1/i386-glibc-2.1-linux.tar.gz取得後,
進行下列步驟:
 <p1>.解壓縮到/usr
    #cd /
    #tar zxvf /tmp/i386-glibc-2.1-linux.tar.gz
 <p2>.將/usr/bin裡的gcc,ld備份到saved,另link到/usr/i386-glibc-2.1-linux/bin
    #cd /usr/bin
    #mkdir saved
    #mv gcc ld saved
    #ln -s /usr/i386-glibc-2.1-linux/bin/i386-glibc21-linux-gcc gcc
    #ln -s /usr/i386-glibc-2.1-linux/bin/i386-glibc21-linux-ld ld
 <p3>.將/usr/lib裡的libc.so,ibdl.so,libm.so,libpthread.so,libc.a,libdl.a,libm.a,libpthread.a備份
    #cd /usr/lib
    #mkdir saved
    #mv libc.so libdl.so libm.so libpthread.so saved
    #mv libc.a libdl.a libm.a libpthread.a saved
   
5.安裝JDK1.1.8
取得 JDK1.1.8 檔案 jdk118_v3-glibc-213tar.bz2, download後存放於 /tmp,執行下面指令 :

$cd /tmp
$tar -xvjf jdk-1.1.8_v3.tar.bz2 -C /usr/local
$ln -s /usr/local/jdk118_v3 /usr/local/java

6.確保使用者 oracle 擁有初始目錄 (home directory)
 $ chown -R oracle.dba /oracle

7.重新以oracle身份登入,在home裡面修改oracle環境參數,

  a.bash--.bash_profile,加入下列幾行(假設機器名稱為localhost):
  b.sh  --.profile

#Oracle 環境變數
PATH=$PATH:/oracle/8.1.7/bin; export PATH
DISPLAY=localhost:0.0
ORACLE_OWNER=oracle;export ORACLE_OWNER
ORACLE_HOME=/oracle/8.1.7; export ORACLE_HOME
ORACLE_BASE=/oracle; export ORACLE_BASE
ORACLE_SID=ORCL; export ORACLE_SID
ORACLE_TERM=vt100;export ORACLE_TERM
ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data;export ORA_NLS33
NLS_LANG="TRADITIONAL CHINESE.ZHT16BIG5";export NLS_LANG
CLASSPATH=/usr/lib/jdk/lib/classes.zip; export CLASSPATH
umask 022

 c.csh --.cshrc
#Oracle 環境變數
set path =($path /oracle/8.1.7/bin .)
setenv DISPLAY=ordb:0.0
setenv ORACLE_HOME /home/oracle/8.1.7
setenv ORACLE_BASE /home/oracle
setenv ORACLE_OWNER=oracle
setenv ORACLE_SID ORCL
setenv NLS_LANG "TRADITIONAL CHINESE.ZHT16BIG5"
setenv ORACLE_TERM=vt100
umask 022

8.把CDROM mount上去,將linux81701.tar由CDROM解壓縮至/tmp
  $cd /tmp
  $tar xvf /mnt/cdrom/linux81701.tar /tmp

  產生Disk1的目錄

9.一切就緒,登出系統,重新以oracle登入,先確定環境變數是否正確
  $env

10.啟動XWindow開始安裝:
  $startx

  開啟xterm,執行安裝程式便可開啟Java安裝畫面
  $cd /tmp/Disk1
  $./runInstaller.sh
  或直接打開GNU Midnight Command(桌面上的Home Directory資料夾),
  到/tmp/Oracle8iR2,執行runInstaller.sh

11.若看見安裝界面是oo的亂碼,請先退出,在xterm裡下一指令:
  $export LC_ALL=en_US


12.依照畫面執行即可,遇到UNIX GROUP NAME時,UNIX GROUP NAME留空白跳過,請按Next繼續.

12.遇到OUI的訊息提示有些檔案需有root權限,在xterm裡su成root下一指令:
  $su
  #/oracle/8.1.7/orainstRoot.sh     -->在/etc/裡增加檔案oraInst.loc

13.下一步選擇Oracle 8i Enterprise Edition 8.1.7.1.0

14.下一步選擇Custom安裝,將所有選項打勾,約需1.6GB左右,再選擇語系(Product Languages),加入
   繁體中文(Traditional Chinese)

15.下一步提示JDK的安裝路徑,  輸入/usr/local/java,按Next繼續.

16.下一步提示Privileged Operating System Groups,設定資料庫群組,default都為dba,請按Next繼續.

17.下一步選擇要不要在安裝時Create Database,選"YES"繼續

18.給予Global Database名稱和SID,由於Oracle 8i提供全球資料庫串連功能,所以你必須要為你的資料庫取一個
   獨一無二的名稱,不管你的資料庫分散在世界各地都可以直接存取,Global Database name 最好是ordb.oracle.com的格式
   
19.安裝將近結束時(約64%),會發生link錯誤,請開啟xterm安裝oracle的glibc patch.
   請開啟xterm,以oracle身份解壓glibc-2.1.3-stubs.tar.gz
  $cd /tmp
  $mkdir glibc
  $cd glibc
  $tar zxvf glibc-2.1.3-stubs.tar.gz
  $cd lib
  $cp -rf stubs /oracle/8.1.7/lib
  $setup_stubs.sh
<ps>應該會有兩次link錯誤,一次是64%,一次是94%,第二次應該修改/etc/ld.so.conf,
加入/oracle/8.1.7/lib,執行ldconfig  

20.安裝至最後會提示執行 root.sh,請開xterm,以root身份執行/oracle/8.1.7/root.sh
  $su
  #sh /oracle/8.1.7/root.sh

  local bin directory:/usr/local/bin

21.開始建立資料庫Create Database
  有三種型態的資料庫可選擇
  1.Online Transaction Process(OLTP):線上交易型
  2.Data Warehousing:資料倉儲型
  3.Multipurpose:多目標型
 請選擇Multipurpose(h目標型)

22.輸入連線人數,內定為15個user,先設為60

23.選擇要操作的default的資料庫,有
  1.Dedicated Server Mode(專用伺服器)--oracle將對每一個client分配資源,若client數目較預期少,或
                                       client持續且長時間向server做request時.
  2.Share Server Mode(共享伺服器)--oralce自動將數個client共享分配資源,適用於用戶較多時.
                                   MTS(Multi Transaction Service)將被啟動.
  若一般情況請選擇Dedicated Server Mode.

24.選擇options選項,請依照需求選取.

25.確定Global Database Name,SID,Initializaion Filename,Compatible Patameter,按Next繼續

26.確定Control Files,Maximum Datafiles,Maximum Log Files,Maximum Log Members,按Next繼續

27.確定System Tablespace,改變temporary和rollback這兩個tabs的大小為150Mb,按Next繼續.

28.確定Redo Log,改變大小為10000K,按Next繼續

29.確認Logging parameter,Enable Archive Log要打勾,按Next繼續

30.SGA 參數,增加Processes到100; Block Size到4096(此參數較適合small Linux boxes;
在大型的Solaris SUN上面最好調成8192,),按Next繼續

31.Trace File Directory,按Next繼續

32.Create database now,按Finish開始建立資料庫,128MB RAM約需2-3hr.

33.建立完畢後,安裝程序結束.離開Xwindow.

34.修改/etc/oratab,修改此行
     ORCL:/oracle/8.1.7:Y
                        ^^ dbstart 時 ORCL instance 自動起來

35.listener 自動啟動安裝,
<在/oracle/8.1.7/bin/dbstart 加入>

##自動啟動Listner
if [ -f $ORACLE_HOME/bin/lsnrctl ] ; then
  $ORACLE_HOME/bin/lsnrctl start
fi
##自動啟動Oracle Apache Jserv
if [ -f $ORACLE_HOME/Apache/Apache/bin/httpdsctl ] ; then
  $ORACLE_HOME/Apache/Apache/bin/httpdsctl start
fi

<在/oracle/8.1.7/bin/dbshut 加入>

##自動關閉Listner
if [ -f $ORACLE_HOME/bin/lsnrctl ] ; then
  $ORACLE_HOME/bin/lsnrctl stop
fi
##自動關閉Oracle Apache Jserv
if [ -f $ORACLE_HOME/Apache/Apache/bin/httpdsctl ] ; then
  $ORACLE_HOME/Apache/Apache/bin/httpdsctl stop
fi
##清除連線記錄
rm -f @ORACLE_HOME/network/log/listener.log


36.完成後請測試
        $/oracle/8.1.7/bin/dbstart
        $/oracle/8.1.7/bin/dbshut


37.開機自動啟動 Oracle
    請將oracle8i這個script cp至/etc/rc.d/init.d
        $cp oracle8i /etc/rc.d/init.d
    再加入開機服務程序中
    #chkconfig --add oracle8i
    #linuxconf
   用linuxconf即可控制啟動的層次.

38. Oracle的內定用戶 (Default User)
   在建立資料庫時,會自動產生兩個特別的用戶:
   --------------------------------------------------------
   Username                Password
   --------      -------------------
   SYSTEM                  manager
   SYS                     change_on_install

39.大功告成,將Oracle的Demo資料庫加入=>有名的SCOTT/TIGER測試帳號
SQL>@/oracle/8.1.7/rdbms/admin/utlsampl.sql

40.載入Oracle的測試script檔
SQL>SELECT * FROM TAB;

41.由於Oracle 8.1.7自帶有Apache Jserver,可由http://ordb:7777啟動,內有一個BC4J的範例檔,由以下步驟建立.
--<1>建立使用者bc4j
   create user BC4J identified by BC4J;

   <2>授權
   grant resource,connect to BC4J;

   <3>設定BC4J的Java 2(JServer)權限
SET VERIFY OFF;
EXEC DBMS_JAVA.GRANT_PERMISSION('BC4J', 'SYS:java.util.PropertyPermission', '*', 'write');
EXEC DBMS_JAVA.GRANT_PERMISSION('BC4J', 'SYS:java.util.PropertyPermission', '*', 'read');
EXEC DBMS_JAVA.GRANT_PERMISSION('BC4J', 'SYS:java.lang.RuntimePermission', 'createClassLoader', null);
EXEC DBMS_JAVA.GRANT_PERMISSION('BC4J', 'SYS:java.lang.RuntimePermission', 'setContextClassLoader', null);
COMMIT;
SET VERIFY ON;
EXIT;

<4>重新登入
connect BC4J/BC4J@ordb.oracle.com

<5>執行範例檔的pl/sql
@/oracle/8.1.7/Apache/BC4J/samples/onlineorders/sql_install/OnlineOrders.sql


42.修改kernel參數
Oracle 使用Linux的shared memory來運行SGA,所以要調整kernel參數符合SGA,
$ ipcs -al
------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 32768   <--------------------------linux預設值是32Mb
max total shared memory (kbytes) = 8388608
min seg size (bytes) = 1

------ Semaphore Limits --------
max number of arrays = 128
max semaphores per array = 250
max semaphores system wide = 32000
max ops per semop call = 32
semaphore max value = 32767

------ Messages: Limits --------
max queues system wide = 16
max size of message (bytes) = 8192
default max size of queue (bytes) = 16384

shmmax是以位元組記的共用記憶體段的最大尺寸,
shmmni是共用記憶體段的最大數量
shmmax是共用記憶體總共最大容量(shmmax*shmmni)
sem是信號量參數,msgmax,msgmnb,msgmni是message queue的參數。

要改變share memory只能重新recompiler kernel,或者直接在proc設定,但重開就會恢復default設定
#echo 134217728 > /proc/sys/kernel/shmmax (SGA最大為128M)
#echo -e "250 32000 100 128" > /proc/sys/kernel/sem
請加入/etc/rc.d/rc.local,開機載入

------------------------------------------
以下為另一種參考值
cd /proc/sys/kernel/
echo 100 32000 100 100 > sem
echo 2147483648 > shmmax
echo 4096 > shmmni
echo 2097152 > shmall
echo 65536 > /proc/sys/fs/file-max
echo 1024 65000 > /proc/sys/net/ipv4/ip_local_port_range
------------------------------------------

43./oracle/8.1.7/bin/netasst有jre的bug,

$pico netasst

將$JRE -classpath $CLASSPATH oracle.net.asst.container.NetApplication oracle.net.asst.container.NetApplication
換成
$JRE -nojit  -classpath $CLASSPATH oracle.net.asst.container.NetApplication oracle.net.asst.container.NetApplication
         ^^^^^^
在xwindow內即可執行netasst,執行前還是先
$export LD_ASSUME_KERNEL=2.2.5
$export LC_ALL=en_US        
$netasst

44.Xwindow中開啟DBA Studio
$export LD_ASSUME_KERNEL=2.2.5
$export LC_ALL=en_US
$oemapp dbastudio        


45.COMPLETE.



$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
<不選擇Typical Configuration的做法>

19.請確定Typical Configuration沒有打勾,按Next繼續進入Oracle Database Configuration Assistant.
20.進入Directory Service Access,選擇No,按Next繼續
21.下一步Listener Name,輸入LISTENER,按Next繼續
22.下一步為通訊協定選擇,至少要有TCP,按Next繼續
23.下一步為TCP/IP Port選擇,default為1521,按Next繼續
24.下一步為Naming Methods Configuration,選No,Naming Methods Configuration
25.下一步為Listener設定結束,按Finish繼續
26.再回到建立資料庫的步驟.



----------------
oracle8i
----------------
#!/bin/sh
#
# chkconfig: 345 51 49
# description: starts the oracle dabase deamons ( part of the aD ACS install )
#
echo "Oracle 8i auto start/stop"

ORA_OWNER=oracle
ORA_HOME=/oracle/8.1.7

case "$1" in
   'start')

echo -n "Starting Oracle8i: "
su - $ORA_OWNER -c $ORA_HOME/bin/dbstart
touch /var/lock/subsys/oracle8i
echo
;;


'stop')

echo -n "Shutting Oracle8i: "
su - $ORA_OWNER -c $ORA_HOME/bin/dbshut
rm -f /var/lock/subsys/oracle8i
echo
;;


'restart')

echo -n "Restarting Oracle8i: "
$0 stop
$0 start
echo
;;

*)
echo "Usage: oracle8i {start | stop | restart }"
exit 1

esac
exit 0

8
MIS 討論區 / MIS到底做些什麼
« 於: 2005-09-26 03:04 »
來,今天來聊個比較soft的話題,就是MIS到底做些什麼.
相信這裡很多人都是MIS工作人員,所謂MIS的定義有很多,範圍也很廣,有些公司把他定義成水電工,有次居然有人問我,冷氣壞了你會不會修;也有人定義成高級專業人員,但大多數應該是定義成電腦維修人員,所謂電腦維修人員就是電腦壞了,你就要去修.可是很不幸的,電腦壞掉的因素有很多,有的是螢幕忘了開,電源忘了開,有的是軟體bug,有的是今天某個人狂抓A片,有的是ISP斷線......諸如此類,你都必須要去解決,相信我,因為我遇過一個總經理跟我說過,電腦壞了你不去修誰要去修?不能用...那就是壞了.所以,做為一個MIS,這就是你的宿命,你不用去管linux多好多強,Winddows多爛多容易中毒,請回歸到基本面想,電腦不能用,就是你的錯.
所以,努力擺脫MIS這一行,是你接下來要努力的方向,可是已經誤入歧途了怎麼辦?沒關係,你還有很多選擇:
1.去賣雞排--不要笑,這是真人真事.
2.replay--重新選擇一種比較容易昇級的屬性,比如像業務或RD之類的,一位老師傅跟我說過,他學了模具技術後,已經靠它吃飯30多年了,啊你學的電腦可以吃多久?
3.原地轉職--這基本上不大可能,公司認定你就是修電腦的

但如果你能夠把電腦弄到不大需要修,或者有很多部下幫你修,你就有可能level up.
前者牽涉到你的程度,這包含了你的專業技能跟訓練技能,多多幫公司同事上點課,對這方面會有幫助,他們懂得越多,電腦越不大需要你去修.
後者牽涉到你的運氣跟管理技能,要找到一間能給你很多IT配額的公司需要運氣,人多了意見多程度也多則需要管理.

回到主題,MIS到底做些什麼?這答案其實是依照產業類別,公司規模,老闆重視程度跟懂的程度跟信賴程度而定,科技公司,老闆可能會尊重專業一點,員工素質高一點,但素質高並不代表你比較輕鬆,你可能在他半桶水的電腦知識下常常弄到你人仰馬翻,像寄個信附個檔案沒什麼了不起,但如果附的是100MB,而又cc給全公司,而你又恰好忘了設mail limit(quota)的話,那你就完了.

MIS所做的工作其實以公司的角度來看的確是服務,真的跟水電工沒什麼差別,所差別的只是要看的書很多,要學的東西很多,但對user來說,我只要我的電腦可以用,就像我要求冷氣可以涼,電燈可以亮一樣,所以,你只能怨說自己當初要選這一行,和慶幸不用到處爬管子(佈線工程例外,很多公司認為佈線是MIS的工作).
至於要怎麼樣把電腦弄到不大需要修呢?有幾個方式:
1.多上課,當有80%的人懂得當機時要重新開機的時候,剩下那20%會覺得自己不會重新開機很丟臉,而會努力學著重新開機,甚至花錢去外面學著重新開機,而不是打電話給你---喂!我電腦壞了,來幫我看一下

2.訂立遊戲規則,最好能夠讓user覺得電腦壞了要經過重重簽核才能修,讓全世界都知道自己把電腦搞壞掉,擔誤自己的工作,罪大惡極,而不是"電腦部門都不來幫我修,害我工作趕不上進度"

3.關係一定要好,有的時候自己抓個問題三個月還不如一通電話3分鐘就解決

所以,人是習慣行為的動物,一旦你讓他習慣了某種行為模式,要他改變等於是重新學習新的模式,除非有誘因,像是比較好用,比較方便,或是比較省時等,否則是有一定的難度的,讓user瞭解哪一種運作模式比較好用,他就會比較肯去學習新的模式
一個好的MIS,或是說一個好的主管不可以都是活在經驗領域內,舊的經驗會依時空而轉變,會依現實環境懂得調整架構的MIS才是真正的專業人員,公司規模只有30個人的時候,只有一個office時,架個exchange自己什麼都不用管,泡茶看報紙去了,但如果公司是30000人要用mail時,你架個exchange,就是給自己找麻煩,你懂得越多,程度越高,越會因時制宜,什麼環境要配什麼架構自己會很清楚,很多時候爭辯windows跟linux哪一種好都不是很有意義的事,對於公司來說,人員可替代性高是好事,但對自己而言,可替代性高就不是好事,這並不是要你把系統環境弄得只有自己懂才顯得重要性,反而把系統架構弄的越單純,帶的人越能輕鬆處理,你兼任其他職務level up的可能性越高,也才越不容易取代.
當還在問說當網管有什麼前途的時候,事實上已經沒前途了,因為要當一個合格的網管,必須要管到公司電腦"不壞",所花的時間應該不大能夠包含思考這個問題時間,生涯規劃是一定要做,可是要先問看看自己為什麼會選這一行?是學校所學還是興趣?如果是學校所學的話,那就轉行吧,因為學校教的課程等到你就業時大多用不上.我相信在這裡大多數人是興趣,既然是興趣就不應該問前途了,興趣是無怨無尤的,只是追求個人的滿足感,跟前途無關.
說了那麼多廢話,只是有必要讓大家知道,MIS讓user電腦有問題就像水電工讓冷氣在夏天不會動一樣的嚴重,還好我已經不是MIS,cheers~

9
酷!學園 精華區 / 在RHEL4上架設PPTPD VPN
« 於: 2005-09-24 04:50 »
*****************************************************
在RHEL4上架設PPTPD VPN
            --written by Dandy
*****************************************************

1.前言

VPN(Virtual Private Network)是近年來以Public Net(WAN)為基礎所發展出來的一種虛擬網路架構,其原理當然就在"虛擬"這兩個字,當幾台Client端的電腦,透過"實體"連接,有可能使用Dialup,ADSL,Leased-Line,FramRelay,Firewall....等方式連上Internet或IPLC,透過"虛擬"的方式,就可以把這些機器視為同一個LAN下的機器,這跟一些高階Switch所提供的VLAN有點類似,但當然在網管規劃中不是屬於同樣的用法.
再來簡單談一下原理,其實可以想像成--在已建立好的TCP/IP環境下打通一個tunnel,讓你可以跟VPN server連接,連接後利用一些編碼加密的方式將你的pocket編碼,送到Server後再來解碼,好用的地方
個人覺得如下:
場景<1>公司內提供許多作業環境,有file server,Workflow,ERP...,且建有firewall,這些資源在外出差或者回到家的人並無法使用,或者在使用上必須打通firewall,造成安全上的困擾,這時vpn就可以派上用場

場景<2>做為一個MIS,通常都有幫許多user服務的時候,在LAN裡面,可以透過remote control來做,不必跑到user座位去,但您一定遇過某位大哥三更半夜也要你去他家處理的時候,這時候,您可以請他連上公司的vpn,
您也連上,就可以在家裡遙控他的電腦,這就是讓我想寫這篇的動力,原因是因為我找不到一個簡單好用又可以穿透兩個防火牆的remote control軟體,不管是rdp,vnc,anywhere,ra或是netop,都起碼要去設定gateway.請注意,在家裡面用adsl上網時,如果透過ip分享器,也算是類似防火牆的環境--要從pirvate ip來masq成public ip

場景<3>公司可能有大大小小的分公司遍布在全球,所能提供的線路也只能依照當地的環境來建立,像在泰國,越南,小小一個辦事處,總不能拉條幾MB的IPLC在處理,這時建立VPN是一個也算可行的方式,有許多的
硬體的VPN device可以作為參考,便宜又簡單


所以我們瞭解到了vpn client端可以是user的電腦,以winxp來說,本身內建了pptp的虛擬私人網路,不需安裝任何軟體,只要一組ip/帳號就可以教user連上vpn;也可以是類似switch的硬體設備,那server呢?當然也有很多選擇,像是去買vpn設備,或是直接將你的linux架上vpn,這也有多種選擇,像swan/ipsec,vpnd,pptpd,或是open vpn...等,一般我個人比較偏愛不須動到太多東西的安裝,不管是server也好,client端也好,動到的部份越多,能照著做的成功率越低,所以對照了一下環境後,覺得pptpd比較適合,因為1.windows本身就支援,2.設定不用改太多.

2.環境
ppptpd全名是PoPToP(pptpd)是在Linux上建置VPN的其中一種方法,可以參考

http://www.moretonbay.com/con/pptp.html

安裝環境 --Redhat Linux Enterprise 4.0 Advance Server (Kernel 2.6.9-5.EL)

在windows建立完一個vpn的撥號環境後,其中有一個"安全性"的頁面,裡面有一個"要求資料加密"的選項,這部份牽涉到PPTP所需要安裝的加密環境必須要Kernel及ppp支援MPPE(Microsoft Point-To-Point Encryption Protocol),而且還有一個MPPC(Microsoft Point-to-Point Compression)所以必須將Kernel patch成mppe/mppc的版本,RH內建的kernel是不支援mppe/mppc的,你可以選擇重新compile kernel,也可以選擇patch kenel,但對我而言,能不去動到最好還是不去動到,畢竟從雲觀時代以來研究kernel的精神早就沒有了,最後一次compile kernel是十幾年前了....所以,還好有個叫Matt Domsch的,寫了個dkms(Dynamic Kernel Module Support)的東西,使得kenel增加功能不是那麼困難.
http://linux.dell.com/dkms/dkms.html

3.所有相關的套件
http://sourceforge.net/project/showfiles.php?group_id=44827

請下載下列幾個套件
dkms-2.0.5-1.noarch.rpm
kernel_ppp_mppe-0.0.5-2dkms.noarch.rpm
ppp-2.4.3-5.rhel4.i386.rpm
pptpd-1.3.0-0.i386.rpm

4.安裝dkms
#rpm -ivh dkms-2.0.5-1.noarch.rpm

5.安裝kernel的ppp mppe模組
#rpm -ivh kernel_ppp_mppe-0.0.5-2dkms.noarch.rpm

<研究kernel是一件非常值得鼓勵的事>

6.測試一下MPPE module可不可以載入
#modprobe ppp-compress-18 && echo success

7.安裝PPP--原有RHEL4的PPP版本為ppp-2.4.2-6.4,要安裝pptp 1.3.0必需是ppp >= 2.4.3 is needed by pptpd-1.2.3-1.i386
#rpm -qa|grep ppp
rp-pppoe-3.5-22
ppp-2.4.2-6.4.RHEL4

所以將原有的ppp-2.4.2-6.4.RHEL4昇級成ppp-2.4.3-5.rhel4.i386.rpm

#rpm -Uvh ppp-2.4.3-5.rhel4.i386.rpm

8.安裝pptpd

#rpm -ivh pptpd-1.3.0-0.i386.rpm

9.設定帳號
#vi /etc/ppp/chap-secrets

# Secrets for authentication using CHAP
# client        server   secret                IP addres
vpn              *          1234                  *

10.設定/etc/pptpd.conf
加入下列:(使用 /etc/ppp/options.pptp,原本的option /etc/ppp/options.pptpd保留)

debug
option /etc/ppp/options.pptp
logwtmp
localip 192.168.254.1
remoteip 192.168.254.50-100

<說明>pptpd的原理跟撥號網路類似,由pptpd做為daemon,接通後起一個ppp0的interface,所以會用到ppp的設定,這時需考慮到彼此的網路規劃,一般adsl的ip分享器用的是192.168.0.x或192.168.1.x,
所以如果你的內部網路用的也是192.168.1.x或192.168.0.x,雖然不會衝突,可是路由不知會往哪邊跑,如下圖,你必須知道eth0,eth1,ppp0所代表的意思,將eth1跟ppp0設成一樣的ip,是為了iptables的方便設定,
也就是由192.168.254.x連過來的vpn都視為192.168.254.1所路由的ip,另外localip和remoteip的最大連接數為50-100=50個,超過的話,將會忽略連接要求


11.設定/etc/ppp/options.pptp ,可參考options.pptpd

#vi /etc/ppp/options.pptp

lock
debug
auth
proxyarp
+chap
#-----MPPE/MPPC------
refuse-pap
refuse-chap
refuse-mschap
require-mschap-v2
require-mppe-128
ms-wins 192.168.254.1
ms-dns 192.168.254.1

 
<p.s.1>由於ppp的編碼方式有基於BSD licensed跟 OpenSSL licensed這兩種的方式,所需設定的參數也有不同,所以您可能需要注意一下所使用的ppp套件是使用哪一種,以上所使用ppp-2.4.3-5.rhel4.i386.rpm是
BSD licensed的套件,所以chapms,chapms-v2,mppe-40,mppe-128,mppe-stateless等參數並不適用.其中
refuse-="-"
require-="+"
所以,要使用MPPE,就加入require-mppe-128,可以寫成+mppe-128,要注意一點的是不使用mschap-v2的驗證,是無法使用mppe-128的加密的
<p.s.2>
檢查ppp有無支援mppe
#strings `which pppd`|grep -i mppe|wc --lines
46   <------只要不等於0,大於30就有支援
檢查ppp有無支援mppc
#strings `which pppd`|grep -i mppc|wc --lines
0      <------等於0表示不支援
在此說明一下不支援的原因,原來MPPC是一種有版權的壓縮演算法,所以大家也不敢太公開使用,網頁上大調查目前共有七種解(說)法:
<1>Cisco's description of MPPC, showing the protocol code.
<2>Mail on [pptp-server] mailing list saying that you don't need MPPC anyway, and nobody has written it for Linux. [link no longer valid]
<3>FreeBSD supports it, somehow. However investigations by Frank show the code is not present.
<4>A book mentions ppp-mppc in contents listing, implying existence.
<5>Mail saying that MPPC would need licensing from STAC Electronics.
<6>The ppp package README confirms the above, where it says:
Compression methods.
**************************
This package supports two packet compression methods: Deflate and BSD-Compress. Other compression methods which are in common use include Predictor, LZS, and MPPC. These methods are not supported for two reasons - they are patent-encumbered, and they cause some packets to expand slightly, which pppd doesn't currently allow for. BSD-Compress is also patent-encumbered (its inclusion in this package can be considered a historical anomaly :-) but it doesn't ever expand packets. Neither does Deflate, which uses the same algorithm as gzip.  
<7>Jan Dubiec's implementation of MPPC, which may be a violation of the patent but we've not checked.
第七種也就是大家最常翻到的Jan Dubiec的解法,這下大家知道他語焉不詳的原因了吧---we've not checked.
http://mppe-mppc.alphacron.de/
http://www.polbox.com/h/hs001/

12.要將ip_forward打開(若是有用到iptables的,應該已經有做這個動作)
#echo 1 > /proc/sys/net/ipv4/ip_forward

13.啟動pptpd
#/etc/rc.d/init.d/pptpd start

14.若有設定iptables的server,請開放 port 1723和port 47,在/etc/sysconfig/iptables加入下列:
-A INPUT -d 220.130.205.22 -i eth0 -p tcp -m tcp --dport 1723 -j ACCEPT
-A INPUT -d 220.130.205.22 -i eth0 -p tcp -m tcp --dport 47 -j ACCEPT

注意/var/log/messages有無錯誤訊息

15.剩下的就是Client端的設定,在此不再贅述.本文只簡單說明在RHEL下的pptpd vpn使用mppe的做法,留有兩個issue,日後再行補充,一是MPPC的做法,除了Jan Dubiec外還有沒有更簡單一點的,不需動到kernel的,二是linux的vpn client設定,以上如有謬誤,還請見諒.

10
****************************************************
Postfix 使用
1.SASL smtp認證(提供user在家或出外的smtp認證服務)
2.Procmail信件過濾(基本過濾)
3.Spamassassin自我學習的垃圾信過濾
4.Mailscanner信件掃瞄閘道
5.Sophos歐洲最大的掃毒軟體
6.SNMP(MRTG需用到)
7.MailScanner-MRTG(用來監控郵件處理及系統流量)
8.Openwebmail
9.dovecot

Mail system for RHEL4.0 Total solution安裝筆記
            --written by Dandy
*****************************************************
在此先強調,一個server重的是穩定而不是快也不是新,雖然新的版本會有研究的樂趣,但對公司而言不會是好事,這次是因為手賤,在online的狀況下去做fsck,所以導致/和/usr大量檔案受損,只得重裝系統.

前言,Redhat Enterprise Linux 4.0(RHEL4.0)使用Kernel 2.6.9-5,代號為Nahant,相對應的Fedora版本應該是FC3,這次改版最主要有幾個地方:
虛擬記憶體系統處理讀寫方式的改變(memory IO變快,更適合用來跑database了),支援HT(Hyper Thread)的CPU, LVM2的增強,更好的電源管理,
還有對USB設備的大量支援,在軟體方面,初初接觸,改了不少東西,像pop3跟imap整合到dovecot跟cyrus-imapd(兩個都可以跑pop3/imap)等.

再將以前的筆記整理如下:

1.所有相關的套件--Postfix,Procmail,SASL,Spamassasin在Redhat AS4.0都已內建,版本如下:
postfix-2.1.5-2.3.RHEL4.1
procmail-3.22-14
spamassassin-3.0.1-0.EL4
cyrus-sasl-2.1.19-5.EL4
剩下只有Mailscaner跟Sophos需download來安裝,請到以下download(今天是2005/3/18,版本可能會不同):

Sophos AntiVirus For Linux v3.88.0
http://downloads.sophos.com/dp/full/linux.intel.libc6.glibc.2.2.tar.Z
(p.s.:Sophos依glibc分成數個版本,像libc5使用libc5.tar.Z,redhat 7.0之前的glibc2.2之前使用標準的libc6.glibc.tar.Z,
Redhat9.0&RedHat Enterprise 4.0則使用libc6.glibc2.2.tar.Z)
另外請下載IDE病毒碼,版本為3.91
http://www.sophos.com/downloads/ide/391_ides.zip

Perl SAVI Module--是一個Sophos本身的perl模組
http://www.csupomona.edu/~henson/www/projects/SAVI-Perl/dist/SAVI-Perl-0.30.tar.gz

Sophos ide update --自動更新病毒碼
http://www.ijs.si/software/sophos-ide-update/sophos-ide-update_1.2.tar.gz

Mailscanner 4.39.5-1 for RedHat Linux (and other RPM-based Linux distributions)
http://freshmeat.net/redir/mailscanner/17417/url_rpm/MailScanner-4.39.5-1.rpm.tar.gz

MailScanner MRTG--用來監控郵件處理流量
mailscanner-mrtg-0.10.00-1.noarch.rpm
http://belnet.dl.sourceforge.net/sourceforge/mailscannermrtg/mailscanner-mrtg-0.10.00-1.noarch.rpm

Openwebmail 2.41.1
http://openwebmail.org/openwebmail/download/redhat/rpm/release/openwebmail-2.51-1.i386.rpm
ftp://ftp-linux.cc.gatech.edu/pub/linux/distributions/smeserver/contribs/gswallow/SME7-Centos4/yum/perl-Text-Iconv-1.4-1.2.el4.rf.i386.rpm
---------------------------------------------------------------------------------------------------------------------------------------------
2.因postfix和sasl套件在RedHat Enterprise AS 4.0中已全部都有安裝,
先停掉原先預設的sendmail
]#/etc/rc.d/init.d/sendmail stop

將postfix加入啟動的服務
]#chkconfig --add postfix

啟動ntsysv,將sendmail換成postfix,這樣重新開機時便會是postfix,而不會是sendmail
]#ntsysv

再來設定 Postfix,編輯 /etc/postfix 目錄下的 main.cf 此設定檔。
請先使用文字編輯器開啟 /etc/postfix/main.cf 設定檔,在檔尾的部份開始新增設定,將以下加入main.cf

#SMTP sasl Auth
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_sasl_authenticated permit_auth_destination permit_mynetworks,check_relay_domain reject
smtpd_client_restrictions = permit_sasl_authenticated,reject_rbl_client relay.ordb.org
smtpd_sasl_security_options = noanonymous

-----------------------------------------------------------------------------------------------------------
<ps>
smtpd_sasl_auth_enable = yes      //開啟 smtp 認證
broken_sasl_auth_clients = yes      //保持client端的相容性,例如MSOE4
smtpd_recipient_restrictions = permit_sasl_authenticated permit_auth_destination rejec   //表示允許 sasl 認證,允許認證目的主機,接收本postfix為最後一站的信件。
smtpd_client_restrictions = permit_sasl_authenticated   //允許用戶端sasl認證
smtpd_sasl_security_options = noanonymous   //允許任何非匿名的使用者
smtpd_sasl_local_domain = $myhostname      //sasl的本地網域
smtpd_sender_restrictions = reject_unknown_sender_domain   //阻擋網域名稱錯誤的主機
smtpd_client_restrictions = check_client_access regexp:/etc/postfix/access      //阻擋動態IP的主機,在access裡設定
-----------------------------------------------------------------------------------------------------------
3.設定身份認證方式(saslauthd)

cyrus-sasl 在這次我放棄了由smtp啟動的方式,改為saslauthd這個daemon來啟動,原因是效能會好一點,有個專門的daemon在處理,總是會比較好,
幾乎不需要動到任何設定,很單純只要將saslauthd啟動就可以了,
#/etc/rc.d/init.d/saslauthd start

先測試一下
#testsaslauthd -u user -p 'password'
0: OK "Success."-->成功

相關的設定檔在
/etc/sysconfig/saslauthd

最主要的一行是MECH=shadow

# saslauthd -v
saslauthd 2.1.19
authentication mechanisms: getpwent kerberos5 pam rimap shadow ldap
可以使用的認證機制有getpwent kerberos5 pam rimap shadow ldap這幾種,可自行選用,預設值使用shadow,已經可以不用再使用PAM.

---------------------------------------------------------------------------------------------------------------------------------------------
4.postfix reload重新讀取postfix設定檔

. 測試 SASL
測試的方法同樣是使用 telnet ,利用 telnet 指令連到 Postfix 主機端上,請執行如下的指令:
# telnet sun.xx.com 25
接著請輸入下列指令:
EHLO test.com
請注意 Postfix 所回應的訊息,如果您的設定均無誤,那麼應該會顯示出類似下列的訊息:
250-master.planetnet.net
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250-AUTH=LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250-XVERP
250 8BITMIME
最重要的兩行,在第六行與第七行,顯示目前 Postfix 系統所支援的認證協定。如果您執行的結果有出現這兩行即表示您的 Postfix 已可使用 SASL 認證。
---------------------------------------------------------------------------------------------------------------------------------------------
5.設定outlook或outlook express,設定smtp外寄郵件伺服器需要認證.
---------------------------------------------------------------------------------------------------------------------------------------------
6.基本的信件過濾:postfix+procmail+spamassassin(使用MailScanner啟動Spamassassin請跳過此項)
最簡單的方式就是在/etc/procmailrc加入
:0fw
| /usr/bin/spamassassin

或(大於2MB的信不檢查)
:0fw
    * < 2000000
| /usr/bin/spamassassin

或使用獨立的常駐程式spamc(會有較高的效能)
:0fw
| /usr/bin/spamc -s 200000
---------------------------------------------------------------------------------------------------------------------------------------------
7.完整的信件過濾是由MailScanner代替postfix執行遞送程式,僅啟動MTA子程式,將所收到的郵件檔案先暫存在另外一個資料夾(mqueue.in或hold).
然後呼叫Spamassassin和Sophos來檢查垃圾信及病毒信後,MailScanner再進行後續處理(加上spam或virus或刪除等動作),然後再放回
/var/spool/mail原來的信件目錄.
---------------------------------------------------------------------------------------------------------------------------------------------
8.安裝Sophos AntiVirus For Linux ,Sophos提供的試用版並無使用限制,也可自動更新病毒碼,商業用途請購買使用授權,費用並不太高
下載後解開安裝:
]#tar zxvf llinux.intel.libc6.glibc.2.2.tar.Z
]#cd sav-install/
]#useradd sweep -g sweep
]# ./install.sh

將病毒碼手動放到/usr/local/sav
]#mv 391_ides.zip /usr/local/sav

安裝完的目錄如下:
 執行檔- binaries in /usr/local/bin
 掃毒引擎- the shared library in /usr/local/lib
 病毒碼- the virus data in /usr/local/sav
 說明文件- manual pages in /usr/local/man

---------------------------------------------------------------------------------------------------------------------------------------------
9.安裝MailScanner

MailScanner支援Postfix的詳細說明:
http://www.sng.ecs.soton.ac.uk/mailscanner/install/postfix.shtml
<ps:此為支援Postfix 2.x版的安裝方式,Redhat 9或其他預設的Postfix 1.x版並不適用>

先解壓縮
]#tar zxvf MailScanner-4.36.4-1.rpm.tar.gz
]#cd MailScanner-4.36.4-1.rpm.tar.gz

安裝(在此再次強調,安裝linux時最好選擇Everything,將所有套件全部裝進去,以RHEL4.0來說,才不過佔了6G多,比起後來缺東缺西的痛苦,會快樂得多)
]#./install.sh

<p.s.>會等待需多點時間,因為除了MailScanner外還會有其他必須要用到的套件,大部份是perl的套件

安裝完成後,MailScanner會自動幫你啟動,但是因為預設啟動的是sendmail,不是postfix,所以這時並未啟動,我們需要先設定MailScanner.
但在這邊我變更了一下安裝的順序,由於MailScanner會自動幫我們判別許多 pm package,並自動安裝,所以我把MailScanner的安裝移到前面來,這樣就可以省掉許多找套件並且避免新舊版本的衝突.
---------------------------------------------------------------------------------------------------------------------------------------------
10.安裝Perl SAVI Module

]#tar zxvf SAVI-Perl-0.15.tar
]#cd SAVI-Perl-0.15

修改Makefile.PL如下:
'LIBS' => ['-L/usr/local/lib -R/usr/local/lib -lsavi'],

作一個link讓-lsavi能work:
]#cd /usr/local/lib
]#ln -s libsavi.so.3.2.07.071 libsavi.so (版本號可能會有少許差異)

安裝測試:
]#perl Makefile.PL
]#make
]#make test
]#make install

OK,現在說明一下MailScanner和Sophos的關係,Sophos本身掃毒程式除了病毒引擎ide之外,另外還有自己的mail gate界面和自己的掃毒程式sweep,
MailScanner支援Sophos的方式有以下兩種:
1.Virus Scanners = sophos               --收信時呼叫sweep來掃瞄
2.Virus Scanners = sophossavi         --直接呼叫SAVI透過sophos的lib來做掃瞄
可能是因為第二種方式比較快,所以MailScanner官方網站建議使用SAVI,若用第一種方式,需修改Incoming Queue Dir 和Qutgoing Queue Dir 的路徑

---------------------------------------------------------------------------------------------------------------------------------------------
11. 安裝 Sophos ide update 自動更新病毒碼:

解壓縮到/usr/local/bin
]#tar zxvf sophos-ide-update_1.2.tar.gz

將sophos-ide-update.pl複制到/usr/local/bin
]#mv sophos-ide-update.pl /usr/local/bin
<ps>這個程式使用到Archive/Zip.pm,所以需安裝perl-Compress-Zlib跟perl-Archive-Zip,但之前的MailScanner已幫我們安裝

一定要執行一次,要不然MailScanner啟動Sophos時會抓不到IDE病毒碼.
]#sophos-ide-update.pl
檢查一下/usr/local/sav,發現多了一個388_ides.zip跟許多*.ide的檔案,原來這個程式的功能是幫我們下載388_ides.zip並且解壓縮,所以手動更新病毒碼的方式就是
把*ides.zip放到/usr/local/sav並且解壓縮出*.ide,可能由於sophos for linux本身是3.88,所以抓到的也是3.88的病毒碼,這時便可以將我們download下來的3.91換上去.

<ps>由於是由MailScanner來啟動postfix/spamassassin/sophos,所以自動啟動的postfix跟spamd請停掉

---------------------------------------------------------------------------------------------------------------------------------------------
12. 安裝Sophie ,Sophie是一個使用 Sophos Anti Virus Library 的掃毒介面程式
http://www.vanja.com/tools/sophie/sophie-3.04rc2.tar.gz

解壓縮
]#tar zxvf sophos-ide-update_1.2.tar.gz
]#cd sophie-3.04rc2
]#./configure --with-savilib=/usr/local/lib
]#make
]#mv sophie /usr/local/bin
會產生sophie 這個 binary file(可執行檔),將這個檔案搬到/usr/local/bin
將原目錄下的 etc/sophie.cfg 和sophie.savi 複製到 /etc 之下,
並且將 sophie.cfg內的maxproc 的參數調整為 0,
然後就可以執行 sophie -v 看有沒有抓到掃毒引擎和病毒碼了,

]#cd etc
]#mv sophie.cfg sophie.savi /etc
]#cd /etc
]#vi sophie.cfg
->maxproc 20改為0
]#/usr/local/bin/sophie -v

---------------------------------------------------------------------------------------------------------------------------------------------
13.設定MailScanner

vi /etc/postfix/main.cf
加入這行:
header_checks = regexp:/etc/postfix/header_checks

然後在/etc/postfix下增加一個header_checks檢查檔:
]#vi /etc/postfix/header_checks

加入這行:
/^Received:/ HOLD
<此行用意是將所收到的信先暫存在/var/spool/postfix/hold目錄下,所以以下的Incoming Queue Dir要設成/var/spool/postfix/hold>

編輯MailScanner的設定檔
]#vi /etc/MailScanner/MailScanner.conf

修改以下項目,請依自己需求修改,原先無tw選項,請自行將/etc/MailScanner/reports/en複製一份成tw,再行翻譯:
-----------------------------------------------------------
%report-dir% = /etc/MailScanner/reports/tw
Incoming Queue Dir = /var/spool/postfix/hold
Outgoing Queue Dir = /var/spool/postfix/incoming
Run As User = postfix
Run As Group = postfix
MTA = postfix
Expand TNEF = no      (Sophos/McAfee設定為 "no",其它是"yes")
Use SpamAssassin = yes
SpamAssassin User State Dir =/var/spool/MailScanner/spamassassin
Virus Scanning = yes
Virus Scanners = sophossavi
Sophos IDE Dir = /usr/local/sav
Sophos Lib Dir = /usr/local/lib
Monitors For Sophos Updates = /usr/local/sav/*ides.zip
Deliver Unparsable TNEF = yes      (使用outlook的user可能需要)
Allow IFrame Tags = yes            (允許IFrame標籤的信件)
Allow Script Tags = yes               (允許Script標籤的信件,一些像outlook內有信紙功能的郵件需插入Script Tags)
Allow Object Codebase Tags = yes   (允許 HTML中的 <Object Codebase=...> 標籤包含在郵件中)
Attachment Encoding Charset = ISO-8859-1         (將感染通知訊息以附件寄送,並編碼為ISO-8859-1,若Warning Is Attachment = no,不以附件寄送,可能產生亂碼)
Still Deliver Silent Viruses = no      (通知收信者有人寄送Silent Virus[偽造地址病毒]給你)
Quarantine Silent Viruses = no      (不隔離Silent Virus,以免佔空間)
Mark Infected Messages = no       (通知收信者去閱讀那些替代原本被感染的附件的感染報告檔案)
Mark Unscanned Messages = no   (若檔案未經掃瞄,通知你的使用者不要去使用這個郵件。)
SpamAssassin Auto Whitelist = yes
Detailed Spam Report = yes         (可以由檔頭看出一封信的spam score)
-----------------------------------------------------------

增加目錄
//]#mkdir /var/spool/postfix/hold      --MailScanner 該掃描的郵件目錄
]#mkdir /var/spool/MailScanner/spamassassin

修改/var/spool/MailScanner裡目錄的屬性
]#chown postfix /var/spool/MailScanner/incoming
]#chown postfix /var/spool/MailScanner/quarantine
]#chown postfix /var/spool/MailScanner/spamassassin
//]#chown postfix /var/spool/postfix/hold

修改/etc/rc.d/init.d/MailScanner,將MTA=sendmail改成MTA=postfix,若不修改,則MailScanner會單獨啟動而不會帶起postfix
]#vi /etc/rc.d/init.d/MailScanner

關掉postfix,啟動MailScaner,
]#/etc/rc.d/init.d/postfix stop
]#/etc/rc.d/init.d/MailScanner stop
]#/etc/rc.d/init.d/MailScanner start

檢查MailScanner的啟動狀況
]#check_MailScanner
MailScanner running with pid 10084 10085 10089 10990
---------------------------------------------------------------------------------------------------------------------------------------
14.設定Spamassassin

原始的spamassassin的設定檔在/etc/mail/spamassassin裡,主要為local.cf
使用MailScanner時,MailScanner將設定檔改成/etc/MailScanner/spam.assassin.prefs.conf
SpamAssassin Prefs File = %etc-dir%/spam.assassin.prefs.conf
<p.s>切記下列兩項要#mark取消掉,否則會去使用/etc/mail/spamassassin的設定檔
#SpamAssassin Local Rules Dir = /etc/mail/spamassassin
#SpamAssassin Default Rules Dir = /etc/mail/spamassassin


下列參數是我的MailScanner.conf有關spamassassin設定,您可以參考一下:
Spam Score Character = * (以s代替spamassassin的分數,老實說,個人覺得score比較好用,你也可以用*代替)
SpamScore Number Instead Of Stars = yes   (用分數代替幾顆星,這是原本Spamassassin的方式)
Spam Checks = yes
Use SpamAssassin = yes
Detailed Spam Report = yes
SpamAssassin Auto Whitelist = yes   (自動加入Whitelist,就是非spam清單)
Required SpamAssassin Score = 6      (超過6分就動作)
High SpamAssassin Score = 10         (超過10就執行高度動作)
#SpamAssassin Local Rules Dir = /etc/mail/spamassassin
#SpamAssassin Default Rules Dir = /etc/mail/spamassassin

(2)spam.assassin.prefs.conf的設定
#auto_whitelist_path           /var/spool/MailScanner/spamassassin/auto-whitelist
#auto_whitelist_file_mode   0600
bayes_path                      /var/spool/MailScanner/spamassassin/bayes
bayes_file_mode              0644
<以上4項設定auto whitelist跟bayes演算法的目錄跟檔案屬性,auto_whitelist原始設在/var/spool/MailScanner/spamassassin裡,可以不用更改,只改bayes就可以>
ok_locales                       zh en
ok_languages                  zh en
skip_rbl_checks 1               --如果不想使用RBL過濾規則的話,此項啟動,因RBL除真正是垃圾信外,還涉及一些被relay的轉信站,使用RBL可能會漏掉一些重要的信
#use_bayes 1                     --使用Bayes,其實不用動,內定就是使用Bayes演算法的
#lock_method flock            --此選項適用於SpamAssassin 3
#特別演算法,請參考以下的安裝
use_dcc          1
auto_learn      1
use_pyzor       1
use_razor2      1
always_add_headers 0
dcc_add_header 1
report_safe 0
use_terse_report 1
spam_level_stars 1
dns_available yes

(3)filename.rules.conf和filetype.rules.conf的設定,請自行修改,我只修改接收.chm的附檔,因為公司會用到,內定是阻檔wmv,asf,mpg等視訊檔案.
allow   \.chm$

---------------------------------------------------------------------------------------------------------------------------------------
在設定Spamassassin之前,我們可能也要先安裝Spamassassin所支援的下列模組,
這些工具都是利用 cryptographic hash 或 checksum 和特徵比對的方式,作為判斷垃圾信件的依據. 如果在垃圾信的判別上不是有很大的需求,以下可以不用裝,
使用內建的bayes auto lean,auto whitelist和rbl就已經可以阻絕90%以上的垃圾信
-------------Source package-----------------------
DCC(Distributed Checksum Clearinghouse)
http://www.rhyolite.com/anti-spam/dcc/source/dcc-dccd.tar.Z
Pyzor
http://cogent.dl.sourceforge.net/sourceforge/pyzor/pyzor-0.4.0.tar.bz2
Razor
http://ovh.dl.sourceforge.net/sourceforge/razor/razor-agents-sdk-2.03.tar.gz
http://internap.dl.sourceforge.net/sourceforge/razor/razor-agents-2.67.tar.gz

安裝 DCC
]#tar Zxvf dcc-dccd.tar.Z
]#cd dcc-dccd-1.2.72
]#./configure
]#make install
]#/usr/local/bin/cdcc 'info'

安裝Pyzor
]#tar jxvf pyzor-0.4.0.tar.bz2
]#cd pyzor-0.4.0
]#python setup.py build
]#python setup.py install
]#pyzor discover

安裝 Razor
]#tar zxvf razor-agents-sdk-2.03.tar.gz
]#cd razor-agents-sdk-2.03
]#perl Makefile.PL
]#make
]#make test
]#make install
]#cd ..
]#tar zxvf razor-agents-2.67.tar.gz
]#cd razor-agents-2.67
]#perl Makefile.PL
]#make
]#make test
maktest時,可能會有錯誤產生,請忽略,因為那可能跟Razor server連線有關.
]#make install
]#razor-client
]#razor-admin -create
]#razor-admin -register -user postmaster@your.domain

更改檔案屬性(因為安裝時可能權限變更而無法讀取)
]#chmod -R a+rX /usr/share/doc/pyzor \
/usr/lib/python2.3/site-packages/pyzor \
/usr/bin/pyzor /usr/bin/pyzord
--------------------------------------------------------------------
確認各參數正常運作,各相關模組也正常
]#spamassassin --lint --config-file=/etc/MailScanner/spam.assassin.prefs.conf -D
若出現
debug: bayes: no dbs present, cannot tie DB R/O: /var/spool/MailScanner/spamassassin/bayes_toks
則是bayes演算法的db未建立,執行以下自動學習便會在/var/spool/MailScanner/spamassassin/裡建立bayes_seen/bayes_toks等檔案,但是
spamassassin似乎2.x版跟3.x版的db結構不同,請試一下
]#sa-learn --sync
若是不行就得重建了,再寄個200封吧~

(5)自動學習
先建立兩個帳號,spam跟nospam
]#useradd spam
]#useradd nospam

以後是垃圾信就轉信到spapm的帳號,非垃圾信被加上{spam?}就轉到nospam去,然後用下列指令學習:

]# sa-learn  --prefs-file=/etc/MailScanner/spam.assassin.prefs.conf --showdots --spam --mbox /var/mail/spam
]# sa-learn  --prefs-file=/etc/MailScanner/spam.assassin.prefs.conf --showdots --ham --mbox /var/mail/nospam

也可以使用以下的Script:
######################################
#!/bin/sh
SPAM=/var/mail/spam
NOTSPAM=/var/mail/nospam

LOGFILE=/var/log/learn.spam.log
PREFS=/etc/MailScanner/spam.assassin.prefs.conf
SALEARN=/usr/bin/sa-learn

date >> $LOGFILE
if [ -f $SPAM ]; then
BOX=${SPAM}.processing
mv $SPAM $BOX
sleep 5 # Wait for writing current message to complete
$SALEARN --prefs-file=$PREFS --spam --mbox $BOX >> $LOGFILE 2>&1
rm -f $BOX
fi

if [ -f $NOTSPAM ]; then
BOX=${NOTSPAM}.processing
mv $NOTSPAM $BOX
sleep 5 # Wait for writing current message to complete
$SALEARN --prefs-file=$PREFS --ham --mbox $BOX >> $LOGFILE 2>&1
rm -f $BOX
fi
######################################
把以上的內容存成spam-learn。
] # chmod 755 spam-learn
] # mv spam-learn /etc/cron.daily
] # /etc/init.d/crond restart


<p.s.>後記--檢查一下經過Mailscanner所處理過的信件檔頭,應該會出現以下的訊息,若未出現host-MailScanner-SpamCheck,非廣告郵件, SpamAssassin 程式...的話,請檢查Detailed Spam Report = yes,
其中若分數一直=0沒變的話,表示spamassassin的設定檔錯誤,請檢查此兩項要取消
#SpamAssassin Local Rules Dir = /etc/mail/spamassassin
#SpamAssassin Default Rules Dir = /etc/mail/spamassassin
此項路徑要對:
SpamAssassin User State Dir =/var/spool/MailScanner/spamassassin
=======MailScanner處理過的信件檔頭===============
X-host-MailScanner-Information: Please contact the ISP for more information
X-host-MailScanner: Found to be clean
X-host-MailScanner-SpamCheck: 非廣告郵件, SpamAssassin 程式 (分數=3.8,
   被需要 6, AWL 0.00, FORGED_MUA_OUTLOOK 3.48, RCVD_IN_ORBS 0.50,
   RCVD_IN_OSIRUSOFT_COM 0.55, X_OSIRU_OPEN_RELAY 2.90)
X-host-MailScanner-SpamScore: 3
X-MailScanner-From: sender@host
Status:  
========================================

---------------------------------------------------------------------------------------------------------------------------------------
15.SNMP的設定
snmp從RH9.0後就改為net-snmp,所以跟之前設定略有差別,請修改下列設定檔:
]#vi /etc/snmp/snmpd.conf

com2sec local  localhost   public
com2sec mynetwork       192.168.0.0/24      public
group   MyRWGroup v1           local
group   MyROGroup v1           mynetwork
group   MyRWGroup v2c         local
view    systemview    included   .1.3.6.1.2.1.1
view    systemview    included   .1.3.6.1.2.1.25.1.1
view    all    included   .1 80
access  MyROGroup ""      any       noauth    prefix  all none none
access  MyRWGroup ""      any       noauth    prefix  all all  all
syslocation Unknown (edit /etc/snmp/snmpd.conf)
syscontact Root  (configure /etc/snmp/snmp.local.conf)
pass .1.3.6.1.4.1.4413.4.1 /usr/bin/ucd5820stat

<ps>請注意,mailscanner-mrtg使用v2c的界面取得數據,group   MyRWGroup v2c         local此行一定要有.

修改完請重新啟動,/etc/rc.d/init.d/snmpd restart
測試snmp,
]#snmpwalk localhost -c public -v 1
 
測試mailscanner-mrtg使用的v2c uptime
]#snmpwalk -v 2c -c public localhost uptime
 
---------------------------------------------------------------------------------------------------------------------------------------
16.Mailscanner-MRTG

]#rpm -ivh  mailscanner-mrtg-0.10.00-1.noarch.rpm

修改設定檔
vi /etc/MailScanner/mailscanner-mrtg.conf

修改下列參數:
MTA = postfix
Incoming Queue Dir = /var/spool/postfix/hold
Outgoing Queue Dir = /var/spool/postfix/incoming
MailScanner Work Directory = /var/spool/MailScanner/incoming-->/var/
Spool Directory = /var/spool/mailscanner-mrtg-->/var/
------------------------------------
<ps>此兩項是用df指令來穫得磁碟空間,所以要求實際mount point,可以看看原來MailScanner Work Directory和Spool Directory
是在那個磁區底下,直接設定即可,因為其重點在於監控這兩個目錄所在空間是否不足,官方網站提出使用tmpfs另外分出兩個掛載點,
個人覺得並不是非常好的解法,因為無法提供正確空間的使用數據,僅能夠消除錯誤的log而已,請參考.
以我的例子,此兩個目錄都在/var的mount point上,所以都設成/var.
------------------------------------
Use SNMP = yes
SNMP Community = public
------------------------------------
若SNMP未啟動,會有cpu ,memory,iptraffic 三項圖形無法穫得數據.

<ps>mailscanner-mrtg所提供的數據由/usr/sbin/mailscanner-mrtg而來,共有下列幾項:
loadavg     : 主機平均負載
cpu         : CPU 使用率
memory      : 記憶體用量
iptraffic   : 伺服器網路流量
inqueue     : 等待傳送出去的檔案數量
outqueue    : 等待傳出的檔案數量
quarantine  : 隔離區的檔案/信件數量
rootusage   : 在根目錄(/)上的磁碟用量
spoolusage  : 在Spool Filesystem上的磁碟用量
tmpfsusage  : 在Work Filesystem上的磁碟用量
mailscanner : MailScanner 子程序數量
mta         : MTA 遞送程序
mail        :信件遞送
mailbytes   : 郵件傳輸量
virus       : 未通過病毒或內容檢測的信件
spam        : 垃圾郵件數量
virusratio  : 病毒或內容禁止信件佔所有郵件的比率
spamratio   : 垃圾信件佔所有郵件的比率
batchsize   : 每一批次平均處理的信件數量
speed       : 處理速度

再來修改/etc/mrtg/mailscanner-mrtg.cfg
Workdir: /var/www/html/mailscanner-mrtg      <--流量網頁產生目錄
IconDir: /mrtg/
WriteExpires: Yes
Interval: 5
Refresh: 300
Language: big5   <--設定為中文

產生index.html網頁
]# indexmaker --output=/var/www/html/mailscanner-mrtg/index.html  /etc/mrtg/mailscanner-mrtg.cfg

再來測試參數檔,需連續run三次才不會有錯誤產生.
]#mrtg /etc/mrtg/mailscanner-mrtg.cfg

不過若有錯誤產生,主要是SNMP跟tmpfs的參數未設好,請再仔細檢查.

完成後可以在以下看到流量:
http://your.mail.com/mailscanner-mrtg

<ps>在RHEL4.0的apache由於將MRTG有獨立設定存取模組,所以請修改以下檔案,可以解決mrtg icon無法出來的問題:
]#vi /etc/httpd/conf.d/mrtg.conf
Allow from localhost      -->Allow from all

從localhost改為全部可以瀏覽

---------------------------------------------------------------------------------------------------------------------------------------
17.Openwebmail安裝
openwebmail需要先安裝下列4個套件:
 perl-CGI
 perl-Compress-Zlib
 perl-Text-Iconv
 perl-suidperl
 
 ftp://ftp-linux.cc.gatech.edu/pub/linux/distributions/smeserver/contribs/gswallow/SME7-Centos4/yum/perl-Text-Iconv-1.4-1.2.el4.rf.i386.rpm
 
其中 perl-CGI和perl-suidperl-5.8.0, perl-Compress-Zlib應該在以上的安裝已經存在,所以再新增perl-Text-Iconv:
]#rpm -Uvh perl-Text-Iconv-1.4-1.2.el4.rf.i386.rpm
然後開始裝openwebmail
]#rpm -ivh openwebmail-2.51-1.i386.rpm

裝完後請修改/var/www/cgi-bin/openwebmail/etc/defaults/dbm.conf,修改下列三項:
dbm_ext                 .db
dbmopen_ext          .db
dbmopen_haslock    yes

由於RHEL4.0跟FC3一樣,對系統安全性方面加強許多,採用了Linux Security Modules (LSM) framework來編譯kernel,所以支援了SELinux (Security-Enhanced Linux),這對kernel安全上有很大幫助,
但對於一些AP的使用上卻會造成使用上的困擾,在使用openwebmail時須先將其關閉
]#vi /etc/selinux/config
將SELINUX=enforcing改成
SELINUX=disabled

然後執行起始設定:
]#/var/www/cgi-bin/openwebmail/openwebmail-tool.pl --init

若要設定中文界面為預設界面,請修改下列檔案:
]#vi /var/www/cgi-bin/openwebmail/etc/openwebmail.conf
-->default_language                zh_TW.Big5

完畢後確認httpd運作中,開啟
http://your.host/cgi-bin/openwebmail/openwebmail.pl
即可使用openwebmail
---------------------------------------------------------------------------------------------------------------------------------------
18.SpeedyCGI安裝

很可惜,perl 5.8.4以後對於perl script有做嚴格的檢查,所以和目前的speedycgi 2.2是不相容的.

---------------------------------------------------------------------------------------------------------------------------------------
19.dovecot
RHEL4.0跟FC3一樣是採用dovecot做為收信協定管理,合併了imap/imaps/pop3/pop3s,並支援SSL/TLS,可限制每人連線session,總體連線session,
其設定檔在/etc/dovecot.conf,內有詳細的參數設定,簡單設定的參數有這幾項:
imap_listen =
  • -->在maillog裡的記錄是ipv6為 [::],ipv4為

pop3_listen =

login_dir = /var/run/dovecot-login
login = imap
login = pop3
mbox_locks = fcntl
auth = default
auth_mechanisms = plain
auth_userdb = passwd
auth_passdb = pam
auth_user = root

---------------------------------------------------------------------------------------------------------------------------------------
20.其他小細節

MailScanner有三個定時啟動的成序,可依環境自行搬到該執行的週期:
清除隔離檔案--預設每天一次
/etc/cron.daily/clean.quarantine
將$disabled = 1;改成0來使自動清除啟動,預設是保留檔案30天($days_to_keep   = 30;)

檢查MailScanner--預設每小時一次
/etc/cron.hourly/check_MailScanner

更新病毒碼--預設每小時一次
/etc/cron.hourly/update_virus_scanners

若Apache的MRTG出來的網頁以UTF為主,切換麻煩的話, 請修改/etc/httpd/conf/httpd.conf
將AddDefaultCharset ISO-8859-1修改如下
AddDefaultCharst Big5
語言順序
LanguagePriority en da nl et fr de el it ja kr no pl pt pt-br ltz ca es sv tw
改成
LanguagePriority tw en da nl et fr de el it ja kr no pl pt pt-br ltz ca es sv

由於在/var/log裡會有這兩行出現,
Mar 19 08:39:54 mail postfix/smtpd[3344]: sql_select option missing
Mar 19 08:39:54 mail postfix/smtpd[3344]: auxpropfunc error no mechanism availabl
查了一下是說如果SQL plugin有安裝,預設執會去檢查sql_select這個選項,可以把SQL plugin 給移除掉或者加入dummy sql_select option,

11
由於敝人前次所載的筆記疏漏甚多,所以趁著更換公司系統成RedHat Enterprise Advance Server 3.0 Update 3時修訂此筆記,若有遺漏疏失,請各位再次見諒.
****************************************************
Postfix 使用
1.SASL smtp認證(提供user在家或出外的smtp認證服務)
2.Procmail信件過濾(基本過濾)
3.Spamassassin自我學習的垃圾信過濾
4.Mailscanner信件掃瞄閘道
5.Sophos歐洲最大的掃毒軟體
6.SNMP(MRTG需用到)
7.MailScanner-MRTG(用來監控郵件處理及系統流量)
8.Openwebmail+SpeedyCGI

Mail system for RHEL3.0U3 Total solution安裝筆記
            --written by Dandy
*****************************************************

1.所有相關的套件--Postfix,Procmail,SASL,Spamassasin在Redhat AS3.0U3都已內建,版本如下:
postfix-2.0.16-14.RHEL3
procmail-3.22-9
spamassassin-2.55-3.1
cyrus-sasl-2.1.15-8
剩下只有Mailscaner跟Sophos需download來安裝,請到以下download(今天是2004/12/6,版本可能會不同):

Sophos AntiVirus For Linux v3.86.0
http://downloads.sophos.com/dp/full/linux.intel.libc6.glibc.2.2.tar.Z
(p.s.:Sophos依glibc分成數個版本,像libc5使用libc5.tar.Z,redhat 7.0之前的glibc2.2之前使用標準的libc6.glibc.tar.Z,
Redhat9.0&RedHat Enterprise 3.0則使用libc6.glibc2.2.tar.Z)

Perl SAVI Module--是一個Sophos本身的perl模組
http://www.csupomona.edu/~henson/www/projects/SAVI-Perl/dist/SAVI-Perl-0.25.tar.gz

Sophos ide update --自動更新病毒碼
http://www.ijs.si/software/sophos-ide-update/sophos-ide-update_1.2.tar.gz

Mailscanner 4.36.4-1 for RedHat Linux (and other RPM-based Linux distributions)
http://freshmeat.net/redir/mailscanner/17417/url_rpm/MailScanner-4.36.4-1.rpm.tar.gz

MailScanner MRTG--用來監控郵件處理流量
mailscanner-mrtg-0.10.00-1.noarch.rpm
http://belnet.dl.sourceforge.net/sourceforge/mailscannermrtg/mailscanner-mrtg-0.10.00-1.noarch.rpm

Openwebmail 2.41.1
http://openwebmail.org/openwebmail/download/redhat/rpm/release/openwebmail-2.41-1.i386.rpm
ftp://ftp.freshrpms.net/pub/dag/packages/perl-Text-Iconv/perl-Text-Iconv-1.2-0.1.el3.dag.i386.rpm

---------------------------------------------------------------------------------------------------------------------------------------------
2.因postfix和sasl套件在RedHat Advance 3.0U3中已全部都已有安裝,所以,
先停掉原先預設的sendmail
]#/etc/rc.d/init.d/sendmail stop

將postfix加入啟動的服務
]#chkconfig --add postfix

啟動ntsysv,將sendmail換成postfix,這樣重新開機時便會是postfix,而不會是sendmail
]#ntsysv

再來設定 Postfix,編輯 /etc/postfix 目錄下的 main.cf 此設定檔。
請先使用文字編輯器開啟 /etc/postfix/main.cf 設定檔,在檔尾的部份開始新增設定,將以下加入main.cf

#SMTP sasl Auth
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_sasl_authenticated permit_auth_destination permit_mynetworks,check_relay_domain reject
smtpd_client_restrictions = permit_sasl_authenticated,reject_rbl_client relay.ordb.org
smtpd_sasl_security_options = noanonymous


#Block
#smtpd_sender_restrictions = reject_unknown_sender_domain
#smtpd_client_restrictions = check_client_access regexp:/etc/postfix/access, reject_rbl_client relay.ordb.org

編輯/etc/postfix/access加入
/\.dynamic\..+\.tw/     REJECT We can't allow dynamic IP to relay!
-----------------------------------------------------------------------------------------------------------
<ps>
smtpd_sasl_auth_enable = yes      //開啟 smtp 認證
broken_sasl_auth_clients = yes      //保持client端的相容性,例如MSOE4
smtpd_recipient_restrictions = permit_sasl_authenticated permit_auth_destination rejec   //表示允許 sasl 認證,允許認證目的主機,接收本postfix為最後一站的信件。
smtpd_client_restrictions = permit_sasl_authenticated   //允許用戶端sasl認證
smtpd_sasl_security_options = noanonymous   //允許任何非匿名的使用者
smtpd_sasl_local_domain = $myhostname      //sasl的本地網域
smtpd_sender_restrictions = reject_unknown_sender_domain   //阻擋網域名稱錯誤的主機
smtpd_client_restrictions = check_client_access regexp:/etc/postfix/access      //阻擋動態IP的主機,在access裡設定

# for MailScanner
hash_queue_depth = 2
hash_queue_names = incoming,active,deferred,bounce,defer,flush,hold

-----------------------------------------------------------------------------------------------------------
3.設定身份認證方式
SASL 所提供的密碼認證方式共分為四種:

* PAM :使用系統的 pam 模組做為認證,在Redhat上可使用此方式

* shadow :利用系統的 /etc/shadow 檔做為其身份認證的方式。但也因此則需要修改 /etc/shadow 檔的存取權限,需改為 644,安全性有較大問題 。

* pwcheck :方式同 shadow 認證,但不須修改 /etc/shadow 檔的存取權限,而須在每次開機時執行 pwcheck 。您也可在 /etc/rc.d/rc.local 檔中加入執行敘述,適用於FreeBSD。

* sasldb :SASL本身自帶的認證方法,是使用 sasl 資料庫來存放使用者的帳號與密碼,使用指令 saslpasswd 來新增或修改使用者帳號與密碼。
saslpasswd -c -u 11way.com dandy   //新增sasl用戶
sasldblistusers         //list sasl用戶

請修改/usr/lib/sasl/smtpd.conf,修改pwcheck_method: 為你要的方式,Redhat建議使用PAM,節省建sasl帳號時間.
pwcheck_method: PAM

<ps>若是RHEL 3.0,請將/usr/lib/sasl2/smtpd.conf copy到/usr/lib/sasl再做修改
---------------------------------------------------------------------------------------------------------------------------------------------
4.由於有chroot的問題,所以sasl認證會失敗,請修改 /etc/postfix/master.cf
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (50)
# ==========================================================================
smtp    inet    n       -       y       -       -       smtpd
改成
smtp    inet    n       n       n       -       -       smtpd

---------------------------------------------------------------------------------------------------------------------------------------------
5.postfix reload重新讀取postfix設定檔

. 測試 SASL
測試的方法同樣是使用 telnet ,利用 telnet 指令連到 Postfix 主機端上,請執行如下的指令:
# telnet sun.xx.com 25
接著請輸入下列指令:
EHLO master.planetnet.net
請注意 Postfix 所回應的訊息,如果您的設定均無誤,那麼應該會顯示出類似下列的訊息:
250-master.planetnet.net
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250-AUTH=LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250-XVERP
250 8BITMIME
最重要的兩行,在第六行與第七行,顯示目前 Postfix 系統所支援的認證協定。如果您執行的結果有出現這兩行即表示您的 Postfix 已可使用 SASL 認證。
---------------------------------------------------------------------------------------------------------------------------------------------
6.設定outlook或outlook express,設定smtp外寄郵件伺服器需要認證.
---------------------------------------------------------------------------------------------------------------------------------------------
7.基本的信件過濾:postfix+procmail+spamassassin(使用MailScanner啟動Spamassassin請跳過此項)
最簡單的方式就是在/etc/procmailrc加入
:0fw
| /usr/bin/spamassassin

或(大於2MB的信不檢查)
:0fw
    * < 2000000
| /usr/bin/spamassassin

或使用獨立的常駐程式spamc(會有較高的效能)
:0fw
| /usr/bin/spamc -s 200000
---------------------------------------------------------------------------------------------------------------------------------------------
8.完整的信件過濾是由MailScanner代替postfix執行遞送程式,僅啟動MTA子程式,將所收到的郵件檔案先暫存在另外一個資料夾(mqueue.in或hold).
然後呼叫Spamassassin和Sophos來檢查垃圾信及病毒信後,MailScanner再進行後續處理(加上spam或virus或刪除等動作),然後再放回
/var/spool/mail原來的信件目錄.
---------------------------------------------------------------------------------------------------------------------------------------------
9.安裝Sophos AntiVirus For Linux ,Sophos提供的試用版並無使用限制,也可自動更新病毒碼,商業用途請購買使用授權,費用並不太高
下載後解開安裝:
]#tar zxvf llinux.intel.libc6.glibc.2.2.tar.Z
]#cd sav-install/
]#useradd sweep -g sweep
]# ./install.sh

安裝完的目錄如下:
 執行檔- binaries in /usr/local/bin
 掃毒引擎- the shared library in /usr/local/lib
 病毒碼- the virus data in /usr/local/sav
 說明文件- manual pages in /usr/local/man

---------------------------------------------------------------------------------------------------------------------------------------------
10.安裝Perl SAVI Module

]#tar zxvf SAVI-Perl-0.15.tar
]#cd SAVI-Perl-0.15

修改Makefile.PL如下:
'LIBS' => ['-L/usr/local/lib -R/usr/local/lib -lsavi'],

作一個link讓-lsavi能work:
]#cd /usr/local/lib
]#ln -s libsavi.so.3.2.07.071 libsavi.so (版本號可能會有少許差異)

安裝測試:
]#perl Makefile.PL
]#make
]#make test
]#make install
<ps>make可能會出現gcc: unrecognized option `-R/usr/local/lib',可忽略

OK,現在說明一下MailScanner和Sophos的關係,Sophos本身掃毒程式除了病毒引擎ide之外,另外還有自己的mail gate界面和自己的掃毒程式sweep,
MailScanner支援Sophos的方式有以下兩種:
1.Virus Scanners = sophos               --收信時呼叫sweep來掃瞄
2.Virus Scanners = sophossavi         --直接呼叫SAVI透過sophos的lib來做掃瞄
可能是因為第二種方式比較快,所以MailScanner官方網站建議使用SAVI,若用第一種方式,需修改Incoming Queue Dir 和Qutgoing Queue Dir 的路徑

---------------------------------------------------------------------------------------------------------------------------------------------
11. 安裝 Sophos ide update 自動更新病毒碼:

解壓縮到/usr/local/bin
]#tar zxvf sophos-ide-update_1.2.tar.gz

將sophos-ide-update.pl複制到/usr/local/bin

*由於需使用到Archive/Zip.pm,所以需安裝perl-Archive-Zip-1.09-0.rhel3.dag.noarch.rpm
ftp://ftp.pbone.net/mirror/dag.wieers.com/packages/perl-Compress-Zlib/perl-Compress-Zlib-1.33-0.rhel3.dag.i386.rpm
ftp://ftp.pbone.net/mirror/dag.wieers.com/packages/perl-Archive-Zip/perl-Archive-Zip-1.09-0.rhel3.dag.noarch.rpm
]#rpm -ivh perl-Compress-Zlib-1.33-0.rhel3.dag.i386.rpm
]#rpm -ivh perl-Archive-Zip-1.09-0.rhel3.dag.noarch.rpm

一定要執行一次,要不然MailScanner啟動Sophos時會抓不到IDE病毒引擎.
<ps>由於是由MailScanner來啟動postfix/spamassassin/sophos,所以自動啟動的postfix跟spamd請停掉

---------------------------------------------------------------------------------------------------------------------------------------------
12. 安裝Sophie ,Sophie是一個使用 Sophos Anti Virus Library 的掃毒介面程式
http://www.vanja.com/tools/sophie/sophie-3.04rc2.tar.gz

解壓縮
]#tar zxvf sophos-ide-update_1.2.tar.gz
]#cd sophie-3.04rc2
]#./configure --with-savilib=/usr/local/lib
]#make
]#mv sophie /usr/local/bin
會產生sophie 這個 binary file(可執行檔),將這個檔案搬到/usr/local/bin
將原目錄下的 etc/sophie.cfg 和sophie.savi 複製到 /etc 之下,
並且將 sophie.cfg內的maxproc 的參數調整為 0,
然後就可以執行 sophie -v 看有沒有抓到掃毒引擎和病毒碼了,

]#cd etc
]#mv sophie.cfg sophie.savi /etc
]#cd /etc
]#vi sophie.cfg
->maxproc 20改為0
]#/usr/local/bin/sophie -v

---------------------------------------------------------------------------------------------------------------------------------------------
13.安裝MailScanner

MailScanner支援Postfix的詳細說明:
http://www.sng.ecs.soton.ac.uk/mailscanner/install/postfix.shtml
<ps:此為支援Postfix 2.x版的安裝方式,Redhat 9或其他預設的Postfix 1.x版並不適用>

先解壓縮
]#tar zxvf MailScanner-4.36.4-1.rpm.tar.gz
]#cd MailScanner-4.36.4-1.rpm.tar.gz

安裝(在此再次強調,安裝linux時最好選擇Everything,將所有套件全部裝進去,以RHEL3.0來說,才不過佔了4-5G,比起後來缺東缺西的痛苦,會快樂得多)
]#./install.sh

<p.s.>會等待需多點時間,因為除了MailScanner外還會有其他必須要用到的套件,大部份是perl的套件

安裝完成後,MailScanner會自動幫你啟動,但是因為預設啟動的是sendmail,不是postfix,所以這時並未啟動,先設定MailScanner.
vi /etc/postfix/main.cf
加入這行:
header_checks = regexp:/etc/postfix/header_checks

然後在/etc/postfix下增加一個header_checks檢查檔:
]#vi /etc/postfix/header_checks

加入這行:
/^Received:/ HOLD
<此行用意是將所收到的信先暫存在/var/spool/postfix/hold目錄下,所以以下的Incoming Queue Dir要設成/var/spool/postfix/hold>

編輯MailScanner的設定檔
]#vi /etc/MailScanner/MailScanner.conf

修改以下項目,請依自己需求修改,原先無tw選項,請自行將/etc/MailScanner/reports/en複製一份成tw,再行翻譯:
-----------------------------------------------------------
%report-dir% = /etc/MailScanner/reports/tw
Incoming Queue Dir = /var/spool/postfix/hold
Outgoing Queue Dir = /var/spool/postfix/incoming
Run As User = postfix
Run As Group = postfix
MTA = postfix
Expand TNEF = no      (Sophos/McAfee設定為 "no",其它是"yes")
Use SpamAssassin = yes
SpamAssassin User State Dir =/var/spool/MailScanner/spamassassin
Virus Scanning = yes
Virus Scanners = sophossavi
Sophos IDE Dir = /usr/local/sav
Sophos Lib Dir = /usr/local/lib
Monitors For Sophos Updates = /usr/local/sav/*ides.zip
Deliver Unparsable TNEF = yes      (使用outlook的user可能需要)
Allow IFrame Tags = yes            (允許IFrame標籤的信件)
Allow Script Tags = yes               (允許Script標籤的信件,一些像outlook內有信紙功能的郵件需插入Script Tags)
Allow Object Codebase Tags = yes   (允許 HTML中的 <Object Codebase=...> 標籤包含在郵件中)
Attachment Encoding Charset = ISO-8859-1         (將感染通知訊息以附件寄送,並編碼為ISO-8859-1,若Warning Is Attachment = no,不以附件寄送,可能產生亂碼)
Still Deliver Silent Viruses = no      (通知收信者有人寄送Silent Virus[偽造地址病毒]給你)
Quarantine Silent Viruses = no      (不隔離Silent Virus,以免佔空間)
Mark Infected Messages = no       (通知收信者去閱讀那些替代原本被感染的附件的感染報告檔案)
Mark Unscanned Messages = no   (若檔案未經掃瞄,通知你的使用者不要去使用這個郵件。)
SpamAssassin Auto Whitelist = yes
Detailed Spam Report = yes         (可以由檔頭看出一封信的spam score)
-----------------------------------------------------------

增加目錄
]#mkdir /var/spool/postfix/hold      --MailScanner 該掃描的郵件目錄
]#mkdir /var/spool/MailScanner/spamassassin

修改/var/spool/MailScanner裡目錄的屬性
]#chown postfix /var/spool/MailScanner/incoming
]#chown postfix /var/spool/MailScanner/quarantine
]#chown postfix /var/spool/MailScanner/spamassassin
]#chown postfix /var/spool/postfix/hold

修改/etc/rc.d/init.d/MailScanner,將MTA=sendmail改成MTA=postfix,若不修改,則MailScanner會單獨啟動而不會帶起postfix
]#vi /etc/rc.d/init.d/MailScanner

關掉postfix,啟動MailScaner,
]#/etc/rc.d/init.d/postfix stop
]#/etc/rc.d/init.d/MailScanner stop
]#/etc/rc.d/init.d/MailScanner start

檢查MailScanner的啟動狀況
]#check_MailScanner
MailScanner running with pid 10084 10085 10089 10990
---------------------------------------------------------------------------------------------------------------------------------------
14.設定Spamassassin

原始的spamassassin的設定檔在/etc/mail/spamassassin裡,主要為local.cf
使用MailScanner時,MailScanner將設定檔改成/etc/MailScanner/spam.assassin.prefs.conf
SpamAssassin Prefs File = %etc-dir%/spam.assassin.prefs.conf
<p.s>切記下列兩項要#mark取消掉,否則會去使用/etc/mail/spamassassin的設定檔
#SpamAssassin Local Rules Dir = /etc/mail/spamassassin
#SpamAssassin Default Rules Dir = /etc/mail/spamassassin


下列參數是我的MailScanner.conf有關spamassassin設定,您可以參考一下:
Spam Score Character = * (以s代替spamassassin的分數,老實說,個人覺得score比較好用,你也可以用*代替)
SpamScore Number Instead Of Stars = yes   (用分數代替幾顆星,這是原本Spamassassin的方式)
Spam Checks = yes
Use SpamAssassin = yes
Detailed Spam Report = yes
SpamAssassin Auto Whitelist = yes   (自動加入Whitelist,就是非spam清單)
Required SpamAssassin Score = 6      (超過6分就動作)
High SpamAssassin Score = 10         (超過10就執行高度動作)
#SpamAssassin Local Rules Dir = /etc/mail/spamassassin
#SpamAssassin Default Rules Dir = /etc/mail/spamassassin

(2)spam.assassin.prefs.conf的設定
#auto_whitelist_path           /var/spool/MailScanner/spamassassin/auto-whitelist
#auto_whitelist_file_mode   0600
bayes_path                      /var/spool/MailScanner/spamassassin/bayes
bayes_file_mode              0644
<以上4項設定auto whitelist跟bayes演算法的目錄跟檔案屬性,auto_whitelist原始設在/var/spool/MailScanner/spamassassin裡,可以不用更改,只改bayes就可以>
ok_locales                       zh en
ok_languages                  zh en
skip_rbl_checks 1               --如果不想使用RBL過濾規則的話,此項啟動,因RBL除真正是垃圾信外,還涉及一些被relay的轉信站,使用RBL可能會漏掉一些重要的信
#use_bayes 1                     --使用Bayes,其實不用動,內定就是使用Bayes演算法的
#lock_method flock            --此選項適用於SpamAssassin 3
#特別演算法,請參考以下的安裝
use_dcc          1
auto_learn      1
use_pyzor       1
use_razor2      1
always_add_headers 0
dcc_add_header 1
report_safe 0
use_terse_report 1
spam_level_stars 1
dns_available yes

(3)filename.rules.conf和filetype.rules.conf的設定,請自行修改,我只修改接收.chm的附檔,因為公司會用到,內定是阻檔wmv,asf,mpg等視訊檔案.
allow   \.chm$

---------------------------------------------------------------------------------------------------------------------------------------
在設定Spamassassin之前,我們可能也要先安裝Spamassassin所支援的下列模組,
這些工具都是利用 cryptographic hash 或 checksum 和特徵比對的方式,作為判斷垃圾信件的依據. 如果在垃圾信的判別上不是有很大的需求,以下可以不用裝,
使用內建的bayes auto lean,auto whitelist和rbl就已經可以阻絕90%以上的垃圾信
-------------Source package-----------------------
DCC(Distributed Checksum Clearinghouse)
http://www.rhyolite.com/anti-spam/dcc/source/dcc-dccd.tar.Z
Pyzor
http://ovh.dl.sourceforge.net/sourceforge/pyzor/pyzor-0.4.0.tar.bz2
Razor
http://ovh.dl.sourceforge.net/sourceforge/razor/razor-agents-sdk-2.03.tar.gz
http://prdownloads.sourceforge.net/razor/razor-agents-2.67.tar.gz

安裝 DCC
]#tar Zxvf dcc-dccd.tar.Z
]#cd dcc-dccd-1.2.65
]#./configure
]#make install
]#/usr/local/bin/cdcc 'info'

安裝Pyzor
]#tar jxvf pyzor-0.4.0.tar.bz2
]#cd pyzor-0.4.0
]#python setup.py build
]#python setup.py install
]#pyzor discover

安裝 Razor
]#tar zxvf razor-agents-sdk-2.03.tar.gz
]#cd razor-agents-sdk-2.03
]#perl Makefile.PL
]#make
]#make test
]#make install
]#cd ..
]#tar zxvf razor-agents-2.61.tar.gz
]#cd razor-agents-2.61
]#perl Makefile.PL
]#make
]#make test
maktest時,可能會有錯誤產生,請忽略,因為那可能跟Razor server連線有關.
]#make install
]#razor-client
]#razor-admin -create
]#razor-admin -register -user postmaster@your.domain

更改檔案屬性(因為安裝時可能權限變更而無法讀取)
]#chmod -R a+rX /usr/share/doc/pyzor \
/usr/lib/python2.2/site-packages/pyzor \
/usr/bin/pyzor /usr/bin/pyzord
--------------------------------------------------------------------
確認各參數正常運作,各相關模組也正常
]#spamassassin --lint --config-file=/etc/MailScanner/spam.assassin.prefs.conf -D

(5)自動學習
先建立兩個帳號,spam跟nospam
]#useradd spam
]#useradd nospam

以後是垃圾信就轉信到spapm的帳號,非垃圾信被加上{spam?}就轉到nospam去,然後用下列指令學習:

]# sa-learn  --prefs-file=/etc/MailScanner/spam.assassin.prefs.conf --showdots --spam --mbox /var/mail/spam
]# sa-learn  --prefs-file=/etc/MailScanner/spam.assassin.prefs.conf --showdots --ham --mbox /var/mail/nospam

也可以使用以下的Script:
######################################
#!/bin/sh
SPAM=/var/mail/spam
NOTSPAM=/var/mail/nospam

LOGFILE=/var/log/learn.spam.log
PREFS=/etc/MailScanner/spam.assassin.prefs.conf
SALEARN=/usr/bin/sa-learn

date >> $LOGFILE
if [ -f $SPAM ]; then
BOX=${SPAM}.processing
mv $SPAM $BOX
sleep 5 # Wait for writing current message to complete
$SALEARN --prefs-file=$PREFS --spam --mbox $BOX >> $LOGFILE 2>&1
rm -f $BOX
fi

if [ -f $NOTSPAM ]; then
BOX=${NOTSPAM}.processing
mv $NOTSPAM $BOX
sleep 5 # Wait for writing current message to complete
$SALEARN --prefs-file=$PREFS --ham --mbox $BOX >> $LOGFILE 2>&1
rm -f $BOX
fi
######################################
把以上的內容存成spam-learn。
] # chmod 755 spam-learn
] # mv spam-learn /etc/cron.daily
] # /etc/init.d/crond restart


<p.s.>後記--檢查一下經過Mailscanner所處理過的信件檔頭,應該會出現以下的訊息,若未出現host-MailScanner-SpamCheck,非廣告郵件, SpamAssassin 程式...的話,請檢查Detailed Spam Report = yes,
其中若分數一直=0沒變的話,表示spamassassin的設定檔錯誤,請檢查此兩項要取消
#SpamAssassin Local Rules Dir = /etc/mail/spamassassin
#SpamAssassin Default Rules Dir = /etc/mail/spamassassin
此項路徑要對:
SpamAssassin Prefs File = %etc-dir%/spam.assassin.prefs.conf
=======MailScanner處理過的信件檔頭===============
X-host-MailScanner-Information: Please contact the ISP for more information
X-host-MailScanner: Found to be clean
X-host-MailScanner-SpamCheck: 非廣告郵件, SpamAssassin 程式 (分數=3.8,
   被需要 6, AWL 0.00, FORGED_MUA_OUTLOOK 3.48, RCVD_IN_ORBS 0.50,
   RCVD_IN_OSIRUSOFT_COM 0.55, X_OSIRU_OPEN_RELAY 2.90)
X-host-MailScanner-SpamScore: 3
X-MailScanner-From: sender@host
Status:  
========================================

---------------------------------------------------------------------------------------------------------------------------------------
15.SNMP的設定
snmp從RH9.0後就改為net-snmp,所以跟之前設定略有差別,請修改下列設定檔:
]#vi /etc/snmp/snmpd.conf

com2sec local  localhost   public
com2sec mynetwork       192.168.0.0/24      public
group   MyRWGroup v1           local
group   MyROGroup v1           mynetwork
group   MyRWGroup v2c         local
view    systemview    included   .1.3.6.1.2.1.1
view    systemview    included   .1.3.6.1.2.1.25.1.1
view    all    included   .1 80
access  MyROGroup ""      any       noauth    prefix  all none none
access  MyRWGroup ""      any       noauth    prefix  all all  all
syslocation Unknown (edit /etc/snmp/snmpd.conf)
syscontact Root  (configure /etc/snmp/snmp.local.conf)
pass .1.3.6.1.4.1.4413.4.1 /usr/bin/ucd5820stat

<ps>請注意,mailscanner-mrtg使用v2c的界面取得數據,group   MyRWGroup v2c         local此行一定要有.

修改完請重新啟動,/etc/rc.d/init.d/snmpd restart
測試snmp,
]#snmpwalk localhost -c public -v 1
 
測試mailscanner-mrtg使用的v2c uptime
]#snmpwalk -v 2c -c public localhost uptime
 
---------------------------------------------------------------------------------------------------------------------------------------
16.Mailscanner-MRTG

]#rpm -ivh  mailscanner-mrtg-0.10.0.noarch

修改設定檔
vi /etc/MailScanner/mailscanner-mrtg.conf

修改下列參數:
MTA = postfix
Incoming Queue Dir = /var/spool/postfix/hold
Outgoing Queue Dir = /var/spool/postfix/incoming
MailScanner Work Directory = /var/spool/MailScanner/incoming-->/var/
Spool Directory = /var/spool/mailscanner-mrtg-->/var/
------------------------------------
<ps>此兩項是用df指令來穫得磁碟空間,所以要求實際mount point,可以看看原來MailScanner Work Directory和Spool Directory
是在那個磁區底下,直接設定即可,因為其重點在於監控這兩個目錄所在空間是否不足,官方網站提出使用tmpfs另外分出兩個掛載點,
個人覺得並不是非常好的解法,因為無法提供正確空間的使用數據,僅能夠消除錯誤的log而已,請參考.
以我的例子,此兩個目錄都在/var的mount point上,所以都設成/var.
------------------------------------
Use SNMP = yes
SNMP Community = public
------------------------------------
若SNMP未啟動,會有cpu ,memory,iptraffic 三項圖形無法穫得數據.

<ps>mailscanner-mrtg所提供的數據由/usr/sbin/mailscanner-mrtg而來,共有下列幾項:
loadavg     : 主機平均負載
cpu         : CPU 使用率
memory      : 記憶體用量
iptraffic   : 伺服器網路流量
inqueue     : 等待傳送出去的檔案數量
outqueue    : 等待傳出的檔案數量
quarantine  : 隔離區的檔案/信件數量
rootusage   : 在根目錄(/)上的磁碟用量
spoolusage  : 在Spool Filesystem上的磁碟用量
tmpfsusage  : 在Work Filesystem上的磁碟用量
mailscanner : MailScanner 子程序數量
mta         : MTA 遞送程序
mail        :信件遞送
mailbytes   : 郵件傳輸量
virus       : 未通過病毒或內容檢測的信件
spam        : 垃圾郵件數量
virusratio  : 病毒或內容禁止信件佔所有郵件的比率
spamratio   : 垃圾信件佔所有郵件的比率
batchsize   : 每一批次平均處理的信件數量
speed       : 處理速度

再來修改/etc/mrtg/mailscanner-mrtg.cfg
Workdir: /var/www/html/mailscanner-mrtg      <--流量網頁產生目錄
IconDir: /mrtg/
WriteExpires: Yes
Interval: 5
Refresh: 300
Language: big5   <--設定為中文

產生index.html網頁
]# indexmaker --output=/var/www/html/mailscanner-mrtg/index.html  /etc/mrtg/mailscanner-mrtg.cfg

再來測試參數檔,需連續run三次才不會有錯誤產生.
]#mrtg /etc/mrtg/mailscanner-mrtg.cfg

不過若有錯誤產生,主要是SNMP跟tmpfs的參數未設好,請再仔細檢查.

完成後可以在以下看到流量:
http://your.mail.com/mailscanner-mrtg

<ps>在RHEL3.0由於將MRTG有獨立設定存取模組,所以請修改以下檔案,可以解決mrtg icon無法出來的問題:
]#vi /etc/httpd/conf.d/mrtg.conf
Allow from localhost      -->Allow from all

從localhost改為全部可以瀏覽

---------------------------------------------------------------------------------------------------------------------------------------
17.Openwebmail安裝
openwebmail需要先安裝下列4個套件:
 perl-CGI
 perl-Compress-Zlib
 perl-Text-Iconv
 perl-suidperl
 其中 perl-CGI和perl-suidperl-5.8.0, perl-Compress-Zlib應該在以上的安裝已經存在,所以再新增perl-Text-Iconv:
]#rpm -Uvh perl-Text-Iconv-1.2-0.1.el3.dag.i386.rpm
然後開始裝openwebmail
]#rpm -ivh openwebmail-2.41-1.i386.rpm

裝完後請修改/var/www/cgi-bin/openwebmail/etc/defaults/dbm.conf,修改下列三項:
dbm_ext                 .db
dbmopen_ext          .db
dbmopen_haslock    yes

然後執行起始設定:
]#/var/www/cgi-bin/openwebmail/openwebmail-tool.pl --init

若要設定中文界面為預設界面,請修改下列檔案:
]#vi /var/www/cgi-bin/openwebmail/etc/openwebmail.conf
-->default_language                zh_TW.Big5

完畢後確認httpd運作中,開啟
http://your.host/cgi-bin/openwebmail/openwebmail.pl
即可使用openwebmail
---------------------------------------------------------------------------------------------------------------------------------------
18.SpeedyCGI安裝

SpeedyCGI 這個套件與 mod_perl 或是 FastCGI 相似, 都是能讓 CGI 程式常駐於記憶體執行的工具, 但是 要使用 mod_perl 或 FastCGI, 程式需要較大程度的修改. 而 SpeedyCGI 是針對 perl 所設計的, 能讓大部分的 perl 程式只要作少量的修改, 就可以順利地變成常駐執行的程式. 由於Openwebmail使用大量的perl,所以使用SpeedyCGI這種加速程式可以以效提升openwebmail的速度.

首先取得SpeedyCGI的source,現已有rpm檔,但因跟perl版本可能會有衝突,個人比較偏好自行編譯.

http://daemoninc.com/SpeedyCGI/download.html

]#tar -zxvf CGI-SpeedyCGI-2.22.tar.gz
]#cd CGI-SpeedyCGI-2.22
]#perl Makefile.PL (問是否裝 mod_speedycgi 時請回答 'no')
]#cd speedy
]#vi Makefile
在有 DEFINE = 這行的最後面加上 -DIAMSUID
]#cd ..
]#make
]#make install

預設的安裝路徑是/usr/bin/speedy,需修改屬性:
]#chmod 4555 /usr/bin/speedy

由於 openwebmail 程式碼已經是 SpeedyCGI ready, 所以您要作的只有把所有 /var/www/cgi-bin/openwebmail/openwebmail*pl 中第一行
由 #!/usr/bin/suidperl -T 換成
#!/usr/bin/speedy -T -- -T/tmp/speedy

共有下列幾個檔案要換(openwebmail-2.41):
openwebmail-abook.pl
openwebmail-advsearch.pl
openwebmail-cal.pl
openwebmail-folder.pl
openwebmail-main.pl
openwebmail.pl
openwebmail-prefs.pl
openwebmail-read.pl
openwebmail-send.pl
openwebmail-spell.pl
openwebmail-tool.pl
openwebmail-vdomain.pl
openwebmail-viewatt.pl
openwebmail-webdisk.pl

測試openwebmail所有功能,無誤即可
---------------------------------------------------------------------------------------------------------------------------------------
18.其他小細節

MailScanner有三個定時啟動的程序,可依環境自行搬到該執行的週期:
清除隔離檔案--預設每天一次
/etc/cron.daily/clean.quarantine
將$disabled = 0;改成1來使自動清除啟動,預設是保留檔案30天($days_to_keep   = 30;)

檢查MailScanner--預設每小時一次
/etc/cron.hourly/check_MailScanner

更新病毒碼--預設每小時一次
/etc/cron.hourly/update_virus_scanners

若Apache的MRTG出來的網頁以UTF為主,切換麻煩的話, 請修改/etc/httpd/conf/httpd.conf
將AddDefaultCharset ISO-8859-1修改如下
AddDefaultCharst Big5
語言順序
LanguagePriority en da nl et fr de el it ja kr no pl pt pt-br ltz ca es sv tw
改成
LanguagePriority tw en da nl et fr de el it ja kr no pl pt pt-br ltz ca es sv
---------------------------------------------------------------------------------------------------------------------------------------

12
****************************************************
Postfix 使用
1.SASL smtp認證(提供user在家或出外的smtp認證服務)
2.Procmail信件過濾(基本過濾)
3.Spamassassin自我學習的垃圾信過濾
4.Mailscanner信件掃瞄閘道
5.Sophos歐洲最大的掃毒軟體
6.SNMP(MRTG需用到)
7.MailScanner-MRTG(用來監控郵件處理及系統流量)
8.Openwebmail

mail system for RedHat 9.0 &RHEL3.0 Total solution安裝筆記
            --written by Dandy
*****************************************************

1.所有相關的套件--Postfix,Procmail,SASL,Spamassasin在Redhat 9.0都已內建,版本如下:
postfix-1.1.11-11
procmail-3.22-9
spamassassin-2.44-11.8.x
cyrus-sasl-2.1.10-4
剩下只有Mailscaner跟Sophos需download來安裝,請到以下download(今天是2004/09/27,版本可能會不同):

Sophos AntiVirus For Linux v3.86.0
http://downloads.sophos.com/dp/full/linux.intel.libc6.glibc.2.2.tar.Z
(p.s.:Sophos依glibc分成數個版本,像libc5使用libc5.tar.Z,redhat 7.0之前的glibc2.2之前使用標準的libc6.glibc.tar.Z,
Redhat9.0&RedHat Enterprise 3.0則使用libc6.glibc2.2.tar.Z)

Perl SAVI Module--是一個Sophos本身的perl模組
http://www.csupomona.edu/~henson/www/projects/SAVI-Perl/dist/

Sophos ide update --自動更新病毒碼
http://www.ijs.si/software/sophos-ide-update/sophos-ide-update_1.2.tar.gz

Sophie--一個使用 Sophos Anti Virus Library 的掃毒介面(非必要安裝)
http://www.vanja.com/tools/sophie/sophie-3.04rc2.tar.gz

Mailscanner 4.33.3-1 for RedHat Linux (and other RPM-based Linux distributions)
http://freshmeat.net/redir/mailscanner/17417/url_rpm/MailScanner-4.33.3-1.rpm.tar.gz

MailScanner MRTG--用來監控郵件處理流量
mailscanner-mrtg-0.09.03-1.noarch
ftp://fr2.rpmfind.net/linux/sourceforge/m/ma/mailscannermrtg/mailscanner-mrtg-0.09.03-1.noarch.rpm

Openwebmail 2.41.1
http://openwebmail.org/openwebmail/download/redhat/rpm/release/openwebmail-2.41-1.i386.rpm
http://openwebmail.org/openwebmail/download/redhat/rpm/packages/rh9/perl-Text-Iconv-1.2-RH80.i386.rpm
http://openwebmail.org/openwebmail/download/redhat/rpm/packages/rh9/perl-Compress-Zlib-1.21-RH9.i386.rpm
http://openwebmail.org/openwebmail/download/redhat/rpm/packages/rh9/optional/perl-CGI-SpeedyCGI-2.21-RH9.i386.rpm

---------------------------------------------------------------------------------------------------------------------------------------------
2.因postfix和sasl套件在redhat9.0中已全部都有安裝,
先停掉原先預設的sendmail
]#/etc/rc.d/init.d/sendmail stop

將postfix加入啟動的服務
]#chkconfig --add postfix

啟動ntsysv,將sendmail換成postfix,這樣重新開機時便會是postfix,而不會是sendmail
]#ntsysv

再來設定 Postfix,編輯 /etc/postfix 目錄下的 main.cf 此設定檔。
請先使用文字編輯器開啟 /etc/postfix/main.cf 設定檔,在檔尾的部份開始新增設定,將以下加入main.cf

#SMTP sasl Auth
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_sasl_authenticated permit_auth_destination permit_mynetworks,check_relay_domain reject
smtpd_client_restrictions = permit_sasl_authenticated,reject_rbl_client relay.ordb.org
smtpd_sasl_security_options = noanonymous


#Block
#smtpd_sender_restrictions = reject_unknown_sender_domain
#smtpd_client_restrictions = check_client_access regexp:/etc/postfix/access, reject_rbl_client relay.ordb.org

編輯/etc/postfix/access加入
/\.dynamic\..+\.tw/     REJECT We can't allow dynamic IP to relay!
-----------------------------------------------------------------------------------------------------------
<ps>
smtpd_sasl_auth_enable = yes      //開啟 smtp 認證
broken_sasl_auth_clients = yes      //保持client端的相容性,例如MSOE4
smtpd_recipient_restrictions = permit_sasl_authenticated permit_auth_destination rejec   //表示允許 sasl 認證,允許認證目的主機,接收本postfix為最後一站的信件。
smtpd_client_restrictions = permit_sasl_authenticated   //允許用戶端sasl認證
smtpd_sasl_security_options = noanonymous   //允許任何非匿名的使用者
smtpd_sasl_local_domain = $myhostname      //sasl的本地網域
smtpd_sender_restrictions = reject_unknown_sender_domain   //阻擋網域名稱錯誤的主機
smtpd_client_restrictions = check_client_access regexp:/etc/postfix/access      //阻擋動態IP的主機,在access裡設定
-----------------------------------------------------------------------------------------------------------
3.設定身份認證方式
SASL 所提供的密碼認證方式共分為四種:

* PAM :使用系統的 pam 模組做為認證,在Redhat上可使用此方式

* shadow :利用系統的 /etc/shadow 檔做為其身份認證的方式。但也因此則需要修改 /etc/shadow 檔的存取權限,需改為 644,安全性有較大問題 。

* pwcheck :方式同 shadow 認證,但不須修改 /etc/shadow 檔的存取權限,而須在每次開機時執行 pwcheck 。您也可在 /etc/rc.d/rc.local 檔中加入執行敘述,適用於FreeBSD。

* sasldb :SASL本身自帶的認證方法,是使用 sasl 資料庫來存放使用者的帳號與密碼,使用指令 saslpasswd 來新增或修改使用者帳號與密碼。
saslpasswd -c -u 11way.com dandy   //新增sasl用戶
sasldblistusers         //list sasl用戶

請修改/usr/lib/sasl/smtpd.conf,修改pwcheck_method: 為你要的方式,Redhat建議使用PAM,節省建sasl帳號時間.
pwcheck_method: PAM

<ps>若是RHEL 3.0,請將/usr/lib/sasl2/smtpd.conf copy到/usr/lib/sasl再做修改
---------------------------------------------------------------------------------------------------------------------------------------------
4.由於有chroot的問題,所以sasl認證會失敗,請修改 /etc/postfix/master.cf
# ==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (50)
# ==========================================================================
smtp    inet    n       -       y       -       -       smtpd
改成
smtp    inet    n       n       n       -       -       smtpd

---------------------------------------------------------------------------------------------------------------------------------------------
5.postfix reload重新讀取postfix設定檔

. 測試 SASL
測試的方法同樣是使用 telnet ,利用 telnet 指令連到 Postfix 主機端上,請執行如下的指令:
# telnet sun.xx.com 25
接著請輸入下列指令:
EHLO master.planetnet.net
請注意 Postfix 所回應的訊息,如果您的設定均無誤,那麼應該會顯示出類似下列的訊息:
250-master.planetnet.net
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250-AUTH=LOGIN PLAIN DIGEST-MD5 CRAM-MD5
250-XVERP
250 8BITMIME
最重要的兩行,在第六行與第七行,顯示目前 Postfix 系統所支援的認證協定。如果您執行的結果有出現這兩行即表示您的 Postfix 已可使用 SASL 認證。
---------------------------------------------------------------------------------------------------------------------------------------------
6.設定outlook或outlook express,設定smtp外寄郵件伺服器需要認證.
---------------------------------------------------------------------------------------------------------------------------------------------
7.基本的信件過濾:postfix+procmail+spamassassin(使用MailScanner啟動Spamassassin請跳過此項)
最簡單的方式就是在/etc/procmailrc加入
:0fw
| /usr/bin/spamassassin

或(大於2MB的信不檢查)
:0fw
    * < 2000000
| /usr/bin/spamassassin

或使用獨立的常駐程式spamc(會有較高的效能)
:0fw
| /usr/bin/spamc -s 200000
---------------------------------------------------------------------------------------------------------------------------------------------
8.完整的信件過濾是由MailScanner代替postfix執行遞送程式,僅啟動MTA子程式,將所收到的郵件檔案先暫存在另外一個資料夾(mqueue.in或hold).
然後呼叫Spamassassin和Sophos來檢查垃圾信及病毒信後,MailScanner再進行後續處理(加上spam或virus或刪除等動作),然後再放回
/var/spool/mail原來的信件目錄.
---------------------------------------------------------------------------------------------------------------------------------------------
9.安裝Sophos AntiVirus For Linux ,Sophos提供的試用版並無使用限制,也可自動更新病毒碼,商業用途請購買使用授權,費用並不太高
下載後解開安裝:
]#tar zxvf llinux.intel.libc6.glibc.2.2.tar.Z
]#cd sav-install/
]#useradd sweep -g sweep
]# ./install.sh

安裝完的目錄如下:
 執行檔- binaries in /usr/local/bin
 掃毒引擎- the shared library in /usr/local/lib
 病毒碼- the virus data in /usr/local/sav
 說明文件- manual pages in /usr/local/man

<ps>如果在redhat 9.0下裝了llinux.intel.libc6.tar.Z的版本,後面要安裝的Sophie會產生找不到SAVIsweepFile in -lsavi的錯誤,當然其他的相關系統也就無法運作
---------------------------------------------------------------------------------------------------------------------------------------------
10.安裝Perl SAVI Module

]#tar zxvf SAVI-Perl-0.15.tar
]#cd SAVI-Perl-0.15

修改Makefile.PL如下:
'LIBS' => ['-L/usr/local/Sophos/lib -R/usr/local/Sophos/lib -lsavi'],

作一個link讓-lsavi能work:
]#cd /usr/local/lib
]#ln -s libsavi.so.3.2.07.071 libsavi.so (版本號可能會有少許差異)

安裝測試:
]#perl Makefile.PL
]#make
]#make test
]#make install

OK,現在說明一下MailScanner和Sophos的關係,Sophos本身掃毒程式除了病毒引擎ide之外,另外還有自己的mail gate界面和自己的掃毒程式sweep,
MailScanner支援Sophos的方式有以下兩種:
1.Virus Scanners = sophos               --收信時呼叫sweep來掃瞄
2.Virus Scanners = sophossavi         --直接呼叫SAVI透過sophos的lib來做掃瞄
可能是因為第二種方式比較快,所以MailScanner官方網站建議使用SAVI,若用第一種方式,需修改Incoming Queue Dir 和Qutgoing Queue Dir 的路徑

---------------------------------------------------------------------------------------------------------------------------------------------
11. 安裝 Sophos ide update 自動更新病毒碼:

解壓縮到/usr/local/bin
]#tar zxvf sophos-ide-update_1.2.tar.gz

將sophos-ide-update.pl複制到/usr/local/bin

一定要執行一次,要不然MailScanner啟動Sophos時會抓不到IDE病毒引擎.
<ps>由於是由MailScanner來啟動postfix/spamassassin/sophos,所以自動啟動的postfix跟spamd請停掉

---------------------------------------------------------------------------------------------------------------------------------------------
11-1. 安裝Sophie ,Sophie是一個使用 Sophos Anti Virus Library 的掃毒介面程式,若server未提供file server的服務,mail server是用不到的.

解壓縮到/usr/local/bin
]#tar zxvf sophie-3.04rc2.tar.gz

]#./configure --with-savilib=/usr/local/lib
]#make
]#mv sophie /usr/local/bin
會產生sophie 這個 binary file(可執行檔),將這個檔案搬到/usr/local/bin
將原目錄下的 etc/sophie.cfg 和sophie.savi 複製到 /etc 之下,
並且將 sophie.cfg內的maxproc 的參數調整為 0,
然後就可以執行 sophie -v 看有沒有抓到掃毒引擎和病毒碼了,

]#cd etc
]#mv sophie.cfg sophie.savi /etc
]#cd /etc
]#vi sophie.cfg
->maxprox 20改為0
]#/usr/local/bin/sophie -v

---------------------------------------------------------------------------------------------------------------------------------------------
12.安裝MailScanner

MailScanner支援Postfix的詳細說明:
http://www.sng.ecs.soton.ac.uk/mailscanner/install/postfix.shtml
先別高興,這是支援Postfix 2.x版的安裝方式,由於Redhat 9預設的Postfix 1.x版並不支援header_checks map: HOLD的map方式,
所以以下會分成兩個版本來進行.

先解壓縮
]#tar zxvf MailScanner-4.33.3-1.rpm.tar.gz

安裝(在此再次強調,安裝linux時最好選擇Everything,將所有套件全部裝進去,以rh8.0/9.0來說,才不過佔了4-5G,比起後來缺東缺西的痛苦,會快樂得多)
]#./install.sh

<p.s.>會等待需多點時間,因為除了MailScanner外還會有其他必須要用到的套件,大部份是perl的套件
---------------------------------------------------------------------------------------------------------------------------------------------
13-1.MailScanner for Postfix 2.x的設定方式
安裝完成後,MailScanner會自動幫你啟動,但是因為預設啟動的是sendmail,不是postfix,所以這時並未啟動,先設定MailScanner.
vi /etc/postfix/main.cf
加入這行:
header_checks = regexp:/etc/postfix/header_checks

然後在/etc/postfix下增加一個header_checks檢查檔:
]#vi /etc/postfix/header_checks

加入這行:
/^Received:/ HOLD

編輯MailScanner的設定檔
]#vi /etc/MailScanner/MailScanner.conf

修改以下項目,請依自己需求修改:
-----------------------------------------------------------
Incoming Queue Dir = /var/spool/postfix/hold
Outgoing Queue Dir = /var/spool/postfix/incoming
Run As User = postfix
Run As Group = postfix
MTA = postfix
Expand TNEF = no      (Sophos/McAfee設定為 "no",其它是"yes")
Use SpamAssassin = yes
SpamAssassin User State Dir =/var/spool/MailScanner/spamassassin
Virus Scanning = yes
Virus Scanners = sophossavi
Sophos IDE Dir = /usr/local/sav
Sophos Lib Dir = /usr/local/lib
Monitors For Sophos Updates = /usr/local/sav/*ides.zip
Deliver Unparsable TNEF = yes      (使用outlook的user可能需要)
Allow IFrame Tags = yes            (允許IFrame標籤的信件)
Allow Script Tags = yes               (允許Script標籤的信件,一些像outlook內有信紙功能的郵件需插入Script Tags)
Allow Object Codebase Tags = yes   (允許 HTML中的 <Object Codebase=...> 標籤包含在郵件中)
Attachment Encoding Charset = ISO-8859-1         (將感染通知訊息以附件寄送,並編碼為ISO-8859-1,若Warning Is Attachment = no,不以附件寄送,可能產生亂碼)
Still Deliver Silent Viruses = no      (通知收信者有人寄送Silent Virus[偽造地址病毒]給你)
Quarantine Silent Viruses = no      (不隔離Silent Virus,以免佔空間)
Mark Infected Messages = no       (通知收信者去閱讀那些替代原本被感染的附件的感染報告檔案)
Mark Unscanned Messages = no   (若檔案未經掃瞄,通知你的使用者不要去使用這個郵件。)
Rebuild Bayes Every = 3600
SpamAssassin Auto Whitelist = yes
-----------------------------------------------------------

增加目錄
]#mkdir /var/spool/postfix/hold      --MailScanner 該掃描的郵件目錄
]#mkdir /var/spool/MailScanner/spamassassin
]#chown postfix.postfix /var/spool/postfix/hold

修改/var/spool/MailScanner裡目錄的屬性
]#chown postfix.postfix /var/spool/MailScanner/incoming
]#chown postfix.postfix /var/spool/MailScanner/quarantine
]#chown postfix.postfix /var/spool/MailScanner/spamassassin

關掉postfix,啟動MailScaner,
]#/etc/rc.d/init.d/postfix stop
]#/etc/rc.d/init.d/MailScanner start

工作原理如下:

SMTP 25--->MailScanner啟動Postfix MTA--->HOLD Queue(/var/spool/postfix/hold)
--->Spam & Virus Check--->MDA(Procmail)--->/var/spool/mail
            |
            |--->/var/spool/MailScanner/spamassin or quarantine & send notify   

---------------------------------------------------------------------------------------------------------------------------------------------
13-2.MailScanner for Postfix 1.x的設定方式

Mailscanner在postfix 1.x跟2.x的工作原理稍有不同,由於Postfix 1.x不支援MailScanner啟動Postfix的Hold Queue動作,
因此要啟動兩個postfix,分別做為incoming跟delivery的動作,工作原理如下:

SMTP 25--->Postfix.in->Queue in /var/spool/postfix.in--->MailScanner啟動
--->Spam & Virus Check--->Postfix--->MDA(Procmail)--->/var/spool/mail
            |
            |--->/var/spool/MailScanner/spamassin or quarantine & send notify   

所以會看到兩個postfix的master process,MailScanner for Postfix 2.x版只有一個.

 9998 ?        S      0:00 [master]
10001 ?        S      0:00  \_ [pickup]
10003 ?        S      0:01  \_ [nqmgr]
10065 ?        S      0:00 [master]
10070 ?        S      0:00  \_ [pickup]
10071 ?        S      0:00  \_ [nqmgr]
10084 ?        S      0:00 [MailScanner]
10085 ?        S      2:46  \_ [MailScanner]
10089 ?        S      3:05  \_ [MailScanner]

先copy一份postfix的設定檔
]#cp -rp /etc/postfix /etc/posfix.in

修改/etc/postfix.in/main.cf,加入此行,以確保incoming的postfix不拒收任何信,並將queue_directory由/var/spool/postfix改為postfix.in
defer_transports = smtp local virtual relay
queue_directory = /var/spool/postfix.in

將正常的Postfix的SMTP功能停掉,以確保所有的SMTP都是走incoming postfix進出的:
修改 /etc/postfix/master.cf,修改此行,前面加上"#":
#smtp inet n n n - - smtpd

接下來將 /var/spool/postfix, 複製一份postfix.in,作為incoming postfix的目錄
]#cp -rp /var/spool/postfix /var/spool/postfix.in

增加spamassassin的目錄
mkdir /var/spool/MailScanner/spamassassin

修改/var/spool/MailScanner裡目錄的屬性
]#chown postfix.postfix /var/spool/MailScanner/incoming
]#chown postfix.postfix /var/spool/MailScanner/quarantine
]#chown postfix.postfix /var/spool/MailScanner/spamassassin


編輯MailScanner的設定檔
]#vi /etc/MailScanner/MailScanner.conf

修改以下項目,請依自己需求修改:
-----------------------------------------------------------
Incoming Queue Dir = /var/spool/postfix.in/deferred
Outgoing Queue Dir = /var/spool/postfix/incoming
Run As User = postfix
Run As Group = postfix
MTA = postfix
Expand TNEF = no      (Sophos/McAfee設定為 "no",其它是"yes")
Use SpamAssassin = yes
SpamAssassin User State Dir =/var/spool/MailScanner/spamassassin
Virus Scanning = yes
Virus Scanners = sophossavi
Sophos IDE Dir = /usr/local/sav
Sophos Lib Dir = /usr/local/lib
Monitors For Sophos Updates = /usr/local/sav/*ides.zip
Deliver Unparsable TNEF = yes      (使用outlook的user可能需要)
Allow IFrame Tags = yes            (允許IFrame標籤的信件)
Allow Script Tags = yes               (允許Script標籤的信件,一些像outlook內有信紙功能的郵件需插入Script Tags)
Allow Object Codebase Tags = yes   (允許 HTML中的 <Object Codebase=...> 標籤包含在郵件中)
Attachment Encoding Charset = ISO-8859-1         (將感染通知訊息以附件寄送,並編碼為ISO-8859-1,若Warning Is Attachment = no,不以附件寄送,可能產生亂碼)
Still Deliver Silent Viruses = no      (通知收信者有人寄送Silent Virus[偽造地址病毒]給你)
Quarantine Silent Viruses = no      (不隔離Silent Virus,以免佔空間)
Mark Infected Messages = no       (通知收信者去閱讀那些替代原本被感染的附件的感染報告檔案)
Mark Unscanned Messages = no   (若檔案未經掃瞄,通知你的使用者不要去使用這個郵件。)
Rebuild Bayes Every = 3600
SpamAssassin Auto Whitelist = yes
-----------------------------------------------------------

關掉postfix,啟動MailScaner,
]#/etc/rc.d/init.d/postfix stop
]#/etc/rc.d/init.d/MailScanner start

檢查MailScanner的啟動狀況
]#check_MailScanner
MailScanner running with pid 10084 10085 10089 10990
---------------------------------------------------------------------------------------------------------------------------------------
14-1.設定Spamassassin,在此又發生一個問題,RedHat 9.0所附的Spamassassin是
spamassassin-2.44-11.8.x,此版似乎不支援下列幾個參數,包含sa-learn跟bayes也無法使用:

#use_bayes               1
#bayes_path              /var/spool/MailScanner/spamassassin
#auto_learn              1
#use_razor2              1
#use_dcc                 1
#use_pyzor               1
#always_add_headers      0
#report_safe             0

所以呢,設定到此,再次分成兩部份來討論,如果是不想使用sa-learn自動學習和bayes貝氏過濾法的user,MailScanner還有Auto Whiltelist可以用,
加上一些手動的規則設定,應該也足以應付大部份的spam,如果想昇級,設定參數和方式會有所不同,以下分述:

(1)由於spamassassin是由MailScanner來控制啟動,所以設定檔local.cf現在改成MailScanner的設定檔spam.assassin.prefs.conf
下列參數可能會對我們的設定有幫助:
Spam Score Character = * (以s代替spamassassin的分數,老實說,個人覺得score比較好用,你也可以用*代替)
SpamScore Number Instead Of Stars = yes   (用分數代替幾顆星,這是原本Spamassassin的方式)
Spam Checks = yes
Use SpamAssassin = yes
SpamAssassin Auto Whitelist = yes   (自動加入Whitelist,就是非spam清單)
Required SpamAssassin Score = 6      (超過6分就動作)
High SpamAssassin Score = 10         (超過10就執行高度動作)

(2)spam.assassin.prefs.conf的設定
auto_whitelist_path           /var/spool/MailScanner/spamassassin/auto-whitelist
auto_whitelist_file_mode   0600
#bayes_path                      /var/spool/MailScanner/spamassassin/bayes
#bayes_file_mode              0600
ok_locales                       zh en
ok_languages                  zh en
skip_rbl_checks 1               --如果不想使用RBL過濾規則的話,此項啟動,因RBL除真正是垃圾信外,還涉及一些被relay的轉信站,使用RBL可能會漏掉一些重要的信
#use_bayes 1                     --使用Bayes

(3)filename.rules.conf的設定,請自行修改,我只修改接收.chm的附檔,因為公司會用到.
allow   \.chm$

---------------------------------------------------------------------------------------------------------------------------------------
14-2.安裝新版的Spamassassin
下載新版的spamassassin-3.0.0-0_18 for RH9

ftp://ftp.pbone.net/mirror/atrpms.physik.fu-berlin.de/dist/rh9/spamassassin/spamassassin-3.0.0-0_18.rh9.at.i386.rpm

]#rpm -Uvh spamassassin-3.0.0-0_18.rh9.at.i386.rpm

在設定Spamassassin之前,我們可能也要先安裝Spamassassin所支援的下列模組,
這些工具都是利用 cryptographic hash 或 checksum 和特徵比對的方式,作為判斷垃圾信件的依據.
-------------RPM package-----------------------
DCC(Distributed Checksum Clearinghouse)
ftp://ftp.pbone.net/mirror/atrpms.physik.fu-berlin.de/dist/rh9/DCC/DCC-1.2.53-6.rh9.at.i386.rpm

Pyzor
ftp://ftp.pbone.net/mirror/atrpms.physik.fu-berlin.de/dist/rh9/pyzor/pyzor-0.4.0-2.rh9.at.noarch.rpm
http://download.atrpms.net/production/packages/common/atrpms/atrpms-59-1.at.noarch.rpm
-------------RPM package-----------------------
Razor
ftp://ftp.pbone.net/mirror/atrpms.physik.fu-berlin.de/dist/rh9/razor-agents/razor-agents-2.61-7.rh9.at.i386.rpm

另外再加這幾個rpm,Spamassassin才裝得上
ftp://ftp.pbone.net/mirror/www.spenneberg.org/Firewall/Amavisd-new/RedHat-9/perl-Net-SSLeay-1.25-rh9_1.i386.rpm
http://crash.fce.vutbr.cz/crash-hat/1/perl-Net-SSLeay/perl-Net-SSLeay-1.25-1.noarch.rpm
ftp://ftp.pbone.net/mirror/atrpms.physik.fu-berlin.de/dist/rh9/perl-IO-Socket-SSL/perl-IO-Socket-SSL-0.95-1.rh9.at.noarch.rpm
ftp://ftp.pbone.net/mirror/atrpms.physik.fu-berlin.de/dist/rh9/perl-Net-DNS/perl-Net-DNS-0.46-2.rh9.at.i386.rpm

開始設定:

(1)先設定/etc/mail/spamassassin/local.cf
-----------------------------------------------------------------------------
use_bayes                1
bayes_path               /var/spool/MailScanner/spamassassin/bayes
auto_learn               1
skip_rbl_checks         0
use_razor2               1
use_dcc                  1
use_pyzor               1
always_add_headers   0
dcc_add_header         0
report_safe               0
use_terse_report         0
spam_level_stars         1
dns_available            yes

ok_languages   zh en
ok_locales   zh en

whitelist_from  *@Newsletters.Microsoft.com

# From addr like <some chinese>@mydomain,將以下的mai\l.com\.tw改成您的domain
header __FROM_8BIT_LOCAL From:addr =~ /[a-zA-Z0-9_-]*[\x80xff][a-zA-Z0-9_-]*\@mail\.com\.tw/i
header __TO_8BIT_LOCAL To:addr =~ /[a-zA-Z0-9_-]*[\x80-\xff][a-zA-Z0-9_-]*\@mail\.com\.tw/i
header __CC_8BIT_LOCAL Cc:addr =~ /[a-zA-Z0-9_-]*[\x80-\xff][a-zA-Z0-9_-]*\@mail\.com\.tw/i
meta LOCAL_8BIT_USER (__FROM_8BIT_LOCAL || __TO_8BIT_LOCAL || __CC_8BIT_LOCAL)
describe LOCAL_8BIT_USER From or To a chinese@mydomain
score LOCAL_8BIT_USER 3.0
-----------------------------------------------------------------------------

確認各參數正常運作,各相關模組也正常
]#spamassassin --lint -D

(2)再來設定MailScanner.conf,下列參數可能是您有興趣的:
Spam Score Character = * (以s代替spamassassin的分數,老實說,個人覺得score比較好用,你也可以用*代替)
SpamScore Number Instead Of Stars = yes   (用分數代替幾顆星,這是原本Spamassassin的方式)
Spam Checks = yes
Use SpamAssassin = yes
SpamAssassin Auto Whitelist = yes   (自動加入Whitelist,非spam清單)
Required SpamAssassin Score = 6      (超過6分就動作)
High SpamAssassin Score = 10         (超過10分就執行高度動作)
Rebuild Bayes Every = 0                  (每隔幾秒重建Bayes資料庫)
Wait During Bayes Rebuild = no         (是否需等待重建完成)

(3)spam.assassin.prefs.conf的設定

auto_whitelist_path           /var/spool/MailScanner/spamassassin/auto-whitelist
auto_whitelist_file_mode   0600
bayes_path                      /var/spool/MailScanner/spamassassin/bayes
bayes_file_mode              0600
ok_locales                       zh en
ok_languages                  zh en
skip_rbl_checks 1               --如果不想使用RBL過濾規則的話,此項啟動,因RBL除真正是垃圾信外,還涉及一些被relay的轉信站,使用RBL可能會漏掉一些重要的信
use_bayes 1                     --使用Bayes

(4)filename.rules.conf的設定
allow   \.chm$

(5)自動學習
先建立兩個帳號,spam跟nospam
]#useradd spam
]#useradd nospam

以後是垃圾信就轉信到spapm的帳號,非垃圾信被加上{spam?}就轉到nospam去,然後用下列指令學習:

]# sa-learn -D --showdots --spam --mbox /var/mail/spam
]# sa-learn -D --showdots --ham --mbox /var/mail/nospam

也可以使用以下的Script:
######################################
#!/bin/sh
SPAM=/var/mail/spam
NOTSPAM=/var/mail/nospam

LOGFILE=/var/log/learn.spam.log
PREFS=/etc/MailScanner/spam.assassin.prefs.conf
SALEARN=/usr/bin/sa-learn

date >> $LOGFILE
if [ -f $SPAM ]; then
BOX=${SPAM}.processing
mv $SPAM $BOX
sleep 5 # Wait for writing current message to complete
$SALEARN --prefs-file=$PREFS --spam --mbox $BOX >> $LOGFILE 2>&1
rm -f $BOX
fi

if [ -f $NOTSPAM ]; then
BOX=${NOTSPAM}.processing
mv $NOTSPAM $BOX
sleep 5 # Wait for writing current message to complete
$SALEARN --prefs-file=$PREFS --ham --mbox $BOX >> $LOGFILE 2>&1
rm -f $BOX
fi
######################################
把以上的內容存成spam-learn。
] # chmod 755 spam-learn
] # mv spam-learn /etc/cron.daily
] # /etc/init.d/crond restart

---------------------------------------------------------------------------------------------------------------------------------------
15.SNMP的設定
snmp從RH9.0後就改為net-snmp,所以跟之前設定略有差別,請修改下列設定檔:
]#vi /etc/snmp/snmpd.conf

com2sec local  localhost   public
com2sec mynetwork       192.168.0.0/24      public
group   MyRWGroup v1           local
group   MyROGroup v1           mynetwork
group   MyRWGroup v2c         local
view    systemview    included   .1.3.6.1.2.1.1
view    systemview    included   .1.3.6.1.2.1.25.1.1
view    all    included   .1 80
access  MyROGroup ""      any       noauth    prefix  all none none
access  MyRWGroup ""      any       noauth    prefix  all all  all
syslocation Unknown (edit /etc/snmp/snmpd.conf)
syscontact Root  (configure /etc/snmp/snmp.local.conf)
pass .1.3.6.1.4.1.4413.4.1 /usr/bin/ucd5820stat

<ps>請注意,mailscanner-mrtg使用v2c的界面取得數據,group   MyRWGroup v2c         local此行一定要有.

修改完請重新啟動,/etc/rc.d/init.d/snmpd restart
測試snmp,
]#snmpwalk localhost -c public -v 1
 
測試mailscanner-mrtg使用的v2c uptime
]#snmpwalk -v 2c -c public localhost uptime
 
---------------------------------------------------------------------------------------------------------------------------------------
16.Mailscanner-MRTG

rpm -ivh mailscanner-mrtg-0.09.03-1.noarch
可能會稍微久一點.

修改設定檔
vi /etc/MailScanner/mailscanner-mrtg.conf

修改下列參數:
MTA = postfix
Incoming Queue Dir = /var/spool/postfix.in/deferred或/var/spool/postfix/hold
Outgoing Queue Dir = /var/spool/postfix/incoming
MailScanner Work Directory = /var/spool/MailScanner/incoming-->/var/
Spool Directory = /var/spool/mailscanner-mrtg-->/var/
------------------------------------
<ps>此兩項是用df指令來穫得磁碟空間,所以要求實際mount point,可以看看原來MailScanner Work Directory和Spool Directory
是在那個磁區底下,直接設定即可,因為其重點在於監控這兩個目錄所在空間是否不足,官方網站提出使用tmpfs另外分出兩個掛載點,
個人覺得並不是非常好的解法,因為無法提供正確空間的使用數據,僅能夠消除錯誤的log而已,請參考.
以我的例子,此兩個目錄都在/var的mount point上,所以都設成/var.
------------------------------------
Use SNMP = yes
SNMP Community = public
------------------------------------
若SNMP未啟動,會有cpu ,memory,iptraffic 三項圖形無法穫得數據.

<ps>mailscanner-mrtg所提供的數據由/usr/sbin/mailscanner-mrtg而來,共有下列幾項:
loadavg     : 主機平均負載
cpu         : CPU 使用率
memory      : 記憶體用量
iptraffic   : 伺服器網路流量
inqueue     : 等待傳送出去的檔案數量
outqueue    : 等待傳出的檔案數量
quarantine  : 隔離區的檔案/信件數量
rootusage   : 在根目錄(/)上的磁碟用量
spoolusage  : 在Spool Filesystem上的磁碟用量
tmpfsusage  : 在Work Filesystem上的磁碟用量
mailscanner : MailScanner 子程序數量
mta         : MTA 遞送程序
mail        :信件遞送
mailbytes   : 郵件傳輸量
virus       : 未通過病毒或內容檢測的信件
spam        : 垃圾郵件數量
virusratio  : 病毒或內容禁止信件佔所有郵件的比率
spamratio   : 垃圾信件佔所有郵件的比率
batchsize   : 每一批次平均處理的信件數量
speed       : 處理速度

再來修改/etc/mrtg/mailscanner-mrtg.cfg
Workdir: /var/www/html/mailscanner-mrtg      <--流量網頁產生目錄
IconDir: /mrtg/
WriteExpires: Yes
Interval: 5
Refresh: 300
Language: big5   <--設定為中文

產生index.html網頁
]# indexmaker --output=/var/www/html/mailscanner-mrtg/index.html  /etc/mrtg/mailscanner-mrtg.cfg

<ps>在RH9.0有個indexmaker的bug,原文如下:
This is caused by an incompatibility between MRTG and PERL 5.8 which MRTG uses to generate files.
The MRTG site claims this was fixed in version 2.9.22, but this version of MRTG seems to fail under RedHat.
Indexmaker MRTG_LIB Errors With RedHat 9 and 8.0
RedHat versions 8 and 9 give an error like this when running indexmaker.
簡單來說就是perl5.8和mrtg-2.9.17-13的相容性問題,不過還是可以用,如過覺得礙眼,請修改這個檔案:
]#vi /usr/lib/mrtg2/MRTG_lib.pm
將@ISA = qw(Exporter $VERSION);
改為
@ISA = qw(Exporter);
若另有Malformed UTF-8 character (unexpected end of string) at /usr/bin/../lib/mrtg2/locales_mrtg.pm line 614的錯誤,是另外一個locale的bug,
請先執行 export LANG=C 再重跑 mrtg 命令。

再來測試參數檔,需連續run三次才不會有錯誤產生.
mrtg /etc/mrtg/mailscanner-mrtg.cfg

不過若有錯誤產生,主要是SNMP跟tmpfs的參數未設好,請再仔細檢查.

完成後可以在以下看到流量:
http://your.mail.com/mailscanner-mrtg

<ps>在RHEL3.0由於將MRTG有獨立設定存取模組,所以請修改以下檔案,可以解決mrtg icon無法出來的問題:
]#vi /etc/httpd/conf.d/mrtg.conf
Allow from localhost      -->Allow from all

從localhost改為全部可以瀏覽

---------------------------------------------------------------------------------------------------------------------------------------
17.Openwebmail安裝
openwebmail需要先安裝下列4個套件:
 perl-CGI
 perl-Compress-Zlib
 perl-Text-Iconv
 perl-suidperl
 其中 perl-CGI和perl-suidperl-5.8.0應該已經存在,所以再新增其他兩個:
]#rpm -Uvh perl-Text-Iconv-1.2-RH80.i386.rpm
]#rpm -Uvh perl-Compress-Zlib-1.21-RH9.i386.rpm
然後開始裝openwebmail
]#rpm -ivh openwebmail-2.41-1.i386.rpm

裝完後請修改/var/www/cgi-bin/openwebmail/etc/defaults/dbm.conf,修改下列三項:
dbm_ext                 .db
dbmopen_ext          .db
dbmopen_haslock    yes

然後執行起始設定:
]#/var/www/cgi-bin/openwebmail/openwebmail-tool.pl --init

若要設定中文界面為預設界面,請修改下列檔案:
]#vi /var/www/cgi-bin/openwebmail/etc/openwebmail.conf
-->default_language                zh_TW.Big5

---------------------------------------------------------------------------------------------------------------------------------------
18.其他小細節

MailScanner有三個定時啟動的成序,可依環境自行搬到該執行的週期:
清除隔離檔案--預設每天一次
/etc/cron.daily/clean.quarantine

檢查MailScanner--預設每小時一次
/etc/cron.hourly/check_MailScanner

更新病毒碼--預設每小時一次
/etc/cron.hourly/update_virus_scanners

若Apache的MRTG出來的網頁以UTF為主,切換麻煩的話, 請修改/etc/httpd/conf/httpd.conf
將AddDefaultCharset ISO-8859-1修改如下
AddDefaultCharst Big5
語言順序
LanguagePriority en da nl et fr de el it ja kr no pl pt pt-br ltz ca es sv tw
改成
LanguagePriority tw en da nl et fr de el it ja kr no pl pt pt-br ltz ca es sv
---------------------------------------------------------------------------------------------------------------------------------------

頁: [1]