linux 網絡涉及的所有配置文件詳解
Linux 為 配 置 網 絡 提 供 了 許 多 工 具 , 其 中 有 圖 形 界 面 的 ( 如NetworkManager1)、也有偽圖形界面(如 system-config-network 2)的。雖然使用這些工具來配置網絡會很方便,但是由於各個發行版本的 Linux 所提供的網絡配置工具很可能完全不同,並且通過命令行界面的遠程登錄也無法使用這些圖形界面的工具,所以我們並不打算使用工具來配置網絡,而選擇通過直接編輯相關文件來配置網絡參數。在 Linux 系統中,網絡是通過若干個文本文件進行配置的,需要編輯這些文件來完成聯網工作。
系統中重要的有關網絡配置文件為:/etc/services、/etc/nsswitch.conf 、 /etc/xinetd.conf、 /etc/sysconfig/network、/etc/sysconfig/ networkscripts/ifcfg-ethN、/etc/host.conf 、/etc/hosts和/etc/resolv.conf。下面在這里逐一簡要解釋的這些文件。
注:上面這些文件都支持由"#"開頭的注釋
/etc/services
/etc/services 作用 /etc/services文件保存了服務和端口的對應關系。但是通常服務的配置文件里會自行定義端口。那么兩者間是什么關系呢?事實上,服務最終采用的方案仍然是自己的端口定義配置文件。但是/etc/services的存在有幾個意義:
1、如果每一個服務都能夠嚴格遵循該機制,在此文件里標注自己所使用的端口信息,則主機上各服務間對端口的使用,將會非常清晰明了,易於管理。
2、在該文件中定義的服務名,可以作為配置文件中的參數使用。
例如:在配置路由策略時,使用"www"代替"80",即為調用了此文件中的條目“www 80”
3、且當有特殊情況,需要調整端口設置,只需要在/etc/services中修改www的定義,即可影響到服務。
例如:在文件中增加條目“privPort 55555”,在某個私有服務中多個配置文件里廣泛應用,進行配置。
當有特殊需要,要將這些端口配置改為66666,則只需修改/etc/services文件中對應行即可。
基本上是個標准,但是不是強制的。推薦的做法是在/etc/services里面加入新端口的定義或是使用已有的端口的定義,然后在監聽的時候使用從/etc/servies里面得到的端口定義。這樣和其他程序有沒有沖突,一目了然。而且一旦需要調整和重新分配端口的時候也容易。
比如db2監聽的是db2cdb2inst1這個端口名稱,至於具體這個端口是多少(通常是50000),是定義在/etc/services里的,而且可以自由調整,比如改成60000,那么下次啟動db2的時候就是監聽60000端口
1)作用
/etc/services文件是記錄網絡服務名和它們對應使用的端口號及協議。
2)格式
文件中的每一行對應一種服務,它由4個字段組成,中間用TAB或空格分隔,分別表示“服務名稱”、“使用端口”、“協議名稱”以及“別名”。
服務名 "tab" 端口號/協議名 “tab” 別名
kermit 1649/udp
l2tp 1701/tcp l2f
l2tp 1701/udp l2f
h323gatedisc 1718/tcp
/etc/nsswitch.conf
定義服務搜索順序
每行配置的格式如下:
Info: method[[action]] [method[[action]]...]
其中,info指定該行所描述的信息的類型,method為用來查找該信息的方法,action是對前面的method返回狀態的響應。action要放在方括號里。
舉例:
passwd: files nis
host: nis files dns
第一行讓系統在/etc/passwd文件中搜索口令信息,如果失敗的話,就使用NIS來查找信息。如果正在查找的用戶同時出現在這兩個地方,就會使用本地文件中的信息,因此它就是權威信息。第二行先使用NIS搜索;如果失敗的話,就搜索/etc/hosts文件;如果再次失敗的話,核對DNS以找出主機信息。
1、信息(Info)
Nsswitch.conf文件通常控制着用戶(在passwd中)、口令(在shadow中)、主機IP和組信息(在group中)的搜索。下面的列表描述了nsswitch.conf文件控制搜索的大多數信息(Info項)的類型。
automount: |
自動掛載(/etc/auto.master和/etc/auto.misc) |
bootparams: |
無盤引導選項和其他引導選項(參見bootparam的手冊頁) |
ethers: |
MAC地址 |
group: |
用戶所在組(/etc/group),getgrent()函數使用該文件 |
hosts: |
主機名和主機號(/etc/hosts),gethostbyname()以及類似的函數使用該文件 |
networks: |
網絡名及網絡號(/etc/networks),getnetent()函數使用該文件 |
passwd: |
用戶口令(/etc/passwd),getpwent()函數使用該文件 |
protocols: |
網絡協議(/etc/protocols),getprotoent()函數使用該文件 |
publickey: |
NIS+及NFS所使用的secure_rpc的公開密鑰 |
rpc: |
遠程過程調用名及調用號(/etc/rpc),getrpcbyname()及類似函數使用該文件 |
services: |
網絡服務(/etc/services),getservent()函數使用該文件 |
shadow: |
映射口令信息(/etc/shadow),getspnam()函數使用該文件 |
aiases: |
郵件別名,sendmail()函數使用該文件 |
方法(method)
下面列出了nsswich.conf文件控制搜索信息類型的方法,對於每一種信息類型,都可以指定下面的一種或多種方法:
files: |
搜索本地文件,如/etc/passwd和/etc/hosts |
nis: |
搜索NIS數據庫,nis還有一個別名,即yp |
dns: |
查詢DNS(只查詢主機) |
compat: |
passwd、group和shadow文件中的±語法(參見本節后面的相關內容) |
詳細請參考http://www.cnblogs.com/besharp/p/8351227.html
/etc/xinetd.conf
1.什么是xinetd
extended internet daemon
xinetd是新一代的網絡守護進程服務程序,又叫超級Internet服務器,常用來管理多種輕量級Internet服務。
xinetd提供類似於inetd+tcp_wrapper的功能,但是更加強大和安全。
2. xinetd的特色
1) 強大的存取控制功能
— 內置對惡意用戶和善意用戶的差別待遇設定。
— 使用libwrap支持,其效能更甚於tcpd。
— 可以限制連接的等級,基於主機的連接數和基於服務的連接數。
— 設置特定的連接時間。
— 將某個服務設置到特定的主機以提供服務。
2) 有效防止DoS攻擊
— 可以限制連接的等級。
— 可以限制一個主機的最大連接數,從而防止某個主機獨占某個服務。
— 可以限制日志文件的大小,防止磁盤空間被填滿。
3) 強大的日志功能
— 可以為每一個服務就syslog設定日志等級。
— 如果不使用syslog,也可以為每個服務建立日志文件。
— 可以記錄請求的起止時間以決定對方的訪問時間。
— 可以記錄試圖非法訪問的請求。
4) 轉向功能
可以將客戶端的請求轉發到另一台主機去處理。
5) 支持IPv6
xinetd自xinetd 2.1.8.8pre*起的版本就支持IPv6,可以通過在./configure腳本中使用with-inet6 capability選項來完成。
注意,要使這個生效,核心和網絡必須支持IPv6。IPv4仍然被支持。
6) 與客戶端的交互功能
無論客戶端請求是否成功,xinetd都會有提示告知連接狀態。
3. Xinetd的缺點
當前最大的缺點是對RPC支持的不穩定,但是可以啟動protmap,使它與xinetd共存來解決這個問題。
4 使用xinetd啟動守護進程
原則上任何系統服務都可以使用xinetd,然而最適合的應該是那些常用的網絡服務,同時,這個服務的請求數目和頻繁程度不會太高。
像DNS和Apache就不適合采用這種方式,而像FTP、Telnet、SSH等就適合使用xinetd模式。
系統默認使用xinetd的服務可以分為如下幾類:
① 標准Internet服務:telnet、ftp。
② 信息服務:finger、netstat、systat。
③ 郵件服務:imap、imaps、pop2、pop3、pops。
④ RPC服務:rquotad、rstatd、rusersd、sprayd、walld。
⑤ BSD服務:comsat、exec、login、ntalk、shell、talk。
⑥ 內部服務:chargen、daytime、echo、servers、services、time。
⑦ 安全服務:irc。
⑧ 其他服務:name、tftp、uucp。
具體可以使用xinetd的服務在/etc/services文件中指出。
這個文件的節選內容:
# /etc/services:
# $Id: services,v 1.40 2004/09/23 05:45:18 notting Exp $
# service-name port/protocol [aliases ...] [# comment]
tcpmux 1/tcp # TCP port service multiplexer
tcpmux 1/udp # TCP port service multiplexer
rje 5/tcp # Remote Job Entry
rje 5/udp # Remote Job Entry
echo 7/tcp
echo 7/udp
discard 9/tcp sink null
discard 9/udp sink null
………
Internet 網絡服務文件中,記錄網絡服務名和它們對應使用的端口號及協議。文件中的每一行對應一種服務,它由4個字段組成,中間用Tab鍵或空格鍵分隔,分別表示 “服務名稱”、“使用端口”、“協議名稱”及“別名”。在一般情況下,不要修改該文件的內容,因為這些設置都是Internet標准的設置。一旦修改,可能會造成系統沖突,使用戶無法正常訪問資源。Linux系統的端口號的范圍為0~65 535,不同范圍的端口號有不同的意義。
— 0:不使用。
— 1~1 023:系統保留,只能由root用戶使用。
— 1 024~4 999:由客戶端程序自由分配。
— 5 000~65 535:由服務器程序自由分配。
5. 解讀/etc/xinetd.conf和/etc/xinetd.d/*
1) /etc/xinetd.conf
xinetd 的配置文件是/etc/xinetd.conf,但是它只包括幾個默認值及/etc/xinetd.d目錄中的配置文件。如果要啟用或禁用某項 xinetd服務,編輯位於/etc/xinetd.d目錄中的配置文件。例如,disable屬性被設為yes,表示該項服務已禁用;disable屬性被設為no,表示該項服務已啟用。/etc/xinetd.conf有許多選項,下面是RHEL 4.0的/etc/xinetd.conf
# Simple configuration file for xinetd
# Some defaults, and include /etc/xinetd.d/
defaults
{
instances = 60
log_type = SYSLOG authpriv
log_on_success = HOST PID
log_on_failure = HOST
cps = 25 30
}
includedir /etc/xinetd.d
— instances = 60:表示最大連接進程數為60個。
— log_type = SYSLOG authpriv:表示使用syslog進行服務登記。
— log_on_success= HOST PID:表示設置成功后記錄客戶機的IP地址的進程ID。
— log_on_failure = HOST:表示設置失敗后記錄客戶機的IP地址。
— cps = 25 30:表示每秒25個入站連接,如果超過限制,則等待30秒。主要用於對付拒絕服務攻擊。
— includedir /etc/xinetd.d:表示告訴xinetd要包含的文件或目錄是/etc/xinetd.d。
2) /etc/xinetd.d/*
下面以/etc/xinetd.d/中的一個文件(rsync)為例。
service rsync
{
disable = yes
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
log_on_failure += USERID
}
下面說明每一行選項的含義:
— disable = yes:表示禁用這個服務。
— socket_type = stream:表示服務的數據包類型為stream。
— wait = no:表示不需等待,即服務將以多線程的方式運行。
— user = root:表示執行此服務進程的用戶是root。
— server = /usr/bin/rsync:啟動腳本的位置。
— log_on_failure += USERID:表示設置失敗時,UID添加到系統登記表。
6、 配置xinetd
1) 格式
/etc/xinetd.conf中的每一項具有下列形式:
service service-name
{
……
}
其中service是必需的關鍵字,且屬性表必須用大括號括起來。每一項都定義了由service-name定義的服務。
service-name是任意的,但通常是標准網絡服務名,也可增加其他非標准的服務,只要它們能通過網絡請求激活,包括localhost自身發出的網絡請求。有很多可以使用的屬性,稍后將描述必需的屬性和屬性的使用規則。
操作符可以是=、+=或-=。所有屬性可以使用=,其作用是分配一個或多個值,某些屬性可以使用+=或-=,其作用分別是將其值增加到某個現存的值表中,或將其值從現存值表中刪除。
2) 配置文件
相關的配置文件如下:
/etc/xinetd.conf
/etc/xinetd.d/* //該目錄下的所有文件
/etc/hosts.allow
/etc/hosts.deny
3) disabled與enabled
前者的參數是禁用的服務列表,后者的參數是啟用的服務列表。他們的共同點是格式相同(屬性名、服務名列表與服務中間用空格分開,例如disabled = in.tftpd in.rexecd),此外,它們都是作用於全局的。如果在disabled列表中被指定,那么無論包含在列表中的服務是否有配置文件和如何設置,都將被禁用;如果enabled列表被指定,那么只有列表中的服務才可啟動,如果enabled沒有被指定,那么disabled指定的服務之外的所有服務都可以啟動。
4) 注意問題
① 在重新配置的時候,下列的屬性不能被改變:socket_type、wait、protocol、type;
② 如果only_from和no_access屬性沒有被指定(無論在服務項中直接指定還是通過默認項指定),那么對該服務的訪問IP將沒有限制;
③ 地址校驗是針對IP地址而不是針對域名地址。
6 xinetd防止拒絕服務攻擊(Denial of Services)的原因
xinetd能有效地防止拒絕服務攻擊(Denial of Services)的原因如下:
1) 限制同時運行的進程數
通過設置instances選項設定同時運行的並發進程數:
instances=20
當服務器被請求連接的進程數達到20個時,xinetd將停止接受多出部分的連接請求。直到請求連接數低於設定值為止。
2) 限制一個IP地址的最大連接數
通過限制一個主機的最大連接數,從而防止某個主機獨占某個服務。
per_source=5
這里每個IP地址的連接數是5個。
3) 限制日志文件大小,防止磁盤空間被填滿
許多攻擊者知道大多數服務需要寫入日志。入侵者可以構造大量的錯誤信息並發送出來,服務器記錄這些錯誤,可能就造成日志文件非常龐大,甚至會塞滿硬盤。同時會讓管理員面對大量的日志,而不能發現入侵者真正的入侵途徑。因此,限制日志文件大小是防范拒絕服務攻擊的一個方法。
log_type FILE.1 /var/log/myservice.log 8388608 15728640
這里設置的日志文件FILE.1臨界值為8MB,到達此值時,syslog文件會出現告警,到達15MB,系統會停止所有使用這個日志系統的服務。
4) 限制負載
xinetd還可以使用限制負載的方法防范拒絕服務攻擊。用一個浮點數作為負載系數,當負載達到這個數目的時候,該服務將暫停處理后續的連接。
max_load = 2.8
上面的設定表示當一項系統負載達到2.8時,所有服務將暫時中止,直到系統負載下降到設定值以下。
說明 要使用這個選項,編譯時應加入“–with-loadavg”,xinetd將處理max-load配置選項,從而在系統負載過重時關閉某些服務進程,來實現防范某些拒絕服務攻擊。
5) 限制所有服務器數目(連接速率)
xinetd可以使用cps選項設定連接速率,下面的例子:
cps = 25 60
上面的設定表示服務器最多啟動25個連接,如果達到這個數目將停止啟動新服務60秒。在此期間不接受任何請求。
6) 限制對硬件資源的利用
通過rlimit_as和rlimit_cpu兩個選項可以有效地限制一種服務對內存、中央處理器的資源占用:
rlimit_as = 8M
rlimit_cpu=20
上面的設定表示對服務器硬件資源占用的限制,最多可用內存為8MB,CPU每秒處理20個進程。
xinetd的一個重要功能是它能夠控制從屬服務可以利用的資源量,通過它的以上設置可以達到這個目的,有助於防止某個xinetd服務占用大量資源,從而導致“拒絕服務”情況的出現。
下面以/etc/xinetd.d/中的一個文件(rsync)為例。
service rsync
{
disable = yes
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
log_on_failure += USERID
}
下面說明每一行選項的含義:
— disable = yes:表示禁用這個服務。
— socket_type = stream:表示服務的數據包類型為stream。
— wait = no:表示不需等待,即服務將以多線程的方式運行。
— user = root:表示執行此服務進程的用戶是root。
— server = /usr/bin/rsync:啟動腳本的位置。
— log_on_failure += USERID:表示設置失敗時,UID添加到系統登記表。
參考:https://blog.csdn.net/cymm_liu/article/details/9372255
/etc/sysconfig/network 文件
/etc/sysconfig/network 文件用來為主機設定全局網絡參數(也即不是針對單個網絡接口的參數)。
NETWORKING=<value> <value> 值表示是否配置這個網絡,可以是如下值:
yes —配置網絡
no — 不配置網絡
HOSTNAME=<value> <value> 值為主機名,一般來說,這個主機名應該是一個完整的 FQDN ( Fully Qualified Domain Name),
也即主機名+域名,如 hostname.expample.com。但是主機名並非必須為 FQDN,你可以給主機取一個任意格式的名字
GATEWAY=<value> <value>值為網絡的默認網關 IP 地址
注:/etc/sysconfig/network 中的 GATEWAY 參數會被/etc/sysconfig/network-scripts/ifcfg-eth0 中的 GATEWAY 參數覆蓋
/etc/sysconfig/network-scripts/ifcfg-ethN 文件
對於主機上的每個網絡接口都需要進行配置,在 Linux 中每個網絡接口都有一個獨立的配置文件,文件名一般為:/etc/sysconfig/network-scripts/ifcfg-ethN,其中 N是一個數字,代表主機網絡接口的序號,例如,主機中有多個網絡接口,那么第一個接口的配置文件就叫做 ifcfg-eth0,第二個接口的配置文件就叫做ifcfg-eth1,依次類推。網絡接口配置文件控制每個網絡接口的行為,當系統啟動時就使用這些文件來確定激活哪些網絡接口和如何去配置這些接口。注意,網絡接口配置文件中的某些配置會影響到主機上其他網絡接口甚至整個整個主機網絡配置。
BOOTPROTO=<value> <value>值表示采用何種方式來配置主機網絡參數,可以是如下值:
none/static — 手動配置此主機網絡
bootp — 使用 BOOTP 協議動態配置主機網絡參數.
dhcp — 使用 dhcp 協議動態配置主機網絡參數.
DEVICE=<value> <value>值表示物理設備的名稱,也即網卡的名稱
DEFROUTE=<value> <value>值表示是否將本網絡接口作為網絡的默認路由(default route),可以是如下值:
yes — 是.
no — 否.
DNS{1,2}=<value> <value>值表示 DNS 服務器的 IP 地址,可以添加兩個 DNS服務器 DNS1 和 DNS2,如果 PEERDNS 參數值為 yes ,那么此 DNS 參數值將覆蓋 /etc/resolv.conf 文件中的DNS 服務器配置.
HWADDR=<value> <value>值為太網卡的 MAC 地址,是如下格式一個 12 位的16 進制串 AA:BB:CC:DD:EE:FF. 如果主機上有兩張以上的網卡這個參數就是必須的,可以保證不管網卡加載次序如何,設備名都不會改變,進而能夠讓正確的配置文件來對其進行配置.
IPADDR=<value> <value>值為當前網絡接口 IP 地址.IPV4_FAILURE_FATAL=<value> <value>值指的是,當 IPv4 和 IPv6 配置都可用時,IPv4 配置失敗是是否視為設備激活失敗, 可以是如下值:
yes — 是.
no — 否.
IPV6INIT=<value> <value>值表示是否對配置主機的 IPv6 網絡參數,可以是如下值:
yes — 是.
no — 否.
NETMASK=<value> <value>值為當前網絡接口的子網掩碼.
NM_CONTROLLED=<value> <value>值表示此網絡接口是否允許 RHEL 和 CentOS 中的默認圖形界面的網絡配置工具 NetworkManager 來進行配置, 可以是如下值:
yes — 是.
no — 否.
ONBOOT=<value> <value>值表示是否在啟動時激活此網絡接口,可以是如下值:
yes — 是.
no — 否.
PEERDNS=<value> <value>值表示是否允許接口配置文件中的 DNS 參數值覆
蓋 /etc/resolv.conf 文件中的 DNS 服務器配置,可以是如下值:
yes — 是.
no — 否.
PEERROUTES=<value>
SRCADDR=<value> 表示為從這個接口發出去的數據包指定另外一個源地址<value> (而不是接口的 IP 地址).
USERCTL=<value> <value>值表示是否允許除 root 用戶之外的用戶配置此網絡接口,可以是如下值:
yes — 是.
no — 否
/etc/sysconfig/network-scripts/ifcfg-ethN
1. DEVICE=eth0 網卡的名字
2. HWADDR=00:0c:29:90:89:d9 HWADDR HardWare Address 硬件地址 MAC地址
3. TYPE=Ethernet 網絡類型 以太網
4. UUID=ae779ae6-044d-43d5-a33b-48c89e8de10e #UUID 做到系統中獨一無二。
5. ONBOOT=yes BOOT ON ? 在開機或重啟網卡的時候是否啟動網卡
6. NM_CONTROLLED=yes 是否受network程序管理
7. BOOTPROTO=none 網卡是如何獲取到ip地址 網卡獲取ip地址的方式
a. dhcp 自動獲取ip地址
b. none 固定的ip地址
c. static 固定的ip地址
8. IPADDR=10.0.0.100 IPADDR ip地址
9. NETMASK=255.255.255.0 子網掩碼 決定這個局域網中最多有多少台機器
10. GATEWAY=10.0.0.2 網關 整個大樓的大門
11. USERCTL=no 普通用戶是否能控制網卡
12. /etc/resolv.conf 配置DNS 網卡配置文件的DNS優先於/etc/resolv.conf
13. DNS 域名解析器 阿里的域名解析器:223.5.5.5 223.6.6.6
/etc/host.conf文件
當系統中同時存在DNS域名解析和/etc/hosts主機表機制時,由該/etc/host.conf確定主機名解釋順序。
示例:
order hosts,bind #名稱解釋順序
multi on #允許主機擁有多個IP地址
nospoof on #禁止IP地址欺騙
order是關鍵字,”order hosts,bind“定義先用本機hosts主機表進行名稱解釋,如果不能解釋,再搜索bind名稱服務器(DNS)
/etc/resolv.conf
該文件是 DNS 客戶端配置文件,它的格式很簡單,每行以一個關鍵字開頭,后接配置參數。最主要是 nameserver 關鍵字,如果沒指定 nameserver 就找不到 DNS 服務器,其它關鍵字都是可選的。
nameserver =<value> <value>為 DNS 服務器的 IP 地址,總共可以指定 3 個 DNS服務器 IP 地址
domain=<value> <value>值表示本地域名
search=<value> <value>值表示域名的搜索列表,默認情況下僅包括本地域名
下面是一個/etc/resolv.conf 文件的示例:
domain ringkee.com
search www.ringkee.com ringkee.com
nameserver 202.96.128.86
nameserver 202.96.128.166
/etc/hosts 文件
/etc/hosts 文件是一個用於儲存計算機網絡中各節點信息的文件。這個文件負責將主機名映射到相應的 IP 地址。hosts 文件通常用於補充或取代小型網絡中 DNS 的功能。和 DNS 不同的是,用戶可以直接對/etc/hosts 文件進行控制。
在默認情況下, /etc/hosts 僅包括兩行,分別用於指定 IPv4 網絡中和 IPv6 網
絡中回環接口的主機名(默認情況下為 localhost.localdomain):
# IP 地址
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
下面是一個/etc/resolv.conf 文件的示例:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
#以上兩行建議保留
# IP 地址 主機名(Hostname) 主機別名(Alias)
208.164.186.1 deep.openna.com deep
208.164.186.2 mail.openna.com mail
208.164.186.3 web.openna.com web
完畢!