歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> Linux基礎知識

基礎知識 - Linux簡明系統維護手冊

Linux簡明系統維護手冊
2004-04-23 15:18 pm
來自:Linux文檔
現載:Www.8s8s.coM
地址:無名

摘要
  本文是長期工作經驗的總結,說明了Linux下各種主要網絡應用的配置實例,
對接觸Linux時間不長的同學們很有參考價值。注意:其中有些應用還是很復雜的
呀。文中VPN技術部分要感謝老井無私的提供支持,這是我們共同的完成的。
(2002-11-01 16:50:49)

前言

  有同事已經通過艱苦的工作完成了長達好幾百頁的關於Linux的文檔。事實上
,在網上還有超過好幾萬頁的各種關於Linux的技術精華,還不包括英文的。有數
萬程序員和網絡專家在為這個軟件努力工作。這就是自由的魅力。

  我使用Linux有不少時間了,期間也經歷過無數的挫折,同時也得到過很多高
手的幫助。我一向喜歡言簡意赅的文字。通過下面的簡單句子和代碼,我希望能夠
表達出我使用Linux的體會。也許本文的結構比較凌亂,但我希望它的每一句話都
是對你有用的。當然,你要知道一些更詳細的東西,請參閱我同事寫的文檔。

  當然,能夠通過查閱這個文檔,使你的工作順利是我最大的心願。

一、關於Linux的誤區

  1、Linux干什麼用?

  首先,很少有人用Linux做桌面系統,因為Windows桌面系統已經足夠好了。我
們主要把Linux用作網絡服務器的操作系統。如果你和你的應用符合下面的幾條,
那麼你合適使用Linux:

  *不願意花錢在操作系統和網絡應用上。

  *用D版系統受良心譴責或害怕承擔責任。

  *想得到和花錢的系統差不多的性能。

  *在用戶面前顯得水平較高。

  *認識幾個弄Linux的高手,或者知道在哪裡能夠找到問題答案。


  2、每種Linux發行包差別很多嗎?

  如果你在上世紀80年代末到95年之前這段時間大量使用PC機的話,那對於
Linux你應該很好理解:它就象一個有著32位搶先多任務核心的DOS,其區別在於外
表看起來像是一種UNIX。Linux是好多人用智慧堆砌起來的,初學者經常問:“
RedHat好還是Slackware好?”。這個人同時還面臨上百種選擇,這的確讓人頭痛
。大部分Linux發行包實際上很簡單,幾乎所有的發行包都有相同的內核(也許是
不同版本),外部命令和數據文件的差別也僅僅局限於在文件系統中的存放位置不
同(這導致了某些兼容性問題,因為在某些地方找不到特定的文件嘛)。另外就是
有些發行包為了顯示自己的卓而不群,在發行包中增加了一些自己的實用程序。實
際上動手修改內核的廠商不算太多,因為這樣會內核官方版本的不斷更新而手忙腳
亂。當然有一些嵌入式系統開發商在Linux基礎上做了自己的系統另說。

  擁有眾多的發行包是Linux的一個很討厭的問題,在這一點上,我更喜歡
FreeBSD,因為它只有一個官方發行版本,也運行得比較穩定。可給Linux做軟件的
程序員太多了,Linux上面的資料也更多。記住:當一個家伙跟你說用哪個發行版
本無所謂的時候,那他就是專家。

  3、Linux業余愛好者的東西嗎?

  這樣的宣傳給了很多人這樣的印象。其實,Linux是一個嚴肅的操作系統,擁
有一切操作系統共有的特性。它可以用在很多嚴肅的場合。

  4、Linux性能比Windows更好嗎?

  這裡的答案會讓你失望,據我以往的實際測試,2.2版本的Linux核心的性能比
windows2000要低。值得欣慰的是2.4版本的核心性能有大幅度提高基本上接近了
Windows2000。但Windows2000復雜的圖形界面占用了相當的系統資源。

  5、Linux比Windows更復雜更專業嗎?

  從復雜度上說,Windows2000要比Linux復雜很多。在核心技術上,Windows也
更先進。


  6、Linux更可靠嗎?

  應該從兩個角度評價系統的可靠性。(1)系統自身的可靠性,兩者象差不多
。人們普遍認為的Windwos不如Linux可靠的印象來源於Windows眾多的良莠不齊的
軟件。當然,Linux比Windows結構簡單,在一定程度上也可以提高可靠性。(2)
從安全性角度來說,Linux遠遠高於Windows系統,道理很簡單:樹大招風嘛。另外
,Linux的源代碼開放機制使得漏洞發現和消滅得很快。而Windows相對就顯得比較
官僚了。這裡補充一點,我用過的最可靠的系統是BSD類的OS,可靠性和安全性都
可圈可點。

  7、Linux真的不用花一分錢嗎?


  大部分的發行包需要花少量的錢購買。當然你也可以從網絡上DOWN。其實這些
發行包未必符合你的應用,一般都需要經過一些改動和定制才能運行好。當然,花
的錢跟Windows沒法比。

二、Linux安裝注意事項

  現在的大部分發行包都很容易安裝,基本上都是圖形向導式的,每個發行包都
不太相同,也無法一一描述,如果你連安裝都不明白,那就別用Linux了。這裡僅
僅說明幾個注意的問題。

  1、如果要和Windows混裝,一定要先裝Windows,後裝Linux。

  2、分區的時候,根據計劃安裝的軟件靈活決定分區。一般分區有:/,/root
,/usr,/var和swap分區,其中swap分區類型和其他不同需要專門選擇一下,它的
空間一般是物理內存的兩倍即可。/root分區是緊急情況root用的,有64兆就行了


  3、當然,為了方便,你可以安裝發行包給你做好的軟件。但我安裝Linux的習
慣做法是開始就安裝一個最小系統,然後安裝所有的編譯工具。安裝編譯工具的方
法一般都通過你用的發行包的包管理工具實現,這樣最方便。比如在TurboLinux中
,運行/usr/sbin/Turbopkg就可以了。在管理工具中選擇所有關於Developoment相
關的選項或gcc相關選項,一般就可以了。

  4、lilo一定要裝。否則一旦出現分區問題都不好辦。

  5、如果和Windows混裝的時候,裝完了系統起不來了。可以用98啟動盤啟動,
然後用FDISK /MBR回復主引導分區來保住Windows分區。

  在安裝了最小系統和全套的編譯器後,我們應該得到一個比較干淨的系統。在
這個系統上,可以下載和安裝各種應用軟件了。

三、基本使用

  1、文件系統

  無論有多少個分區,整個文件系統都是一棵完整的樹結構。經常用到的目錄有


  (1)/usr:存放各種應用程序文件用。其中的/usr/local用來存放後安裝的軟


  (2)/var:用來存放所有的數據文件

  (3)/proc:裡面的文件用來表示系統內核的各種配置和狀態。這一塊不是真正
的文件系統,而是內存裡面的各種數據。可以從這裡得到一些常用的系統信息。比
如CPU內存什麼的。

  (4)/etc:這裡是放置所有的系統配置文件。一般情況下,後安裝的軟件的配
置文件不會放到這裡。除非你是用RPM安裝的隨發行包配的軟件或者故意這樣做。
我不喜歡把不同軟件的文件混在一起,因此通常讓不同的軟件的配置文件放在各自
的目錄中。

  2、常用的命令

  這裡我列出一些經常用的命令,具體的用法可以參見相關手冊頁(希望你的英
文不象我這麼差)。

  vi(一定要會用這個你非常討厭的東西,如果你屈服了,可以選擇另一個叫做
pico的編輯器,它有點象DOS的edit)

  head(用來看很長的文件用)

  tail(同上)

  netstat(看網絡狀態)

  tar(解開.tar.gz的壓縮包)

  ps(察看進程)

  kill(干掉進程)

  top(看系統狀況)

  shutdown(關閉系統)

  cat(看文件內容)

  ping (看網絡連通狀況)

  ftp(傳輸文件)

  man(手冊)

  上面這些命令都是最最常用的,一定要把基本用法記牢。事實上,每人能記住
全部命令或一個命令的全部參數,記住幾個常用的就行了。其他的查書。

  3、內核升級

  如果你不願意冒險,可以跳過這個部分。不過根據我實際使用的經驗,2.4.x
版本的內核性能比2.2.x的性能至少提高40%,還是很值得一試的。現在最新的發行
包幾乎都帶有新的2.4內核,但是版本號想對保守。這裡,我的建議是在決定升級
任何部分的時候,一定要首先看一下所謂的“currect version release note”信
息,裡面告訴你本次版本升級都有些什麼改動。如果改動的內容不涉及你當前的環
境或需求,只是增加了一些邪門設備的驅動,你大可不必急著升級。補充一句話:
Linux的內核版本號的中間一位是奇數的是非穩定版本,比如2.3,是偶數的才是穩
定版本。

  升級內核的步驟如下:

  (1)首先在網上找到你打算升級的內核文件,一般名字是:linux-2.x.xx.
tar.gz,把這個文件復制到/usr/src。(不知道在哪裡找?看看:http://www.
kernel.org ,最好找到.tar.gz格式的,比如這裡:http://www.kernel.
org/pub/linux/kernel/v2.x/)。下面的升級舉例是從2.2.18升級到2.5.7(這是
最新的內核了,你使用其它的版本別忘了改變版本號)

  (2)解壓縮:tar zxvf linux-2.5.7.tar.gz後生成一個目錄:linux-2.5.7。


  (3)進入/usr/src,用ls –l 命令可以看到src裡面有一個連接,類似於:
linux -> linux-2.2.18/ (連接指向你當前用的內核版本)。首先刪除這個連接
(rm linux),用ln -s linux-2.5.7 linux 命令重建連接。我想你一定不會連這
裡的版本號都照抄吧?

  (4)進入linux-2.5.7 目錄,如果不是第一次編譯這個內核,最好用命令:
make mrproper 刪掉上次編譯產生的.o文件等,當然以前保存的配置也丟了。

  (5)用命令:make menuconfig命令調整內核配置以適應你目前的環境,記住,
不懂的配置不要亂動。首要任務是調整各種硬件的環境,比如SCSI卡:SCSI
support/SCSI low-level drivers,不知道現在的SCSI卡型號?在/proc/scsi中可
以找到。還有網卡,在Network Device Support 裡面。不知道現在的網卡型號?
在這個文件裡面寫著呢:/proc/net/PRO_LAN_Adapters/eth0.info或/proc/pci文
件中也可以找到 。在menuconfig中用空格鍵改變選項狀態,前面的<*>表示該功能
編譯在內核中,主要是運行速度快。< >表示不需要該功能。表示把該功能編譯成
模塊,通常為了減小尺寸,和更換方便而把某些驅動編譯成模塊。

  (6)下面的事情比較程序化,照著做:make dep (檢查文件的完整性,過程很
復雜)

  (7)make bzImage 注意大小寫(真正開始編譯了耶!我覺著這個最過瘾了,屏
幕“嘩啦嘩啦”的,這時候你會感覺到,多少不知名的程序員在這個復雜的系統中
貢獻了自己的一份力量)

  (8)make modules (編譯那些被標記為的功能模塊或驅動程序)

  (9)make modules_install(把編譯好的模塊復制到指定地點,一般是:
/lib/modules/ 。注意:不同版本號的模塊是完全分開在不同目錄中的,因為
modules跟內核是緊密相關的,混用容易導致系統崩潰)


  (10)cd /usr/src/linux-2.5.7/arch/i386/boot ,用命令:cp
/usr/src/linux2.5.7/arch/i386/boot/bzImage /boot/vmlinuz-2.5.7 把文件
bzImage文件改名成vmlinuz-2.5.7復制到/boot/

  (11)cp /usr/src/linux-2.5.7/System.map /boot/System.map-2.5.7

  (12)進入/boot目錄,rm System.map

  (13)在/boot目錄中運行ln System.map-2.5.7 System.map 10-13兩個步驟每
