什么是防火墻?
防火墻是一種網絡安全系統,它根據預定的一組規則過濾和控制通信量。這是一個介于設備和互聯網之間的中介系統。
注:如果您已經了解linux中防火墻的工作,并且只想知道命令,那么請進入教程的末尾。
Linux的防火墻是如何工作的:
Linux發行版的大多數附帶默認防火墻工具,可以用來配置它們。我們將使用Linux中提供的默認工具“iptablees”來建立防火墻。Iptable用于在Linux內核中設置、維護和檢查IPv 4和IPv 6數據包過濾規則的表。
注-以下所有命令都需要sudo特權。
鏈是為特定任務定義的一組規則。我們有三條用于處理流量的鏈:輸入鏈,輸出鏈,前向鏈
1.輸入鏈
從互聯網(網絡)到本地機器的任何流量都必須通過輸入鏈。這意味著它們必須遍歷輸入鏈中設置的所有規則。
2.輸出鏈
從本地機器到互聯網的任何流量都需要通過輸出鏈。
3.前向鏈
從外部網絡到另一個網絡的任何流量都需要通過前向鏈。當兩臺或兩臺以上的計算機連接在一起,并且我們希望在它們之間發送數據時,就使用它。
Iptable可以對流量執行三個操作:接受,下降,拒絕
1.接受
當流量傳遞其指定鏈中的規則時,iptable將接受該通信量。
這意味著它打開了大門,允許這個人進入王國。
2.下降
當流量無法傳遞其指定鏈中的規則時,iptable將阻塞該通信量。
這意味著防火墻關閉了。
3.拒絕
此類型的操作類似于DROP操作,但它向通信量的發送方發送一條消息,說明數據傳輸失敗。
通常情況下,當您希望另一端知道端口是不可訪問的時,請使用拒絕。‘使用DROP連接到您不希望別人看到的主機。
注:你需要記住一個簡單的規則:您在iptable中設置的規則將從最上面的規則到底部進行檢查。無論何時數據包通過任何頂級規則,它都可以通過防火墻。不檢查較低的規則。所以在制定規則時要小心。
基本iptables命令:.列出iptable的現行規則:列出當前iptable的規則:
sudo iptables -L
這個輸出量將是:
正如您所看到的,我們有三條鏈(輸入、向前、輸出)。我們也可以看到列標題,但它們不是實際的規則。這是因為大多數Linux都沒有預定義的規則。
讓我們看看每一列的含義。
Target:這定義了需要對數據包執行哪些操作(接受、丟棄等)
Prot:這定義了數據包的協議(TCP,IP)。
source:這將告訴包的源地址。
destination:這定義了數據包的目標地址。
2.明確規則:
如果您想清除/清除所有現有規則。運行以下命令:
sudo iptables -F
這將重置iptables。
3.改變鏈條的默認政策:
sudo iptables -P Chain_name Action_to_be_taken
正如您在上面的圖片中所看到的,每個鏈的默認策略是接受。
例如:–
如果您看到前向鏈,您將看到“鏈式轉發(策略接受)”,這意味著您的計算機允許將任何通信量轉發到另一臺計算機。
為了改變轉發的政策以減少:
sudo iptables -P FORWARD DROP
上述命令將停止通過系統轉發的任何通信量。這意味著沒有其他系統可以作為中介傳遞數據。
制定你的第一條規則:
1.執行一項中止規則:
現在我們將開始構建防火墻策略,我們將首先在輸入鏈上工作,因為輸入的流量將通過輸入鏈。
語法:-
sudo iptables -A/-I chain_name -s source_ip -j action_to_take
我們要來理解這個話題。
假設我們想阻止來自IP地址192.168.1.3的通信量??梢允褂靡韵旅睿?/p>
sudo iptables -A INPUT -s 192.168.1.3 -j DROP
這可能看上去很復雜,但當我們仔細研究組件時,大部分內容都是有意義的:-
A INPUT:
標志-A用于將規則附加到鏈的末尾。命令的這一部分告訴iptable,我們希望在輸入鏈的末尾添加一個規則。
I INPUT:
在此標志中,規則被添加到鏈的頂部。
-S192.168.1.3:-
標志-s用于指定數據包的源。這告訴iptable查找來自源192.168.1.3的數據包。
-j Drop
這指定了iptable應該如何處理數據包。
簡而言之,上面的命令在輸入鏈中添加了一條規則,即如果任何數據包到達其源地址為192.168.1.3,則丟棄該數據包,這意味著不允許數據包到達計算機。
執行上述命令后,可以使用以下命令查看更改:-
sudo iptables -L
這個輸出量將是:-
2.執行接受規則:
如果要向網絡的特定端口添加規則,則可以使用以下命令。
語法:
sudo iptables -A/-I chain_name -s source_ip -p protocol_name --dport port_number -j Action_to_take
-p協議名稱:-
此選項用于匹配遵循協議名稱的數據包。
-p protocol_name:
只有當您給出-p protocol_name選項時,才能使用此選項。它指定查找到端口“port_number”的數據包。
例子:
假設我們希望保持SSH端口打開(在本指南中假設默認SSH端口是22),在上述情況下,我們阻止了192.168.1.3網絡。也就是說,我們只想允許那些來自192.168.1.3的數據包,而這些包想進入端口22。
我們該怎么辦:
讓我們試試下面的命令:
sudo iptables -A INPUT -s 192.168.1.3 -p tcp --dport 22 -j ACCEPT
上面的命令表示查找來自IP地址192.168.1.3的數據包,該數據包具有TCP協議,并且誰想在我的計算機的端口22上傳遞一些東西。如果你找到了這些包,然后接受它們。
這個輸出量命令是:-
但是,上面的命令有一個問題。它實際上不允許數據包。你能猜到是什么嗎?
提示:-它與訪問規則的方式有關。
請記住,正如我們前面所討論的,您在iptables中設置的規則是從上到下檢查的。無論何時將數據包處理到頂級規則之一,都不會使用較低的規則進行檢查。
好吧!答案是:
在我們的例子中,數據包是用最上面的規則檢查的,該規則規定,iptable必須丟棄192.168.1.3中的任何數據包。因此,一旦通過這個規則訪問了數據包,它就不會進入允許分組到端口22的下一個規則。因此失敗了。
又能做些什么呢?
最簡單的答案是,將規則添加到鏈的頂部。你要做的就是把-A選項改為-I選項。
這樣做的命令是:-
sudo iptables -I INPUT -s 192.168.1.3 -p tcp --dport 22 -j ACCEPT
現在使用-L命令檢查iptable配置。產出如下:
因此,來自192.168.1.3的任何數據包都會首先檢查是否到達端口22,如果不是,則檢查
在鏈中的下一個規則中運行。否則它可以通過防火墻。
現在您已經了解了如何阻止和接受傳入的通信量,下面讓我們看看如何刪除規則:
3.從iptable中刪除一條規則:
語法:
sudo iptables -D chain_name rule_number
例子:
如果我們要刪除接受到端口22的通信并在前一節中添加的規則,那么:-
sudo iptables -D INPUT 1
記住規則號從1開始
這個輸出量 :
4.保存配置:
如果要在不是服務器的個人計算機上實現此部分,則此部分是不必要的,但如果您正在服務器上實現防火墻,那么您的服務器很可能會損壞,并且你可能會丟失你所有的數據。所以,保存配置總是更好的。
有很多方法可以做到這一點,但我發現的最簡單的方法是Iptable-持久性包裹。您可以從Ubuntu的默認存儲庫下載該包:
sudo apt-get update
sudo apt-get install iptables-persistent
安裝完成后,可以使用以下命令保存配置:-
sudo invoke-rc.d iptables-persistent save
本教程到此結束。
讓我們簡要介紹到目前為止學到的所有命令:-
1.列出國際表的現行規則:sudo iptables -L
2.若要更改默認策略,請執行以下操作:sudo iptables -P Chain_name Action_to_be_taken
例子:
sudo iptables -P FORWARD DROP
3.清除/沖洗所有規則sudo iptables -F
4.在鏈尾附加一條規則:sudo iptables -A
5.在鏈的開頭附加一條規則:sudo iptables -I
6.執行一項接受規則:sudo iptables -A/-I chain_name -s source_ip -j action_to_take
例子:
iptables -A INPUT -s 192.168.1.3 -j ACCEPT
7.執行一項中止規則:sudo iptables -A/-I chain_name -s source_ip -j action_to_take
例子:-
iptables -A INPUT -s 192.168.1.3 -j DROP
8.關于具體港口/議定書的執行規則:sudo iptables -A/-I chain_name -s source_ip -p protocol_name --dport port_number -j Action_to_take
例子:
sudo iptables -I INPUT -s 192.168.1.3 -p tcp --dport 22 -j ACCEPT
9.刪除一項規則:sudo iptables -D chain_name rule_number
例子:
sudo iptables -D INPUT 1
10.保存配置:sudo invoke-rc.d iptables-persistent save
本教程到此結束。我們已經看到了在本地計算機上實現防火墻所需的所有必要命令。我們還可以讓防火墻執行其他各種操作,但不可能在一篇文章中涵蓋所有這些操作。