溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Linux iptables入門教程總結(jié)

發(fā)布時(shí)間:2021-09-27 15:16:11 來源:億速云 閱讀:133 作者:iii 欄目:系統(tǒng)運(yùn)維

本篇內(nèi)容介紹了“Linux iptables入門教程總結(jié)”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

鏈(chain)與規(guī)則 (rules)

filter table里面有三個(gè)默認(rèn)的鏈,INPUT,OUTPUT 和 FORWARD。FORWARD呢對(duì)于做站基本用不上,我們就講INPUT 和 OUTPUT。因?yàn)槭莿e人要攻擊我們,對(duì)于我們的服務(wù)器來講,攻擊是要進(jìn)來的,即INPUT,誒?那么說把 INPUT這個(gè)鏈搞明白,就可以防守了?差不多吧。那我們就只講 INPUT好了,越簡單越好,關(guān)鍵是把概念理清楚,別的細(xì)節(jié),都可以查到的的親。另外,INPUT, OUTPUT, FORWARD都是由規(guī)則組成的鏈,INPUT搞懂了,其他的也就不難了。

平常我們看到iptables,就是一條條的規(guī)則,例如:

代碼如下:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

看到INPUT這個(gè)詞了吧?這說明這條規(guī)則屬于INPUT這個(gè)鏈的,tcp是協(xié)議,網(wǎng)站都是用tcp的, –dport 80,就是80這個(gè)端口,也就是別人打開你的網(wǎng)站的時(shí)候需要與你的服務(wù)器的80端口連起來,就像一條打印機(jī)線把電腦的打印機(jī)口與打印機(jī)連起來一樣,不過網(wǎng)絡(luò)上端口是虛擬的,但實(shí)際工作的時(shí)候是一回事,就是通信。對(duì)于INPUT(發(fā)進(jìn)來)的數(shù)據(jù)包,80是目標(biāo)端口,即destination port, 簡稱 dport。

因?yàn)槟愕姆?wù)器上放了你的網(wǎng)站,你需要允許別人向80端口發(fā)連接請(qǐng)求,ACCEPT,即接受請(qǐng)求和連接。現(xiàn)在你明白了吧?有了這句,別人就可以連接你的服務(wù)器,打開上面的網(wǎng)頁了。

前面那個(gè)“-A”的意思append,與后面的INPUT連用的,就是把這條規(guī)則加到INPUT這個(gè)鏈的最后面。當(dāng)然現(xiàn)我們INPUT這個(gè)鏈上啥都沒有,加到最后面,也就是第一條了。

命令行的規(guī)則你大概明白了吧,“-”符號(hào),后面直接跟的是參數(shù)名,參數(shù)名后跟空格,空格后跟這個(gè)參數(shù)的值(姑且這么理解吧)。例如 -p tcp ,這里的‘-p’是不能隨便寫的,是iptables程序定義的,你寫個(gè)“-p”,程序就知道后面跟的是協(xié)議名稱。你寫個(gè)“-A”,iptables程序就知道后面跟的是鏈的名稱。那么“–dport”里的兩個(gè)減號(hào)“–”是啥意思呢?它的功能跟一個(gè)減號(hào)是一樣的,都表示后面是參數(shù)名,不過兩個(gè)減號(hào)后面跟的參數(shù)名的全稱,一個(gè)減號(hào)跟的是簡稱,全稱容易看懂,減稱寫起來省勁。例如上面這句規(guī)則也可以寫成:

代碼如下:

iptables -append INPUT --proto tcp --dport 80 --jump ACCEPT

當(dāng)然,愛裝逼的理科生一般是不會(huì)寫全稱的,大都用一個(gè)減號(hào),一個(gè)字母的簡稱。
親愛的windows用戶,注意這里的參數(shù)名和參數(shù)值都是大小寫敏感的,把“-p”寫成“-P”,程序是不工作的。另外英語很好的你可以注意到了,即使是加了兩個(gè)減號(hào)的“全稱”,也不全,proto明明不對(duì),該是protocol才對(duì)。你知道他們理科生語文不好,原諒他們吧。

光有這條還不夠,因?yàn)槟愕?a title="vps" target="_blank" href="http://www.kemok4.com/cloud/">vps上還有別的服務(wù),例如你上傳文件需要ftp或sftp,進(jìn)入后臺(tái)需要ssh,ftp的默認(rèn)端口是21,ssh是22,我們把它們也加上。

代碼如下:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT

好了,你準(zhǔn)備就開放這么多服務(wù),最后在加一

代碼如下:

iptables -A INPUT -j DROP

它的意思是拒絕所有連接…這怎么行?不是說要允許80,21,和22嗎?這是因?yàn)镮NPUT是個(gè)鏈子,有頭有尾,按順序來的。如果有人連接你的80口,第一句規(guī)則說ACCEPT,進(jìn)來吧。那么他發(fā)來的一梭子彈彈就不再經(jīng)過后面的規(guī)則了,當(dāng)然也就不會(huì)被放在最后面的DROP這句拒絕了。

現(xiàn)在我們的全部規(guī)則是:

代碼如下:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -j DROP

翻譯成文科生的語言就是發(fā)到80(嘴巴),21(菊花),22(貓貓)三個(gè)口的數(shù)據(jù)將接受,想往別的地方塞數(shù)據(jù),一律拒絕。復(fù)習(xí)一下開始說的,這些東東的意思是在INPUT這個(gè)鏈子上有四條規(guī)則,規(guī)則是按順序一個(gè)一個(gè)來的,發(fā)來的數(shù)據(jù)被匹配后,就跳出鏈子,后面的規(guī)則就不再執(zhí)行了。如果你把iptables -A INPUT -j DROP這條放在鏈頭,你的vps就變成了石女,唯有通過服務(wù)商的面板重啟了!

