linux 系統(tǒng)日常管理

2018-08-16 16:52 更新

linux 系統(tǒng)日常管理

筆者在前面介紹的內(nèi)容都為linux系統(tǒng)基礎(chǔ)類的,如果你現(xiàn)在把前面的內(nèi)容全部很好的掌握了,那最好了。不過筆者要說的是,即使你完全掌握了,你現(xiàn)在還是不能作為一名合格的linux系統(tǒng)管理員的,畢竟系統(tǒng)管理員要會(huì)做的事情太多了。本章以及后面章節(jié)筆者會(huì)陸續(xù)教給你作為linux系統(tǒng)管理員所必備的知識(shí)。只要你熟練掌握那絕對(duì)可以勝任一個(gè)最初級(jí)的管理員職位,不過只是初級(jí)的,因?yàn)槟氵€需要在日常的管理工作中獲得成長。

【監(jiān)控系統(tǒng)的狀態(tài)】

1. w 查看當(dāng)前系統(tǒng)的負(fù)載

15_1.png.jpg

相信所有的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è)值越大就說明你的服務(wù)器壓力越大。一般情況下這個(gè)值只要不超過你服務(wù)器的cpu數(shù)量就沒有關(guān)系,如果你的服務(wù)器cpu數(shù)量為8,那么這個(gè)值若小于8,就說明你的服務(wù)器沒有壓力,否則就要關(guān)注一下了。到這里你肯定會(huì)問,如何查看服務(wù)器有幾個(gè)cpu?

15_7.png.jpg

就是用這個(gè)命令了?!?proc/cpuinfo’這個(gè)文件記錄了cpu的詳細(xì)信息。目前市面上的服務(wù)器通常都是2顆4核cpu,在linux看來,它就是8個(gè)cpu。查看這個(gè)文件時(shí)則會(huì)顯示8段類似的信息,而最后一段信息中processor : 后面跟的是’7’。所以查看當(dāng)前系統(tǒng)有幾個(gè)cpu,你可以使用這個(gè)命令:’ grep -c 'processor' /proc/cpuinfo’ 。

15_8.png.jpg

2. vmstat 監(jiān)控系統(tǒng)的狀態(tài)

15_9.png.jpg

上面講的w查看的是系統(tǒng)整體上的負(fù)載,通過看那個(gè)數(shù)值可以知道當(dāng)前系統(tǒng)有沒有壓力,但是具體是哪里(CPU, 內(nèi)存,磁盤等)有壓力就無法判斷了。通過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ù),如果長期大于服務(wù)器cpu的個(gè)數(shù),則說明cpu不夠用了;

b:表示等待資源的進(jìn)程數(shù),比如等待I/O, 內(nèi)存等,這列的值如果長時(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í)間間隔中觀測到的每秒設(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列,三列代表的含義在上邊說得已經(jīng)很清楚。IO部分的bi以及bo也是我要經(jīng)常參考的對(duì)象。如果磁盤io壓力很大時(shí),這兩列的數(shù)值會(huì)比較高。另外當(dāng)si, so兩列的數(shù)值比較高,并且在不斷變化時(shí),說明內(nèi)存不夠了,內(nèi)存中的數(shù)據(jù)頻繁交換到交換分區(qū)中,這往往對(duì)系統(tǒng)性能影響極大。

15_10.png.jpg

筆者用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)資源

15_11.png.jpg

這個(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)容可以通過其他命令來查看,所以用top重點(diǎn)查看的還是下面的進(jìn)程使用系統(tǒng)資源詳細(xì)狀況。這部分東西反映的東西還是比較多的,不過需要你關(guān)注的也就是幾項(xiàng):%CPU, %MEM, COMMAND 這些項(xiàng)目所代表的意義,不用筆者介紹相信你也能看懂吧。

15_21.png.jpg

另外筆者使用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ù)庫文件(時(shí)時(shí)監(jiān)控就不會(huì)了,因?yàn)椴挥萌ゲ樵兡莻€(gè)庫文件)。它的數(shù)據(jù)庫文件在” /var/log/sa/”目錄下,默認(rèn)保存9天。因?yàn)檫@個(gè)命令太過復(fù)雜,所以筆者只介紹幾個(gè)。

