- Linux服務器安全策略詳解(第2版)
- 曹江華
- 4985字
- 2019-01-01 07:27:47
1.2 Linux的TCP/IP網絡配置
Linux從一開始就是為網絡而設計的。它內置了以前僅在高端企業產品中才可見到的成熟功能。然而,盡管擁有這些強大的能力,Linux網絡的配置卻遠沒有Windows網絡的配置復雜。諸如Webmin、redhat-config-network和YaST允許執行圖形化的配置;諸如ifconfig和route允許通過控制臺或腳本查看和修改網絡參數;諸如netstat允許查看單獨的網絡連接,并顯示它們與運行著的進程的關系。
1.2.1 Linux的TCP/IP網絡配置文件
除非另行指定,Red Hat Linux系統中大多數配置文件都在 /etc目錄中。配置文件如表1-5所示。
表1-5 配置文件

1.2.2 網絡配置工具
在安裝Linux發行版本時,需要配置網絡。你或許已經有一個來自初始配置的活動eth0,這個配置對于當前的使用也許足夠,但是隨著時間的推移你可能需要做出更改。下面將介紹與IP網絡相關的不同配置項,以及使用這些配置項的文件和工具。
1.手動修改配置文件
手動配置是最直接的方式,熟練的Linux用戶在平時維護系統的時候更喜歡使用手工配置,因為手工配置有很多優點:
① 熟悉命令之后,手工配置更快速,并且不需要重新啟動;
② 能夠使用配置命令的高級特性;
③ 更容易維護配置文件,找出系統故障;
④ 能更深刻地了解系統配置是如何進行的。
2.使用Linux命令
雖然Linux桌面應用發展很快,但是命令在Linux中依然有很強的生命力。Linux是一個由命令行組成的操作系統,其精髓在于命令行,無論圖形界面發展到什么水平這個原理是不會變的。Linux網絡設備操作命令包括ifconfig、ip、ping、netstat、route、ip、arp、hostname和arpwatch。
3.Webmin
Webmin在Networking下的Network Configuration中提供了一組網絡配置工具。你可以配置單獨的接口,并調整它們的當前設置或已保存的設置。還可以配置路由和網關、DNS客戶端設置,以及本地主機地址。編輯好所有的配置之后,可以單擊“Apply Configuration”來應用它們,不必重新啟動系統。
4.不同發行版本中的工具
每個發行版本都有它自己用于配置網絡設置的工具。應該參考特定發行版本的文檔來確定要使用的工具。每種工具都提供了與Webmin工具基本相同的配置選項。其中有些版本可能提供特定于該發行版本的選項。Red Hat Linux 3/4使用system-config-network工具(如圖1-2所示),SuSE Linux使用YaST工具(如圖1-3所示)。

圖1-2 Red Hat Linux 3/4使用system-config-network工具

圖1-3 SuSE Linux使用YaST工具
1.2.3 配置網絡接口
1.網卡的選擇
一般來說,2.4版本以后的Linux可以支持的網卡芯片組數量已經很完備了,包括著名廠商,如Intel,以及使用廣泛的RealTek、Via等網卡芯片都已經被支持,所以使用者可以很輕松地設定好他們的網卡。但是由于Linux發行版本眾多(目前超過188個),使用前最好先查看Linux發行版本的文檔。以RHEL 4.0為例,這個設備列表在Ethernet-HOWTO文檔中。另外最直接的方法是查看目錄/lib/modules/ release/kernel/drivers/net,其中release是內核版本,可以使用命令“uname-r”獲得,對于RHEL 4.0內核版本是2.6.9-5EL。
#ls /lib/modules/2.6.9-5EL/kernel/drivers/net/ 3c59x.ko bonding fealnx.ko netdump.ko pppox.ko starfire.ko tun.ko 8139cp.ko dl2k.ko forcedeth.ko ns83820.ko ppp_synctty.ko sungem.ko typhoon.ko8139too.ko dummy.ko hp100.ko pcmcia r8169.ko sungem_phy.ko via-rhine.ko82596.ko e1000 ixgb pcnet32.ko s2io.ko sunhme.ko via-velocity.ko8390.ko e100.ko mii.ko ppp_async.ko sis900.ko tg3.ko wirelessacenic.ko eepro100.ko natsemi.ko ppp_deflate.ko sk98lin tlan.koamd8111e.ko epic100.ko ne2k-pci.ko ppp_generic.ko slhc.ko tokenringb44.ko ethertap.ko netconsole.ko pppoe.ko smc9194.ko tulip
可以看到這個目錄列出所有Linux內核支持的網絡設備驅動程序。其中大部分是以太網卡(8139、3COM、Intel),也有一些是其他類型的設備。對于初學者應當盡量選擇目錄中已經列出的網卡。
注意 以.o后綴結束的文件就是驅動程序,而沒有后綴的是驅動程序目錄。
2.檢查網卡是否加載
驅動硬件是操作系統最基本的功能,操作系統通過各種驅動程序來駕馭硬件設備,和Windows系統不同,Linux內核目前采用可加載的模塊化設計(LKMs Loadable Kernel Modules),就是將最基本的核心代碼編譯在內核中,網卡驅動程序是作為內核模塊動態加載的,可以使用命令“lsmod”查看加載情況:
## lsmod Module Size Used by dm_mod 54741 0 button 6481 0 battery 8901 0 ac 4805 0 md5 4033 1 joydev 10241 0 uhci_hcd 31065 0 ehci_hcd 30917 0 snd_via82xx 26437 0 snd_ac97_codec 63889 1 snd_via82xx snd_pcm_oss 49017 0 soundcore 9889 1 snd tulip 45025 1 via_rhine 23113 2 mii 4673 1 via_rhine ext3 116809 2 jbd 71257 1 ext3
對每行而言,第一列是模塊名稱;第二列是模塊大小;第三列是調用數。調用數后面的信息對每個模塊而言都有所不同。如果(unused)被列在某模塊的那行中,說明該模塊當前未被使用。如果(autoclean)被列在某模塊的那行中,說明該模塊可以被rmmod-a命令自動清除,當這個命令被執行后,所有自從上次被自動清除后未被使用的且標記了“autoclean”的模塊都會被卸載。從以上粗體字符可以看到Linux計算機中兩塊網卡模塊tulip和via_rhine已經加載。對應的網卡商業型號分別是:
● tulip Lite-On Communications Inc LNE100TX [Linksys EtherFast 10/100]。
● via_rhine Via VT6102[Rhine-II] 常見主板集成網卡。
如果沒有檢測到硬件,用硬件檢測程序kuduz檢測網卡,它和Windows中添加新硬件功能差不多。kudzu程序是通過查看/usr/share/hwdata/目錄下的文件識別各種硬件設備的。如果內核支持該硬件,并且有該驅動程序就可自動裝載。首先需要說明的是,Linux下對網卡的支持往往是針對芯片的,所以對某些不是很著名的網卡,需要知道它的芯片型號以配置Linux,比如Top link網卡,就不存在Linux的驅動,但是因為它與NE2000兼容,所以把它當做NE2000就可以在Linux下使用了。所以當你有一塊網卡不能使用,在未找到Linux的驅動程序之前,一定搞清楚這個網卡使用的是什么芯片,跟誰兼容,比如3c509,NE2000等。這樣的型號一般都在網卡上最大的一塊芯片上印著,抄下來就是了。對于ISA接口的NE2000卡,首先需要將網卡設定為Jumpless模式。目前很多網卡默認的都是PnP模式,這在Windows下的確能減少很多麻煩,但是Linux不支持,所以Linux下必須是Jumpless模式。一般所有網卡都帶有驅動盤和在DOS下可執行的一個設定程序,用該程序將網卡設為Jumpless。對于PCI網卡,可以使用lspci命令來查看。在顯示的列表中找到“Ethernet Controller”,記下廠商和型號,然后使用modprobe嘗試加載正確的模塊,比如modprobe 3c509。如果出現錯誤,說明該模塊不存在。這時候你應該找到正確的模塊并且重新編譯。
如果你使用的是比較罕見的一些網卡,或者是Linux核心支持不夠的網卡,以致在安裝Linux時無法檢測到網卡,那也不用擔心,我們可以使用較為簡單的核心模塊編譯來支持這塊網卡。下面以3COM的3CR990-TX-97網卡為例(一款具有安全特性的網卡)看看如何進行模塊編譯。首先在其網站http://www.3com.com/infodeli/tools/nic/linuxdownload.htm下載適合你使用內核版本的相關驅動程序,這里以2.4內核為例。
#wegt http://www.3com.com/infodeli/tools/nic/3c990-1.0.0a.tar.gz
另外在開始編譯核心模塊之前,因為驅動程序需要配合核心來編譯,所以會使用到kernel source或者是kernel header的數據,此外,也需要編譯器(compiler)的幫助,因此,先確定你的Linux系統當中已經存在下列軟件:kernel-source、kernel、gcc、make。
#tar zxvf 3c990-1.0.0a.tar.gz #make
此時會產生3c990.o驅動模塊,然后使用命令復制到相應位置,查看加載是否正常。
#modprobe 3c990 #cp 3c990.o /lib/modules/2.4.20-8/kernel/drivers/net # depmod -a
然后使用lsmod命令檢查加載情況,如果一切正常,可以讓系統啟動時自動加載該模塊:
#echo “alias eth0 3c990”>> /etc/modules.conf
3.為新網卡設定IP地址
Linux網絡設備在配置時被賦予別名,該別名由一個描述性的縮略詞和一個編號組成。某種類型的第一個設備的編號為0,其他設備依次被編號為1,2,3等。但是網卡并不是作為裸設備出現在/dev目錄下,而是存在內存中。eth0、eth1是以太網卡接口,它們用于大多數的以太網卡,包括許多并行端口以太網卡。本節主要討論這類網卡。為Linux以太網卡設定IP地址的方式非常靈活,你可以選擇適合你工作情況的方法。
(1)使用ip或ifconfig命令
ifconfig命令是最重要的Linux網絡命令,它最主要的用途是設定、修改網卡的IP地址:
#ifconfig eth0192.168.0.2 netmask 255.255.255.0
在默認情況下,ifconfig顯示活動的網絡設備。給這個命令添加一個“-a”開關就能看到所有設備。但是ifconfig命令設置完網絡設備的IP地址,當系統重新啟動后設置會自動失效,所以它主要用于網卡狀態調試。假設你要建立一個臨時的網絡配置以供測試,你可以使用發行版本中的工具來編輯配置,但是需要注意,在完成測試之后,將所有設置恢復回去。通過使用ifconfig命令,我們無須影響已保存的設置,就能夠快速地配置網卡。
ip命令是iproute2軟件包中的一個強大的網絡配置工具,它能夠替代一些傳統的網絡管理工具,例如ifconfig、route等。現在,絕大多數Linux發行版和絕大多數UNIX都使用古老的arp、ifconfig和route命令。雖然這些工具能夠工作,但它們在Linux2.2和更高版本的Linux內核上顯得有些落伍。使用iproute2前,你應該確認已經安裝了這個工具。這個包的名字在Red Hat Linux 9.0叫做“iproute2”,也可以在ftp://ftp.inr.ac.ru/ip-routing/下載源代碼安裝。
在以太網接口eth0上增加一個地址10.0.0.1,掩碼長度為24位,標準廣播地址,標簽為“eth0:Alias:”
#ip addr add 10.0.0.1/24 brd + dev eth0 label eth0:Alias
(2)使用netconfig命令
netconfig命令可以設置網絡設備的IP地址,netconfig命令可以永久保存設置。使用方法是:“netconfig ethX”。使用命令“netconfig eth0”后,會在命令行下彈出一個對話框,這時即可進行設定,如圖1-4所示。

