跳轉到內容

FOSS 網路基礎設施和安全/FOSS 主要網路功能

來自 Wikibooks,開放世界開放書籍

域名系統

[編輯 | 編輯原始碼]

DNS 是將網際網路的技術方面連線到網路使用者的粘合劑。簡單地說,DNS 提供名稱到 IP 地址的轉換,反之亦然。網際網路基於 IP 協議,這意味著網際網路上的計算機僅透過 IP 地址知道彼此的路徑。但是,大多數人不可能記住網際網路上每臺計算機的數字 IP 地址。這就是 DNS 派上用場的地方。

DNS 的主要目的是將名稱對映到網際網路上的物件。該物件可以是 IP 地址或郵件伺服器、域名伺服器甚至個人電話號碼的標識。畢竟,與數字相比,名稱更容易記憶。

早期版本的 DNS 是一個名為 hosts.txt 的檔案,該檔案在 1970 年代 ARPANET[1] 的早期由斯坦福研究院網路資訊中心 (SRI-NIC) 手動維護。這個 hosts.txt 檔案在一個計算機上更新,並由世界各地的計算機拉取。雖然這種方法在一段時間內有效,但當更多主機新增到網路時,名稱衝突變得迫在眉睫。平面單檔案對映根本無法擴充套件。因此,建立了 DNS。它在 RFC 1034 和 1035 中定義。

DNS 包含三個元件

  • DNS 名稱空間 - 域名;
  • DNS 伺服器 - 託管名稱空間的伺服器;以及
  • 解析器 - 使用伺服器的客戶端。

這三個元件協同工作以建立可行的名稱解析解決方案。DNS 的設計方式是,所有資料都儲存在本地,但可以在全球範圍內檢索。資料分佈在不同的域名伺服器之間,沒有一臺計算機擁有所有資料。資料在內部始終保持一致,從而提供穩定的系統。此外,DNS 的設計方式允許任何裝置將 DNS 查詢傳送到伺服器。

DNS 名稱空間

[編輯 | 編輯原始碼]

DNS 名稱空間是一個概念。名稱是對地址、物件和物理存在的引用,這些引用構成了人類可理解的參考,用於標識端點。DNS 名稱空間是為 DNS 定義的名稱空間。在網際網路上,域名為 DNS 名稱空間提供層次結構,因此,網際網路地址的標識方式是有序的。

讓我們舉一個比較的例子。如果有人要給我寄一封信,它將被寄到

Gaurab Raj Upadhaya
205/8 Sahayogi Marg, Kathmandu, Nepal

在這個例子中,地址提供了一種方式,使信件可以從世界任何地方寄給我。同樣,如果有人要給我發一封電子郵件,他們可以使用以下任一電子郵件地址

gaurab@wlink.com.np
gaurab@lahai.com

在這兩種情況下,雖然電子郵件最終都到了同一個郵箱,但它們到達該地址的方式卻不同。需要理解的是,使電子郵件起作用的域名層次結構。它是 DNS 名稱空間的一部分。域名是 DNS 名稱空間的實現。域名系統使用倒置的樹狀結構。DNS 樹的頂層稱為“根”。[2] “根”用“.”(點)引用。緊鄰“根”下方的是國家程式碼頂級域名 (ccTLD) 和全球頂級域名 (gTLD)。這兩個頂層是在全球範圍內預定義和固定的。ccTLD 按照 ISO 3166 標準分配。gTLD 由網際網路名稱與數字地址分配機構 (ICANN) 決定。ccTLD 的示例包括 .np、.in、.my、.uk、.se 等。ccTLD 始終是兩位字母程式碼。gTLD 的示例包括 .com、.org、.net、.gov、.edu、.mil、.info、.name 和 .aero。

域名和子域名

[編輯 | 編輯原始碼]

頂級域名(TLD)之下是使用者級空間,通常稱為域名。例如,.net 下的所有內容都在 .net 域中,而 .uk 下的所有內容都在英國域中。同理,lahai.com 下的子域名,例如 evo.lahai.com,就屬於 lahai.com 域。

在頂級域名下建立的每個域名都稱為子域名。因此,在上面的例子中,evo.lahai.com 是 lahai.com 的子域名。

區域和委派

[edit | edit source]

從計算機的角度來看,每個 DNS 名稱空間都由其區域檔案反映,也稱為“管理名稱空間”。名稱伺服器上的每個域名或子域名都有自己的區域檔案,它是提供對映的主要檔案。

DNS 的可擴充套件性在於它能夠將子域名的委派定義到其他伺服器和其他區域檔案。因此,根區域檔案將 ccTLD 和 gTLD 功能委派給各自的伺服器,而每個 ccTLD 或 gTLD 伺服器進一步將其特定的域名資訊委派給其註冊所有者。因此,實際的名稱到物件對映將僅由該域的權威區域提供。這個過程可以比作父母將權力委派給他們的孩子。