1)查看網(wǎng)卡流量 ‘sar -n DEV ‘

15_22.png.jpg

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)卡流量呢?

15_23.png.jpg

另外也可以查看某一天的網(wǎng)卡流量歷史,使用-f選項(xiàng),后面跟文件名,如果你的系統(tǒng)格式Redhat或者CentOS那么sar的庫文件一定是在/var/log/sa/目錄下的。

15_24.png.jpg

2)查看歷史負(fù)載 ‘sar -q’

15_25.png.jpg

這個(gè)命令有助于我們查看服務(wù)器在過去的某個(gè)時(shí)間的負(fù)載狀況。

關(guān)于sar的介紹筆者不愿寫太多,畢竟介紹太多會(huì)給你帶來更多的壓力,其實(shí)筆者介紹這個(gè)命令的目的只是讓你學(xué)會(huì)查看網(wǎng)卡流量(這是非常有用的)。如果你很感興趣那就man一下吧,它的用法太多了。

5. free查看內(nèi)存使用狀況

15_26.png.jpg

只要你敲一個(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)存給緩存,這部分緩存用來隨時(shí)提供給程序使用,如果程序不用,那這部分內(nèi)存就空閑。所以,查看內(nèi)存使用多少,剩余多少請(qǐng)看第二行的數(shù)據(jù)。另外你還可以加-m 或者-g選項(xiàng)分別以M或G為單位打印內(nèi)存使用狀況。

15_27.png.jpg

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)程的命令。

15_28.png.jpg

對(duì)了,就是這個(gè)’ps aux’。筆者也經(jīng)常看到有的人喜歡用’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來識(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è)命令,比如說sleep 10,如果我們按一下ctrl -z 讓他暫停,那么我們用ps查看就會(huì)顯示T這個(gè)狀態(tài)

W 這個(gè)好像是說,從內(nèi)核2.6xx 以后,表示為沒有足夠的內(nèi)存頁分配

X  已經(jīng)死掉的進(jìn)程(這個(gè)好像從來不會(huì)出現(xiàn))

Z  僵尸進(jìn)程,殺不掉,打不死的垃圾進(jìn)程,占系統(tǒng)一小點(diǎn)資源,不過沒有關(guān)系。如果太多,就有問題了。一般不會(huì)出現(xiàn)。

<  高優(yōu)先級(jí)進(jìn)程

N  低優(yōu)先級(jí)進(jìn)程

L   在內(nèi)存中被鎖了內(nèi)存分頁

s   主進(jìn)程

l   多線程進(jìn)程

+  代表在前臺(tái)運(yùn)行的進(jìn)程

這個(gè)ps命令是筆者在工作中用的非常多的命令之一,所以請(qǐng)記住它吧。關(guān)于ps命令的使用,筆者經(jīng)常會(huì)連同管道符一起使用,用來查看某個(gè)進(jìn)程或者它的數(shù)量。

15_29.png.jpg

上面的6不對(duì),需要減掉1,因?yàn)槭褂胓rep命令時(shí),grep命令本身也算作了一個(gè)。

7. netstat 查看網(wǎng)絡(luò)狀況

15_44.png.jpg

netstat命令用來打印網(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)一定要記住。

15_45.png.jpg

如果你所管理的服務(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í),使用抓包工具來抓一下數(shù)據(jù)包,就可以知道有哪些IP在攻擊你了。

15_46.png.jpg

如果你沒有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)等)

15_47.png.jpg

當(dāng)然ifconfig后面可以跟設(shè)備名,只打印指定設(shè)備的IP信息。

15_48.png.jpg

在windows下設(shè)置IP非常簡單,然而在命令窗口下如何設(shè)置?這就需要去修改配置文件/etc/sysconfig/network-scripts/ifcfg-eth0了,如果是eth1那么配置文件是/etc/sysconfig/network-scripts/ifcfg-eth1.

15_49.png.jpg

如果想修改IP的話,則只需要修改IPADDR , NETMASK以及GATEWAY即可。如果你的linux是通過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’

15_50.png.jpg

另外如果你有多個(gè)網(wǎng)卡的情況時(shí),只想重啟某一個(gè)網(wǎng)卡的話,還可以使用這個(gè)命令。