圖1-4 netconfig配置界面
設定結束后,用“Tab”鍵選擇“OK”,即可保存設置并且退出,然后使用命令“service network restart”激活,即可生效。
(3)使用neat命令
使用neat命令需要配置好X Window系統,在命令行下運行neat命令后,添加IP地址和其他相關參數后保存設置,重新啟動網絡和網絡服務或計算機,如圖1-5所示。

圖1-5 圖形界面添加IP地址
另外,neat命令還有一個等價命令“redhat-config-network”,二者完全相同。neat和redhat-config-config命令可以永久保存設置。
(4)修改TCP/IP網絡配置文件
除非另行指定,Red Hat Linux網卡相關的TCP/IP網絡配置文件是/etc/sysconfig/network-scripts/ifcfg-ethX,其中 X 從0 開始,第一個以太網配置文件即/etc/sysconfig/network-scripts/ifcfg-eth0。使用vi編輯器可以修改這個文件,也可以修改網卡IP地址。
#vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 //設定網卡的名稱,要跟文件名稱對應 ONBOOT=yes //是否在開機的時候啟動網卡 BOOTPROTO=static //啟動的時候IP取得的協議,這里是固定的,如果是動態主機的話,要改成dhcp IPADDR=192.168.1.2 //IP地址 NETMASK=255.255.255.0 //子網掩碼 NETWORK=192.168.1.0 //該網段的第一個IP BROADCAST=192.168.1.255 //最后一個同網段的廣播地址 GATEWAY=192.168.1.2 //網關地址# #GATEWAYDEV=eth0
存盤后使用命令“service network restart”激活即可生效。該方法同樣可以永久保存設置。
(5)為網卡添加IPv6地址
和Windows操作系統相比,Linux對IPv6的支持更好,最早的支持IPv6的Linux內核是2.2。一般基于2.4內核的Linux發行版本都可以直接使用IPv6,使用前要看系統的IPv6模塊是否被加載,如果沒有被加載可以使用命令手工加載,這需要超級用戶的權限。然后使用命令檢測,如果顯示IPv6地址(inet6 addr:fe80::200:e8ff:fea0:2586/64),證明IPv6已經加載。
# modprobe IPv6;#ifconfig -a
如果希望Linux系統啟動時自動加載IPv6模塊,可以在配置文件/etc/modules.conf中加入一行:
alias net-pf-10 ipv6 # automatically load IPv6 module on demand
4.調整網卡工作模式
現在的網卡大多是自適應工作模式,在配置網卡參數時,我們很少考慮它的工作模式,有時發現一些網卡模塊已經加載,但是在某些模式工作不穩定。如一塊XXX品牌的雜牌RTL-8139C芯片10/100自適應網卡,在100M全雙工狀態下極其不穩定(在Qcheck的TCP和UDP的測試過程中,數據包遺失率9.12%)。在Linux環境下,我們可以使用系統自帶的工具mii-tool命令來配置網卡工作模式。顯示Linux服務器網卡支持的所有以太網卡類型,使用命令:
# mii-tool -v eth0: negotiated 100baseTx-FD, link ok product info: vendor 00:00:00, model 0 rev 0 basic mode: autonegotiation enabled basic status: autonegotiation complete, link ok capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD advertising: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD link partner: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
從以上信息中可以看出,這塊網卡工作在100M全雙工自適應模式下,“100baseTx-FD”表示100M Full Duplex。這里可以強制網卡工作在100M半雙工模式下,輸入命令:
#mii-tool -F 100baseTx-HD eth0
然后恢復網卡的自適應工作模式,輸入命令:
#mii-tool -r eth0
另外,在路由器、交換機、代理服務器等通信量比較大的關鍵設備上,應該為它指定正確的工作模式,這樣可以提高通信效率。
5.DHCP客戶端的網卡設定
DHCP是動態主機配置協議,這個協議用于向計算機自動提供IP地址、子網掩碼和路由信息。當設備接入這個局域網時,它們會向DHCP服務器請求一個IP地址。然后DHCP服務器為每個請求的設備分配一個地址,直到分配完該范圍內的所有IP地址為止。已經分配的IP地址必須定時地延長借用期。這個延期的過程稱做leasing,確保了當客戶機設備在正常釋放IP地址之前,突然從網絡斷開時被分配的地址可以歸還給服務器。Linux下配置DHCP客戶端有兩種方法:圖形界面和手工配置。使用圖形界面可以使用neat命令界面(如圖1-5所示),選中“自動獲得IP地址設置使用DHCP”即可。
選擇手工配置DHCP的客戶,需要修改/etc/sysconfig/network文件來啟用聯網,并修改/etc/sysconfig/network-scripts目錄中每個網絡設備的配置文件。在該目錄中,每個設備都有一個叫做ifcfg-ethX的配置文件,ethX是網絡設備的名稱,如eth0等。如果你想在引導時啟動聯網,NETWORKING變量必須被設為yes。除此之外,/etc/sysconfig/network文件應該包含以下行:
NETWORKING=yes DEVICE=eth0 BOOTPROTO=dhcp ONBOOT=yes
6.在Linux下安裝無線網卡
隨著Linux網絡技術的快速增長,硬件廠商大大提高了硬件產品對Linux的技術支持。使得Linux支持的無線網卡的數量在過去的一兩年里增長顯著。一旦在計算機中安裝好了無線局域網卡,首先要做的就是安裝驅動來讓網卡工作。無線網卡實現了IEEE 802.11系列協議中的一種或多種的物理層(PHY)和媒質訪問控制子層(MAC)的功能,而驅動是用來控制無線網卡,向上提供與以太網一致的接口和其他一些無線局域網特定的管理接口的。對于不同廠商的不同網卡,還沒有一種統一的方法可以驅動所有的網卡。首先必須確保內核配置中啟動了無線局域網,如果沒有無線局域網支持,你應該重新配置、編譯內核來啟動“Wireless LAN (non-hamradio) Drivers and Wireless Extensions”。
設置無線網絡相關步驟如下。
STEP 01 用“iwconfig”命令來顯示無線網卡(eth0、eth1)的信息。在以下步驟中,用ethX表示無線網卡的名稱。
STEP 02 設置無線網卡的操作模式為Managed:
#iwconfig ethX mode Managed
STEP 03 如果采用了WEP加密,需要設置WEP密碼:
#iwconfig ethX key password XXXXXX
對應40位和128位加密,password分別為6位和10位的十六進制數字。
STEP 04 設置SSID,其中ESSID為無線接入(Access Point)的SSID:
# iwconfig ethX essid ESSID
STEP 05 創建/etc/sysconfig/network/ifcfg-ethX配置文件,使得機器每次啟動時,無線網卡都會自動獲得IP地址。該文件內容如下:
BOOTPROTO='dhcp' MTU='' REMOTE_IPADDR='' STARTMODE='onboot' UNIQUE=''
STEP 06 啟動無線網卡:
#ifconfig ethX up