筆者在前面介紹的內(nèi)容都為linux系統(tǒng)基礎(chǔ)類的,如果你現(xiàn)在把前面的內(nèi)容全部很好的掌握了,那最好了。不過(guò)筆者要說(shuō)的是,即使你完全掌握了,你現(xiàn)在還是不能作為一名合格的linux系統(tǒng)管理員的,畢竟系統(tǒng)管理員要會(huì)做的事情太多了。本章以及后面章節(jié)筆者會(huì)陸續(xù)教給你作為linux系統(tǒng)管理員所必備的知識(shí)。只要你熟練掌握那絕對(duì)可以勝任一個(gè)最初級(jí)的管理員職位,不過(guò)只是初級(jí)的,因?yàn)槟氵€需要在日常的管理工作中獲得成長(zhǎng)。
【監(jiān)控系統(tǒng)的狀態(tài)】
1. w 查看當(dāng)前系統(tǒng)的負(fù)載
相信所有的linux管理員最常用的命令就是這個(gè)’w’ 了,該命令顯示的信息還是蠻豐富的。第一行從左面開始顯示的信息依次為:時(shí)間,系統(tǒng)運(yùn)行時(shí)間,登錄用戶數(shù),平均負(fù)載。第二行開始以及下面所有的行,告訴我們的信息是,當(dāng)前登錄的都有哪些用戶,以及他們是從哪里登錄的等等。其實(shí),在這些信息當(dāng)中,筆者認(rèn)為我們最應(yīng)該關(guān)注的應(yīng)該是第一行中的’load average:’后面的三個(gè)數(shù)值。
第一個(gè)數(shù)值表示1分鐘內(nèi)系統(tǒng)的平均負(fù)載值;第二個(gè)數(shù)值表示5分鐘內(nèi)系統(tǒng)的平均負(fù)載值;第三個(gè)數(shù)值表示15分鐘系統(tǒng)的平均負(fù)載值。這個(gè)值的意義是,單位時(shí)間段內(nèi)CPU活動(dòng)進(jìn)程數(shù)。當(dāng)然這個(gè)值越大就說(shuō)明你的服務(wù)器壓力越大。一般情況下這個(gè)值只要不超過(guò)你服務(wù)器的cpu數(shù)量就沒有關(guān)系,如果你的服務(wù)器cpu數(shù)量為8,那么這個(gè)值若小于8,就說(shuō)明你的服務(wù)器沒有壓力,否則就要關(guān)注一下了。到這里你肯定會(huì)問(wèn),如何查看服務(wù)器有幾個(gè)cpu?
就是用這個(gè)命令了?!?proc/cpuinfo’這個(gè)文件記錄了cpu的詳細(xì)信息。目前市面上的服務(wù)器通常都是2顆4核cpu,在linux看來(lái),它就是8個(gè)cpu。查看這個(gè)文件時(shí)則會(huì)顯示8段類似的信息,而最后一段信息中processor : 后面跟的是’7’。所以查看當(dāng)前系統(tǒng)有幾個(gè)cpu,你可以使用這個(gè)命令:’ grep -c 'processor' /proc/cpuinfo’ 。
2. vmstat 監(jiān)控系統(tǒng)的狀態(tài)
上面講的w查看的是系統(tǒng)整體上的負(fù)載,通過(guò)看那個(gè)數(shù)值可以知道當(dāng)前系統(tǒng)有沒有壓力,但是具體是哪里(CPU, 內(nèi)存,磁盤等)有壓力就無(wú)法判斷了。通過(guò)vmstat就可以知道具體是哪里有壓力。vmstat命令打印的結(jié)果共分為6部分:procs, memory, swap, io, system, cpu.請(qǐng)重點(diǎn)關(guān)注一下紅色標(biāo)出的項(xiàng)。
1)procs 顯示進(jìn)程相關(guān)信息
r:表示運(yùn)行和等待cpu時(shí)間片的進(jìn)程數(shù),如果長(zhǎng)期大于服務(wù)器cpu的個(gè)數(shù),則說(shuō)明cpu不夠用了;
b:表示等待資源的進(jìn)程數(shù),比如等待I/O, 內(nèi)存等,這列的值如果長(zhǎng)時(shí)間大于1,則需要你關(guān)注一下了;
2)memory 內(nèi)存相關(guān)信息
swpd :表示切換到交換分區(qū)中的內(nèi)存數(shù)量;
free :當(dāng)前空閑的內(nèi)存數(shù)量;
buff :緩沖大小,(即將寫入磁盤的);
cache :緩存大小,(從磁盤中讀取的);
3)swap 內(nèi)存交換情況
si :由內(nèi)存進(jìn)入交換區(qū)的數(shù)量;
so:由交換區(qū)進(jìn)入內(nèi)存的數(shù)量;
4)io 磁盤使用情況
bi :從塊設(shè)備讀取數(shù)據(jù)的量(讀磁盤);
bo:從塊設(shè)備寫入數(shù)據(jù)的量(寫磁盤);
5)system 顯示采集間隔內(nèi)發(fā)生的中斷次數(shù)
in :表示在某一時(shí)間間隔中觀測(cè)到的每秒設(shè)備中斷數(shù);
cs :表示每秒產(chǎn)生的上下文切換次數(shù);
6)CPU 顯示cpu的使用狀態(tài)
us :顯示了用戶下所花費(fèi) cpu 時(shí)間的百分比;
sy :顯示系統(tǒng)花費(fèi)cpu時(shí)間百分比;
id :表示cpu處于空閑狀態(tài)的時(shí)間百分比;
wa:表示I/O等待所占用cpu時(shí)間百分比;
st :表示被偷走的cpu所占百分比(一般都為0,不用關(guān)注);
以上所介紹的各個(gè)參數(shù)中,筆者經(jīng)常會(huì)關(guān)注r列,b列,和wa列,三列代表的含義在上邊說(shuō)得已經(jīng)很清楚。IO部分的bi以及bo也是我要經(jīng)常參考的對(duì)象。如果磁盤io壓力很大時(shí),這兩列的數(shù)值會(huì)比較高。另外當(dāng)si, so兩列的數(shù)值比較高,并且在不斷變化時(shí),說(shuō)明內(nèi)存不夠了,內(nèi)存中的數(shù)據(jù)頻繁交換到交換分區(qū)中,這往往對(duì)系統(tǒng)性能影響極大。
筆者用vmstat時(shí),經(jīng)常用這樣的形式,’vmstat 1 5’ 表示每隔1秒鐘打印一次系統(tǒng)狀態(tài),連續(xù)打印5次。當(dāng)然你也可以 ‘vmstat 1 ‘ 表示每隔1秒鐘打印一次系統(tǒng)狀態(tài),一直打印,除非你按ctrl + c強(qiáng)制結(jié)束。
3. top 顯示進(jìn)程所占系統(tǒng)資源
這個(gè)命令用于動(dòng)態(tài)監(jiān)控進(jìn)程所占系統(tǒng)資源,每隔3秒變一次。這個(gè)命令的特點(diǎn)是把占用系統(tǒng)資源(CPU,內(nèi)存,磁盤IO等)最高的進(jìn)程放到最前面。top命令打印出了很多信息,包括系統(tǒng)負(fù)載(load average)、進(jìn)程數(shù)(Tasks)、cpu使用情況、內(nèi)存使用情況以及交換分區(qū)使用情況。其實(shí)上面這些內(nèi)容可以通過(guò)其他命令來(lái)查看,所以用top重點(diǎn)查看的還是下面的進(jìn)程使用系統(tǒng)資源詳細(xì)狀況。這部分東西反映的東西還是比較多的,不過(guò)需要你關(guān)注的也就是幾項(xiàng):%CPU, %MEM, COMMAND 這些項(xiàng)目所代表的意義,不用筆者介紹相信你也能看懂吧。
另外筆者使用top命令時(shí)還常常使用-bn1 這個(gè)組合選項(xiàng),它表示非動(dòng)態(tài)打印系統(tǒng)資源使用情況,可以用在腳本中,你不妨記一下,以后也許你會(huì)用得到。
4. sar 監(jiān)控系統(tǒng)狀態(tài)
sar 命令很強(qiáng)大,它可以監(jiān)控系統(tǒng)所有資源狀態(tài),比如平均負(fù)載、網(wǎng)卡流量、磁盤狀態(tài)、內(nèi)存使用等等。它不同于其他系統(tǒng)狀態(tài)監(jiān)控工具的地方在于,它可以打印歷史信息,可以顯示當(dāng)天從零點(diǎn)開始到當(dāng)前時(shí)刻的系統(tǒng)狀態(tài)信息。如果你系統(tǒng)沒有安裝這個(gè)命令,請(qǐng)使用”yum install -y sysstat”命令安裝。初次使用sar命令會(huì)報(bào)錯(cuò),那是因?yàn)閟ar工具還沒有生成相應(yīng)的數(shù)據(jù)庫(kù)文件(時(shí)時(shí)監(jiān)控就不會(huì)了,因?yàn)椴挥萌ゲ樵兡莻€(gè)庫(kù)文件)。它的數(shù)據(jù)庫(kù)文件在” /var/log/sa/”目錄下,默認(rèn)保存9天。因?yàn)檫@個(gè)命令太過(guò)復(fù)雜,所以筆者只介紹幾個(gè)。
1)查看網(wǎng)卡流量 ‘sar -n DEV ‘
IFACE這列表示設(shè)備名稱,rxpck/s 表示每秒進(jìn)入收取的包的數(shù)量,txpck/s 表示每秒發(fā)送出去的包的數(shù)量,rxbyt/s 表示每秒收取的數(shù)據(jù)量(單位Byte),txbyt/s表示每秒發(fā)送的數(shù)據(jù)量。后面幾列不需要關(guān)注。如果有一天你所管理的服務(wù)器丟包非常嚴(yán)重,那么你就應(yīng)該看一看這個(gè)網(wǎng)卡流量是否異常了,如果rxpck/s 那一列的數(shù)值大于4000,或者rxbyt/s那列大于5,000,000則很有可能是被攻擊了,正常的服務(wù)器網(wǎng)卡流量不會(huì)高于這么多,除非是你自己在拷貝數(shù)據(jù)。上面的命令是查看網(wǎng)卡流量歷史的,如何時(shí)時(shí)查看網(wǎng)卡流量呢?
另外也可以查看某一天的網(wǎng)卡流量歷史,使用-f選項(xiàng),后面跟文件名,如果你的系統(tǒng)格式Redhat或者CentOS那么sar的庫(kù)文件一定是在/var/log/sa/目錄下的。
2)查看歷史負(fù)載 ‘sar -q’
這個(gè)命令有助于我們查看服務(wù)器在過(guò)去的某個(gè)時(shí)間的負(fù)載狀況。
關(guān)于sar的介紹筆者不愿寫太多,畢竟介紹太多會(huì)給你帶來(lái)更多的壓力,其實(shí)筆者介紹這個(gè)命令的目的只是讓你學(xué)會(huì)查看網(wǎng)卡流量(這是非常有用的)。如果你很感興趣那就man一下吧,它的用法太多了。
5. free查看內(nèi)存使用狀況
只要你敲一個(gè)free然后回車就可以當(dāng)前系統(tǒng)的總內(nèi)存大小以及使用內(nèi)存的情況。從上圖中可看到當(dāng)前系統(tǒng)內(nèi)存總大小為235128(單位是k)已經(jīng)使用120368,剩余94760。其實(shí)真正剩余并不是這個(gè)94760,而是第二行的213388,真正使用的也是第二行的21740。這是因?yàn)橄到y(tǒng)初始化時(shí),就已經(jīng)分配出很大一部分內(nèi)存給緩存,這部分緩存用來(lái)隨時(shí)提供給程序使用,如果程序不用,那這部分內(nèi)存就空閑。所以,查看內(nèi)存使用多少,剩余多少請(qǐng)看第二行的數(shù)據(jù)。另外你還可以加-m 或者-g選項(xiàng)分別以M或G為單位打印內(nèi)存使用狀況。
6. ps 查看系統(tǒng)進(jìn)程
作為系統(tǒng)管理員,一定要知道你所管理的系統(tǒng)都有那些進(jìn)程在運(yùn)行,在windows下只要打開任務(wù)管理器即可查看。在linux下呢?其實(shí)在上面介紹的top命令就可以,但是不夠?qū)I(yè),當(dāng)然還有專門顯示系統(tǒng)進(jìn)程的命令。
對(duì)了,就是這個(gè)’ps aux’。筆者也經(jīng)??吹接械娜讼矚g用’ps -elf’ 大同小異,顯示的信息基本上是一樣的。 ps命令還有更多的用法,筆者不再做介紹,因?yàn)槟阒灰獣?huì)用這個(gè)命令就足夠了,請(qǐng)man一下。下面介紹上圖上出現(xiàn)的幾個(gè)參數(shù)的意義。
PID:進(jìn)程的id,這個(gè)id很有用,在linux中內(nèi)核管理進(jìn)程就得靠pid來(lái)識(shí)別和管理某一個(gè)程,比如我想終止某一個(gè)進(jìn)程,則用 ‘kill 進(jìn)程的pid’,有時(shí)并不能殺掉,則需要加一個(gè)-9選項(xiàng)了’kill -9 進(jìn)程pid’
STAT :表示進(jìn)程的狀態(tài),進(jìn)程狀態(tài)分為以下幾種(不要求記住,但要了解)
D 不能中斷的進(jìn)程(通常為IO)
R 正在運(yùn)行中的進(jìn)程
S 已經(jīng)中斷的進(jìn)程,通常情況下,系統(tǒng)中大部分進(jìn)程都是這個(gè)狀態(tài)
T 已經(jīng)停止或者暫停的進(jìn)程,如果我們正在運(yùn)行一個(gè)命令,比如說(shuō)sleep 10,如果我們按一下ctrl -z 讓他暫停,那么我們用ps查看就會(huì)顯示T這個(gè)狀態(tài)
W 這個(gè)好像是說(shuō),從內(nèi)核2.6xx 以后,表示為沒有足夠的內(nèi)存頁(yè)分配
X 已經(jīng)死掉的進(jìn)程(這個(gè)好像從來(lái)不會(huì)出現(xiàn))
Z 僵尸進(jìn)程,殺不掉,打不死的垃圾進(jìn)程,占系統(tǒng)一小點(diǎn)資源,不過(guò)沒有關(guān)系。如果太多,就有問(wèn)題了。一般不會(huì)出現(xiàn)。
< 高優(yōu)先級(jí)進(jìn)程
N 低優(yōu)先級(jí)進(jìn)程
L 在內(nèi)存中被鎖了內(nèi)存分頁(yè)
s 主進(jìn)程
l 多線程進(jìn)程
+ 代表在前臺(tái)運(yùn)行的進(jìn)程
這個(gè)ps命令是筆者在工作中用的非常多的命令之一,所以請(qǐng)記住它吧。關(guān)于ps命令的使用,筆者經(jīng)常會(huì)連同管道符一起使用,用來(lái)查看某個(gè)進(jìn)程或者它的數(shù)量。
上面的6不對(duì),需要減掉1,因?yàn)槭褂胓rep命令時(shí),grep命令本身也算作了一個(gè)。
7. netstat 查看網(wǎng)絡(luò)狀況
netstat命令用來(lái)打印網(wǎng)絡(luò)連接狀況、系統(tǒng)所開放端口、路由表等信息。筆者最常用的關(guān)于netstat的命令就是這個(gè)netstat -lnp(打印當(dāng)前系統(tǒng)啟動(dòng)哪些端口)以及netstat -an (打印網(wǎng)絡(luò)連接狀況)這兩個(gè)命令非常有用,請(qǐng)一定要記住。
如果你所管理的服務(wù)器是一臺(tái)提供web服務(wù)(80端口)的服務(wù)器,那么你就可以使用netstat -an |grep 80開查看當(dāng)前連接web服務(wù)的有哪些IP了。
8. 抓包工具tcpdump
有時(shí)候,也許你會(huì)有這樣的需求,想看一下某個(gè)網(wǎng)卡上都有哪些數(shù)據(jù)包,尤其是當(dāng)你初步判定你的服務(wù)器上有流量攻擊。這時(shí),使用抓包工具來(lái)抓一下數(shù)據(jù)包,就可以知道有哪些IP在攻擊你了。
如果你沒有tcpdump 這個(gè)命令,需要用’yum install -y tcpdump ’命令去安裝一下。上圖中第三列和第四列顯示的信息為哪一個(gè)IP+port在連接哪一個(gè)IP+port,后面的信息是該數(shù)據(jù)包的相關(guān)信息,如果不懂也沒有關(guān)系,畢竟你不是專門搞網(wǎng)絡(luò)的,而這里需要你關(guān)注的只是第三列以及第四列。-i 選項(xiàng)后面跟設(shè)備名稱,如果你想抓eth1網(wǎng)卡的包,后面則要跟eth1.至于-nn選項(xiàng)的作用是讓第三列和第四列顯示成IP+端口號(hào)的形式,如果不加-nn則顯示的是主機(jī)名+服務(wù)名稱。
【linux網(wǎng)絡(luò)相關(guān)】
1. ifconfig 查看網(wǎng)卡IP
ifconfig類似與windows的ipconfig,不加任何選項(xiàng)和參數(shù)只打印當(dāng)前網(wǎng)卡的IP相關(guān)信息(子網(wǎng)掩碼、網(wǎng)關(guān)等)
當(dāng)然ifconfig后面可以跟設(shè)備名,只打印指定設(shè)備的IP信息。
在windows下設(shè)置IP非常簡(jiǎn)單,然而在命令窗口下如何設(shè)置?這就需要去修改配置文件/etc/sysconfig/network-scripts/ifcfg-eth0了,如果是eth1那么配置文件是/etc/sysconfig/network-scripts/ifcfg-eth1.
如果想修改IP的話,則只需要修改IPADDR , NETMASK以及GATEWAY即可。如果你的linux是通過(guò)dhcp服務(wù)器自動(dòng)獲得的IP,那么配置文件肯定和上圖中的不一樣,BOOTPROTO那里會(huì)是’dhcp’,如果你要配置成靜態(tài)IP的話,這里就需要寫成’none’。關(guān)于如何設(shè)置IP以及子網(wǎng)掩碼的這些知識(shí)屬于網(wǎng)絡(luò)相關(guān)的基礎(chǔ)知識(shí)了,如果你對(duì)這方面比較陌生的話,建議你去看看網(wǎng)絡(luò)相關(guān)的資料。當(dāng)修改完IP后需要重啟網(wǎng)絡(luò)服務(wù)新IP才能生效,重啟命令為’ service network restart’
另外如果你有多個(gè)網(wǎng)卡的情況時(shí),只想重啟某一個(gè)網(wǎng)卡的話,還可以使用這個(gè)命令。
ifdown 即停掉網(wǎng)卡,ifup即啟動(dòng)網(wǎng)卡。有一點(diǎn)要提醒你的是,如果你遠(yuǎn)程登錄你的服務(wù)器,當(dāng)你使用ifdown eth0這個(gè)命令的時(shí)候,很有可能后面的命令ifup eth0不會(huì)被運(yùn)行,這樣導(dǎo)致你斷網(wǎng)而無(wú)法連接服務(wù)器,所以請(qǐng)盡量使用service network restart 這個(gè)命令來(lái)重啟網(wǎng)卡。
2. 給一個(gè)網(wǎng)卡設(shè)定多個(gè)IP
在linux系統(tǒng)中,網(wǎng)卡是可以設(shè)定多重IP的,筆者曾經(jīng)管理的一臺(tái)服務(wù)器的eth1就設(shè)定了5個(gè)IP,實(shí)在是夠變態(tài)的。
把ifcfg-eth0復(fù)制成ifcfg-eth0:1 然后編輯ifcfg-eth0:1修改DEVICE以及IPADDR保存后重啟網(wǎng)卡。
再次查看eth0上就有兩個(gè)IP了。這里你要注意一下,文件名(ifcft-eth0:1)寫成什么都無(wú)所謂,但是文件內(nèi)的DEVICE=eth0:1一定要按照這樣的格式寫,否則你啟動(dòng)不起來(lái)網(wǎng)卡。
3. 查看網(wǎng)卡連接狀態(tài)
mii-tool這個(gè)命令用來(lái)查看網(wǎng)卡是否連接,如圖顯示link ok等字樣說(shuō)明連接正常,否則會(huì)顯示’no link’字樣,下圖是筆者所管理的一臺(tái)服務(wù)器,eth1網(wǎng)卡沒有連接。
如果你的機(jī)器是虛擬機(jī),那么你使用該命令時(shí)應(yīng)該顯示成如下:
這是因?yàn)槭褂玫氖翘摂M網(wǎng)卡,不支持這個(gè)工具查看。不用多關(guān)注此,你記住這個(gè)mii-tool命令即可,它可是會(huì)經(jīng)常用到的。
4. 更改主機(jī)名
當(dāng)裝完系統(tǒng)后,默認(rèn)主機(jī)名為localhost,使用hostname就可以知道你的linux的主機(jī)名是什么。
同樣使用hostname可以更改你的主機(jī)名。
下次登錄時(shí)就會(huì)把命令提示符中的’localhost’更改成’Aming’。不過(guò)這樣修改只是保存在內(nèi)存中,下次重啟還會(huì)變成未改之前的主機(jī)名,所以需要你還要去更改相關(guān)的配置文件’/etc/sysconfig/network’。
把HOSTNAME=localhost.localdomain 修改成你想要的主機(jī)名,這樣再重啟就會(huì)讀取這個(gè)配置文件中的HOSTNAME.
5. 設(shè)置DNS
DNS是用來(lái)解析域名用的,平時(shí)我們?cè)L問(wèn)網(wǎng)站都是直接輸入一個(gè)網(wǎng)址,而dns把這個(gè)網(wǎng)址解析到一個(gè)IP。關(guān)于dns的概念,如果你很陌生的話,那就去網(wǎng)上查一下吧。在linux下面設(shè)置dns非常簡(jiǎn)單,只要把dns地址寫到一個(gè)配置文件中即可。這個(gè)配置文件就是/etc/resolv.conf
resolv.conf有它固有的格式,一定要寫成’nameserver IP’的格式,上面那行以’;’為開頭的行是一行注釋,沒有實(shí)際意義,建議寫兩個(gè)或多個(gè)namserver ,默認(rèn)會(huì)用第一個(gè)namserver去解析域名,當(dāng)?shù)谝粋€(gè)解析不到時(shí)會(huì)使用第二個(gè)。在linux下面有一個(gè)特殊的文件/etc/hosts也能解析域名,不過(guò)是需要我們手動(dòng)在里面添加IP+域名這些內(nèi)容,它的作用是臨時(shí)解析某個(gè)域名,非常有用。
它的格式如上圖,每一行作為一條記錄,分成兩部分,第一部分是IP,第二部分是域名。關(guān)于hosts文件,有幾點(diǎn)需要你注意:
1)一個(gè)IP后面可以跟多個(gè)域名,可以是幾十個(gè)甚至上百個(gè);
2)每行只能有一個(gè)IP,也就是說(shuō)一個(gè)域名不能對(duì)應(yīng)多個(gè)IP;
3)如果有多行中出現(xiàn)相同的域名(前面IP不一樣),會(huì)按最前面出現(xiàn)的記錄來(lái)解析。
【linux的防火墻】
1. selinux
Selinux是Redhat/CentOS系統(tǒng)特有的安全機(jī)制。不過(guò)因?yàn)檫@個(gè)東西限制太多,配置也特別繁瑣所以幾乎沒有人去真正應(yīng)用它。所以裝完系統(tǒng),我們一般都要把selinux關(guān)閉,以免引起不必要的麻煩。關(guān)閉selinux的方法為:
把’SELINUX=enforcing’改成’SELINUX=disabled’,然后重啟機(jī)器。臨時(shí)關(guān)閉selinux的命令為
getenforce命令可以得到selinux的狀態(tài),其中有兩種(Enforcing|Permissive),前者表示開放,后者表示關(guān)閉,但是會(huì)發(fā)出警告。setenforce用來(lái)設(shè)置selinux的狀態(tài),后面跟0則設(shè)置成Permissive后面跟1設(shè)置成Enforcing。關(guān)閉selinux的命令為setenforce 0,但是這只是臨時(shí)關(guān)閉,重啟后恢復(fù),想要永久生效,請(qǐng)更改配置文件/etc/selinux/config。
2. iptables
Iptables是linux上特有的防火墻機(jī)制,其功能非常強(qiáng)大,然而筆者在日常的管理工作中僅僅用到了一兩個(gè)應(yīng)用,這并不代表iptables不重要。作為一個(gè)網(wǎng)絡(luò)管理員,iptables是必要要熟練掌握的。但是作為系統(tǒng)管理員,我們也應(yīng)該會(huì)最基本的iptables操作,認(rèn)識(shí)iptables的基本規(guī)則。
1)iptalbes的三個(gè)表
filter :這個(gè)表主要用于過(guò)濾包的,是系統(tǒng)預(yù)設(shè)的表,這個(gè)表也是筆者用的最多的。內(nèi)建三個(gè)鏈INPUT、OUTPUT以及FORWARD。INPUT作用于進(jìn)入本機(jī)的包;OUTPUT作用于本機(jī)送出的包;FORWARD作用于那些跟本機(jī)無(wú)關(guān)的包。
nat :主要用處是網(wǎng)絡(luò)地址轉(zhuǎn)換,也有三個(gè)鏈。PREROUTING 鏈的作用是在包剛剛到達(dá)防火墻時(shí)改變它的目的地址,如果需要的話。OUTPUT鏈改變本地產(chǎn)生的包的目的地址。POSTROUTING鏈在包就要離開防火墻之前改變其源地址。該表筆者用的不多,但有時(shí)候會(huì)用到。
mangle :這個(gè)表主要是用于給數(shù)據(jù)包打標(biāo)記,然后根據(jù)標(biāo)記去操作哪些包。這個(gè)表幾乎不怎么用。除非你想成為一個(gè)高級(jí)網(wǎng)絡(luò)工程師,否則你就沒有必要花費(fèi)很多心思在它上面。
2)iptables 基本語(yǔ)法
A. 查看規(guī)則以及清除規(guī)則
如上圖,-t 后面跟表名,-nvL 即查看該表的規(guī)則,其中-n表示不針對(duì)IP反解析主機(jī)名;-L表示列出的意思;而-v表示列出的信息更加詳細(xì)。如果不加-t ,則打印filter表的相關(guān)信息。
這個(gè)和-t filter 打印的信息是一樣的。
關(guān)于清除規(guī)則的命令中,筆者用的最多就是
不加-t默認(rèn)是針對(duì)表filter來(lái)操作的,-F 表示把所有規(guī)則全部刪除;-Z表示把包以及流量計(jì)數(shù)器置零(這個(gè)筆者認(rèn)為很有用)。
B. 增加/刪除一條規(guī)則
這就是增加了一條規(guī)則,省略-t所以針對(duì)的是filter表。-A 表示增加一條規(guī)則,另外還有-I 表示插入一條規(guī)則,-D刪除一條規(guī)則;后面的INPUT即鏈名稱,還可以是OUTPUT或者FORWORD;-s 后跟源地址;-p 協(xié)議(tcp, udp, icmp); --sport/--dport 后跟源端口/目標(biāo)端口;-d 后跟目的IP(主要針對(duì)內(nèi)網(wǎng)或者外網(wǎng));-j 后跟動(dòng)作(DROP即把包丟掉,REJECT即包拒絕;ACCEPT即允許包)。這樣講可能很亂,那筆者多舉幾個(gè)例子來(lái)幫你理解:
上例表示:插入一條規(guī)則,把來(lái)自10.0.2.36的所有數(shù)據(jù)包丟掉。
刪除剛剛插入的規(guī)則。注意要?jiǎng)h除一條規(guī)則時(shí),必須和插入的規(guī)則一致,也就是說(shuō),兩條iptables命令,除了-I 和-D不一樣外,其他地方都一樣。
上例表示把來(lái)自10.0.2.36 并且是tcp協(xié)議到本機(jī)的80端口的數(shù)據(jù)包丟掉。這里要說(shuō)的是,--dport/--sport 必須要和-p選項(xiàng)一起使用,否則會(huì)出錯(cuò)。
把發(fā)送到10.0.2.34的22端口的數(shù)據(jù)包丟掉。下面做一個(gè)小試驗(yàn):
一開始用本機(jī)ping 10.0.2.34是通的,然后使用iptables增加一條規(guī)則,使到10.0.2.34的icmp包丟掉,再ping 10.0.2.34則不通了。此時(shí)用’iptables –nvL’查看iptalbes規(guī)則。
會(huì)有一條這樣的記錄,看pkts那列顯示4個(gè)數(shù)據(jù)包,因?yàn)槲覀僷ing 的時(shí)候給10.0.2.34發(fā)送了4個(gè)數(shù)據(jù)包,第二列表示這4個(gè)數(shù)據(jù)包一共有多大(336bytes)。此時(shí)使用’iptables -Z' 清零。
現(xiàn)在你明白’iptables -Z’的意義了吧。至于FORWORD鏈的應(yīng)用筆者幾乎沒有用到過(guò),所以不再舉例。再總結(jié)一下各個(gè)選項(xiàng)的作用:
-A/-D :增加刪除一條規(guī)則;
-I :插入一條規(guī)則,其實(shí)跟-A的效果一樣;
-p :指定協(xié)議,可以是tcp,udp或者icmp;
--dport :跟-p一起使用,指定目標(biāo)端口;
--sport :跟-p一起使用,指定源端口;
-s :指定源IP(可以是一個(gè)ip段);
-d :指定目的IP(可以是一個(gè)ip段);
-j :后跟動(dòng)作,其中ACCEPT表示允許包,DROP表示丟掉包,REJECT表示拒絕包;
-i :指定網(wǎng)卡(不常用,但有時(shí)候能用到);
上例中表示,把來(lái)自10.0.2.0/24這個(gè)網(wǎng)段的并且作用在eth0上的包放行。有時(shí)候你的服務(wù)器上iptables過(guò)多了,想刪除某一條規(guī)則時(shí),又不容易掌握當(dāng)時(shí)創(chuàng)建時(shí)的規(guī)則。其實(shí)有一種比較簡(jiǎn)單的方法:
查看結(jié)果如下:
刪除某一個(gè)規(guī)則的方法是:
-D 后跟鏈名,然后是規(guī)則num,這個(gè)num就是查看iptables規(guī)則時(shí)第一列的值。
iptables還有一個(gè)選項(xiàng)經(jīng)常用到,-P(大寫)選項(xiàng),表示預(yù)設(shè)策略。用法如下:
-P后面跟鏈名,策略內(nèi)容或者為DROP或者為ACCEPT,默認(rèn)是ACCEPT。注意:如果你在連接遠(yuǎn)程服務(wù)器,千萬(wàn)不要隨便敲這個(gè)命令,因?yàn)橐坏┠闱猛昊剀嚹憔蜁?huì)斷掉。
看到上圖中紅框標(biāo)出的部分了吧,現(xiàn)在所有進(jìn)來(lái)的數(shù)據(jù)包全部DROP了。這個(gè)策略一旦設(shè)定后,只能使用iptables -P ACCEPT才能恢復(fù)成原始狀態(tài),而不能使用-F參數(shù)。下面筆者針對(duì)一個(gè)小需求講述一下這個(gè)iptables規(guī)則如何設(shè)定。
需求:只針對(duì)filter表,預(yù)設(shè)策略INPUT鏈DROP,其他兩個(gè)鏈ACCEPT,然后針對(duì)10.0.2.0/24開通22端口,對(duì)所有網(wǎng)段開放80端口,對(duì)所有網(wǎng)段開放21端口。
這個(gè)需求不算復(fù)雜,但是因?yàn)橛卸鄺l規(guī)則,所以最好寫成腳本的形式。
完成腳本的編寫后,直接運(yùn)行 ‘sh /usr/local/sbin/iptables.sh ’ 即可。如果想開機(jī)啟動(dòng)時(shí)初始化防火墻規(guī)則,則需要在/etc/rc.d/rc.local中添加一行 ‘sh /usr/local/sbin/iptables.sh’ 。
關(guān)于icmp的包有一個(gè)比較常見的應(yīng)用。
--icmp-type 這個(gè)選項(xiàng)是要跟-p icmp 一起使用的,后面指定類型編號(hào)。這個(gè)8指的是能在本機(jī)ping通其他機(jī)器,而其他機(jī)器不能ping通本機(jī)。這個(gè)有必要記一下。
C. nat表的應(yīng)用
其實(shí),linux的iptables功能是十分強(qiáng)大的,筆者曾經(jīng)的一個(gè)老師這樣形容linux的網(wǎng)絡(luò)功能:只有想不到?jīng)]有做不到!也就是說(shuō)只要你能夠想到的關(guān)于網(wǎng)絡(luò)的應(yīng)用,linux都能幫你實(shí)現(xiàn)。在日常生活中相信你接觸過(guò)路由器吧,它的功能就是分享上網(wǎng)。本來(lái)一根網(wǎng)線過(guò)來(lái)(其實(shí)只有一個(gè)公網(wǎng)IP),通過(guò)路由器后,路由器分配了一個(gè)網(wǎng)段(私網(wǎng)IP),這樣連接路由器的多臺(tái)pc都能連接intnet而遠(yuǎn)端的設(shè)備認(rèn)為你的IP就是那個(gè)連接路由器的公網(wǎng)IP。這個(gè)路由器的功能其實(shí)就是由linux的iptables實(shí)現(xiàn)的,而iptables又是通過(guò)nat表作用而實(shí)現(xiàn)的這個(gè)功能。
至于具體的原理以及過(guò)程,筆者不想闡述,請(qǐng)查看相關(guān)資料。筆者在這里只舉一個(gè)例子來(lái)說(shuō)明iptables如何實(shí)現(xiàn)的這個(gè)功能。假設(shè)你的機(jī)器上有兩塊網(wǎng)卡eth0和eth1,其中eth0的IP為10.0.2.68 ,eth1的IP為192.168.1.1 。eth0連接了intnet 但eth1沒有連接,現(xiàn)在有另一臺(tái)機(jī)器(192.168.1.2)和eth1是互通的,那么如何設(shè)置也能夠讓連接eth1的這臺(tái)機(jī)器能夠連接intnet(即能和10.0.2.68互通)?
其實(shí)就是這樣簡(jiǎn)單的兩個(gè)命令就能實(shí)現(xiàn)上面的需求。第一個(gè)命令涉及到了內(nèi)核參數(shù)相關(guān)的配置文件,它的目的是為了打開路由轉(zhuǎn)發(fā)功能,否則無(wú)法實(shí)現(xiàn)我們的應(yīng)用。第二個(gè)命令則是iptables對(duì)nat表做了一個(gè)IP轉(zhuǎn)發(fā)的操作,-o 選項(xiàng)后跟設(shè)備名,表示出口的網(wǎng)卡,MASQUERADE表示偽裝的意思。
關(guān)于nat表,筆者不想講太多內(nèi)容,你只要學(xué)會(huì)這個(gè)路由轉(zhuǎn)發(fā)即可。其他的東西交給網(wǎng)絡(luò)工程師去學(xué)習(xí)吧,畢竟你將來(lái)可是要做linux系統(tǒng)工程師的。
D. 保存以及備份iptalbes規(guī)則
也許你不知道,咱們?cè)O(shè)定的防火墻規(guī)則只是保存在內(nèi)存中,并沒有保存到某一個(gè)文件中,也就說(shuō)當(dāng)系統(tǒng)重啟后以前設(shè)定的規(guī)則就沒有了,所以設(shè)定好規(guī)則后要先保存一下。
它會(huì)提示你把規(guī)則保存在了/etc/sysconfig/iptables文件內(nèi)。其實(shí),這個(gè)文件就是iptables的配置文件了,你不妨查看一下它。
紅線部分就是咱們剛才設(shè)定那條規(guī)則!有時(shí)可能因?yàn)槲覀冊(cè)O(shè)置防火墻規(guī)則有誤導(dǎo)致服務(wù)器出問(wèn)題,這時(shí)候不妨先備份一下這個(gè)配置文件,然后停止防火墻服務(wù)。
這樣防火墻就失效了,但是一旦你重新設(shè)定規(guī)則后(哪怕只有一條),防火墻又開始工作了。
我還可以使用iptables-save >filename 這條命令來(lái)保存一個(gè)防火墻規(guī)則,這樣就可以起到備份的作用了。要想恢復(fù)這個(gè)規(guī)則使用下面這個(gè)命令即可。
【linux系統(tǒng)的任務(wù)計(jì)劃】
這部分內(nèi)容太重要了,其實(shí)大部分系統(tǒng)管理工作都是通過(guò)定期自動(dòng)執(zhí)行某一個(gè)腳本來(lái)完成的,那么如何定期執(zhí)行某一個(gè)腳本呢?這就要借助linux的cron功能了。
關(guān)于cron任務(wù)計(jì)劃功能的操作都是通過(guò)crontab這個(gè)命令來(lái)完成的。其中常用的選項(xiàng)有:
-u :指定某個(gè)用戶,不加-u選項(xiàng)則為當(dāng)前用戶;
-e :制定計(jì)劃任務(wù);
-l :列出計(jì)劃任務(wù);
-r :刪除計(jì)劃任務(wù)。
使用crontab -e 來(lái)制定計(jì)劃任務(wù),上面的例子表示在05月26日(這天必須是周四)的10點(diǎn)01分執(zhí)行’ echo "ok" >/root/cron.log’這樣的任務(wù)。
Cron的格式是這樣的,每一行代表一個(gè)任務(wù)計(jì)劃,總共分成兩部分,前面部分為時(shí)間,后面部分要執(zhí)行的命令。后面的命令不用多講,至于前面的時(shí)間是有講究的,這個(gè)時(shí)間共分為5段,用空格隔開(可以是多個(gè)空格),第一段表示分鐘(0-59),第二段表示小時(shí)(0-23),第三段表示日(1-31),第四段表示月(1-12),第五段表示周(0-7,0或者7都可以表示為周日)。從左至右依次是:分,時(shí),日,月,周(一定要牢記)!
crontab -e 實(shí)際上是打開了/var/spool/cron/username (如果是root則打開的是/var/spool/cron/root)這個(gè)文件。使用的是vim編輯器,所以要保存的話則在命令模式下輸入:wq即可。但是,你千萬(wàn)不要直接去編輯那個(gè)文件,因?yàn)榭赡軙?huì)出錯(cuò),所以一定要使用crontab -e來(lái)編輯。查看已經(jīng)設(shè)定的任務(wù)計(jì)劃使用crontab -l
刪除計(jì)劃任務(wù)要用crontab -r
下面筆者給你出一些練習(xí)題,幫助你熟悉這個(gè)cron的應(yīng)用。
1. 每天凌晨1點(diǎn)20分清除/var/log/slow.log這個(gè)文件;
2. 每周日3點(diǎn)執(zhí)行’/bin/sh /usr/local/sbin/backup.sh’;
3. 每月14號(hào)4點(diǎn)10分執(zhí)行’/bin/sh /usr/local/sbin/backup_month.sh’;
4. 每隔8小時(shí)執(zhí)行’ntpdate time.windows.com’;
5. 每天的1點(diǎn),12點(diǎn),18點(diǎn)執(zhí)行’/bin/sh /usr/local/sbin/test.sh’;
6. 每天的9點(diǎn)到18點(diǎn)執(zhí)行’/bin/sh /usr/local/sbin/test2.sh’;
答案:
1. 20 1 * echo “”>/var/log/slow.log
2. 0 30 0 /bin/sh /usr/local/sbin/backup.sh
3. 10 04 14 /bin/sh /usr/local/sbin/backup_month.sh
4. 0 /8 ntpdate time.windows.com
5. 0 1,12,18 /bin/sh /usr/local/sbin/test.sh
6. 0 9-18 * /bin/sh /usr/local/sbin/test2.sh
Cron的這部分內(nèi)容并不難,你只要會(huì)了這6道練習(xí)題,你就算掌握它了。這里要簡(jiǎn)單說(shuō)一下,每隔8小時(shí),就是用全部小時(shí)(0-23)去除以8,你仔細(xì)想一下結(jié)果,其實(shí)算出來(lái)應(yīng)該是0,8,16三個(gè)數(shù)。當(dāng)遇到多個(gè)數(shù)(分鐘、小時(shí)、月、周)例如第5題,則需要用逗號(hào)隔開。而時(shí)間段是可以用’-‘的方式表示的。等設(shè)置好了所有的計(jì)劃任務(wù)后需要查看一下crond服務(wù)是否啟動(dòng),如果沒有啟動(dòng),需要啟動(dòng)它。
如何啟動(dòng)稍后會(huì)做介紹。除了用戶自定義的計(jì)劃任務(wù)外,其實(shí)系統(tǒng)本身也有計(jì)劃任務(wù)的。
系統(tǒng)會(huì)安裝這個(gè)配置文件中的計(jì)劃去執(zhí)行內(nèi)定的任務(wù)。
【linux的系統(tǒng)服務(wù)管理】
如果你對(duì)windows非常熟悉的話,相信你肯定配置過(guò)開機(jī)啟動(dòng)的服務(wù),有些服務(wù)我們?nèi)粘S貌坏絼t要把它停掉,一來(lái)可以節(jié)省資源,二來(lái)可以減少安全隱患。在linux上同樣也有相關(guān)的工具來(lái)管理系統(tǒng)的服務(wù)。
1. ntsysv
用來(lái)配置哪些服務(wù)開啟或者關(guān)閉,有點(diǎn)想圖形界面,不過(guò)是使用鍵盤來(lái)控制的。如果沒有這個(gè)命令請(qǐng)使用 yum install -y ntsysv 安裝它。
敲完這個(gè)命令后則顯示出如上圖中的畫面。在屏幕的最上面有’Red Hat’等字樣,這是在告訴我們這個(gè)工具是由Red Hat公司開發(fā)的。按鍵盤的上下方向鍵可以調(diào)節(jié)紅色光標(biāo),按空格可以選擇開啟或者不開啟,如果前面的中括號(hào)內(nèi)顯示有’*’ 則表示開啟否則不開啟。通過(guò)這個(gè)工具也可以看到目前系統(tǒng)中所有的服務(wù)。建議除’crond, iptables, network, sshd, syslog, irqbalance, sendmail, microcode_ctl’ 外其他服務(wù)全部停掉。選擇好后,按’tab’鍵選擇ok然后回車。需要重啟機(jī)器才能生效。
2. chkconfig
Linux系統(tǒng)所有的預(yù)設(shè)服務(wù)可以查看/etc/init.d/目錄得到
其實(shí)這就是系統(tǒng)所有的預(yù)設(shè)服務(wù)了。為什么這樣講,因?yàn)橄到y(tǒng)預(yù)設(shè)服務(wù)都是可以通過(guò)這樣的命令實(shí)現(xiàn) ‘service 服務(wù)名 start|stop|restart’ ,這里的服務(wù)名就是/etc/init.d/目錄下的這些文件了。除了可以使用’service crond start ‘啟動(dòng)crond外,還可以使用/etc/init.d/crond start 來(lái)啟動(dòng)。
如上圖,這兩個(gè)命令出來(lái)的結(jié)果是一樣的。
再看看這個(gè)chkconfig命令,它不僅可以列出來(lái)所有的服務(wù),還可以詳細(xì)到每個(gè)級(jí)別。這里的級(jí)別(0,1,2,3,4,5,6)就是inittab里面介紹的那幾個(gè)啟動(dòng)級(jí)別了。
這樣還可以查看某一個(gè)服務(wù)的啟動(dòng)情況。
用--level 指定級(jí)別,后面是服務(wù)名,然后是off或者on,--level后還可以跟多個(gè)級(jí)別。
另外還可以省略級(jí)別,默認(rèn)是針對(duì)2,3,4,5級(jí)別操作。
另外這個(gè)chkconfig 還有一個(gè)功能就是可以把某個(gè)服務(wù)加入到系統(tǒng)服務(wù),即可以使用service 服務(wù)名 start 這樣的形式,并且可以在chkconfig --list 中查找到。當(dāng)然也能刪除掉。
這個(gè)功能常用在把自定義的啟動(dòng)腳本加入到系統(tǒng)服務(wù)當(dāng)中。關(guān)于系統(tǒng)服務(wù)就講這些內(nèi)容,其實(shí)還有很多內(nèi)容筆者沒有介紹,道理很簡(jiǎn)單,一來(lái)講多了你不能消化二來(lái)講多了你也用不上。
【linux中的數(shù)據(jù)備份】
數(shù)據(jù)備份,不用說(shuō)太多吧,毫無(wú)疑問(wèn)很重要。筆者就曾經(jīng)有過(guò)一次非常痛苦的經(jīng)歷,備份策略沒有做好,結(jié)果磁盤壞掉數(shù)據(jù)丟失,簡(jiǎn)直是撕心裂肺的痛呀。還好數(shù)據(jù)重要性不是特別高,即使是不高也是丟失了數(shù)據(jù),這是作為系統(tǒng)管理員最不應(yīng)該出現(xiàn)的事故。所以,在你以后的系統(tǒng)維護(hù)工作中,一定要把數(shù)據(jù)備份當(dāng)回事,認(rèn)真對(duì)待。在linux上作為數(shù)據(jù)備份的工具很多,但筆者就只用一種那就是rsync 從字面上的意思你可以理解為remote sync (遠(yuǎn)程同步)這樣可以讓你理解的更深刻一些。Rsync不僅可以遠(yuǎn)程同步數(shù)據(jù)(類似于scp),當(dāng)然還可以本地同步數(shù)據(jù)(類似于cp),但不同于cp或scp的一點(diǎn)是,rsync不像cp/scp一樣會(huì)覆蓋以前的數(shù)據(jù)(如果數(shù)據(jù)已經(jīng)存在),它會(huì)先判斷已經(jīng)存在的數(shù)據(jù)和新數(shù)據(jù)有什么不同,只有不同時(shí)才會(huì)把不同的部分覆蓋掉。如果你的linux上下面看例子吧。(如果沒有rsync命令請(qǐng)使用yum install -y rsync安裝)
上面例子表示把當(dāng)前目錄下的123同步到/tmp/目錄下,并且同樣也命名為123。如果是遠(yuǎn)程拷貝的話就是這樣的形式了 IP:path(如:10.0.2.34:/root/)
當(dāng)建立連接后,是需要輸入密碼的。如果手動(dòng)去執(zhí)行這些操作還好,但是如果是寫在腳本中怎么辦?這就涉及到添加信任關(guān)系了,該部分內(nèi)容稍后會(huì)詳細(xì)介紹。
1. rsync的命令格式
rsync [OPTION]... SRC DEST
rsync [OPTION]... SRC [USER@]HOST:DEST
rsync [OPTION]... [USER@]HOST:SRC DEST
rsync [OPTION]... [USER@]HOST::SRC DEST
rsync [OPTION]... SRC [USER@]HOST::DEST
更多建議: