導讀 | 幾乎全部的 Linux 發行版都帶着一個內建的防火牆來保護運行在 Linux 主機上的進程和應用程序。大多數防火牆都按照 IDS/IPS 解決方案設計,這樣的設計的主要目的是檢測和避免惡意包獲取網絡的進入權。 |
如何使用 iptables 防火牆保護你的網絡免遭黑客攻擊。html
即使是被入侵檢測和隔離系統所保護的遠程網絡,黑客們也在尋找各類精巧的方法入侵。IDS/IPS 不能中止或者減小那些想要接管你的網絡控制權的黑客攻擊。不恰當的配置容許攻擊者繞過全部部署的安全措施。linux
在這篇文章中,我將會解釋安全工程師或者系統管理員該怎樣避免這些攻擊。安全
幾乎全部的 Linux 發行版都帶着一個內建的防火牆來保護運行在 Linux 主機上的進程和應用程序。大多數防火牆都按照 IDS/IPS 解決方案設計,這樣的設計的主要目的是檢測和避免惡意包獲取網絡的進入權。網絡
Linux 防火牆一般有兩種接口:iptables 和 ipchains 程序(LCTT 譯註:在支持 systemd 的系統上,採用的是更新的接口 firewalld)。大多數人將這些接口稱做 iptables 防火牆或者 ipchains 防火牆。這兩個接口都被設計成包過濾器。iptables 是有狀態防火牆,其基於先前的包作出決定。ipchains 不會基於先前的包作出決定,它被設計爲無狀態防火牆。架構
在這篇文章中,咱們將會專一於內核 2.4 以後出現的 iptables 防火牆。框架
有了 iptables 防火牆,你能夠建立策略或者有序的規則集,規則集能夠告訴內核該如何對待特定的數據包。在內核中的是Netfilter 框架。Netfilter 既是框架也是 iptables 防火牆的項目名稱。做爲一個框架,Netfilter 容許 iptables 勾連被設計來操做數據包的功能。歸納地說,iptables 依靠 Netfilter 框架構築諸如過濾數據包數據的功能。設計
每一個 iptables 規則都被應用到一個表中的鏈上。一個 iptables 鏈就是一個比較包中類似特徵的規則集合。而表(例如 nat 或者 mangle)則描述不一樣的功能目錄。例如, mangle 表用於修改包數據。所以,特定的修改包數據的規則被應用到這裏;而過濾規則被應用到 filter 表,由於 filter 表過濾包數據。htm
iptables 規則有一個匹配集,以及一個諸如 Drop 或者 Deny 的目標,這能夠告訴 iptables 對一個包作什麼以符合規則。所以,沒有目標和匹配集,iptables 就不能有效地處理包。若是一個包匹配了一條規則,目標會指向一個將要採起的特定措施。另外一方面,爲了讓 iptables 處理,每一個數據包必須匹配才能被處理。blog
如今咱們已經知道 iptables 防火牆如何工做,讓咱們着眼於如何使用 iptables 防火牆檢測並拒絕或丟棄欺騙地址吧。接口
打開源地址驗證
做爲一個安全工程師,在處理遠程的欺騙地址的時候,我採起的第一步是在內核打開源地址驗證。
源地址驗證是一種內核層級的特性,這種特性丟棄那些假裝成來自你的網絡的包。這種特性使用反向路徑過濾器方法來檢查收到的包的源地址是否能夠經過包到達的接口能夠到達。(LCTT 譯註:到達的包的源地址應該能夠從它到達的網絡接口反向到達,只需反轉源地址和目的地址就能夠達到這樣的效果)
利用下面簡單的腳本能夠打開源地址驗證而不用手工操做:
#!/bin/sh #做者: Michael K Aboagye #程序目標: 打開反向路徑過濾 #日期: 7/02/18 #在屏幕上顯示 「enabling source address verification」 echo -n "Enabling source address verification…" #將值0覆蓋爲1來打開源地址驗證 echo 1 > /proc/sys/net/ipv4/conf/default/rp_filter echo "completed"
上面的腳本在執行的時候只顯示了 Enabling source address verification 這條信息而不會換行。默認的反向路徑過濾的值是 0,0 表示沒有源驗證。所以,第二行簡單地將默認值 0 覆蓋爲 1。1 表示內核將會經過確認反向路徑來驗證源地址。
最後,你可使用下面的命令經過選擇 DROP 或者 REJECT 目標之一來丟棄或者拒絕來自遠端主機的欺騙地址。可是,處於安全緣由的考慮,我建議使用 DROP 目標。
像下面這樣,用你本身的 IP 地址代替 IP-address 佔位符。另外,你必須選擇使用 REJECT 或者 DROP 中的一個,這兩個目標不能同時使用。
iptables -A INPUT -i internal_interface -s IP_address -j REJECT / DROP iptables -A INPUT -i internal_interface -s 192.168.0.0/16 -j REJECT / DROP
這篇文章只提供瞭如何使用 iptables 防火牆來避免遠端欺騙攻擊的基礎知識。