次重新編譯都要做。

  (14)我開始提醒過的,但願你安裝了lilo (否則你就高唱:“神啊,救救我
吧!”),編輯文件:/etc/lilo.conf ,做下面的編輯:

  boot=/dev/sda
  map=/boot/map
  install=/boot/boot.b
  prompt
  timeout=50
  lba32
  default=linux-2.5.7


  image=/boot/vmlinuz
label=linux
initrd=/boot/initrd
read-only
root=/dev/sda5
  image=/boot/vmlinuz-2.5.7
label=linux-2.5.7
initrd=/boot/initrd
read-only
root=/dev/sda5

  黑體字部分是後加的和修改的。萬一你沒有安裝lilo,你只能修改/boot下面
的連接指向你新的System.map和vmlinuz , 而不用修改lilo了。這樣也能啟動,
但是一旦出現問題,你的機器就啟動不了了。

  (15)執行命令:lilo (用來更新lilo數據),注意輸出的結果:帶星號的是缺
省的。

  (16)祈禱,然後reboot 系統重新啟動後,用uname –a 可看到新的內核起作
用了。如果出現任何問題不能引導了,你需要在lilo的引導界面選擇原來的內核啟
動,進入系統後重新改變內核參數,調整硬件或其他配置。然後重復前面所有過程

四、主要的軟件安裝

  前面說過,我的習慣是,裝系統的時候就安裝一個內核和編譯系統,得到了一
個干淨的系統後,再安裝其他的軟件就比較清晰。另一點,除非搞不到源代碼版本
,一般情況下我都會下載官方版本的源代碼文件,來重新編譯之。同樣的,選擇軟
件版本要根據該軟件的Release Note來決定,並非越新越好。這就是為什麼很多軟
件都是幾個版本齊頭並進的發展之原因。這些軟件不同版本之間的安裝方法會有少
許不同,安裝前一定要仔細閱讀目錄中的README文件和INSTALL文件,否則這些少
許不同會造成不少得麻煩。下面描述的安裝過程都核版本號緊密相關。另外,所有
的軟件都把程序文件的包拷貝到/usr/local/src目錄中再解壓縮,這是習慣。因為
在Linux中習慣於把後來的軟件裝在/usr/local中。

  (1)安裝DNS服務器

  1、從www.isc.org下載bind 域名服務器軟件。我們這裡用的是bind8.3.0,
bind8分支和bind9分支是並行發展的。根據自己的實際情況選擇合適的bind版本。


  2、mkdir /usr/src/bind83

  3、下載的文件叫bind-src.tar.gz,復制到/usr/local/src/bind83目錄下。


  4、cd /usr/local/src/bind83

  5、tar zxvf bind-src.tar.gz

  6、cd src

  7、make stdlinks

  8、make clean

  9、make depend

  10、make all

  11、make install

  12、編輯配置文件:/etc/named.conf內容如下,需要更改的部分用黑體標出



  /*
   * This is a worthless, nonrunnable example of a named.conf file
that has
   * every conceivable syntax element in use. We use it to test the
parser.
   * It could also be used as a conceptual template for users of new
features.
   */

  /*
   * C-style comments are OK
   */

  // So are C++-style comments

  # So are shell-style comments

  // watch out for ";" -- it's important!

  options {
directory "/var/named";
      // use current directory
named-xfer "/usr/libexec/named-xfer";
      // _PATH_XFER
dump-file "named_dump.db";
      // _PATH_DUMPFILE
pid-file "/var/run/named.pid";
      // _PATH_PIDFILE
statistics-file "named.stats";
      // _PATH_STATS
memstatistics-file "named.memstats";
      // _PATH_MEMSTATS
check-names master fail;
check-names slave warn;
check-names response ignore;
host-statistics no;
deallocate-on-exit no;
      // Painstakingly deallocate all
      // objects when exiting instead of
      // letting the OS clean up for us.
      // Useful a memory leak is suspected.
// Final statistics are written to the
// memstatistics-file.
datasize default;
stacksize default;
coresize default;
files unlimited;

recursion yes;
fetch-glue yes;
fake-iquery no;
notify yes;
     // send NOTIFY messages. You can set
// notify on a zone-by-zone
// basis in the "zone" statement
// see (below)
serial-queries 4;
     // number of parallel SOA queries
// we can have outstanding for master
// zone change testing purposes
auth-nxdomain yes;
// always set AA on NXDOMAIN.
// don't set this to 'no' unless
// you know what you're doing -- older
// servers won't like it.
multiple-cnames no;
   // if yes, then a name my have more
// than one CNAME RR. This use
// is non-standard and is not
// recommended, but it is available
// because previous releases supported
// it and it was used by large sites
// for load balancing.
allow-query { any; };
allow-transfer { any; };
transfers-in 10;
     // DEFAULT_XFERS_RUNNING, cannot be
   // set > than MAX_XFERS_RUNNING (20)
transfers-per-ns 2;
// DEFAULT_XFERS_PER_NS
transfers-out 0;
// not implemented
max-transfer-time-in 120;
// MAX_XFER_TIME; the default number
// of minutes an inbound zone transfer
// may run. May be set on a per-zone
// basis.
transfer-format one-answer;
query-source address * port *;
  /*
* The "forward" option is only meaningful if you've defined
* forwarders. "first" gives the normal BIND
* forwarding behavior, i.e. ask the forwarders first, and if that
* doesn't work then do the full lookup. You can also say
* "forward only;" which is what used to be specified with
* "slave" or "options forward-only". "only" will never attempt
   * a full lookup; only the forwarders will be used.
   */
forward first;
forwarders { };
    // default is no forwarders
topology { localhost; localnets; };
    // prefer local nameservers
listen-on port 53 { any; };
    // listen for queries on port 53 on
   // any interface on the system
   // (i.e. all interfaces). The
   // "port 53" is optional; if you
   // don't specify a port, port 53
   // is assumed.
/*
* Interval Timers
*/
cleaning-interval 60;
    // clean the cache of expired RRs
   // every 'cleaning-interval' minutes
interface-interval 60;
    // scan for new or deleted interfaces
   // every 'interface-interval' minutes
statistics-interval 60;
    // log statistics every
   // 'statistics-interval' minutes
maintain-ixfr-base no;
    // If yes, keep transaction log file for IXFR
max-ixfr-log-size 20;
    // Not implemented, maximum size the
   // IXFR transaction log file to grow
  };

  /*
   * Control listeners, for "ndc". Every nameserver needs at least
one.

   */
  controls {
inet * port 52 allow { any; };
// a bad idea
unix "/var/run/ndc" perm 0600 owner 0 group 0;
       // the default
  };

  zone "rd.xxx.com" in {
type master;
      // what used to be called "primary"
file "rd.xxx.com.db";
check-names fail;
allow-update { none; };
allow-transfer { any; };
allow-query { any; };
// notify yes;
      // send NOTIFY messages for this
// zone? The global option is used
// if "notify" is not specified
// here.
also-notify { };
      // don't notify any nameservers other
// than those on the NS list for this
// zone
  };

  zone "223.99.211.in-addr.arpa" in {
type master;
// what used to be called "secondary"
file "21.9.22.db";
};

  zone "0.0.127.in-addr.arpa" in {
type master;
file "127.0.0.db";
  };

  zone "." in {
type hint;
       // used to be specified w/ "cache"
file "named.root";
  };

  logging {
/*
* All log output goes to one or more "channels"; you can make
as
* many of them as you want.
*/


channel syslog_errors {
      // this channel will send errors or
syslog user;
      // or worse to syslog (user facility)
severity error;
};

category parser {
syslog_errors;
// you can log to as many channels
default_syslog;
     // as you want
};

category lame-servers { null; };
     // don't log these at all

channel moderate_debug {
severity debug 3;
     // level 3 debugging to file
file "foo";
     // foo
print-time yes;
    // timestamp log entries
print-category yes;
     // print category name
print-severity yes;
     // print severity level
/*
* Note that debugging must have been turned on either
* on the command line or with a signal to get debugging
* output (non-debugging output will still be written to
* this channel).
*/
};

/*
* If you don't want to see "zone XXXX loaded" messages but do
* want to see any problems, you could do the following.
*/

channel no_info_messages {
syslog;
severity notice;
};

category load { no_info_messages; };

/*
* You can also define category "default"; it gets used when no
* "category" statement has been given for a category.
*/

category default {
default_syslog;
moderate_debug;
};

};

  13、在/var/named/中生成/etc/named.conf中標記的文件:rd.xxx.com.db,
內容如下,需要修改和調整相應部分:
  ;Authoriative data for rd.xxx.com
  ;
  $TTL 3600
  @ IN SOA compaq.rd.xxx.com. tandongyu.rd.xxx.com. (
    20020101 ;Serial
    3600 ;Refresh 1 hour
    900 ;Retry 15 mins
    604800 ;Expire 7 days
    86400) ;Mini 24 hours
  ;Name server NS records
  @ IN NS compaq.rd.xxx.com.
  ;Mail Exchange (MX) records
  rd.xxx.com. IN MX 0 compaq
  ;Address (A) records.
  localhost IN A 127.0.0.1
  compaq IN A 21.9.22.9
  tls65 IN A 21.9.22.8
  fbsd IN A 21.9.22.7


  14、在/var/named/中生成/etc/named.conf中標記的文件:21.9.22.db,內容
如下,你需要修改相應部分:


  ;
  ;
  $TTL 3600
  @ IN SOA compaq.rd.xxx.com. tandongyu.rd.xxx.com. (
    20020101 ;Serial
    3600 ;Refresh
    900 ;Retry 15 mins
    604800 ;Expire 7 days
    86400) ;Mini 24 hours
  ;NameServer (NS) records
  @ IN NS compaq.rd.xxx.com.
  ;Address Point to Name (PTR) records
  9 IN PTR compaq.rd.xxx.com.
  8 IN PTR tls65.rd.xxx.com.
  7 IN PTR fbsd.rd.xxx.com.

  15、在/var/named/中生成/etc/named.conf中標記的文件:127.0.0.db,內容
如下,你需要修改相應部分:


  ; 0.0.127.in-addr.arpa
  $TTL 3600
  @ IN SOA compaq.rd.xxx.com. tandongyu.rd.xxx.com. (
     20020101;serial
3600 ;refresh
1800 ;retry
604800 ;expiration
3600 ) ;minimum
IN NS compaq.rd.xxx.com.
  1 IN PTR localhost.

  16、在/var/named/中生成/etc/named.conf中標記的文件:named.root,內容
大致如下。該文件標記了14個域名服務器。可以從ftp.rs.internic.net獲得該文
件的最新樣本:named.hosts,然後改名成你需要的名字,比如:named.root


  ; This file holds the information on root name servers
needed to
  ; initialize cache of Internet domain name servers
  ; (e.g. reference this file in the "cache . "
  ; configuration file of BIND domain name servers).
  ;
  ; This file is made available by InterNIC registration services
  ; under anonymous FTP as
  ; file /domain/named.root
  ; on server FTP.RS.INTERNIC.NET
  ; -OR- under Gopher at RS.INTERNIC.NET
  ; under menu InterNIC Registration Services