REJECT 和 DROP

剛才-j 后面的拒絕操作是DROP,正確的英語譯文該是”REJECT”才對(duì)。是的,寫成”-j REJECT”也是可以的。不同之處是REJECT比較客氣,等于告訴想搞你的人“對(duì)不起,人家這兩天不方便?!倍鳧ROP就是一聲不坑地拒絕。對(duì)于入侵者,不用那么客氣,用DROP好了。因?yàn)槿绻慊貞?yīng)了,等于告訴想搞你的人你是在線的,只是拒絕了,反而會(huì)引起他繼續(xù)努力的斗志。

狀態(tài) (state)匹配

如果你喜顛顛地拿著上面幾條去試驗(yàn)了,估計(jì)你的vps上的一些網(wǎng)站可能就竿屁了,iptables這個(gè)妹妹很難對(duì)付的。要想讓你的服務(wù)器正常工作,還需要添加這一句在DROP那一句之前。

代碼如下:

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

“-m”是“匹配”的意思,-m state的意思是匹配數(shù)據(jù)包狀態(tài),用戶發(fā)來的數(shù)據(jù)包分別帶有不同的狀態(tài),即 NEW, ESTABLISHED, 和 RELATED。NEW 就是開頭搭訕,ESTABLISHED,就是搭訕完了之后后續(xù)的數(shù)據(jù)包,RELATED就是與已經(jīng)存在的連接相關(guān)的數(shù)據(jù)包??傊@句話的意思是,接受已經(jīng)建立了連接的數(shù)據(jù)包,即搭訕之后的數(shù)據(jù)包?,F(xiàn)在我們的INPUT鏈?zhǔn)沁@個(gè)樣子的:

代碼如下:

iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j DROP

意思是外面接受發(fā)往本機(jī)80,21,22的tcp數(shù)據(jù)包,還接受發(fā)往任何端口的已建立(established)和相關(guān)(related)的數(shù)據(jù)包(第四句),剩下的INPUT數(shù)據(jù)包一律拋棄。

為毛要允許狀態(tài)ESTABLISHED 和 RELATED的入站數(shù)據(jù)呢?因?yàn)槟愕姆?wù)器同時(shí)也是臺(tái)電腦,還要從別的服務(wù)器下載東西。下載時(shí),你的服務(wù)器先向別的服務(wù)器發(fā)出連接請(qǐng)求(new),別的服務(wù)器允許你連接,連接建立(ESTABLISHED)之后,就需要接受別的服務(wù)器發(fā)來的數(shù)據(jù),對(duì)于你的服務(wù)器來講屬于INPUT。也就是說,如果沒有iptables -A INPUT -m state –state ESTABLISHED,RELATED -j ACCEPT這句,wget curl啥的就都不工作了。有了這句,加上前三句,即允許別的電腦連接(new)你的80,21和22端口,同時(shí)允許別的服務(wù)器在你的服務(wù)器先向它發(fā)請(qǐng)求的條件下向你發(fā)送數(shù)據(jù)。另外這些狀態(tài)都是基于tcp協(xié)議來講的(謝謝BOYPT)。

-A(–append)和-I (–insert)

剛才說了,-A INPUT的意思是把一條規(guī)則加在現(xiàn)有INPUT這個(gè)鏈子的最后面,那么寫成-I INPUT,就是把一條規(guī)則強(qiáng)行插入到最前面。如果你比較變態(tài),剛才的INPUT鏈倒著寫也是可以的:
代碼如下:

iptables -I INPUT -j DROP
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -p tcp --dport 21 -j ACCEPT
iptables -I INPUT -p tcp --dport 80 -j ACCEPT

即后面一條總會(huì)插到現(xiàn)有INPUT鏈的最前面,最終形成的INPUT鏈跟前面是一樣的。
不過,不要試!因?yàn)槟阃ǔJ沁h(yuǎn)程操作你的vps的,你在命令行輸入第一句,立馬掉線!后面就全輸不進(jìn)去了!
–insert也是有用的,例如前面這個(gè)INPUT鏈已經(jīng)起了作用,你想在不清空現(xiàn)有INPUT鏈的基礎(chǔ)上再開放一個(gè)端口,例如443。那么就必須寫成

代碼如下:

iptables -I INPUT -p tcp --dport 443 -j ACCEPT

如果你寫成 -A,那么這條規(guī)則就被跟在DROP那句后面,發(fā)到443的數(shù)據(jù)在來到新加的這句之前,就被干掉了。

如果你不想加到最前面,也可以在INPUT后面寫個(gè)數(shù)字,表示添加的位置,如果把一條規(guī)則看成一行,也就是指定所謂的行號(hào)了。把上面添加443端口的規(guī)則寫成:

代碼如下:

iptables -I INPUT 3 -p tcp --dport 443 -j ACCEPT

那么就把它放在了第三條規(guī)則(即第三行)的位置了。在命令行里輸入 iptables -nvx -L INPUT (查看現(xiàn)在生效的INPUT鏈),你會(huì)發(fā)現(xiàn)新增加的這條規(guī)則在21端口那句的后面。

把上面的規(guī)則保存到文件里,運(yùn)行一下,你的服務(wù)器就安全多了。

代碼如下:

iptables --flush
iptables --delete-chain
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j DROP

“Linux iptables入門教程總結(jié)”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI