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