91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux iptables入門教程總結

發布時間:2021-09-27 15:16:11 來源:億速云 閱讀:138 作者:iii 欄目:系統運維

本篇內容介紹了“Linux iptables入門教程總結”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

鏈(chain)與規則 (rules)

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

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

代碼如下:

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

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

因為你的服務器上放了你的網站,你需要允許別人向80端口發連接請求,ACCEPT,即接受請求和連接。現在你明白了吧?有了這句,別人就可以連接你的服務器,打開上面的網頁了。

前面那個“-A”的意思append,與后面的INPUT連用的,就是把這條規則加到INPUT這個鏈的最后面。當然現我們INPUT這個鏈上啥都沒有,加到最后面,也就是第一條了。

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

代碼如下:

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

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

光有這條還不夠,因為你的vps上還有別的服務,例如你上傳文件需要ftp或sftp,進入后臺需要ssh,ftp的默認端口是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

好了,你準備就開放這么多服務,最后在加一

代碼如下:

iptables -A INPUT -j DROP

它的意思是拒絕所有連接…這怎么行?不是說要允許80,21,和22嗎?這是因為INPUT是個鏈子,有頭有尾,按順序來的。如果有人連接你的80口,第一句規則說ACCEPT,進來吧。那么他發來的一梭子彈彈就不再經過后面的規則了,當然也就不會被放在最后面的DROP這句拒絕了。

現在我們的全部規則是:

代碼如下:

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

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

REJECT 和 DROP

剛才-j 后面的拒絕操作是DROP,正確的英語譯文該是”REJECT”才對。是的,寫成”-j REJECT”也是可以的。不同之處是REJECT比較客氣,等于告訴想搞你的人“對不起,人家這兩天不方便。”而DROP就是一聲不坑地拒絕。對于入侵者,不用那么客氣,用DROP好了。因為如果你回應了,等于告訴想搞你的人你是在線的,只是拒絕了,反而會引起他繼續努力的斗志。

狀態 (state)匹配

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

代碼如下:

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

“-m”是“匹配”的意思,-m state的意思是匹配數據包狀態,用戶發來的數據包分別帶有不同的狀態,即 NEW, ESTABLISHED, 和 RELATED。NEW 就是開頭搭訕,ESTABLISHED,就是搭訕完了之后后續的數據包,RELATED就是與已經存在的連接相關的數據包。總之這句話的意思是,接受已經建立了連接的數據包,即搭訕之后的數據包。現在我們的INPUT鏈是這個樣子的:

代碼如下:

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

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

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

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

剛才說了,-A INPUT的意思是把一條規則加在現有INPUT這個鏈子的最后面,那么寫成-I INPUT,就是把一條規則強行插入到最前面。如果你比較變態,剛才的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

即后面一條總會插到現有INPUT鏈的最前面,最終形成的INPUT鏈跟前面是一樣的。
不過,不要試!因為你通常是遠程操作你的vps的,你在命令行輸入第一句,立馬掉線!后面就全輸不進去了!
–insert也是有用的,例如前面這個INPUT鏈已經起了作用,你想在不清空現有INPUT鏈的基礎上再開放一個端口,例如443。那么就必須寫成

代碼如下:

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

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

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

代碼如下:

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

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

把上面的規則保存到文件里,運行一下,你的服務器就安全多了。

代碼如下:

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入門教程總結”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

黄浦区| 汕头市| 华安县| 镇江市| 泰来县| 额尔古纳市| 海兴县| 沙田区| 潜山县| 保山市| 乌审旗| 察雅县| 前郭尔| 辽中县| 许昌县| 东兴市| 宜川县| 伊宁县| 庆阳市| 金平| 苏尼特右旗| 安岳县| 龙州县| 新邵县| 康定县| 淮北市| 芮城县| 麻栗坡县| 两当县| 沾化县| 太谷县| 迁安市| 顺义区| 贞丰县| 汤原县| 新津县| 呼玛县| 阳西县| 阿尔山市| 翁源县| 绥江县|