15_51.png.jpg

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ù)器,所以請(qǐng)盡量使用service network restart 這個(gè)命令來重啟網(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)的。

15_52.png.jpg

把ifcfg-eth0復(fù)制成ifcfg-eth0:1 然后編輯ifcfg-eth0:1修改DEVICE以及IPADDR保存后重啟網(wǎng)卡。

15_53.png.jpg

再次查看eth0上就有兩個(gè)IP了。這里你要注意一下,文件名(ifcft-eth0:1)寫成什么都無所謂,但是文件內(nèi)的DEVICE=eth0:1一定要按照這樣的格式寫,否則你啟動(dòng)不起來網(wǎng)卡。

3. 查看網(wǎng)卡連接狀態(tài)

15_54.png.jpg

mii-tool這個(gè)命令用來查看網(wǎng)卡是否連接,如圖顯示link ok等字樣說明連接正常,否則會(huì)顯示’no link’字樣,下圖是筆者所管理的一臺(tái)服務(wù)器,eth1網(wǎng)卡沒有連接。

15_55.png.jpg

如果你的機(jī)器是虛擬機(jī),那么你使用該命令時(shí)應(yīng)該顯示成如下:

15_56.png.jpg

這是因?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ī)名是什么。

15_57.png.jpg同樣使用hostname可以更改你的主機(jī)名。

15_71.png.jpg

下次登錄時(shí)就會(huì)把命令提示符15_72.png.jpg中的’localhost’更改成’Aming’。不過這樣修改只是保存在內(nèi)存中,下次重啟還會(huì)變成未改之前的主機(jī)名,所以需要你還要去更改相關(guān)的配置文件’/etc/sysconfig/network’。

15_73.png.jpg

把HOSTNAME=localhost.localdomain 修改成你想要的主機(jī)名,這樣再重啟就會(huì)讀取這個(gè)配置文件中的HOSTNAME.

5. 設(shè)置DNS

DNS是用來解析域名用的,平時(shí)我們?cè)L問網(wǎng)站都是直接輸入一個(gè)網(wǎng)址,而dns把這個(gè)網(wǎng)址解析到一個(gè)IP。關(guān)于dns的概念,如果你很陌生的話,那就去網(wǎng)上查一下吧。在linux下面設(shè)置dns非常簡單,只要把dns地址寫到一個(gè)配置文件中即可。這個(gè)配置文件就是/etc/resolv.conf

15_74.png.jpg

resolv.conf有它固有的格式,一定要寫成’nameserver IP’的格式,上面那行以’;’為開頭的行是一行注釋,沒有實(shí)際意義,建議寫兩個(gè)或多個(gè)namserver ,默認(rèn)會(huì)用第一個(gè)namserver去解析域名,當(dāng)?shù)谝粋€(gè)解析不到時(shí)會(huì)使用第二個(gè)。在linux下面有一個(gè)特殊的文件/etc/hosts也能解析域名,不過是需要我們手動(dòng)在里面添加IP+域名這些內(nèi)容,它的作用是臨時(shí)解析某個(gè)域名,非常有用。

15_75.png.jpg

它的格式如上圖,每一行作為一條記錄,分成兩部分,第一部分是IP,第二部分是域名。關(guān)于hosts文件,有幾點(diǎn)需要你注意:

1)一個(gè)IP后面可以跟多個(gè)域名,可以是幾十個(gè)甚至上百個(gè);

2)每行只能有一個(gè)IP,也就是說一個(gè)域名不能對(duì)應(yīng)多個(gè)IP;

3)如果有多行中出現(xiàn)相同的域名(前面IP不一樣),會(huì)按最前面出現(xiàn)的記錄來解析。

linux的防火墻

1. selinux

Selinux是Redhat/CentOS系統(tǒng)特有的安全機(jī)制。不過因?yàn)檫@個(gè)東西限制太多,配置也特別繁瑣所以幾乎沒有人去真正應(yīng)用它。所以裝完系統(tǒng),我們一般都要把selinux關(guān)閉,以免引起不必要的麻煩。關(guān)閉selinux的方法為:

15_76.png.jpg

把’SELINUX=enforcing’改成’SELINUX=disabled’,然后重啟機(jī)器。臨時(shí)關(guān)閉selinux的命令為

15_77.png.jpg

getenforce命令可以得到selinux的狀態(tài),其中有兩種(Enforcing|Permissive),前者表示開放,后者表示關(guān)閉,但是會(huì)發(fā)出警告。setenforce用來設(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è)表主要用于過濾包的,是系統(tǒng)預(yù)設(shè)的表,這個(gè)表也是筆者用的最多的。內(nèi)建三個(gè)鏈INPUT、OUTPUT以及FORWARD。INPUT作用于進(jìn)入本機(jī)的包;OUTPUT作用于本機(jī)送出的包;FORWARD作用于那些跟本機(jī)無關(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 基本語法

A. 查看規(guī)則以及清除規(guī)則

15_78.png.jpg

如上圖,-t 后面跟表名,-nvL 即查看該表的規(guī)則,其中-n表示不針對(duì)IP反解析主機(jī)名;-L表示列出的意思;而-v表示列出的信息更加詳細(xì)。如果不加-t ,則打印filter表的相關(guān)信息。

15_79.png.jpg

這個(gè)和-t filter 打印的信息是一樣的。

關(guān)于清除規(guī)則的命令中,筆者用的最多就是

15_80.png.jpg

不加-t默認(rèn)是針對(duì)表filter來操作的,-F 表示把所有規(guī)則全部刪除;-Z表示把包以及流量計(jì)數(shù)器置零(這個(gè)筆者認(rèn)為很有用)。

B. 增加/刪除一條規(guī)則

15_81.png.jpg

這就是增加了一條規(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è)例子來幫你理解:

15_82.png.jpg

上例表示:插入一條規(guī)則,把來自10.0.2.36的所有數(shù)據(jù)包丟掉。

15_83.png.jpg刪除剛剛插入的規(guī)則。注意要?jiǎng)h除一條規(guī)則時(shí),必須和插入的規(guī)則一致,也就是說,兩條iptables命令,除了-I 和-D不一樣外,其他地方都一樣。

15_165.png.jpg

上例表示把來自10.0.2.36 并且是tcp協(xié)議到本機(jī)的80端口的數(shù)據(jù)包丟掉。這里要說的是,--dport/--sport 必須要和-p選項(xiàng)一起使用,否則會(huì)出錯(cuò)。

15_166.png.jpg

把發(fā)送到10.0.2.34的22端口的數(shù)據(jù)包丟掉。下面做一個(gè)小試驗(yàn):

15_167.png.jpg

一開始用本機(jī)ping 10.0.2.34是通的,然后使用iptables增加一條規(guī)則,使到10.0.2.34的icmp包丟掉,再ping 10.0.2.34則不通了。此時(shí)用’iptables –nvL’查看iptalbes規(guī)則。

15_168.png.jpg會(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' 清零。

15_169.png.jpg

現(xiàn)在你明白’iptables -Z’的意義了吧。至于FORWORD鏈的應(yīng)用筆者幾乎沒有用到過,所以不再舉例。再總結(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í)候能用到);

15_170.png.jpg

上例中表示,把來自10.0.2.0/24這個(gè)網(wǎng)段的并且作用在eth0上的包放行。有時(shí)候你的服務(wù)器上iptables過多了,想刪除某一條規(guī)則時(shí),又不容易掌握當(dāng)時(shí)創(chuàng)建時(shí)的規(guī)則。其實(shí)有一種比較簡單的方法:

15_171.png.jpg

查看結(jié)果如下:

15_172.png.jpg

刪除某一個(gè)規(guī)則的方法是:

15_173.png.jpg

-D 后跟鏈名,然后是規(guī)則num,這個(gè)num就是查看iptables規(guī)則時(shí)第一列的值。

iptables還有一個(gè)選項(xiàng)經(jīng)常用到,-P(大寫)選項(xiàng),表示預(yù)設(shè)策略。用法如下:

15_174.png.jpg

-P后面跟鏈名,策略內(nèi)容或者為DROP或者為ACCEPT,默認(rèn)是ACCEPT。注意:如果你在連接遠(yuǎn)程服務(wù)器,千萬不要隨便敲這個(gè)命令,因?yàn)橐坏┠闱猛昊剀嚹憔蜁?huì)斷掉。

15_175.png.jpg