名稱伺服器

[edit | edit source]

名稱伺服器託管 DNS 區域檔案。它們回答指向它們的查詢。名稱伺服器有兩種型別。

  1. 權威名稱伺服器
    • 主伺服器
    • 從伺服器
  2. 非權威名稱伺服器
    • 快取名稱伺服器
    • 快取轉發器

大多數實現是兩種或多種型別的組合。

權威名稱伺服器

[edit | edit source]

權威名稱伺服器託管指定域的主區域檔案。名稱伺服器的權威性基於來自頂級域的委派。因此,任何伺服器要成為 evo.lahai.com 域的權威伺服器,它必須在 lahai.com 區域檔案中進行委派。

主檔案是託管主檔案的地方。從伺服器從主伺服器映象檔案。一個主伺服器可以有多個從伺服器。單個主伺服器可以支援超過 2000 萬個名稱,但實際上這樣做可能不是一個好主意。不同的 DNS 伺服器軟體能夠處理大量的 DNS 查詢。一個常用的例子是每秒 30 萬次查詢。資料庫主副本的變化會立即複製到從伺服器,或者根據管理員設定的時間安排複製。

遞迴名稱伺服器

[edit | edit source]

遞迴名稱伺服器不是它提供資料的每個域的權威伺服器。它代表其他客戶端執行操作,並在其記憶體中快取結果。如果在預定義的時間段內傳送相同的查詢,那麼它會從快取中提供資料,而不是搜尋整個 DNS 結構。對於快取轉發器,伺服器使用另一個 DNS 伺服器來獲取結果。當資料被轉發到客戶端時,它們會被標記為非權威資料。

混合實現

[edit | edit source]

在較小的組織中,單個名稱伺服器可以用於多種目的。一個伺服器可以成為幾個特定域的權威伺服器,但它也可以作為其他域的非權威快取伺服器。由於最近出現的 DNS 快取中毒事件,強烈建議不要將同一臺伺服器用於權威和快取功能。

解析器

[edit | edit source]

解析器是向伺服器請求 DNS 資料的客戶端。解析器通常在作業系統級別以庫的形式實現,以便多個應用程式可以使用它。

DNS 安全性

[edit | edit source]

網際網路的一個重要優勢是使用者能夠使用名稱訪問正確的伺服器和系統。配置錯誤的 DNS 或格式錯誤的 DNS 查詢會阻止使用者使用;因此,需要一個安全的 DNS 系統。遵循以下簡單要點非常重要

  • 只允許授權系統從主伺服器進行區域傳輸。
  • 至少要有兩個 DNS 伺服器,並且記住不要將它們放在同一個位置。
  • 確保你的正向和反向 DNS 資訊一致。
  • 遵循當前的 DNS 實施最佳實踐。

使用 BIND 進行 DNS

[edit | edit source]

BIND 是 DNS 協議的實現。它提供了域名系統主要元件的公開可重新分發的參考實現,包括

  • DNS 伺服器 (named);
  • DNS 解析器庫;以及
  • 用於驗證 DNS 伺服器正常執行的工具。

BIND DNS 伺服器被用於網際網路上絕大多數的名稱服務機器,因為它提供了一個健壯且穩定的架構,組織的命名架構可以建立在這個架構之上。BIND 分發版中包含的解析器庫提供了域名和網際網路地址之間轉換的標準介面,旨在與需要名稱服務的應用程式連結。

獲取和安裝 BIND

[edit | edit source]

BIND 通常在大多數 GNU/Linux 發行版中預設安裝。否則,你始終可以從 BIND 主頁獲取副本:http://www.isc.org/products/BIND/。BIND 在不同 GNU/Linux 發行版中的安裝過程可能不同。最好遵循發行版指南進行安裝。

BIND 的配置

[edit | edit source]

BIND 配置必須分三個階段進行。

首先,需要配置客戶端或解析器庫,然後配置伺服器本身,最後配置工具。

解析器配置

[edit | edit source]

解析器是 DNS 系統的客戶端。即使你沒有在計算機上執行 DNS 伺服器,你也需要安裝解析器。自然,為了配置 BIND,你首先需要配置解析器庫。這可以透過配置以下檔案來完成

/etc/host.conf

該檔案指定如何執行主機名解析。它已經過時,但較舊的安裝程式可能仍在使用它。

/etc/nsswitch.conf

該檔案已取代 host.conf。它指定名稱解析發生的順序。它告訴計算機嘗試將名稱轉換為 IP 地址的順序。

# /etc/nsswitch.conf

任何以 # 號開頭的行都是註釋。

'#' 在此示例中,主機透過 DNS 解析,然後從檔案解析。

hosts: dns files

'#' 僅檔案用於網路名稱解析

networks: files

安裝期間建立的預設檔案通常就足夠了。

/etc/resolv.conf