(NSI)
  ; submenu InterNIC Registration Archives
  ; file named.root
  ;
  ; last update: Aug 22, 1997
  ; related version of root zone: 1997082200
  ;
  ;
  ; formerly NS.INTERNIC.NET
  ;
    . 3600000 IN NS A.ROOT-SERVERS.NET.

    A.ROOT-SERVERS.NET. 3600000 A 198.41.0.4
  ;
  ; formerly NS1.ISI.EDU
  ;
    . 3600000 NS B.ROOT-SERVERS.NET.

    B.ROOT-SERVERS.NET. 3600000 A 128.9.0.107
  ;
  ; formerly C.PSI.NET
  ;
    . 3600000 NS C.ROOT-SERVERS.NET.

    C.ROOT-SERVERS.NET. 3600000 A 192.33.4.12

  ;
  ; formerly TERP.UMD.EDU
  ;
    . 3600000 NS D.ROOT-SERVERS.NET.

    D.ROOT-SERVERS.NET. 3600000 A 128.8.10.90
  ;
  ; formerly NS.NASA.GOV
  ;
    . 3600000 NS E.ROOT-SERVERS.NET.

    E.ROOT-SERVERS.NET. 3600000 A 192.203.230.10
  ;
  ; formerly NS.ISC.ORG
  ;
    . 3600000 NS F.ROOT-SERVERS.NET.

    F.ROOT-SERVERS.NET. 3600000 A 192.5.5.241
  ;
  ; formerly NS.NIC.DDN.MIL
  ;
    . 3600000 NS G.ROOT-SERVERS.NET.

    G.ROOT-SERVERS.NET. 3600000 A 192.112.36.4
  ;
  ; formerly AOS.ARL.ARMY.MIL
  ;
    . 3600000 NS H.ROOT-SERVERS.NET.

    H.ROOT-SERVERS.NET. 3600000 A 128.63.2.53
  ;
  ; formerly NIC.NORDU.NET
  ;
    . 3600000 NS I.ROOT-SERVERS.NET.

    I.ROOT-SERVERS.NET. 3600000 A 192.36.148.17
  ;
  ; temporarily housed at NSI (InterNIC)
  ;
    . 3600000 NS J.ROOT-SERVERS.NET.

    J.ROOT-SERVERS.NET. 3600000 A 198.41.0.10
  ;
  ; housed in LINX, operated by RIPE NCC
  ;
    . 3600000 NS K.ROOT-SERVERS.NET.

    K.ROOT-SERVERS.NET. 3600000 A 193.0.14.129
  ;
  ; temporarily housed at ISI (IANA)
  ;
    . 3600000 NS L.ROOT-SERVERS.NET.

    L.ROOT-SERVERS.NET. 3600000 A 198.32.64.12
  ;
  ; housed in Japan, operated by WIDE
  ;
    . 3600000 NS M.ROOT-SERVERS.NET.

    M.ROOT-SERVERS.NET. 3600000 A 202.12.27.33
  ; End of File

  17、我們還需要配置/etc/resolv.conf、/etc/hosts、/etc/hosts.conf文件
以適應新的狀況。

  18、一切都結束後,用/usr/sbin/ndc start命令啟動bind,同樣的可用stop、
restart、reload等命令參數操作。

  19、啟動後用nslookup命令(有的系統推薦使用dig命令)檢驗是否正確。如果
出現錯誤,該命令將不能啟動。一般的錯誤都是數據庫文件或配置文件筆誤所至。
比如少個“.”或者文件明不正確等等。

  (2) 安裝sendmail服務器

  1、從www.sendmail.org下載最新的版本(這個snedmail倒是有必要升級為最新
的版本,因為它的升級主要是安全漏洞問題)。這裡說明的是用的sendmail-8.12.
2.tar.gz

  2、cd /usr/local/src/

  3、把文件下載到:/usr/local/src中

  4、tar zxvf sendmail-8.12.2.tar.gz

  5、cd /usr/local/src/sendmail-8.12.2

  6、chmod go-w / /etc /etc/mail /usr /var /var/spool
/var/spool/mqueue

  7、chown root / /etc /etc/mail /usr /var /var/spool
/var/spool/mqueue

  8、cd /usr/local/src/sendmail-8.12.2/sendmail

  9、sh Build

  10、cd /usr/local/src/sendmail-8.12.2/cf/cf

  11、建立文件sendmail.mc內容如下,你可根據需要修改相應部分。


  divert(-1)
  dnl This is the macro config file used to generate the
/etc/sendmail.cf
  dnl file. If you modify thei file you will have to regenerate the
  dnl /etc/sendmail.cf by running this macro config through the m4
  dnl preprocessor:
  dnl m4 /etc/sendmail.mc > /etc/sendmail.cf
  dnl You will need to have the Sendmail-cf pacage installed for