看到上圖中紅框標(biāo)出的部分了吧,現(xiàn)在所有進(jìn)來的數(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ī)則,所以最好寫成腳本的形式。

15_176.png.jpg

完成腳本的編寫后,直接運(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)用。

15_177.png.jpg

--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)]有做不到!也就是說只要你能夠想到的關(guān)于網(wǎng)絡(luò)的應(yīng)用,linux都能幫你實(shí)現(xiàn)。在日常生活中相信你接觸過路由器吧,它的功能就是分享上網(wǎng)。本來一根網(wǎng)線過來(其實(shí)只有一個(gè)公網(wǎng)IP),通過路由器后,路由器分配了一個(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又是通過nat表作用而實(shí)現(xiàn)的這個(gè)功能。

至于具體的原理以及過程,筆者不想闡述,請(qǐng)查看相關(guān)資料。筆者在這里只舉一個(gè)例子來說明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互通)?

15_178.png.jpg

其實(shí)就是這樣簡單的兩個(gè)命令就能實(shí)現(xiàn)上面的需求。第一個(gè)命令涉及到了內(nèi)核參數(shù)相關(guān)的配置文件,它的目的是為了打開路由轉(zhuǎn)發(fā)功能,否則無法實(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í)吧,畢竟你將來可是要做linux系統(tǒng)工程師的。

D. 保存以及備份iptalbes規(guī)則

也許你不知道,咱們?cè)O(shè)定的防火墻規(guī)則只是保存在內(nèi)存中,并沒有保存到某一個(gè)文件中,也就說當(dāng)系統(tǒng)重啟后以前設(shè)定的規(guī)則就沒有了,所以設(shè)定好規(guī)則后要先保存一下。

15_179.png.jpg

它會(huì)提示你把規(guī)則保存在了/etc/sysconfig/iptables文件內(nèi)。其實(shí),這個(gè)文件就是iptables的配置文件了,你不妨查看一下它。

15_180.png.jpg

紅線部分就是咱們剛才設(shè)定那條規(guī)則!有時(shí)可能因?yàn)槲覀冊(cè)O(shè)置防火墻規(guī)則有誤導(dǎo)致服務(wù)器出問題,這時(shí)候不妨先備份一下這個(gè)配置文件,然后停止防火墻服務(wù)。

15_181.png.jpg

這樣防火墻就失效了,但是一旦你重新設(shè)定規(guī)則后(哪怕只有一條),防火墻又開始工作了。

15_182.png.jpg

我還可以使用iptables-save >filename 這條命令來保存一個(gè)防火墻規(guī)則,這樣就可以起到備份的作用了。要想恢復(fù)這個(gè)規(guī)則使用下面這個(gè)命令即可。

15_183.png.jpg

linux系統(tǒng)的任務(wù)計(jì)劃

這部分內(nèi)容太重要了,其實(shí)大部分系統(tǒng)管理工作都是通過定期自動(dòng)執(zhí)行某一個(gè)腳本來完成的,那么如何定期執(zhí)行某一個(gè)腳本呢?這就要借助linux的cron功能了。

15_184.png.jpg

關(guān)于cron任務(wù)計(jì)劃功能的操作都是通過crontab這個(gè)命令來完成的。其中常用的選項(xiàng)有:

-u :指定某個(gè)用戶,不加-u選項(xiàng)則為當(dāng)前用戶;

-e :制定計(jì)劃任務(wù);

-l :列出計(jì)劃任務(wù);

-r :刪除計(jì)劃任務(wù)。

15_185.png.jpg

使用crontab -e 來制定計(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即可。但是,你千萬不要直接去編輯那個(gè)文件,因?yàn)榭赡軙?huì)出錯(cuò),所以一定要使用crontab -e來編輯。查看已經(jīng)設(shè)定的任務(wù)計(jì)劃使用crontab -l

15_186.png.jpg

刪除計(jì)劃任務(wù)要用crontab -r

15_187.png.jpg

下面筆者給你出一些練習(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í)題,你就算掌握它了。這里要簡單說一下,每隔8小時(shí),就是用全部小時(shí)(0-23)去除以8,你仔細(xì)想一下結(jié)果,其實(shí)算出來應(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)它。

15_188.png.jpg

