IPTables基本命令
在向大家介紹復雜防火牆規則之前,還是先上一些簡單的料,讓大家對IPTables最為基本的命令有一些簡單了解。
首先要說明的是IPTables命令必需以root權限運行,這意味着你需要使用root身份登錄或者能夠有權限使用su或sudo -i取得root Shell。下面的內容中我們都使用sudo,這也是Ubuntu系統上的首選方法。
最好的起點就是先通過“-L”參數來查看下當前系統的所有IPTables規則:
sudo iptables -L

我們可以看到Linux中都有的3個常用默認鏈(INPUT、OUTPUT和FORWARD),同時也可以看到每個鏈的缺省策略(每個鏈對默認策略都是接受),在此我們可以看到Ubuntu中並沒有添加任何默認規則集。
如果你希望通過命令來查看每個鏈的默認規則,可以使用“-S”參數:
sudo iptables -S

如果你看到IPTables里面已經有規則了,並希望取消這些規則后重新更配置話,可以使用“-F”參數來清空已有的規則集:
sudo iptables -F
雖然“-F”參數可以清空並刷新鏈中所有的現有規則集,但並不會對鏈的默認策略進行更改。因此,如果你是在更改遠程VPS防火牆策略的話需要在“-F”清 空所有規則時先將INPUT和OUTPUT鏈的默認策略恢復到ACCEPT,以免規則清空后SSH連接被阻斷。要做到這一點可執行如下命令:
sudo iptables -P INPUT ACCEPT sudo iptables -P OUTPUT ACCEPT sudo iptables -F
在配置好允許SSH連接后(下面介紹),再將INPUT和OUTPUT鏈的默認規則更改為DROP即可。
創建自已的IPTables規則
現在就要開始為我們的VPS創建自定義的防火牆規則啦,正如上篇文章中所說,由於INPUT鏈會處理所有連接到服務器的入站數據包,因此我們的所有操作都與INPUT鏈有關。現在先來配置服務器允許SSH連接。
完整命令應該是這樣的:
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
大多朋友可能會覺得看起來怎么這么復雜,那我們來逐一分拆說明下。
- -A INPUT :表明我們要將此規則追加到某個鏈的最后,由於我們要操作INPUT鏈接,所以這么寫。
- -m conntrack :iptables除了自己的核心功能外還只有一些實用的擴展和模塊,這個參數表明添加conntrack模塊提供的能力。(conntrack模塊可以根據先前的連接來確定數據包之間的關系)
- –ctstate :該參數是conntrack模塊提供的,它可以確定如何用現在的數據包去匹配先前獲得的數據包。ESTABLISHED值將自動允許現有連接的數據包,RELATED值將允許已建立連接的相關數據包。(這樣就與SSH會話特性相匹配上了)
- -j ACCEPT :這個參數用於指定匹配的數據包的目標。用在這里表示接受和允許符合上述標准的數據包通過。
配置好后我們來看一下:
sudo iptables -L

現在,你應該已經知道IPTables的基本語法了,下面我們繼續添加規則打怪,以期盡快升級為高手。
接受其它必要連接
大家的VPS上一般SSH服務的22端口,Web服務器的80端口及Mysql的3306端口都是需要打開的,不然怎么對外提供服務呢。因此我們也需要通過如下命令在IPTables中打開這些端口:
sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
為了保證我們的VPS能夠正常運行,還需要添加一條允許規則。通常,計算機上的服務都會發送網絡數據包以保持彼此之間的通信。而這種通信會利用到一個名叫loopback的偽網卡將流量引導回自己。因此,我們還需要為loopback網卡添加一條允許規則。
sudo iptables -I INPUT 1 -i lo -j ACCEPT
- -I INPUT 1 :與“-A”不同,它可以指定要將規則添加到該鏈的位置。
實施Drop規則
前面講的內容其實都是基於一個前提假設的,但事先我們需要先把防火牆的2種常用模式說明一下。一種是明確定義允許通過防火牆的規則,不匹配的都丟 棄。另外一種是明確定義拒絕通過防火牆的規則,其余的都允許。我們的前提假設采用的就是第一種方式,這樣配置起來相對簡單,規則也較少,也更加安全。
前面我們已經為INPUT鏈接定義了一些允許規則,但默認INPUT鏈是允許所有包,所以我們現在需要將INPUT鏈的默認規則更改為“Drop”即丟棄。通過如下命令完成更改:
sudo iptables -P INPUT DROP
查看和保存配置
IPTables的配置是立即生效的,前面已經介紹過,在配置好之后我們可以直接用“-L”參數進行查看,這里再另外增加一個“–line-numbers”參數,它主要用於顯示行數,對於規則較多時的查看非常方便。
sudo iptables -L --line-numbers

雖然IPTables的命令執行后會立即生效,但這個生效過程其實是臨時的,系統在重啟之后便會丟失。因此,我們還需要將這些配置添加到配置文件當中,以保證系統在下次重啟后會自動載入我們的IPTables防火牆規則。
sudo apt-get update sudo apt-get install iptables-persistent
該命令腳本下載執行后會詢問我們是否對IPTables配置進行保存,如果確定的話選擇“是”即可。保存后下次重啟系統也不會造成配置丟失了。