this to work.
  include(`/usr/local/src/sendmail-8.12.2/cf')
define(`confDEF_USER_ID',`8:12')
OSTYPE(`linux')
undefine(`UUCP_RELAY')
undefine(`BITNET_RELAY')
define(`confTO_CONNECT', `1m')
define(`confTRY_NULL_MX_LIST',true)
define(`confDONT_PROBE_INTERFACES',true)
define(`PROCMAIL_MAILER_PATH',`/usr/bin/procmail')
define(`SMART_HOST',compaq.rd.xxx.com)
    <---這條用於(非HUB)缺省使用HUB發送郵件
MASQUERADE_AS(`rd.xxx.com')
<-------------------------
FEATURE(`masquerade_entire_domain')
     <---這三條用於郵件地址偽裝
FEATURE(`masquerade_envelope')
      <-------------------------
FEATURE(`smrsh',`/usr/sbin/smrsh')
FEATURE(`mailertable',`hash -o /etc/mail/mailertable')
FEATURE(`virtusertable',`hash -o /etc/mail/virtusertable')
FEATURE(redirect)
FEATURE(always_add_domain)
FEATURE(use_cw_file)
FEATURE(local_procmail)
FEATURE(`access_db')
FEATURE(`blacklist_recipients')
FEATURE(`accept_unresolvable_domains')
MAILER(smtp)
MAILER(procmail)
dnl We strongly recommend to comment this one out if you want to
protect
dnl yourself from spam. However, the laptop and users on computers
that do
dnl not hav 24x7 DNS do need this.
dnl FEATURE(`relay_based_on_MX')

  12、sh Build install-cf

  13、groupadd smmsp

  14、useradd smmsp

  15、cd cd /usr/local/src/sendmail-8.12.2/sendmail

  16、sh Build install

  17、cd /usr/local/src/sendmail-8.12.2/makemap

  18、sh Build clean

  19、sh Build all

  20、sh Build install

  21、cd /usr/local/src/sendmail-8.12.2/

  22、在本域DNS主數據庫文件中增加MX紀錄:


  rd.xxx.com. IN MX 0 compaq

  注意修改相應部分。那個0是有幾個郵件集中器的時候用於標記先後順序的。
當有好幾個MX的時候,建議順序寫為10、20、30…

  23、在/etc/mail目錄下創建access文件,內容類似如下:


127.0.0.1 RELAY
21.9.22 RELAY
211.99.221.238 RELAY

  然後:makemap hash access.db < access

  24、創建文件/etc/mail/local-host-names,其內容為本機的擁有的域名信息



  rd.xxx.com
  compaq.rd.xxx.com

  25、創建文件/etc/mail/aliases,內容類似:


  MAILER-DAEMON: postmaster
postmaster: root
bin: root
daemon: root
nobody: root

  運行newaliases創建數據庫。

  創建別名文件的意義之一在於當郵件發往域中其他郵件服務器的用戶而不是
mail HUB用戶的時候用。

  比如增加一條:


  atan: atan@fbsd

  則導致郵件發往mail HUB的時候自動轉發到[email protected]

  26、啟動sendmail: /usr/sbin/sendmail -bd -q30m

  排錯:如果有問題導致啟動不了,大部分問題和DNS配置有關,可以使用
nslookup檢查DNS是否正常。挨個檢查/etc/mail中的文件內容也是排錯的好辦法。
另外,修改配置,不建議直接編輯sendmail.cf文件,建議使用m4宏編譯工具,因
為有些帶有安全漏洞或過時的宏在編譯的時候會有提示,這樣以免造成相關安全問
題。
(3)安裝DHCP服務器

  1、源程序下載地址是:ftp://ftp.isc.org/isc/dhcp/dhcp-3.0.tar.gz ,我
們的版本是:dhcpd-3.0

  2、復制到:/usr/local/scr後解壓:tar zxvf dhcp-3.0.tar.gz

  3、cd /usr/local/src/dhcp-3.0.tar.gz

  4、./configure

  5、make(如果不是第一次編譯,先make clean)

  6、make install

  7、cp ./server/dhcpd.conf /etc

  8、編輯這個文件,看起來類似下面這樣:(要更改的地方用粗體標出)


  # dhcpd.conf
  #
  # Sample configuration file for ISC dhcpd
  #

  # option definitions common to all supported networks...
  option domain-name "rd.xxx.com";
  option domain-name-servers compaq.rd.xxx.com;

  default-lease-time 86400;
  max-lease-time 172800;

  ddns-update-style ad-hoc;

  # If this DHCP server is the official DHCP server for the local
  # network, the authoritative directive should be uncommented.
  #authoritative;

  # Use this to send dhcp log messages to a different log file (you
also
  # have to hack syslog.conf to complete the redirection).
  log-facility local7;

  # No service will be given on this subnet, but declaring it helps
the
  # DHCP server to understand the network topology.

  # This is a very basic subnet declaration.

  subnet 21.9.22.0 netmask 255.255.255.224 {
    range 21.9.22.2 21.9.22.6;
    option routers 21.9.22.1;
  }

  # This declaration allows BOOTP clients to get dynamic addresses,
  # which we don't really recommend.

  #subnet 10.254.239.32 netmask 255.255.255.224   {
    # range dynamic-bootp 10.254.239.40 10.254.239.60;
    # option broadcast-address 10.254.239.31;
    # option routers rtr-239-32-1.example.org;
  #}

  # A slightly different configuration for an internal subnet.
  #subnet 10.5.5.0 netmask 255.255.255.224 {
  # range 10.5.5.26 10.5.5.30;
  # option domain-name-servers ns1.internal.example.org;
  # option domain-name "internal.example.org";
  # option routers 10.5.5.1;
  # option broadcast-address 10.5.5.31;
  # default-lease-time 600;
  # max-lease-time 7200;
  #}

  # Hosts which require special configuration options can be listed
in
  # host statements. If no address is specified, the address will
be

  # allocated dynamically (if possible), but the host-specific
information
  # will still come from the host declaration.

  #host passacaglia {
  # hardware ethernet 0:0:c0:5d:bd:95;
  # filename "vmunix.passacaglia";
  # server-name "toccata.fugue.com";
  #}

  # Fixed IP addresses can also be specified for hosts. These
addresses
  # should not also be listed as being available for dynamic
assignment.
  # Hosts for which fixed IP addresses have been specified can boot
using
  # BOOTP or DHCP. Hosts for which no fixed address is specified can
only
  # be booted with DHCP, unless there is an address range on the
subnet
  # to which a BOOTP client is connected which has the dynamic-bootp
flag
  # set.

  #host fantasia {
  # hardware ethernet 08:00:07:26:c0:a5;
  # fixed-address fantasia.fugue.com;
  #}

  # You can declare a class of clients and then do address
allocation
  # based on that. The example below shows a case where all
clients
  # in a certain class get addresses on the 10.17.224/24 subnet, and
all
  # other clients get addresses on the 10.0.29/24 subnet.
  
  #class "foo" {
  # match if substring (option vendor-class-identifier, 0, 4) =
"SUNW";
  #}

  #shared-network 224-29 {
  # subnet 10.17.224.0 netmask 255.255.255.0 {
  # option routers rtr-224.example.org;
  # }
  # subnet 10.0.29.0 netmask 255.255.255.0 {
  # option routers rtr-29.example.org;
  # }
  # pool {
  # allow members of "foo";
  # range 10.17.224.10 10.17.224.250;
  # }
  # pool {
  # deny members of "foo";
  # range 10.0.29.10 10.0.29.230;
  # }

  上面這個文件中後面都是注釋,是原來系統給你的配置做的例子,可以不要。
當然除非你用到它們,並且清楚它們的含義。

  9、建立空文件:touch /var/state/dhcp/dhcpd.leases空文件

  10、檢查內核編譯選項:Networking options-----Packet socket:
mmapped IO和Socket Filtering選項是否被選中(不知道怎麼看?看看前面的文章
,用make menuconfig呀),如果沒有就需要重新編譯內核了。

  11、route add -host 255.255.255.255 dev eth0

  12、roote add -host localhost dev eth0

  13、在/etc/rc.d/rc.local最後增加一行route add -host 255.255.255.
255 dev eth0

  14、reboot系統

  15、用dhcpd命令啟動DHCP,用其他的機器試試看能不能自動配置網絡了。

(4) 安裝apache+mysql+php+gd+png+zlib+jpeg+freetype+sslmod

  這麼一大堆東西為什麼要一塊說呢?因為他們中間是有緊密聯系的,尤其是那
個PHP,用到其他所有的模塊。要想PHP功能全,只能一步步來了。

  1、首先安裝MYSQL:從http://www.mysql.com/downloads/index.html下載自
己覺得合適的版本。這裡用3.23.42版本。

  2、進入目錄/usr/local/src(這個以後就不用說了吧?)解壓縮:tar zxvf
mysql-3.23.42.tar.gz

  3、cd mysql-3.23.42/

  4、configure --prefix=/usr/local/mysql

  5、make

  6、make install

  7、useradd mysql ; groupadd mysql ; su mysql ;(建立命名為mysql的用戶
和組,並切換為mysql身份)

  8、scripts/mysql_install_db (建立數據庫結構)

  9、cd /usr/local/mysql/bin

  10、./safe_mysqld & (啟動了)

  11、./mysqladmin -u root password "new-password"(你的新密碼,記住
MYSQL的密碼核系統密碼是獨立的,缺省是沒有密碼)

  12、用mysql程序試試看。

  下面的步驟都很程式化,我盡量簡潔地寫出。

  13、下載相關的軟件包:地址表格如下


  軟件     版本     地址
jpegsrc.v6b.tar.gz  6b ftp://ftp.uu.net/graphics/jpeg
zlib.tar.gz 1.1.3 ftp://ftp.uu.net/graphics/png/src
freetype-2.0.8.tar.gz 2.0.8 http://www.freetype.org
libpng-1.0.10.tar.gz 1.0.10 ftp://ftp.uu.net/graphics/png/src
gd-1.8.4.tar.gz 1.8.4 http://www.boutell.com/gd
apache_1.3.23.tar.gz 1.3.23 http://www.apache.org
php-4.1.1.tar.gz 4.1.1 http://www.php.net
number4.tar.gz 4 http://www.php.net/extra
rsaref20.tar.Z 2.0 ftp://ftp.ai.mit.edu/pub/deberg
openssl-engine-0.9.6c.tar.gz 0.9.6c http://www.openssl.
org/source
mod_ssl-2.8.6-1.3.23.tar.gz 2.8.6 http://www.modssl.org

  下齊了就放在/usr/local/src目錄下,除了number4.tar.gz和rsaref20.tar.
Z以外,其他一律用tar zxvf XXXX.tar.gz解壓縮。(過瘾吧?)

  特殊的,rsaref20.tar.Z 需要先建立一個rsaref-2.0目錄,然後把
rsaref20.tar.Z復制到改目錄下用tar zxvf rsaref30.tar.Z釋放壓縮。Number4.
tar.gz需要復制到php-4.1.1目錄內,然後用tar zxvf number4.tar.gz解壓縮。

  下面的描述我想簡單一點,只寫出進入目錄後執行的命令。那些目錄都是釋放
的時候自己建立的,如果你這些操作都在/usr/local/src下面執行,所有的目錄就
都在這裡面。最好按照順序執行。再羅嗦一句:如果不是第一次編譯,一般情況請
執行一次make clean後再編譯。

  14、[jpeg-6b]:生成JPEG圖像的函數庫。


  ./configure
  make
  make test
  make install

  15、[zlib-1.1.3]:壓縮算法庫,是PNG和JPEG需要的


  make test
  make install

  16、[freetype-2.0.8]:字體庫,在圖像上使用字體的時候需要用到,


  ./configure --prefix=/usr/local
  make
  make install

  17、[libpng-1.0.10]:生成PNG圖像的函數庫


  cp scripts/makefile.linux makefile
  make test
  pngtest pngnow.png
  (如果都通過測試了,請繼續。否則,看看錯誤提示,改正錯誤)
  make install

  18、[gd-1.8.4]:GD庫,用來動態生成圖像用,這裡主要是配合PHP生成圖像


  編輯Makefile 文件:

  把下列行取消注釋符號(#):


  CFLAGS=-O -DHAVE_LIBXPM -DHAVE_LIBPNG -DHAVE_LIBJPEG
  -DHAVE_LIBFREETYPE -DHAVE_LIBTTF
  LIBS=-lgd -lpng -lz -ljpeg -lfreetype -lm -lttf

  注釋下列行(增加#):
  CFLAGS=-O -DHAVE_LIBPNG -DHAVE_LIBJPEG
  LIBS=-lgd -lpng -lz -lm

  修改下列行:
  INCLUDEDIRS=-I. -I/usr/local/include/freetype2 -I/usr/include/X11
    -I/usr/X11R6/include/X11 -I/usr/local/include
     -I/usr/include/freetype

  保存後執行:


  make
  make install

  19、[apache_1.3.23]:步驟一 ./configure --prefix=/usr/local/apache

  20、[php-4.1.1]:

  如果不是第一次安裝,請刪除:config.cache文件,然後執行先執行make
clean

  接下來配置環境,輸入一個比較長的命令:


  ./configure
    --with-apache=/usr/local/src/apache_1.3.23
    --with-config-file-path=/local/apache/conf
    --with-enable-versioning
    --with-mysql=/usr/local/mysql
    --with-ftp
    --with-gd=/usr/local/src/gd-1.8.4
    --with-enabled-bcmath=yes
    --with-disable-debug
    --enable-memory-limit=yes
    --enable-track-vars
    --with-zlib
    --with-jpeg-dir=/usr/local/src/jpeg-6b
    --with-png-dir=/usr/local/src/libpng-1.0.10
    --with-freetype-dir=/usr//local/src/freetype-2.0.8

  當然你也可以實現准備一個含有上述命令的sh文件,這樣改起來方便些。我就
是這樣做的。


  make
  make install

  21、[rsaref-2.0]:RSA加密模塊

  前面說過,這個目錄的釋放是特殊的,先見目錄後釋放,希望你是這樣做的。

  cp -rp install/unix local
  cd local
  make
  mv rsaref.a librsaref.a

  22、[openssl-engine-0.9.6c]:openssl引擎


  ./config -prefix=/usr/local/ssl -L`pwd`/../rsaref-2.0/local/
rsaref –fPIC
  make
  make test
  make install

  23、[mod_ssl-2.8.6-1.3.23]

  ./configure --with-apache=../apache_1.3.23

  24、[apache_1.3.23]步驟二


  ./configure --prefix=/usr/local/apache --enable-shared=ssl
     --enable-module=ssl
--activate-module=src/modules/php4/libphp4.a
  make
  make certificate TYPE=custom(回答一些問題)
  make install

  25、收尾工作:

  編輯/usr/local/apache/conf/httpd.conf文件,增加一行:


  AddType application/x-httpd-php .php

  26、用命令/usr/local/apache/bin/apachectl configtest檢查一下配置文件
的正確性。

  27、用/usr/lcoal/apache/bin/apachectl start啟動apache服務器

  28、在/usr/local/apache/htdocs建立一個test.php文件包含下列內容:


  
    phpinfo();
  ?>

  29、在別的機器上用浏覽器看一下這個機器:http://xxx.xxx.xxx.
xxx/test.php會出現php的配置總匯,看看前面編譯的模塊都在不在。

  30、檢驗ssl很麻煩,需要用apachectl startssl啟動apache然後還要生成一
大堆證書。這裡就不討論了。

  31、把/usr/local/apache/bin/apachectl文件復制到/etc/rc.d/init.d中,
然後在/etc/rc.d/rd3.d中建立個符號連接指向/etc/rc.d/init.d中的上述文件:

  ln -s ../init.d/apachectl S70apachectl


  這樣系統啟動的時候就可以自動啟動apache和她的哪一大堆模塊了。

  呼~~~~(喘口氣)到這裡,就基本上完成了一個功能很全的WEB服務器系統了


  (5)安裝 ftp 服務器

  (6)安裝 pop3服務器

  有的郵件服務器自己帶pop3功能(比如Qmail、Xmail),如果你用這幾種郵件
服務器軟件,當然就不用安裝pop3了。目前,常用的郵件服務器裡面不帶pop3的好
象只有sendmail和postfix等少數幾種。這幾種郵件服務器軟件使用的都是系統用
戶,而我們安裝的pop3也只是對系統用戶的郵件進行彈出操作的。這裡我們使用的
版本和下載地址是:


  qpopper4.0.3.tar.gz   
  http://www.eudora.com/qpopper_general/

  同樣的,把文件下載到/usr/local/src中,按照下列步驟安裝:


  tar zxvf qpopper4.0.3.tar.gz
  cd qpopper4.0.3
  ./configure
  make
  make install

  完成後,qpopper安裝在/usr/local/sbin中(如果你願意把它放在其他地方,
可以在前面用./configure –prefix=/your_path指定),文件名叫作popper。通
常情況下,popper是作為一個inetd(超級網絡服務進程)的子進程加載的。這樣
需要編輯文件/etc/inetd.conf並做下面改動: ...


  # POP3 mail server

  #pop-3 stream tcp nowait root /usr/sbin/tcpd ipop3d
  pop-3 stream tcp nowait root /usr/local/sbin/popper qpopper –s
  ...

  增加黑體的這一行,注釋掉原來的(上面這一行),注意,如果你的安裝路經
不同,記著改過來呀。然後,用下面的命令得到inetd的進程號:


  ps –ax | grep inetd

  得到結果類似:

  248 ? S 0:00 inetd

  什麼?哪個是進程號?就是最前面那個數字。然後用下面的命令重新啟動
inetd:


  kill –HUP 248

  用下面的命令看看pop3是不是啟動了。


  netstat -ln|grep 110

  如果結果是這樣,就恭喜了。


  tcp 0 0 0.0.0.0:110 0.0.0.0:* LISTEN

  這裡還要補充一點,少數情況下,pop3進程需要獨立的監聽端口,也就是不作
為inetd的子進程裝載,上面過程需要做如下改動:

  ./configure的時候加上--enable-standalone參數。

  編輯/etc/inetd.conf不增加黑體一行,但需要注釋掉原來的pop-3一行(如果
有的話)。

  啟動的時候,直接運行/usr/local/sbin/popper xxx.xxx.xxx.xxx:110即可。
後面的參數是本地需要幾監聽的IP地址和端口。注意,沒有特殊需要,端口必須是
110。最後要說的是:其實最簡單的辦法就是用你使用的Linux發行包帶的pop3軟件
,安裝的時候直接選上即可。

(7)安裝imap服務器

  幾乎所有的發行包都帶有imap服務器軟件(一般是華盛頓大學版本),最好的
辦法是用你的發行包安裝IMAP服務器。事實上,我個人覺得IMAP服務器很少被使用
。下載最常規的IMAP服務器源碼地址是:ftp://ftp.cac.washington.
edu/imap/imap.tar.Z


  tar zxvf imap.tar.Z
  cd imap-2001a
  make slx

  (如果不行依次試驗一下其他你覺得可能的系統類型,用vi看一下Makefile中
列的名稱)

  然後配置/etc/inetd.conf,讓inetd允許imap服務。[本節內容沒有試驗成功
,編譯總是過不去]

  (8)安裝squid服務器

  SQUID是一個優秀的代理服務器軟件,它可以很靈活的被配置為各種應用形式
,其中包括正向代理,反向加速模式和透明代理等。但是SQUID目前只能代理HTTP
協議,代理FTP協議需要配置浏覽器仿真主動FTP協議。下面的步驟是安裝SQUID的
過程。

  1、下載反向代理服務器軟件采用squid,下載地址:http://www.
squid-cache.org/

  下載後存放在/usr/local/src目錄裡,文件名是squid-2.4.STABLE2-src.
tar.gz

  2、tar zxvf squid-2.4.STABLE2-src.tar.gz 解壓縮

  3、cd /usr/local/src/squid-2.4.STABLE2 進入目錄

  4、./configure --prefix=/usr/local/squid --enable-heap-replacement
--disable-internal-dns建立環境,把squid安裝/usr/local/squid中。第二個參
數是指定使用更先進的緩沖算法。第三個參數是取消內部DNS解析(如果使用在遠
程高速緩存模式,比如GSLB,需要增加選項:--disable-internal-dns,目的是關
閉內部DNS.否則內部DNS不理睬你在etc/hosts中的設定,直接尋找域名服務器,這
樣就會造成轉發循環。就是cache發送給物理服務器的更新請求(因為用域名)也
會被用戶的GSLN設備解析回來而形成循環。)

  5、make 開始編譯

  6、make install 安裝到剛才--prefix=指定的路徑當中

  7、安裝完成後,會在您指定的安裝路徑裡產生一個squid目錄,squid目錄下
有四個目錄:bin/ etc/ libexec/ logs/。其中etc裡面是配置文件,bin裡面是執
行文件,logs裡面是日志文件。

  8、安裝結束後就是調試服務器,使其按照您的要求工作。Squid的配置文件只
有一個,在etc目錄裡,名字是squid.conf,所有的配置選項都在這個文件裡面。
而且每個配置項目都有注釋說明。首先,在squid文件裡面找到下列配置項:

  cache_mem ---這裡可以添上您准備給squid作為高速緩存使用的內存大小。注
意,如果您的機器有N兆內存,那麼,推薦您在這裡添的數字是N/3。

  cache_dir /usr/local/squid/cache 100 16 256 這裡的第一個數字100是您
准備給squid作為cache使用的硬盤空間大小,單位是兆。如果您想劃100M空間當作
cache,那麼這裡就寫100。

  cache_mgr [email protected]這裡填寫cache管理員的Email地址,系統
出錯會自動提醒cache管理員。

  cache_replacement_policy和memory_replacement_policy的參數由於使用了
--enable-heap-replacement編譯參數,就不能使用缺省的lru算法了,你可以在下
列三種裡面選一個:

  heap GDSF : Greedy-Dual Size Frequency

  heap LFUDA: Least Frequently Used with Dynamic Aging

  heap LRU : LRU policy implemented using a heap

  例如:


  cache_replacement_policy heap LRU
  memory_replacement_policy heap LRU

  下面設定ACL訪問控制列表:為了簡單起見,我們在這裡開放所有的權限。
ACL分為兩個部分:ACL定義部分,和http_access部分。在access_http部分用到前
面的定義。前面定義了:


  acl all src 0.0.0.0/0.0.0.0

  我們注釋掉所有的http_access行加一句:


  http_access allow all ---注意:all是前面acl定義的。

  這樣就開放了所有的權限。以後有需要的,再繼續往上加各種限制即可。

  9、以root身份創建組nogroup :


  %su root (如果當前不是root)
  #groupadd nogroup
  #useradd nobody (如果沒有這個用戶)

  10、進行目錄/usr/local ,以root身份執行下面的命令,改變整個Squid目錄
的所有者為nobody.nogroup


  #cd /usr/local
  #chown nobody.nogroup -R squid

  11、su 作為nobody,進行/usr/local/squid/bin目錄,執行#squid -z 創建
cache交換目錄


  #su nobody
  $ cd /usr/local/squid/bin
  $./squid -z

  12、成功後,測試一下:/usr/local/squid/bin/squid -NCd1 該命令正式啟
動Squid。如果一切正常,你會看到一行輸出 :Ready to serve requests.

  13、用ctrl-c退出前台測試。

  14、把squid作為守護進程啟動就直接運行:/usr/local/squid/bin/squid

  15、檢查狀態用squid –k check

  16、停止squid用squid -k shutdown

  如果是配置基本的正向代理,上面的已經可以使用了。下面的步驟用於配置支
持多域名的反向代理服務器。還好,SQUID的所有配置都在/usr/local/squid/etc
下面,和反向代理有關的幾項介紹如下:

  17、http_port 80 “http_port”參數指定Squid監聽浏覽器客戶請求的端口
號。

  18、icp_port 0 “icp_port”參數指定Squid從鄰居(neighbour)服務器緩
沖內發送和接收ICP請求的端口號。這裡設置為0是因為這裡配置Squid為內部Web服
務器的加速器,所以不需要使用鄰居服務器的緩沖。

  19、emulate_httpd_log on 打開“emulate_httpd_log”選項,將使Squid仿
照Web服務器的格式創建訪問記錄。如果希望使用Web訪問記錄分析程序,就需要設
置這個參數。

  20、redirect_rewrites_host_header off 缺省地,Squid將改寫任何重定向
請求的主機頭部。若系統運行Squid為加速器模式,則這時不需要重定向特性。該
參數在負載過重的情況下要旁路重定向器時才打開

  21、httpd_accel_host vartual 此處設置反向代理的主機名,如果對後面多
個域名進行緩沖,請使用虛擬主機模式(如此)。

  22、httpd_accel_port 80 此處設置反向代理的WEB服務端口號。

  23、#httpd_accel_with_proxy off 把這行注釋掉,此處設置開反向代理的同
時,是否開普通代理緩存服務。如果這行不注釋掉,就沒有高速緩存功能。

  24、定義訪問控制列表:


  acl port80 port 80
  acl accel_host1 dstdomain .test.com
  acl accel_host2 dstdomain .test.net
  … …
  http_access allow accel_host1 port80
  http_access allow accel_host2 port80
  http_access deny all;

  25、完成後,用squid –k reconfigure重新裝載配置文件。

  (9)安裝SSH

  ---

  (10)配置Linux為路由器

  ---

  (11)配置Linux網關和安裝ipchains/iptables防火牆

  在Linux上面的防火牆,最最常用的是ipchains,而且通常情況下是作為網關
的附加部分安裝的。Ipchains的規則是很復雜的,靈活性也很強,可以配制成各種
五花八門的樣子。這些都需要和你自己的實際情況相結合。這裡,我們只介紹一種
基於網關的簡單配置。

  安裝IPCHAINS一般都不用你操心,因為幾乎所有的Linux發行包都把該軟件作
為必須安裝的卻省配置。另一個原因是ipchains是跟內核(kernel)有很大的關系
,因此最好在安裝系統的時候選上相關選項(如果有)。在標題裡面我們還提到了
iptables,這個工具在表面上等同於ipchains,只不過是用於2.4內核的(2.4內核
在這方面的代碼幾乎是重新寫過的,功能有了長足的提高)。關於iptables工具的
配置我們在後面介紹。你只需要記住2.2核心下使用ipchains,2.4核心下使用
iptables即可。

  首先,你的服務器需要兩塊網卡(或更多),這種機器叫做“多宿主主機”,
是專門的用於做網關或路由器的。這裡插一句:一般情況下,作為普通服務器的主
機即使負載再重就需要一塊網卡就夠了,只有做網關或路由器的時候才需要多宿主
主機。這並不象一般人認為得那樣增加一塊網卡可以增加一份帶寬,事實上,一塊
網卡就可以提供足夠的帶寬。並且,還有人錯誤的把兩塊網卡接在同一個交換機上
分配兩個地址,這更是錯誤的,因為這樣產生了額外的循環路由,會產生大量的內
部警告錯誤,某些系統就會報警。

  1、制作一個雙界面(雙宿主)的主機。

  通常,現在的發行包的安裝程序都可以識別兩塊網卡,這樣就省事了。但是也
有不少發行包只識別第一塊網卡(也許是出於前面說的原因),或者你要在一台在
用的機器上加一塊網卡(因為你不願意重裝系統),那麼就按照下面的辦法處理。


  1.1、我們就說PCI網卡。安裝前首先看看網卡芯片,記住芯片的型號(希望
你自己攢過機器)。

  1.2、安裝MAN手冊(用發行包)

  1.3、在/usr/doc/HOWTO/english/txt/Ethernet-HOWTO文件(如果是壓縮的就
釋放)中搜索你的網卡型號,找到對應的驅動模塊名稱。

  1.4、如果模塊沒有,還需要重新編譯核心。在menuconfig網絡設備一欄選中
你的型號然後標記為*或M,編譯完核心後別忘了編譯模塊:make modules;make
modules_install。(不會的話再仔細溫習一下前面編譯內核的部分)

  1.5、用depmod –a命令建立/etc/modules.conf(如果已經有就不用了),
也有的發行包叫做conf.modules

  1.6、編輯該文件加上一行:alias eth1 XXXX,其中XXXX是你剛才查到的模
塊名稱。一般該模塊文件位於:/lib/modules/內核版本號/net…中的XXXX.o文件
。這個文件是你編譯內核模塊的時候產生的,你在內核配置的時候,凡是標記為M
的都會被編譯成.o文件放在這裡。同樣的,你選擇的網卡驅動也是會編譯成模塊在
這裡的。

  1.7、運行modprobe eth1使模塊有效。

  1.8、修改/etc/sysconfig/network文件中需要修改的部分。

  1.9、建立或修改/etc/sysconfig/network-script/ifcfg-eth1文件(照抄那
個eth0的即可),設定地址是你的真實情況,比如設為eth1要接的網段。這兩個文
件(eth0/eth1是啟動的時候的腳本參數文件)

  1.10、重新啟動一下網絡:/etc/rc.d/init.d/network restart

  1.11、用ifconfig看看是否eth0/eth1都啟動了。

  1.12、大功告成

  2、調整和編譯核心:如果作為網關,有些核心選項需要配置。注意:這裡的
內核編譯選項僅僅適合於2.2.X版本,2.4版本完全不同。

  2.1、在/usr/src/linux中運行make menuconfig配置核心下列選項:


  Networking options中
[*] Network firewalls
  [*] IP: advanced router
  [*] IP: firewalling
  [*] IP: firewall packet netlink device
  [*] IP: transparent proxy support
  [*] IP: masquerading
  [*] IP: ICMP masquerading
  [*] IP: masquerading special modules support
   IP: ipautofw masq support (EXPERIMENTAL)
   IP: ipportfw masq support (EXPERIMENTAL)
   IP: ip fwmark masq-forwarding support (EXPERIMENTAL)
  [*] IP: masquerading virtual server support (EXPERIMENTAL)
  (12) IP masquerading VS table size (the Nth power of 2)

  具體選項不同版本的內核不盡相同,你看著差不多就可以了。編譯成模塊或編
進核心[*]可以自由選擇。

  2.2、按照前面說的編譯內核,重新啟動後就具有網關功能了。啟動後驗證一
下文件:/proc/sys/net/ipv4/ip_forward內容是否為1。(別告訴我不知道怎麼看
8-))

  3、設置ipchains

  本來這項工作是非常復雜的,但是我們這裡講的簡單,讓網關通了就行。

  3.1、先看一下目前我們目前的假想環境:你的機器有兩塊網卡,一塊連接在
內網交換機配內部網絡地址,另一塊在外網交換機配公網地址。在這個機器ping
內網和外網的機器應該都能通。並且在內網的機器ping 該機器的外網地址也通,
在外網的機器ping該機器內網的地址也同樣通。這說明轉發功能是有效的。

  3.2、再試驗一下:在內部網絡把網關設為你的機器的內網地址,然後ping
外網的任一台機器(不是這台機器的外網地址),結果是不通。原因是ICMP包發出
去後外網的機器不知道怎麼回答,那裡沒有合適的路由,因為這個包的回應地址是
內網。

  3.3、現在設置ipchains:(ipchains軟件適用2.2.X的內核,在2.4.X的內核
中不適用。2.4.X的內核推薦使用iptables,關於該軟件的用法在下面介紹)


  ipchains –A forward –s 192.168.1.0/24 –j MASQ

  黑體部分是內網地址。這句話的意思是,把所有內網發送的包都偽裝成外部網
的地址(那個機器的外網地址),這樣,外部其他機器回應的時候就會發送到這台
機器,經過轉發就回來內網了。好了,一個簡單的網關做好了。如果你需要實現防
火牆(包過濾功能),則需要配置更加復雜的過濾規則,這些規則應該同時作用於
input/output/forward鏈。

  3.4、自動啟動:設定了復雜的鏈,需要保存。在/etc/rc.d中建立一個文件
:rc.ipfwadm把你的鏈腳本加進去就可以了。最後給這個文件+x屬性(chmod +x
rc.ipfwadm)。

  4.在2.4.X內核中使用iptables建立Linux防火牆(網關)。

  4.1 說明和下載

  前面已經提到過2.4 內核中要使用iptables來做類似於ipchains在2.2內核中
實現的事情。事實上,在2.4內核中的iptables包含了兩個完全不同的部分:包過
濾和地址轉換。這兩個功能在邏輯上是分開的,考慮到操作習慣上的問題才集成在
一個配置程序(iptables)上。如果你安裝了帶有2.4內核的發行包,那麼一般都帶
有iptables,並且在內核配置上也配置好了。如果要編譯新的內核或者原來的內核
沒有支持iptables,需要選上相關的選項。使用make menuconfig 配置內核的時候
操作:進入:Networking Options至少選擇上:


  [*] Network packet filtering (replaces ipchains)
  [*] Network packet filtering debugging (NEW)
  進入:IP: Netfilter Configuration --->
  [*] Connection tracking (required for masq/NAT) (NEW)
FTP protocol support (NEW)
IRC protocol support (NEW)
  等等……
  把下面的選項全部標記<*>

  逐級返回上面菜單後保存配置,然後按照編譯內核的那一套程序進行即可(參
見前面的內容)。這裡需要說明的是,內核支持了iptables功能,還需要有外部程
序才行。如果你是直接安裝的帶有2.4內核的發行包,應該已經帶有iptables實用
程序了。但是如果你是從2.2核心的發行包直接升級到2.4內核,盡管按照上面的做
法配置的核心,但是還不能使用iptables。還必須下載和編譯iptables外部程序才
能使用iptables功能。下載的地址是:http://www.netfilter.org ,下載的文件
是iptables-1.2.6a.tar.bz2或更新的版本。

  4.2 安裝:

  這個.bz2文件比較奇怪吧?把文件復制到/usr/local/src中,然後用下列命令
釋放編譯和安裝: bzip2 -dc iptables-1.1.2.tar.bz2 |tar vxf - (最後那個
‘- ’別忘了)

  你的系統可能沒有bzip2工具,如果沒有,你就去下一個:

  進入新生成的目錄 :cd iptables-1.2.6a 編譯和安裝:make ; make
install

  4.3 配置

  如果你需要配置一個簡單的網關,你僅僅需要配置一個轉發加地址轉換功能即
可,我提供的參考腳本如下:


  #begin
  echo 1 > /proc/sys/net/ipv4/ip_forward
  modprobe iptable_nat
  modprobe ip_conntrack
  modprobe ip_conntrack_ftp
  modprobe ip_nat_ftp
  iptables -F INPUT
  iptables -F FORWARD
  iptables –F OUTPUT
  iptables -F POSTROUTING -t nat
  iptables -t nat -F
  iptables -P FORWARD DROP
  iptables -A FORWARD -s 192.168.1.0/24 -j ACCEPT
  iptables -A FORWARD -i eth1 -m state --state ESTABLISHED,RELATED
-j ACCEPT
  iptables -t nat -A POSTROUTING -o eth1 -s 192.168.1.0/24
    -j SNAT --to 21.9.22.2
  #end

  其中3行modprobe是當你在內核中把iptables相關功能編譯成模塊(選成)的時
候才用到的(也可能不止3行)。其中插入模塊(modprobe)的幾行比較重要,有時
候當你作完NAT後,發現FTP不好用了,就要手工插入ip_nat_ftp模塊(語法是:
modprobe ip_nat_ftp)。黑體的地址部分可能是需要根據你網絡的實際情況來決
定的。最後一句話的意思是把凡是源地址是192.168.1.x的包做地址轉換,轉換為
網關外側地址21.9.22.2。好了,你已經建立起一個基本的網關了。其實iptables
的功能及其強大,配置也非常靈活。其中的防火牆功能通過-t filter參數實現,
地址轉換功能通過-t nat實現(就像上面一樣)。防火牆功能(packet filter)
主要是3個鏈:INPUT,FORWARD,OUTPUT,地址轉換功(nat)主要是3個鏈:
PREROUTING,POSTROUTING,OUTPUT。觀察當前的狀態可以使用下面的命令:
iptables –L –t filter 或 iptables –L –t nat。

  好了,要配置出更靈活的、更強大的防火牆功能,全靠你自己了。我推薦你兩
個手冊:《Linux 2.4 Packet Filter HOWTO》和《Linux 2.4 NAT HOWTO》。這兩
個文檔是iptables的原作者寫的,相當經典。英文不好?沒關系,這兩個文檔都有
中文版本。推薦你到:永遠的UNIX(http://www.fanqiang.com)下載。

  (12)配置samba服務器

(13)構建基於Linux的VPN網絡

  構建VPN幾乎是Linux的最高級應用之一了,學會了這項技術,是足以使你自豪
的資本。VPN的主要用途就是建立一個加密的通信機制,然後通過把所有的你的子
網的信息按照特定的方式加密傳輸,構成一個邏輯上的虛擬的網絡。簡單的說,就
是一個Linux系統的IP層加密解決方案。這裡面需要用到不少組件,下面一一介紹


  1、准備工作和安裝

  1.1 從http://www.kernel.org下載2.4.X的內核,除了2.4.15版本(該版本
有一個致命錯誤)。然後把該內核放置到:/usr/src中。(這裡我們使用Linux-2.
4.18.tar.gz),然後釋放:tar zxvf linux-2.4.18.tar.gz

  1.2 刪除原來的連接rm linux

  1.3 ln –s linux-2.4.18.tar.gz linux

  1.4 檢查當前的網卡和SCSI的型號(參見內核升級一章)

  1.5 cd linux (進入linux-2.4.18目錄)

  1.6 make menugonfig

  1.7 make dep

  1.8 make bzImage

  1.9 編譯工作做到這裡就打住!

  1.10 從http://www.swox.com/gmp 下載gmp庫的最新版本到/usr/local/src


  1.11 tar zxvf gmp-4.0.1.tar.gz

  1.12 cd gmp-4.0.1

  1.13 ./configure

  1.14 make


  1.15 make install

  1.16 從http://www.freeswan.org下載freeswan-1.97.tar.gz(我們這裡使
用的版本)到/usr/local/src


  1.17 tar zxvf freeswan-1.97.tar.gz

  1.18 從http://www.strongsec.com/freeswan/ 下載x509patch-0.9.
11-freeswan-1.97.tar.gz ,這個是補丁文件。釋放,進入x509補丁目錄,復制
freeswan.diff到外面的freeswan源目錄,然後回到freeswan源目錄中運行:patch
–p1 < freswan.diff

  1.19 從http://www.openssl.org下載openssl-0.9.6b版本到
/usr/local/src,釋放,進入目錄

  1.20 ./config (如果原來系統中有openssl需要先uninstall再安裝,不過一
般情況下你可能uninstall不下來8-)。如果無法uninstall,找到他們的路徑,在
這裡通過—prefix=參數指定路徑覆蓋舊版本的文件。這裡嚴重建議:如果你沒有
把握確定路徑,最好這樣做:到你用的發行包的開發商的FTP站點(如果你用
turbolinux就去ftp.turbolinux.com用redhat就去ftp.redhat.com),用
anonymous用戶和隨便一個電子郵件作為密碼登陸,找到你用的發行包版本的生機
目錄,然後下載相應的RPM包,注意:這裡的包至少應該是0.9.6b1以上的i386版本
。下載完畢後用rpm –Uvh更新。這樣做完了很干淨。

  1.21 make (如果你用rpm包升級就不用這個步驟了)

  1.22 make test (如果你用rpm包升級就不用這個步驟了)

  1.23 make install (如果你用rpm包升級就不用這個步驟了)安裝完了以後
執行openssl命令,輸入version看看是不是你剛剛安裝的版本。如果不是,可能沒
有覆蓋原來安裝的舊版本。從1.20重新來過

  1.24 然後回到freeswan的源目錄,運行:make menugo,在networking
options中選擇關於iptables和ipsec相關的所有選項。其中ipsec是freeswan加上
的,最好把前面括號中M(模塊方式)換成*(編譯進內核)。下列內核選項應該選
上:

  進入:Networking Options至少選擇上:


  [*] Network packet filtering (replaces ipchains)
  [*] Network packet filtering debugging (NEW)
  進入:IP: Netfilter Configuration --->
  <*> Connection tracking (required for masq/NAT) (NEW)
FTP protocol support (NEW)
IRC protocol support (NEW)

  注意:如果你需要使用DHCP功能,需要增加Pachet Socket mmapped IO和
Socket Filtering兩個選項,參見DHCP一章。

  等等……

  把下面的選項全部標記<*>

  返回上一層菜單後,把列表選項最下面的凡是IPSEC相關的選項全部選為<*>。
另外的,如果你打算使用撥號連接請在網絡設備支持菜單選擇ppp支持(注意,你用
的ppp程序一定要2.4版本以上的)

  1.25 然後檢查網卡和硬盤選項是否正確,如果沒有問題就逐層退出,然後保
存配置。

  1.26 退出後將自動編譯內核,等待……

  1.27 編譯完成後,來到/usr/src/linux目錄,運行:make modules;make
modules_install

  1.28 cp System..map /boot/System.map-2.4.18-vpn

  1.29 cd arch/i386/boot

  1.30 cp bzImage /boot/vmlinuz-2.4.18-vpn

  1.31 cd /boot

  1.32 rm System.map

  1.33 ln –s System.map-2.4.18-vpn System.map

  1.34 vi /etc/lilo.conf

  增加一段:


  boot=/dev/sda
  map=/boot/map
  install=/boot/boot.b
  prompt
  timeout=50
  lba32
  default=linux-vpn

  image=/boot/vmlinuz
label=linux
initrd=/boot/initrd
read-only
root=/dev/sda5
  image=/boot/vmlinuz-2.4.18-vpn
label=linux-vpn
initrd=/boot/initrd
read-only
root=/dev/sda5

  1.35 運行lilo更新數據

  1.36 reboot

  1.37 啟動後,運行:ipsec setup restart 應該不報任何錯誤而正常出現
freeswan的版本。

  注意:還有一些必要的內核參數配置,這些配置可以在rc.local中實現。他們
是:


  echo 0 > /proc/sys/net/ipv4/conf/eth0/rp_filter
  echo 1 > /proc/sys/net/ipv4/ip_forward

  如果你把下面兩項編譯成模塊(前面擴號是M而不是*):


   FTP protocol support (NEW)
IRC protocol support (NEW)

  你需要在rc.local中加上:


  modprobe ip_nat_ftp

  安裝完了,接下來我們將說明幾種VPN的玩法。

  2、配置Frees/wan用於支持雙網關通信。也就是兩個異地的子網通過一對
ipsec的VPN網關進行交互訪問。第一種玩法是網絡對網絡的VPN。一般的,某企業
在甲乙兩地(距離相當遠)各有一個辦公室,每個辦公室各有一套LAN,他們分別
通過專線連接到internet網絡上。甲LAN上是企業的管理中心,運行著企業的管理
系統。而乙LAN上的用戶也需要使用該管理系統,盡管乙LAN可以通過internet(公
網)連接過去,但是企業的老板說不行!我們的數據不能暴露在公網上,必須加密
!好了,我們的VPN網絡就可以應用於該企業的這種需求。首先在甲乙兩個LAN的出
口各放置一台我們的Linux服務器,他們都安裝好了ipsec(前面說的安裝步驟一個
都不少),兩個LAN的數據分別通過各自的這台機器(ipsec gateway)進入公網,
凡是經過該網關的數據全部都是加密的。在效果上,兩個LAN的用戶可以互相ping
到對方的機器,盡管他們可能一個是192.168.1.0/24網段,另一個是192.168.10.
0/24網段的。他們好像在同一個局域網中工作,沒有界限。公共網絡的加密部分對
他們來說也是透明的。而兩個LAN在公共網絡上交換的數據是密文的。這就是虛擬
專用網VPN。

  但願你已經按照前面的步驟順利的安裝好了兩台機器,下面我告訴你怎樣配置
成網對網的環境。

  2.1 我們先配置甲網的ipsec網關(該網關有兩個網卡,我們配置他們的地址
分別為eth1:192.168.1.231和eth0:21.9.22.22)。安裝完成後,我們首先要做的
事情是生成CA證書。(用到剛才安裝的openssl)

  2.2 找到openssl.cnf文件,一般在/etc/ssl/中,也可能在/var/ssl中或
/usr/ssl中(實在不行你就find / -name “openssl.cnf”找找嘛!),要是有好
幾個,你要搞清楚哪個是你安裝的版本。改動其中的default_bits選項的值從
1024到2048,然後改動default_days的值到3650。讓期限為10年!保存退出。

  2.3 在/var/中建立一個目錄:/var/sslca,改變該目錄的權限為700(chmod
700 /var/sslca)

  2.4 在你安裝的openssl目錄中找到CA.sh腳本。注意,應該是你當前運行的
openssl版本的CA.sh

  2.5 cd /var/sslca 進入到你剛才建立的目錄

  2.6 比如你剛才找到的CA.sh在/usr/lib/ssl/misc/,那麼就輸入
/usr/lib/ssl/misc/CA.sh –newca,接下來你會被問到一系列問題。問題和回答
類似於下面的樣子。如果你確認哪些你有把握更改就改,比如公司名稱、郵件、密
碼等。不能確定的就按照下面的樣子抄上即可。


  ~/sslca#/usr/lib/ssl/misc/CA.sh -newca
  CA certificate filename (or enter to create)
(enter)
  Making CA certificate ...
  Using configuration from /usr/lib/ssl/openssl.cnf
  Generating a 2048 bit RSA private key
  ........................................+++
  ........................................+++
  writing new private key to './demoCA/private/./cakey.pem'
  Enter PEM pass phrase:(enter password)
  Verifying password - Enter PEM pass phrase:(enter same password
again)
  -----
  You are about to be asked to enter   
  information that will be incorporated
  into your certificate request.
  What you are about to enter is what is called a Distinguished Name
or a DN.
  There are quite a few fields but you can leave some blank
  For some fields there will be a default value,
If you enter '.', the field will be left blank.
  -----
  Country Name (2 letter code) [AU]:US(enter)
  State or Province Name (full name) [Some-State]:State(enter)
  Locality Name (eg, city) []:City(enter)
  Organization Name (eg, company) [Internet Widgits Pty Ltd]:
21vianet(enter)
  Organizational Unit Name (eg, section) []:(enter)
  Common Name (eg, YOUR name) []:CA(enter)
  Email Address []:[email protected](enter)
  ~/sslca#

  2.7 下一步是給網關生成證書:

  命令和要回答的問題如下:


  ~/sslca# /usr/lib/ssl/misc/CA.sh -newreq

  Using configuration from /usr/lib/ssl/openssl.cnf
  Generating a 2048 bit RSA private key
  ...................................+++
  ...............................+++
  writing new private key to 'newreq.pem'
  Enter PEM pass phrase:(enter password)
  Verifying password - Enter PEM pass phrase:(repeat password)
  -----
  You are about to be asked to enter information that will be
incorporated
  into your certificate request.
  What you are about to enter is what is called a Distinguished Name
or a DN.
  There are quite a few fields but you can leave some blank
  For some fields there will be a default value,
  If you enter '.', the field will be left blank.
  -----
  Country Name (2 letter code) [AU]:US(enter)
  State or Province Name (full name) [Some-State]:State(enter)
  Locality Name (eg, city) []:City(enter)
  Organization Name (eg, company) [Internet Widgits Pty Ltd]:
ExampleCo(enter)
  Organizational Unit Name (eg, section) []:(enter)
  Common Name (eg, YOUR name) []:vpnserver.rd.xxx.com(enter)
  Email Address []:[email protected](enter)

  Please enter the following 'extra' attributes
  to be sent with your certificate request
  A challenge password []:(enter)
  An optional company name []:(enter)
  Request (and private key) is in newreq.pem
  natecars@buzzword:~/sslca$ /usr/lib/ssl/misc/CA.sh -sign
  Using configuration from /usr/lib/ssl/openssl.cnf
  Enter PEM pass phrase:(password you entered for the ca
certificate)
  Check that the request matches the signature
Signature ok
  The Subjects Distinguished Name is as follows
  countryName :PRINTABLE:'US'
  stateOrProvinceName :PRINTABLE:'State'
  localityName :PRINTABLE:'City'
  organizationName :PRINTABLE:'21vianet'
  commonName :PRINTABLE:'vpnserver.rd.xxx.com'
  emailAddress :IA5STRING:'[email protected]'
  Certificate is to be certified until Feb 13 16:28:40 2012 GMT
(3650 days)
  Sign the certificate? [y/n]:y(enter)

  1 out of 1 certificate requests certified, commit? [y/n]y(enter)
  Write out database with 1 new entries
Data Base Updated
  (certificate snipped)
  Signed certificate is in newcert.pem

  在以上步驟中一定要記住你輸入的密碼。如果哪一不錯了,想重新來過的話,
記住刪除/var/sslca目錄下面的所有子目錄即可。

  2.8 把文件名字改為你需要的


  ~/sslca# mv newcert.pem vpnserver.rd.xxx.com.pem
  ~/sslca# mv newreq.pem vpnserver.rd.xxx.com.key

  2.9 編輯.key文件,刪除'-----BEGIN CERTIFICATE REQUEST-----'後面所有
的東西,之後,這個文件應該從'-----BEGIN RSA PRIVATE KEY-----'至'-----END
RSA PRIVATE KEY-----'結束。

  2.10 如果正常的安裝了x.509補丁,你應該可以看到/etc/ipsec.d及其下面
的目錄。如果沒有,你就自己建立。然後按照下面的位置復制合適的文件:(此時
你仍然在/var/sslca目錄中)


  # cp vpnserver.rd.xxx.com.key /etc/ipsec.d/private
  # cp vpnserver.rd.xxx.com.pem /etc/ipsec.d
  # openssl x509 -in demoCA/cacert.pem -outform der -out rootca.der
  # cp rootca.der /etc/ipsec.d/cacerts/RootCA.der
  # openssl x509 -in host.example.com.pem -outform der -out
/etc/x509cert.der
  # openssl ca -gencrl -out crl.pem
  # cp crl.pem /etc/ipsec.d/crls

  2.11在/etc/ipsec.secrets中加入一行:: RSA vpnserver.rd.xxx.com.
key "password",然後刪除其他所有行。其中的password是你前面生成密要的時候
回答問題輸入的密碼。

  2.12編輯ipsec.conf文件類似下面的樣子:


  # basic configuration
  config setup
interfaces=%defaultroute
klipsdebug=none
plutodebug=none
plutoload=%search
plutostart=%search
uniqueids=yes

  conn %default
keyingtries=1
compress=yes
disablearrivalcheck=no
authby=rsasig
leftrsasigkey=%cert
rightrsasigkey=%cert
left=%defaultroute
leftcert=vpnserver.rd.xxx.com.pem
auto=add
pfs=yes

  conn roadwarrior
right=%any

  conn roadwarrior-net
leftsubnet=192.168.1.0/255.255.255.0
right=%any

  conn net-net
leftsubnet=192.168.1.0/255.255.255.0
right=%any
rightsubnet=192.168.10.0/255.255.255.0

  conn world-net
leftsubnet=*
right=%any
rightsubnet=192.168.10.0/255.255.255.0

  黑體字的部分是你需要根據你實際的環境更改的。我們用的兩端的子網是
192.168.1.0/24和192.168.10.0/24。文件中vpnserver.rd.xxx.com.pem是CA證書
。這個配置是通用的,也就是說可以適用LAN-LAN方式的倆接和遠端客戶端兩種方
式。

  2.13 下面配置分支機構的網關。這個機器也要事先安裝完全freeswan等軟件


  重新執行上面的2.7-2.9步驟生成分支機構的證書,注意:在回答問題的過程
中,關於主機名稱的部分的輸入改變為你分支機構的網關機器名稱,比如:
vpncliet.rd.xxx.com。

  2.14 復制下列生成的文件到分支機構網關上的相應位置(比如通過軟盤復制
):


  cp vpnserver.rd.xxx.com.pem /etc/ipsec.d
  cp vpnclient.rd.xxx.com.key /etc/ipsec.d/private
  cp vpnclient.rd.xxx.com.pem /etc/ipsec.d
  執行命令:openssl x509 –in vpnclient.rd.xxx.com.pem –
    outform der –out /etc/x509cert.de
  cp rootca.der /etc/ipsec.d/cacerts/RootCA.der
  cp crl.pem /etc/ipsec.d/crls

  2.15 配置分支機構的/etc/ipsec.secrets 寫上一行:


  RSA vpnclient.rd.xxx.com.key "password"。

  其他行刪除。Password就是前面回答問題的時候輸入的密碼。

  2.16 配置/etc/ipsec.conf


  # basic configuration
  config setup
interfaces=%defaultroute
klipsdebug=none
plutodebug=none
plutoload=%search
plutostart=%search
uniqueids=yes

  conn %default
keyingtries=0
compress=yes
disablearrivalcheck=no
authby=rsasig
rightrsasigkey=%cert
leftrsasigkey=%cert
right=%defaultroute
rightcert=vpnclient.rd.xxx.com.pem
auto=add
pfs=yes

  conn roadwarrior
left=21.9.22.22
leftcert=vpnserver.rd.xxx.com.pem

  conn roadwarrior-net
left=21.9.22.22
leftcert=vpnserver.rd.xxx.com.pem
leftsubnet=192.168.1.0/255.255.255.0

  conn net-net
left=21.9.22.22
leftcert=vpnserver.rd.xxx.com.pem
leftsubnet=192.168.1.0/255.255.255.0
rightsubnet=192.168.10.0/255.255.255.0

  其中黑體的部分是你可以根據實際情況修改的。

  2.17 首先啟動server端的ipsec:ipsec setup restart,然後同樣啟動客戶
端的ipsec

  2.18 建立通道:ipsec auto –up net-net然後在Server端可以用命令ipsec
whack status應該可以看到新建立的幾個通道。此時,你在兩個子網中應該可以
互相ping 通。

  3、配置Frees.wan用於支持遠程客戶端訪問。也就是允許一個Windows客戶端
,來通過VPN和公司內部的網絡進行通訊。

  第2種VPN玩法其實就是把分支機構的LAN換成一個單獨的,地址不固定的機器
。這樣的應用適合總經理出差的時候從外地ISP撥號上網連接到本部網絡的情況。
期間,非但有認證,而且通過ISP和公網的數據全部是加密的。這種方式在服務器
端的配置和上面完全一樣(記得嗎?我們在行面給出的配置已經是兼顧了兩種用法
)。這裡需要做的是把總經理的筆記本配成VPN客戶端。他的筆記本應該是
windows2000的並且升級到sp2。

  3.1 首先重復2.7-2.9步驟生成證書,其中有關主機名的部分可以輸入你總經
理的機器名。類似於:win.rd.xxx.com。當然,總經理的機器要是同名的。

  3.2 在服務器端生成windows可以認的p12格式的密鑰。


  openssl pkcs12 -export
-in win.rd.xxx.com.pem
    -inkey win.rd.xxx.com.key
    -certfile demoCA/cacert.pem
    -out win.rd.xxx.com.p12

  3.3 用命令察看環境:最好把結果輸出到文件記住,以後用得到。


  openssl x509 -in demoCA/cacert.pem -noout -subject

  3.4 把上面生成的p12文件傳送到總經理的機器上,放在一個正規的地方(這
個文件很重要)。

  3.5 在總經理的機器上從http://vpn.ebootis.de站點下載:ipsec.exe

  3.6 在總經理的機器上從: http://agent.microsoft.
com/windows2000/techinfo/reskit/tools/existing/ipsecpolo.asp站點下載
windwos2000的ipsec資源工具。

  3.7 安裝上述兩個軟件,並且把他們放在同一個目錄中。

  3.8 建立一個ipsec的MMC:(希望你知道MMC是什麼)

  依次進入Start/Run/MMC,


  File (or Console) - Add/Remove Snap-in
  單擊 'Add'
  選 'Certificates', 然後選 'Add'

  選 'Computer Account', 然後點 'Next'.
  選 'Local computer', 然後點 'Finish'.
  選 'IP Security Policy Management', 然後點 'Add'.
  選 'Local Computer', 然後點 'Finish'
  選 'Close' 然後點 'OK'

  3.9 增加一個證書

  展開左側窗口中 'Certificates (Local Computer)'

  右鍵 'Personal', 選 'All Tasks' 然後點 'Import'

  點 Next

  輸入哪個.p12 文件的路徑 (就是剛才你從服務器網關復制過來的,浏覽選擇也
可), 然後點'Next' 輸入export password(密碼), 然後點Next 選
'Automatically select the certificate store based on the type of
certificate', 然後點Next 點Finish, 如果有任何提示窗口彈出都選yes 退出
MMC, 保存當前配置到管理工具中,這樣就不用每次都重新來過了。以上所做就增
加了一個證書到總經理的機器上。

  3.10設置ipsec工具:


  編輯總經理機器上的ipsec.conf文件,把rightca的=後面寫成剛才openssl
x509 -in demoCA/cacert.pem -noout –subject命令生成的結果。類似下面這樣



  conn roadwarrior
left=%any
right=(ip_of_remote_system)
rightca="C=US,S=State,L=City,O=21vianet,
      CN=CA,[email protected]"
network=auto
auto=start
pfs=yes

  conn roadwarrior-net
left=%any
right=(ip_of_remote_system)
rightsubnet=192.168.1.0/24
rightca="C=US,S=State,L=City,O=21vianet,
      CN=CA,[email protected]"
network=auto
auto=start
pfs=yes

  黑體部分要注意配置正確。

  3.12運行ipsec.exe有下面輸出:


  C:ipsec>ipsec
  IPSec Version 2.1.4 (c) 2001,2002 Marcus Mueller
  Getting running Config ...
  Microsoft's Windows XP identified
  Host name is: (local_hostname)
  No RAS connections found.
  LAN IP address: (local_ip_address)
  Setting up IPSec ...

Deactivating old policy...
Removing old policy...

  Connection roadwarrior:
MyTunnel : (local_ip_address)
MyNet : (local_ip_address)/255.255.255.255
PartnerTunnel: (ip_of_remote_system)
PartnerNet : (ip_of_remote_system)/255.255.255.255
CA (ID) : C=US,S=State,L=City,O=ExampleCo,...
PFS : y
Auto : start
Auth.Mode : MD5
Rekeying : 3600S/50000K
Activating policy...

  Connection roadwarrior-net:
MyTunnel : (local_ip_address)
MyNet : (local_ip_address)/255.255.255.255
PartnerTunnel: (ip_of_remote_system)
PartnerNet : (remote_subnet)/(remote_netmask)

CA (ID) : C=US,S=State,L=City,O=ExampleCo,...
PFS : y
Auto : start
Auth.Mode : MD5
Rekeying : 3600S/50000K
Activating policy...

  C:ipsec>

  這時候你從客戶端ping服務器後面的內網得到幾個'Negotiating IP
Security'之後就可以ping通了。這樣總經理帶著這台筆記本到有互聯網絡的地方
就可以象在辦公室一樣連接到公司裡了。

  值的注意的是,出於安全性的問題,我們建議你關閉VPN網關上面的所有其他
服務,並仔細配置防火牆。通常的,如果你希望把所有的流量都發送給主站網關,
在從站就不需要增加iptables策略。否則,需要增加這樣一條策略:


  iptables –t nat –A POSTROUTING –o eth0 –j MASQUERADE

  在主站由於路由的原因,需要增加下面的策略:


  iptables –t nat –A POSTROUTING –o ipsec0 –s ! 192.168.10.0/255.
255.255.0 –
    j SNAT –to 192,168.1.231
  iptables –t nat –A POSTROUTING –o eth1 –s ! 192.168.10.0/255.
255.255.0 –
    j SNAT –to 192,168.1.231

  每行中前面的黑體是子網網段,後面的是本網關的內側出口。

  注:原版資料在http://vpn.ebootis.de/ 詳細資料在:http://www.
natecarlson.com/include/showpage.php?cat=linux&page=ipsec-x509

  (14)安裝另一種郵件系統postfix

  任何一種知名的事物似乎一定有至少一個跟風之作(微軟的Windows系列似乎
例外,跟風者無一例外的夭折了),並且這些後來者往往有他們更出色的方面才能
立足。在UNIX世界的郵件服務器領域,沒有哪個產品能夠有sendmail程序這麼大的
名氣,盡管它有一個非常晦澀的配置文件。同樣的,有不少人為了改進Sendmail的
缺點做了很多其他的郵件服務器產品,並且的它們都有各自鮮明的特色,並且吸引
了不少用戶。其中佼佼者當屬Qmail和Postfix郵件系統了。這裡我們之所以選擇
Postfix介紹,主要基於下面兩個原因:其一、Postfix是一個和Sendmail一樣的為
高負載郵件服務器設計的MTA(郵件傳輸代理),而Qmail處理能力要差一些(它比較
適合中小型的應用場合)。在某些情況下Postfix甚至比Sendmail速度快3倍。其二
、Postfix是按照兼容Sendmail的設計路子來做的,相當的配置文件都可以直接使
用。這樣原有的Sendmail用戶可很容易的升級的Postfix。這是一個很“優惠”的
升級條件,吸引了很多的原來的Sendmail用戶。

  安裝和配置Postfix郵件系統的最基本步驟如下:

  1、從http://www.postfix.org下載Postfix的最新版本。我們這裡使用的版本
是postfix1.1.5,文件名字叫作postfix-1.1.5.tar.gz,把這個文件下載到
/usr/local/src裡面

  2、cd /usr/local/src

  3、tar zxvf postfix-1.1.5.tar.gz釋放壓縮文件

  4、cd postfix-1.1.5

  5、vi INSTALL仔細閱讀該安裝文件和注意事項。

  6、make clean

  7、make

  8、useradd postfix (或者是adduser postfix)增加一個新的用戶。然後用
:vi /etc/passwd 編輯用戶文件的postfix一行,讓該行看起來類似:postfix:
*:2126:2128:postfix:/no/where:/no/shell 其中號碼部分不要改動。這主要是為
了安全性考慮。

  9、groupadd postdrop 建立一個組,但是這個組不能包括任何一個用戶。
/etc文件中的相關行類似於:postdrop:*:54321:

  10、檢查/etc/mail/aliases裡面有沒有postfix: root一行,沒有就加上。

  11、# mv /usr/sbin/sendmail /usr/sbin/sendmail.OFF

  12、# mv /usr/bin/newaliases /usr/bin/newaliases.OFF

  13、# mv /usr/bin/mailq /usr/bin/mailq.OFF

  14、# chmod 755 /usr/sbin/sendmail.OFF /usr/bin/newaliases.OFF
/usr/bin/mailq.OFF

  15、make install (新安裝)

  16、make upgrade (升級)

  在執行上述兩步(選擇其中一個)的時候,腳本會提問許多路徑什麼的,建議
不要做改動一路回車下來,除非你確定你知道改動默認值的必要性。

  17、啟動是postfix start

  注意:以上步驟10-14是從sendmail升級的時候用的。

  很可能的,這樣安裝完了系統還不能收發郵件。首先,你應該安裝一個pop3郵
件接收協議服務(參見pop3安裝)。另外的,需要按照下列步驟檢查一下相關的配
置文件。

  1、/etc/mail/access是允許訪問的控制文件,類似下面內容,注意:地址就
別照抄了。


  127.0.0.1 RELAY
  21.9.22 RELAY
  211.151.194.14 RELAY

  事實上這個文件可以定義得相當復雜。模板和說明可以參照:
/etc/postfix/access

  2、編輯完成/etc/access文件,還要把它編譯成數據庫格式:makemap hash
access.db < access

  3、/etc/mail/aliases是別名文件,類似下面的內容:


  MAILER-DAEMON: postmaster
  postmaster: root
  bin: root
  daemon: root
  nobody: root
  postfix: root

  這個文件的模板和說明可以參見/etc/postfix/aliases。編輯完成後,用
newaliases aliases轉換成數據庫格式。

  4、/etc/mail/local-host-names寫了本地主機的名字,內容類似於:


  rd.xxx.com
  tls65.rd.xxx.com


  5、主配置文件:/etc/postfix/main.cf ,看一下內容,比sendmial.cf強多
了吧?每一項都有詳細的說明和示例。最主要的(僅能使運行的)配置項目在載面
介紹一下。


  5.1 mydomain

  指明你的域名,在這裡我們指定:


  mydomain = test.com
  5.2 myorigin

  myorigin參數指明發件人所在的域名。如果你的用戶的郵件地址為
[email protected],則 該參數指定@後面的域名。在這裡我們指定:


  myorigin = $mydomain
  5.3 mydestination

  mydestination參數指定postfix接收郵件時收件人的域名,換句話說,也就是
你的postfix 系統要接收什麼樣的郵件。通常與myorigin一樣:


  mydestination = $mydomain
  5.4 mynetworks_style

  設置網絡類型,我們指定:


  mynetworks_style = subnet
  5.5mynetworks

  定義可以使用的此smtp服務器發信的客戶ip地址,因為公司的ip范圍已知,所
以我們指定:


  mynetworks = 192.168.1.0/24

  6、設定DNS服務器的MX記錄。例如,在域test.com中,安裝postfix的服務器
名字叫mail.test.com,則在本域的DNS中設定MX記錄為mail.test.com

  7、更改設定後不必重新啟動postfix,只需要用postfix reload命令重新加載
配置即可。

  8、post還支持虛擬域名,配置方法如下:

  8.1 首先把otherdomain.com(要用的虛擬域名)的MX記錄指向mail.test.
com(本域的郵件服務器),這個配置在負責解析otherdomain.com的DNS做。

  8.2 為了讓用戶可以使用[email protected]收發郵件,我們必須配
置虛擬域,在main.cf文件中,我們添加以下內容:


  virtual_maps = hash:/etc/postfix/virtual

  這裡假定用戶tom、test、white需要使用這個虛擬域名,當然首先要在系統中
添加這幾個用戶(用useradd或adduser填加系統用戶),然後建立
/etc/postfix/virtual文件並添加以下內容:


  othername.com anything
  [email protected] tom
  [email protected] test
  [email protected] white

  之後,用postmap命令生成虛擬域數據庫:


  postmap /etc/postfix/virtual

  明白上面配置文件的例子,你就可以非常靈活的多域名郵件系統了。

五、日常維護

Copyright © Linux教程網 All Rights Reserved