如何啟動(dòng)稍后會(huì)做介紹。除了用戶自定義的計(jì)劃任務(wù)外,其實(shí)系統(tǒng)本身也有計(jì)劃任務(wù)的。

15_189.png.jpg

系統(tǒng)會(huì)安裝這個(gè)配置文件中的計(jì)劃去執(zhí)行內(nèi)定的任務(wù)。

linux的系統(tǒng)服務(wù)管理

如果你對(duì)windows非常熟悉的話,相信你肯定配置過開機(jī)啟動(dòng)的服務(wù),有些服務(wù)我們?nèi)粘S貌坏絼t要把它停掉,一來可以節(jié)省資源,二來可以減少安全隱患。在linux上同樣也有相關(guān)的工具來管理系統(tǒng)的服務(wù)。

1. ntsysv

用來配置哪些服務(wù)開啟或者關(guān)閉,有點(diǎn)想圖形界面,不過是使用鍵盤來控制的。如果沒有這個(gè)命令請(qǐng)使用 yum install -y ntsysv 安裝它。

15_190.png.jpg

敲完這個(gè)命令后則顯示出如上圖中的畫面。在屏幕的最上面有’Red Hat’等字樣,這是在告訴我們這個(gè)工具是由Red Hat公司開發(fā)的。按鍵盤的上下方向鍵可以調(diào)節(jié)紅色光標(biāo),按空格可以選擇開啟或者不開啟,如果前面的中括號(hào)內(nèi)顯示有’*’ 則表示開啟否則不開啟。通過這個(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/目錄得到

15_191.png.jpg

其實(shí)這就是系統(tǒng)所有的預(yù)設(shè)服務(wù)了。為什么這樣講,因?yàn)橄到y(tǒng)預(yù)設(shè)服務(wù)都是可以通過這樣的命令實(shí)現(xiàn) ‘service 服務(wù)名 start|stop|restart’ ,這里的服務(wù)名就是/etc/init.d/目錄下的這些文件了。除了可以使用’service crond start ‘啟動(dòng)crond外,還可以使用/etc/init.d/crond start 來啟動(dòng)。

15_192.png.jpg

如上圖,這兩個(gè)命令出來的結(jié)果是一樣的。

15_193.png.jpg

再看看這個(gè)chkconfig命令,它不僅可以列出來所有的服務(wù),還可以詳細(xì)到每個(gè)級(jí)別。這里的級(jí)別(0,1,2,3,4,5,6)就是inittab里面介紹的那幾個(gè)啟動(dòng)級(jí)別了。

15_194.png.jpg

這樣還可以查看某一個(gè)服務(wù)的啟動(dòng)情況。

15_195.png.jpg

用--level 指定級(jí)別,后面是服務(wù)名,然后是off或者on,--level后還可以跟多個(gè)級(jí)別。

15_196.png.jpg

另外還可以省略級(jí)別,默認(rèn)是針對(duì)2,3,4,5級(jí)別操作。

15_197.png.jpg

另外這個(gè)chkconfig 還有一個(gè)功能就是可以把某個(gè)服務(wù)加入到系統(tǒng)服務(wù),即可以使用service 服務(wù)名 start 這樣的形式,并且可以在chkconfig --list 中查找到。當(dāng)然也能刪除掉。

15_198.png.jpg

這個(gè)功能常用在把自定義的啟動(dòng)腳本加入到系統(tǒng)服務(wù)當(dāng)中。關(guān)于系統(tǒng)服務(wù)就講這些內(nèi)容,其實(shí)還有很多內(nèi)容筆者沒有介紹,道理很簡單,一來講多了你不能消化二來講多了你也用不上。

linux中的數(shù)據(jù)備份

數(shù)據(jù)備份,不用說太多吧,毫無疑問很重要。筆者就曾經(jīng)有過一次非常痛苦的經(jīng)歷,備份策略沒有做好,結(jié)果磁盤壞掉數(shù)據(jù)丟失,簡直是撕心裂肺的痛呀。還好數(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安裝)

15_199.png.jpg

上面例子表示把當(dāng)前目錄下的123同步到/tmp/目錄下,并且同樣也命名為123。如果是遠(yuǎn)程拷貝的話就是這樣的形式了 IP:path(如:10.0.2.34:/root/)

15_200.png.jpg

當(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

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)