resolv.conf 是基本的 DNS 配置檔案,它指定 DNS 伺服器和域名。這裡三個關鍵詞是“domain”、“search”和“nameserver”。

# /etc/resolv.conf
# Our domain
domain gaurab.org.np
# Default search domains in order of priority
search gaurab.org.np lahai.com.np
#
# We use the local server as the first name server.
nameserver 127.0.0.1
# we have second name server at up stream provider.
nameserver 206.220.231.1

該檔案也是在安裝期間建立的,如果你的網路配置沒有改變,你可以保持它不變。

伺服器配置

[edit | edit source]

named’ 是最著名的 FOSS DNS 守護程序。守護程序是一種在伺服器上作為服務持續執行的軟體程式。因此,DNS 伺服器通常被稱為“名稱守護程序”或簡稱為“named”。DNS 伺服器的檔名也是“named”。

對於 BIND 版本 4.x.x,named 使用配置檔案 /etc/named.boot。但在 BIND 的更高版本(8.x.x)中,配置檔案是 /etc/named.conf。

出於我們的目的,我們使用 /etc/named.conf。在以下示例中,指定了 lahai.com 和 gaurab.org.np 域的主 DNS。還顯示了 wlink.com.np 域的從屬 DNS。

//
// /etc/named.conf file for ns.lahai.com
// in this file ‘//’ is the comment.

// you specify the default data directory for DNS. Now all DNS
// related files should go into /var/named or any other
// directory as specified.

options {
directory “/var/named”;
};

// First you need to add the DNS root zone file name. It’s there
// by default.

zone “.” {
type hint;
file “named.ca”;
};

// Now we are specifying a master domain called lahai.com
// whose information is stored in the file ‘named.lahai.com’

zone “lahai.com” {
type master;
file «named.lahai.com»;
};

// the whole thing can also be done in a single line.

zone “gaurab.org.np” { type master; file “named.gaurab.org.np”;};

// Now this server is also a slave for another domain “wlink.com.np’

zone “wlink.com.np” { type slave; masters { 202.79.32.33; };
file “slave/named.wlink.com.np”; };

zone “0.0.127.in-addr.arpa” { type master; file “named.local”; }

該檔案為新增有關主機名和 IP 地址的實際資料奠定了基礎。/etc/named.conf 檔案可以接受許多其他配置指令,但這裡不會討論這些指令。

在 named.conf 檔案中進行相關條目後,有必要為相應的域建立主機名記錄。所有檔案都應放置在 named.conf 檔案中 directory 指令指定的目錄中。

