1. 程式人生 > >iptables-遠端訪問資料庫埠策略

iptables-遠端訪問資料庫埠策略

一個開發提出的業務需求,需要開通某臺伺服器,到某套資料庫的訪問許可權,即1521埠訪問許可權,提交了網路工單,等網路實施後,進行測試,

> telnet x.x.x.x 1521

正在連線10.6.1.1...

 

竟然連線不通?諮詢網路,確認已經開通了。還有什麼問題?

 

朋友們可能已經猜出來,有可能是防火牆,遮蔽了對於1521埠的訪問。如何驗證?因為是測試環境,所以最簡單的一種方法,就是關閉防火牆,

> service iptables stop

 

再測試這次就是通的了,

> telnet x.x.x.x 1521

Trying x.x.x.x...

Connected to x.x.x.x (x.x.x.x).

Escape character is '^]'.

 

說明網路開通了,但資料庫伺服器的防火牆,並未開放1521埠,因此導致telnet錯誤,解決方案當然不能是,關閉防火牆這種粗暴方法,而是可以增加,1521埠的訪問策略。

 

解決方案:


1. 以root身份編輯/etc/sysconfig/iptables檔案,向檔案中增加,紅色部分資訊,

> vi /etc/sysconfig/iptables

 

# Firewall configuration written by system-config-firewall

# Manual customization of this file is not recommended.

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

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

-A INPUT -p icmp -j ACCEPT

-A INPUT -i lo -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 1521 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited

-A FORWARD -j REJECT --reject-with icmp-host-prohibited

COMMIT

 

2. 重啟iptables服務

service iptables restart

iptables: Applying firewall rules: [  OK  ]


 

此時1521埠,就可以正常訪問。

 

對於iptables使用,可能會以上操作,基本就可以了,但若深究起來,iptables的學問真是很深,越看越覺得陌生,越覺得自己知道的只是皮毛,足以看出,“會用”和“精通”區別不小。

 

針對指令,

-A INPUT -m state --state NEW -m tcp -p tcp --dport 1521 -j ACCEPT

 

含義就是,允許訪問1521埠,其中一些引數,

-A:向規則鏈中新增條目;

-p:指定要匹配的資料包協議型別; 

-j<目標>:指定要跳轉的目標;

ACCEPT:表示接收資料包;

 

iptables命令選項輸入順序(引自:http://man.linuxde.net/iptables):

iptables -t 表名 <-A/I/D/R> 規則鏈名 [規則號] <-i/o 網絡卡名> -p 協議名 <-s 源IP/源子網> --sport 源埠 <-d 目標IP/目標子網> --dport 目標埠 -j 動作

 

網上有篇文章,介紹基本概念通俗易懂,摘錄一些,原文可以參考http://www.zsythink.net/archives/1199,

從邏輯上講。防火牆可以大體分為主機防火牆和網路防火牆。

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

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

網路防火牆和主機防火牆並不衝突,可以理解為,網路防火牆主外(集體), 主機防火牆主內(個人)。

 

從物理上講,防火牆可以分為硬體防火牆和軟體防火牆。

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

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

 

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

 

netfilter才是防火牆真正的安全框架(framework),netfilter位於核心空間。

iptables其實是一個命令列工具,位於使用者空間,我們用這個工具操作真正的框架。

 

netfilter/iptables(下文中簡稱為iptables)組成Linux平臺下的包過濾防火牆,與大多數的Linux軟體一樣,這個包過濾防火牆是免費的,它可以代替昂貴的商業防火牆解決方案,完成封包過濾、封包重定向和網路地址轉換(NAT)等功能。

 

Netfilter是Linux作業系統核心層內部的一個數據包處理模組,它具有如下功能:

網路地址轉換(Network Address Translate)

資料包內容修改

以及資料包過濾的防火牆功能

 

所以說,雖然我們使用service iptables start啟動iptables"服務",但是其實準確的來說,iptables並沒有一個守護程序,所以並不能算是真正意義上的服務,而應該算是核心提供的功能。

 

總結來講,Linux系統中,防火牆(Firewall),網址轉換(NAT),資料包(package)記錄,流量統計,這些功能是由Netfilter子系統所提供的,而iptables是控制Netfilter的工具。iptables將許多複雜的規則組織成成容易控制的方式,以便管理員可以進行分組測試,或關閉、啟動某組規則。iptable只讀取資料包頭,不會給資訊流增加負擔,也無需進行驗證。(引自:https://www.centos.bz/2017/11/linux-iptables防火牆原理與常用配置/)

 

這張圖是資料包,經過防火牆的流程圖,(引自:http://www.zsythink.net/archives/1199)

 

iptables涉及Linux配置、網路等幾方面的知識,一個小小的指令,可謂“博大精深”,如果對於開通資料庫,埠訪問策略,會用上面的指令,就已可以,若朋友們對此感興趣,可以深入研究,還是能學習到,非常純粹的知識。

 

參考文獻:

https://wiki.debian.org/iptables

https://linux.die.net/man/8/iptables

http://www.zsythink.net/archives/1199

https://www.centos.bz/2017/11/linux-iptables防火牆原理與常用配置/

http://www.linuxidc.com/Linux/2016-09/134832.htm

http://man.linuxde.net/iptables