Linux 防火牆端口開放 屏蔽,IP開放屏蔽,協議開關 詳解Linux 防火牆

目錄

Linux 防火牆的概述 IPtables概述

Linux防火牆

IPtables

IPtables 表的概念 與鏈的概念

IPtables 應用 操作方法

對匹配的值進行的處理動作表

限制端口

限制IP地址

限制IP地址段

限制協議

根據報文內容的限制

centos7 的改動



最近使用到了 IPtables 開放Linux 端口 ,但是遇到了坑,索性把Linux 防火牆基本知識進行一次學習

進行總結,看完這篇文章,你會用基礎的iptables 操作命令,屏蔽端口,開放端口,屏蔽ip、地址段

以及協議的屏蔽,還有可以幫你排除一些可能遇到的坑,掌握contos6 contos7 的 iptables 命令區別 

我哦哦哦

 

Linux 防火牆的概述 IPtables概述

Linux防火牆

從邏輯上來講分爲

主機防火牆:針對於單個主機進行防護

網絡防火牆:往往處於網絡入口或邊緣,針對於網絡入口進行防護,服務於防火牆背後的本地局域網。

從物理結構上來講有

硬件防火牆:在硬件級別實現部分防火牆功能,另一部分功能基於軟件實現,性能高,成本高。

軟件防火牆:應用軟件處理邏輯運行於通用硬件平臺之上的防火牆,性能低,成本低。

IPtables

其實不是真正的防火牆,我們可以把它理解成一個客戶端代理,用戶通過iptables這個代理,將用戶的安全設定執行到對應的"安全框架"中,這個"安全框架"纔是真正的防火牆,這個框架的名字叫netfilter。

IPtables只是來操作這個框架的命令行工具我們知道iptables是按照規則來辦事的,我們就來說說規則(rules),規則其實就是網絡管理員預定義的條件,規則一般的定義爲"如果數據包頭符合這樣的條件,就這樣處理這個數據包"。規則存儲在內核空間的信息包過濾表中,這些規則分別指定了源地址、目的地址、傳輸協議(如TCP、UDP、ICMP)和服務類型(如HTTP、FTP和SMTP)等。當數據包與規則匹配時,iptables就根據規則所定義的方法來處理這些數據包,如放行(accept)、拒絕(reject)和丟棄(drop)等。配置防火牆的主要工作就是添加、修改和刪除這些規則。

IPtables 表的概念 與鏈的概念

我們先來說說 鏈的概念,當客戶端向服務端發送一個數據包,客戶端會向服務端網卡發送報文,而TCP/IP協議屬於內核的一部分,所以我們想讓防火牆達到防火和屏蔽的作用,需要在內核處設置關卡,將經過的報文進行檢查後在決定是否放行,這就出現了input 關卡 ,和 output 關卡  。這些關卡實際上就是“ 鏈 “ 。

在實際的使用過程中我們還需要了解幾個概念 prerouting (路由前),forward (轉發),postouting(路由後)。

報文的流向:

流向本機的報文 : prerouting -> input

由本機轉發的報文:prerouting -> forward -> postouting

有本機發出的報文:output -> postouting

再來說說表的概念,我們說的這些鏈上可能會有一些雷同的規則,我們就可以把這些規則總結到一起,,這就引出了表的概念,

表分爲4種filter 、nat 、mangle、raw他們分別存儲這不同的規則:

filter :負責過濾功能 ,防火牆進出的一些規則(我們使用iptables 最常指定的就是這個表,如果不指定,默認爲這個表

nat :network address translation 服務網絡地址翻譯的規則

mangle :負責拆解報文,修改報文

raw:關閉nat表上啓用的連接追蹤機制。

IPtables 應用 操作方法

對匹配的值進行的處理動作表

ACCEPT 允許數據包通過。
DROP 直接丟棄數據包,不給任何迴應信息,這時候客戶端會感覺自己的請求泥牛入海了,過了超時時間纔會有反應。
REJECT 拒絕數據包通過,必要時會給數據發送端一個響應的信息,客戶端剛請求就會收到拒絕的信息。
SNAT 源地址轉換,解決內網用戶用同一個公網地址上網的問題。
MASQUERADE 是SNAT的一種特殊形式,適用於動態的、臨時會變的ip上。
DNAT 目標地址轉換。
REDIRECT 在本機做端口映射。
LOG 在/var/log/messages文件中記錄日誌信息,然後將數據包傳遞給下一條規則,也就是說除了記錄以外不對數據包做任何其他操作,仍然讓下一條規則去匹配。

限制端口

iptables -t filter -A INPUT -s 192.168.1.146 -p tcp -m multiport --dports 22,36,80  -j DROP

/etc/rc.d/init.d/iptables save

/etc/init.d/iptables restart

示例表示,禁止來自146的主機上的tcp報文訪問本機的22號端口、36號端口以及80號端口。

"-m multiport --dports 22,36,80"表示使用了multiport擴展模塊的--dports擴展條件,以同時指定了多個離散的端口,每個端口之間用逗號隔開。

-- dports 就是表示 目標端口 

-- sports 表示遠程訪問的 源端口

iptables -t filter -A INPUT -s 192.168.1.146 -p tcp -m multiport --sports 22,36,80  -j DROP

/etc/rc.d/init.d/iptables save

/etc/init.d/iptables restart

示例表示,禁止來自146的主機上的tcp從22號端口、36號端口以及80號端口發出的報文

限制IP地址

例子 :

iptables -t filter -A INPUT -s 192.168.1.146 -j DROP

/etc/rc.d/init.d/iptables save

/etc/init.d/iptables restart

使用-I選項,指明將"規則"插入至哪個鏈中,-I表示insert,即插入的意思,所以-I INPUT表示將規則插入於INPUT鏈中,即添加規則之意。這裏要注意的 是 -A  -I 的區別 -A是家到規則表中的末尾,追加。而-I是追加到第一條。

這裏就有坑了 因爲它讀取配置表是從上而下的 所以你得保證前面的規則中沒有過濾掉這個IP 否者就不生效。

使用-s選項,指明"匹配條件"中的"源地址",即如果報文的源地址屬於-s對應的地址,那麼報文則滿足匹配條件,-s爲source之意,表示源地址。

使用-j選項,指明當"匹配條件"被滿足時,所對應的動作,上例中指定的動作爲DROP,在上例中,當報文的源地址爲192.168.1.146時,報文則被DROP(丟棄)

多個IP地址可以用 ,號隔開依次類推 例子:

iptables -t filter -A INPUT -s 192.168.1.146,192.168.145 -j DROP

限制IP地址段

iptables -t filter -A INPUT -s 10.0.0.0/16 -j DROP

/etc/rc.d/init.d/iptables save

/etc/init.d/iptables restart

限制協議

iptables -t filter -A INPUT -s 192.168.1.146 -p tcp -j DROP

/etc/rc.d/init.d/iptables save

/etc/init.d/iptables restart

此時我們用ping命令 由146 ping 本機發現可以ping 通 因爲我們ping 命令是基於icmp協議

我們把tcp換成icmp就不能了

centos6中,-p選項支持如下協議類型

tcp, udp, udplite, icmp, esp, ah, sctp

centos7中,-p選項支持如下協議類型

tcp, udp, udplite, icmp, icmpv6,esp, ah, sctp, mh

根據報文內容的限制

/sbin/iptables -t filter -A INPUT -m string --alog bm --string "OOXX" -j DROP

/etc/rc.d/init.d/iptables save

/etc/init.d/iptables restart

'-m string'表示使用string模塊,'--algo bm'表示使用bm算法去匹配指定的字符串,' --string "OOXX" '則表示我們想要匹配的字符串爲"OOXX" 設置完上圖中的規則後,由於index.html中包含"OOXX"字符串,所以,146的迴應報文無法通過126的INPUT鏈,所以無法獲取到頁面對應的內容。

--algo:用於指定匹配算法,可選的算法有bm與kmp,此選項爲必須選項,我們不用糾結於選擇哪個算法,但是我們必須指定一個。

--string:用於指定需要匹配的字符串。

centos7 的改動

centos7已經不再使用init風格的腳本啓動服務,而是使用unit文件,所以,在centos7中已經不能再使用類似service iptables start這樣的命令了,所以service iptables save也無法執行,同時,在centos7中,使用firewall替代了原來的iptables service,不過不用擔心,我們只要通過yum源安裝iptables與iptables-services即可(iptables一般會被默認安裝,但是iptables-services在centos7中一般不會被默認安裝),在centos7中安裝完iptables-services後,即可像centos6中一樣,通過service iptables save命令保存規則了,規則同樣保存在/etc/sysconfig/iptables文件中。

配置好yum源以後安裝iptables-service
 yum install -y iptables-services
停止firewalld
 systemctl stop firewalld
禁止firewalld自動啓動
 systemctl disable firewalld
啓動iptables
 systemctl start iptables
將iptables設置爲開機自動啓動,以後即可通過iptables-service控制iptables服務
 systemctl enable iptables

詳細的內容學習移步 :http://www.zsythink.net/archives/1544

他寫的很全面。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章