named.local 檔案為環回介面或環回地址使用的 127.0.0.0 網路提供反向區域查詢。預設檔案應保持不變。named.ca 為 DNS 伺服器提供根伺服器資訊。預設情況下不應編輯。現在讓我們來看一個 lahai.com 域的示例 DNS 檔案(named.lahai.com

; file /var/named/named.lahai.com

@ IN SOA ns.lahai.com. gaurab.lahai.com. (
2004050801 ; serial number
86400 ; refresh: once per day (1D)
3600 ; retry: one hour (1H)
3600000 ; expire: 42 days (6W)
604800 ; minimum: 1 week (1W)
)

# we are specifying three Name servers.

IN NS ns.lahai.com.
IN NS a.ns.hopcount.ca.
IN NS ns1.lahai.com.

# local mail is distributed on another server

IN MX 10 mail.lahai.com.
IN MX 20 ns.lahai.com.
; loopback address
localhost. IN A 127.0.0.1

# The glue records so that the NS records can resolve.

ns IN A 204.61.208.110
ns1 IN A 202.79.55.14

# main DNS entry

www IN A 207.189.222.2
mail IN A 202.51.76.8

# Aliases for the www machine.

tftp IN CNAME www

以上檔案是“lahai.com”域的主檔案。如果要新增“lahai.com”域的額外名稱,例如 pop3.lahai.com 和 smtp.lahai.com,則應在上述檔案中新增它們。

此檔案中列出名稱伺服器的順序使它們成為主伺服器和從屬伺服器。第一個 NS 始終為主伺服器,另外兩個是從屬伺服器。每次更新主伺服器時,它都可以自動向檔案中列出的其他 NS 伺服器傳送通知。此引數可以在 named.conf 檔案中配置。

關於反向 DNS 的說明

[edit | edit source]

大多數與 DNS 相關的錯誤通常是由於反向 DNS 配置錯誤造成的。反向 DNS 是將數字對映到名稱,或者說是正向名稱解析的相反操作。許多應用程式使用此功能來驗證網路源 IP 地址是否有效。一個常見的例子是 SPAM 或未經請求的商業電子郵件(垃圾郵件)預防軟體,它可能拒絕接受來自未配置反向 DNS 的任何域的郵件。

反向 DNS 透過從區域網際網路註冊機構 (RIR) 之一委託特定組的 IP 地址來實現,在亞太地區是亞太網路資訊中心 (APNIC) (http://www.apnic.net)。由於網際網路服務提供商 (ISP) 通常是 APNIC 成員,因此他們負責為他們及其客戶使用的 IP 地址配置適當的反向 DNS。

由於每臺計算機都有自己的環回介面以及與其關聯的 IP 地址,因此 BIND 附帶了named.local 檔案的預設安裝,該檔案是 127.0.0.0 網路的反向 DNS。此檔案如下所示

; /var/named/named.local
$TTL 86400
@ IN SOA localhost. root.localhost. (
1997022700 ; Serial
28800 ; Refresh
14400 ; Retry
3600000 ; Expire
86400 ) ; Minimum
IN NS localhost.
1 IN PTR localhost.

管理 BIND DNS

[edit | edit source]

BIND 包含一個名為rndc 的實用程式,它允許您使用命令列語句在本地或遠端管理 named 守護程序。rndc 程式使用‘/etc/rndc.conf’檔案進行其配置選項,這些選項可以用命令列選項覆蓋。

在您可以使用 rndc 之前,您需要將以下內容新增到您的 named.conf 檔案中

/etc/named.conf

controls { 
inet 127.0.0.1 allow { localhost; } keys { <key-name>; };
};

key “<key-name>” {
algorithm hmac-md5;
secret “<key-value>”;
};

在這種情況下,<key-value> 是一個 HMAC-MD57[3] 金鑰。您可以使用以下命令生成自己的 HMAC-MD5 金鑰

dnssec-keygen -a hmac-md5 -b <bit-length> -n HOST <key-file-name>

建議使用至少 256 位長度的金鑰。應該放置在 <keyvalue> 區域中的實際金鑰可以在 <key-file-name> 中找到。

配置檔案 /etc/rndc.conf

options {
default-server localhost;
default-key “<key-name>”;
};

server localhost {
key “<key-name>”;
};

key “<key-name>” {
algorithm hmac-md5;
secret “<key-value>”;
};

<key-name> 和 <key-value> 應與它們在 /etc/named.conf 中的設定完全相同。

要測試所有設定,請嘗試 rndc reload 命令。您應該看到類似於以下內容的響應

rndc: reload command successful

您還可以使用 rndc reload 來重新載入對 DNS 檔案所做的任何更改。

DNS 工具

[edit | edit source]

有兩個常用的工具來測試 DNS:nslookupdig。Nslookup 是兩者中較舊的一個,不太受歡迎。您可以使用dig 實用程式來測試 DNS 服務。在大多數 Unix 和類 Unix 系統上使用命令‘man dig’可以訪問相關的聯機幫助頁。

郵件伺服器

[edit | edit source]

網際網路和電子郵件在網際網路的早期被認為是同義詞。即使在今天,超過四分之一的網際網路總流量仍然是電子郵件,FOSS 統治電子郵件世界也就不足為奇了。在網際網路上,電子郵件透過簡單郵件傳輸協議 (SMTP) 工作,該協議在RFC 2821 中定義。SMTP 是一種非常簡單的協議,旨在使郵件伺服器之間的電子郵件傳輸儘可能容易。

SMTP 以純文字形式工作,並在郵件伺服器之間進行通訊,郵件伺服器也稱為郵件傳輸代理或 MTA。“sendmail”是最流行的郵件伺服器軟體。其他示例包括 exim、qmail 和 postfix。閉源替代方案是 Lotus Notes 和 Microsoft Exchange。

FOSS 的魅力在於可用的軟體複雜性。雖然 exim 和 postfix 的佔用空間更小,並且在伺服器上消耗的記憶體更少,但 sendmail 是一款執行著世界上最繁忙郵件伺服器的複雜軟體。

FOSS 郵件伺服器的另一個重要優勢是軟體的模組化。Sendmail 本身提供了大量的擴充套件和包含模組的條款。這使得開發人員可以更輕鬆地擴充套件軟體以滿足其內部需求。如果您需要為您的電子郵件伺服器開發一個擴充套件來自動處理不同型別的電子郵件,FOSS 是一個更好的選擇。

[edit | edit source]

兩個主要的與郵件相關的協議是郵局協議 (POP) 和網際網路郵件訪問協議 (IMAP)。這些協議為使用者提供終端使用者功能。POP 和 IMAP 由電子郵件軟體用於訪問儲存在伺服器上的電子郵件。因此,如果您使用電子郵件客戶端(如 Eudora 或 Thunderbird),那麼它將使用 POP 或 IMAP 從您的郵件伺服器將電子郵件拉取到本地計算機。

處理垃圾郵件

[edit | edit source]

未經請求的商業電子郵件 (UCE) 或垃圾郵件對於所有服務提供商來說都是一個日益嚴重的問題。現在,大多數郵件伺服器軟體至少都具有最低限度的反垃圾郵件功能。

傳入垃圾郵件

[edit | edit source]

Spam Assassin 是一種流行的軟體,用於過濾傳入的垃圾郵件。它可以被呼叫用於單個使用者或整個系統,並提供配置一組複雜規則來檢測和刪除傳入垃圾郵件的能力。

阻止傳出垃圾郵件

[edit | edit source]

提供商也有義務不讓他們網路被垃圾郵件傳送者用來發送郵件。允許開放中繼的配置錯誤的郵件伺服器是垃圾郵件的最大來源之一。越來越多的郵件伺服器被配置為預設情況下不開放中繼。感染病毒的計算機也是垃圾郵件的另一個來源。

反垃圾郵件功能

[編輯 | 編輯原始碼]

FOSS 最大的優勢之一是其可擴充套件性。郵件伺服器中提供的反垃圾郵件功能最能體現這一點。如今,幾乎 80% 的電子郵件被認為是 UCE,通常被稱為垃圾郵件或簡稱為垃圾郵件。UCE 不僅消耗大量頻寬和網路資源,而且還會給使用者帶來困擾並降低組織的生產力。

當今最好的反垃圾郵件工具都是 FOSS。為了阻止垃圾郵件,必須確定其來源,而還有什麼比成千上萬的使用者共同識別垃圾郵件傳送者更好的方法呢?FOSS 概念確保每個垃圾郵件都不會被漏報,以便輕鬆識別來源。

一種常見的反垃圾郵件技術是使用即時黑名單或 RBL。不同的 RBL 列出了已知是大量垃圾郵件來源的網路的 IP 地址。同樣,這些列表的開放性以及 Spam Assassin 等軟體使得更容易根據使用者的自身需求調整軟體。

例如,在企業環境中,使用者需要使用大寫字母傳送電子郵件,因為這是他們工作性質決定的。現在,如果整封電子郵件都用大寫字母寫成,大多數反垃圾郵件工具都會將其識別為垃圾郵件。但是,如果使用 FOSS 解決方案,我們可以修改程式碼並刪除針對網路內部發出的郵件的這一標準。

使用 Sendmail 進行 SMTP

[編輯 | 編輯原始碼]

Sendmail 是 Linux 下可用的 SMTP 伺服器之一。它也是最古老的開源軟體之一,被廣泛使用。許多人認為 sendmail 太複雜,難以使用。Sendmail 有其優點和缺點。由於它具有許多功能,因此它是一個複雜的軟體。但是,與此同時,sendmail 的基本操作可以輕鬆管理。

Sendmail 配置透過直接編輯 sendmail 配置檔案(不推薦)或使用 M4 宏語言從一組變數建立新的配置檔案來處理。

現在我們將處理 sendmail。以下是預設 sendmail 安裝所需的最小更改。

在 sendmail 中啟用網路功能

[編輯 | 編輯原始碼]

許多發行版中軟體的預設安裝僅限於郵件伺服器僅在迴環地址上監聽,[4] 即伺服器無法透過網路訪問。要使 sendmail 可從網路訪問,您需要編輯 /etc/mail/sendmail.mc 檔案中的相應行。您應該編輯以從以下行中刪除 127.0.0.1

DAEMON_OPTIONS (‘Port=smtp, Name=MTA’)

之後,您需要執行 m4 宏以建立新的 sendmail 配置檔案

[root@mail /etc/mail]# m4 sendmail.mc > sendmail.cf
[root@mail /etc/mail]# service sendmail restart

這應該會為 sendmail 守護程式啟用網路可訪問性。sendmail.mc 檔案中還有許多其他選項可以嘗試。

本地域名

[編輯 | 編輯原始碼]

編輯 /etc/mail/local-host-names 並新增您的站點使用的所有域名和域名別名。

# local-hosts-names -
# include all aliases for your machine here.
lahai.com
gaurab.org.np
ns.lahai.com
# some examples
mail.you.com
yoursite1.com
mail.yoursite1.com
yoursite2.com
mail.yoursite2.com
yoursite3.com
mail.yoursite3.com

這些是必要的,以便 sendmail 接受這些域名的郵件。

虛擬域名使用者

[編輯 | 編輯原始碼]

但是,上述配置並不能完全解決虛擬域名使用者的問題。為此,請使用 virtusertable 功能。轉到 /etc/mail/virtusertable

# /etc/mail/virtusertable
#virtual e-mail address real username
user1@yoursite1.com user1_yoursite1
# for domain pop, i.e, all e-mail in a domain into a single account
@yoursite2.com yoursite2

請確保在進行更改後重新啟動 sendmail 守護程式。

[root@mail /etc/mail]# service sendmail restart

訪問控制

[編輯 | 編輯原始碼]

Sendmail 透過 /etc/mail/access 檔案提供訪問控制功能。

# /etc/mail/access
spam@cybermail.com REJECT
aol.com REJECT
207.46.131.30 REJECT
postmaster@aol.com OK
linux.org.np RELAY
192.0.2. OK

OK - 接受郵件。RELAY - 即使郵件不是發往我們的主機,也接受來自此主機或使用者的郵件;也就是說,接受來自此主機的其他主機的中繼郵件。REJECT - 以通用訊息拒絕郵件。

要求您允許您自己的網路 RELAY。否則,網路上使用伺服器作為其傳出 SMTP 伺服器的計算機將無法傳送電子郵件。

將 sendmail 作為系統守護程式執行

[編輯 | 編輯原始碼]

該指令碼位於 /etc/rc.d/init.d/sendmail,並在計算機啟動時自動啟動。您也可以使用其他命令啟動它

[root@mail /etc/mail]# /etc/init.d/sendmail start
[root@mail /etc/mail]# service sendmail restart

從 xinetd 執行 sendmail

[編輯 | 編輯原始碼]

從安全形度來看,最好讓 sendmail 從 xinetd.conf 執行,而不是作為獨立的守護程式執行。為此,我們需要將其新增到 /etc/xinetd.d 目錄中,並將其從 /etc/rc.d/init.d 中刪除,然後將 sendmail 佇列處理新增到 cron 中。以下是您需要執行的操作

1. 使用 xinetd 時,在 /etc/xinetd.d/ 中建立一個類似於 sendmail 的檔案

default: on
service sendmail
{
socket_type = stream
wait = no
user = root
server = /usr/bin/sendmail -bs
}

2. 編輯 /etc/rc.d/init.d/sendmail,使其在最開始的某個位置有 exit 0(這可能不是最好的方法,因此請確保記錄對這些檔案的更改),以便此檔案除了啟動 sendmail 之外不做任何操作。

3. 透過編輯您的(root 的)crontab9(要編輯,請使用 crontab -e),新增類似於以下內容的行

*/20 * * * * /usr/sbin/sendmail -q

這將每 20 分鐘(如果存在)處理一次 sendmail 佇列。

其他郵件伺服器

[編輯 | 編輯原始碼]

其他流行的郵件伺服器是 postfix、exim 和 qmail。雖然 postfix 是某些 Linux 發行版的預設安裝,但許多小型服務提供商採用了 exim,因為它簡單、健壯。Exim 還內建了強大的反垃圾郵件功能。

Web 伺服器 - Apache

[編輯 | 編輯原始碼]

FOSS 在 Web 伺服器市場的主導地位是眾所周知的。Apache Web 伺服器是網際網路上進行的 Web 伺服器調查中無可爭議的領導者。它還有許多優勢:它是第一個引入基於名稱的虛擬主機的領導者,並且是第一個真正模組化的 Web 伺服器,可以與資料庫伺服器無縫協作。它還具有完全內建的身份驗證、授權和訪問控制功能,以及指令碼支援。

2006 年 4 月 Web 伺服器調查

[編輯 | 編輯原始碼]

最新的調查統計資料可在 http://news.netcraft.com/archives/web_server_survey.html 找到

Apache 還與 OpenSSL 完全整合,OpenSSL 提供安全套接字層,[5] 從而能夠將 Apache Web 伺服器用於電子商務和安全交易。而且,最棒的是,它可以透過基於文字的配置檔案(httpd.conf)進行完全配置。

配置 Apache

[編輯 | 編輯原始碼]

配置 Apache 相當容易,除非您想在 Web 伺服器上運行復雜的軟體。預設情況下,配置檔案通常位於“/etc/httpd/conf”中。其他配置檔案位於“/etc/httpd”中。Apache 也通常安裝在“/usr/local/apache”中。

Apache 的主要配置檔案是 httpd.conf。Apache 通常可以開箱即用。

httpd.conf 檔案

[編輯 | 編輯原始碼]

指令是定義 Apache 實際執行方式、檔案在伺服器上的位置、Apache 可以使用多少機器資源、允許訪問者檢視哪些內容、伺服器可以處理多少個併發訪問者以及其他引數的設定。

讓我們看看主要指令

/etc/httpd/conf/httpd.conf – 主配置檔案

伺服器標識

ServerName:構建自引用 URL
ServerAdmin:伺服器管理員的電子郵件,顯示在錯誤訊息中
檔案位置
DocumentRoot - 網站靜態內容所在的位置
ServerRoot – 用於不以斜槓“/”開頭的檔案的相對位置
ErrorLog – 用於記錄伺服器範圍內的錯誤訊息
PidFile – 包含 httpd 程序的程序 ID
Alias – 用於在 DocumentRoot 之外提供檔案
ScriptAlias – CGI 指令碼(動態內容生成器)的位置
DirectoryIndex - 指定的檔案預設顯示
Userdir – 用於從使用者主目錄中的 public_html 目錄提供檔案,例如 http://www.site.com/~user
程序建立
MaxClients – 允許來自客戶端的併發連線數
伺服器池調節 - 在 UNIX 下,Apache 是多程序的;它平衡了生成子程序所需的開銷與系統資源。您可以更改諸如 MinSpareServers、MaxSpareServers、StartServers、MaxClients 等設定以微調伺服器的效能。
User、Group – 設定 Apache 子程序的許可權
網路配置
BindAddress - 將伺服器限制為監聽單個 IP 地址
Listen - 指定多個 IP 地址和/或埠
KeepAlive - HTTP 的擴充套件,提供持久連線
Port – Web 伺服器執行的 TCP 埠號;可以更改為未使用的埠
URL 重定向
將請求重定向到另一個 URL Redirect permanent /foo/ http://www.example.com/bar/

虛擬主機

[編輯 | 編輯原始碼]

虛擬主機是在一臺物理機器上維護多個 Web 伺服器名稱的做法。例如,同一臺物理機器可以同時託管 http://www.apdip.nethttp://www.iosn.net

引數特定於虛擬主機,它會覆蓋一些主要的伺服器配置預設值。虛擬主機可以分為兩種型別:基於 IP 的和基於名稱的。

在基於 IP 的虛擬主機中,連線的 IP 地址用於確定要服務的正確虛擬主機。這種方法要求每個虛擬主機都有一個單獨的 IP 地址。在基於名稱的虛擬主機中,主機名作為 HTTP 標頭的一部分發送,這意味著許多不同的主機可以共享同一個 IP 地址。但是,您需要在 DNS 中將每個主機對映到 IP 地址。這緩解了對稀缺 IP 地址的需求。基於名稱的虛擬主機不能與 SSL 安全伺服器一起使用,並且較舊的軟體可能不相容。

虛擬主機指令

[編輯 | 編輯原始碼]
  • NameVirtualHost – 指定要監聽的 IP 地址和埠號(可選)
  • <VirtualHost> – 與 NameVirtualHost 相同的引數
  • ServerName – 指定要服務的哪個主機
  • DocumentRoot – 檔案系統中該主機的內容所在的位置
  • ServerAlias – 使主機可以透過多個名稱訪問

以下是一個示例。

NameVirtualHost *

<VirtualHost *>
ServerName www.domain.tld
DocumentRoot /www/domain
</VirtualHost>

<VirtualHost *>
ServerName www.otherdomain.tld
DocumentRoot /www/otherdomain
serverAlias otherdomain.tld *.otherdomain.tld
</VirtualHost>

如果找不到匹配的虛擬主機,則將使用第一個與 IP 地址匹配的虛擬主機。所有其他標準 Apache 指令都可以在虛擬主機指令內部使用。

使用 .htaccess 檔案對目錄進行訪問控制

[編輯 | 編輯原始碼]

.htaccess 檔案是一個包含 Apache 指令的文字檔案

AccessFileName .htaccess …在 httpd.conf 中

.htaccess 檔案內容

AuthName “restricted stuff”
AuthType Basic
AuthUserFile /usr/local/etc/httpd/htusers
AuthGroupFile /usr/local/httpd/htgroup
require valid-user
require group staff
require user lahai gaurab
AuthName “restrict posting”
AuthType Basic
AuthUserFile /usr/local/etc/httpd/htusers
AuthGroupFile /usr/local/httpd/htgroup
<Limit POST>
require group admin
</Limit>

htpasswd – 用於管理使用者以進行訪問控制

htpasswd -c /usr/local/etc/httpd/users martin

htpasswd /usr/local/etc/httpd/users ritesh

/usr/local/etc/httpd/htusers contents:
martin:WrU808BHQai36
jane:iABCQFQs40E8M
art:FAdHN3W753sSU

/usr/local/httpd/htgroup contents:
staff:martin jane
admin:lahai gaurab

參考資料

[編輯 | 編輯原始碼]

使用 Squid 進行代理和 Web 快取

[編輯 | 編輯原始碼]

與郵件伺服器和 Web 伺服器一樣,FOSS 也在代理和快取伺服器領域樹立了標準。Squid 是網路世界中代理服務的代名詞。它是一個高度模組化、高效能的代理和 Web 快取伺服器。Squid 網站是 http://www.squid-cache.org。Squid 代理快取可以叢集以提供更好的速度和訪問。Squid 快取也是最早實現分層快取系統的快取系統之一。

Squid 的一些優勢

  • 面向 Web 客戶端的高效能代理快取伺服器
  • 一個功能齊全的 Web 代理快取
  • 設計用於在 UNIX 系統上執行
  • 免費的開源軟體
  • 在單個無阻塞 I/O 驅動程序中處理所有請求
  • 將元資料和特別是熱門物件快取在 RAM 中
  • 快取 DNS 查詢
  • 實現對失敗請求的負面快取
  • 支援 SSL、廣泛的訪問控制和完整的請求日誌記錄
  • 使用 ICP,快取可以以層次結構或網狀結構排列,以實現額外的頻寬節省

Squid 包含

  • 主伺服器程式 Squid
  • 用於更快 DNS 查詢的 DNS 查詢程式 dnsserver
  • 用於重寫請求和執行身份驗證的可選程式
  • 一些管理和客戶端工具

squid.conf – 主配置檔案

[編輯 | 編輯原始碼]
  • 預設配置檔案拒絕所有客戶端請求
  • 配置為僅允許訪問受信任的主機和/或使用者
  • 仔細設計您的訪問控制方案
  • 不時檢查它以確保它按預期工作
  • 如果代理允許來自不受信任的主機或使用者的訪問,人們會濫用它
  • 使其瀏覽匿名
  • 故意使用您的代理進行可能是非法的交易
  • 存在列出開放訪問 HTTP 代理的網站

以下是一個 Squid 配置的示例:要執行基本的 Squid,唯一可配置的是代理埠。預設的 Squid 代理埠是 3128,但您可以隨時更改它。

Network options
http_port port Hostname: port

Squid 訪問控制

[編輯 | 編輯原始碼]

Squid 以其複雜的訪問控制系統而聞名。您可以不僅根據 IP 地址,而且根據域名來允許和限制訪問。使用正則表示式可以讓您為透過代理伺服器的訪問建立複雜的規則。對於 Squid 中的訪問控制,使用了一個類似於路由器中使用的複雜訪問控制系統。它基本上是一個兩步過程

  1. 使用 acl 命令定義列出的訪問許可權;以及
  2. 根據之前建立的訪問列表允許或拒絕訪問。

i. acl 用於定義訪問列表。 'acl' 的字面意思是訪問控制列表。 預設的 ACL 是

acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl SSL_ports port 443 563
acl Safe_ports port 80 21 443 563 70 210 1025-65535
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT

ii. http_access - 用於控制客戶端對 http 的訪問 如果沒有“access”行,則預設允許請求。

Default
http_access allow manager localhost
http_access deny manager
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny all

“deny all”行非常重要。

{{TextBox|示例

限制來自 192.168.2/24 的 IP 在工作時間(週一至週五上午 9 點至下午 5 點)訪問
acl ip_acl src 192.168.2/24
acl time_acl time M T W H F 9:00-17:00
http_access allow ip_acl time_acl
http_access deny all
規則從上到下讀取
acl xyz src 172.161.163.86
acl morning time 06:00-11:00
acl lunch time 14:00-14:30
http_access allow xyz morning

http_access deny xyz
http_access allow xyz lunch
小心允許子網的順序
acl mynetwork src 10.0.0.0/255.0.0.0
acl servernet src 10.0.1.0/255.255.255.0

http_access deny servernet
http_access allow mynet
Always_direct 和 never_direct 標籤
# always go direct to local machines
always_direct allow my-iplist-1
always_direct allow my-iplist-2
# never go direct to other hosts
never_direct allow all

在所有 http_access 規則之後,如果訪問沒有被拒絕,則允許訪問。

如果“http_access”行都沒有匹配,則預設值與列表中的最後一行相反。

建議在訪問列表的末尾新增“deny all”或“allow all”條目。

iii. cache_dir: 儲存快取資料的目錄

cache_dir /usr/local/squid/cache/ 100 16 256

可以支援多個掛載點的多個磁碟

cache_dir /usr/local/squid/cache1/ 10000 16 256
cache_dir /usr/local/squid/cache2/ 20000 16 256

iv. cache_mgr: 快取管理員的電子郵件地址

附加到返回給使用者的錯誤頁面末尾


cache_effective_user squid
cache_effective_group squid
在繫結到傳入網路埠後更改使用者和組 ID
網路埠
ftp_user: 設定用於 FTP 代理的電子郵件地址

客戶端: 連線到快取並請求頁面,並打印出有用的計時資訊 v. Squid 日誌

/usr/local/squid/logs/cache.log
/usr/local/squid/logs/access.log

透明快取/透明代理

[編輯 | 編輯原始碼]

這會獲取適當的資料包,快取請求並解決快取最大的問題,即以透明的方式讓使用者使用快取伺服器。 需要考慮四個因素

  • 正確的網路佈局 - 所有網路流量都需要透過過濾裝置
  • 過濾: 過濾掉適當的資料包
  • 核心透明度: 將埠 80 連線重定向到 Squid
  • Squid 設定: Squid 需要知道它應該以透明模式執行

有關如何實現透明代理的詳細說明,請訪問 http://www.linuxdoc.org/HOWTO/mini/TransparentProxy.html

  1. 高階研究計劃署網路被認為是當前網際網路的前身。
  2. 不要與 GNU/Linux 和 Unix 系統上的“root”使用者混淆。
  3. 一種流行的加密方式。 它使用單向雜湊演算法進行加密。
  4. 環回介面的 IP 地址是 127.0.0.1
  5. 安全套接字層 (SSL) 對透過公共網路傳輸的資料進行加密。
華夏公益教科書