IPTables系列:如何配置Ubuntu 14.04中的IPTables防火牆

IPTables基本命令

在向你們介紹複雜防火牆規則以前,仍是先上一些簡單的料,讓你們對IPTables最爲基本的命令有一些簡單瞭解。sql

首先要說明的是IPTables命令必需以root權限運行,這意味着你須要使用root身份登陸或者可以有權限使用su或sudo -i取得root Shell。下面的內容中咱們都使用sudo,這也是Ubuntu系統上的首選方法。安全

最好的起點就是先經過「-L」參數來查看下當前系統的全部IPTables規則:服務器

sudo iptables -L

咱們能夠看到Linux中都有的3個經常使用默認鏈(INPUT、OUTPUT和FORWARD),同時也能夠看到每一個鏈的缺省策略(每一個鏈對默認策略都是接受),在此咱們能夠看到Ubuntu中並無添加任何默認規則集。網絡

若是你但願經過命令來查看每一個鏈的默認規則,可使用「-S」參數:tcp

sudo iptables -S

若是你看到IPTables裏面已經有規則了,並但願取消這些規則後從新更配置話,可使用「-F」參數來清空已有的規則集:oop

sudo iptables -F

雖然「-F」參數能夠清空並刷新鏈中全部的現有規則集,但並不會對鏈的默認策略進行更改。所以,若是你是在更改遠程VPS防火牆策略的話須要在「-F」清 空全部規則時先將INPUT和OUTPUT鏈的默認策略恢復到ACCEPT,以避免規則清空後SSH鏈接被阻斷。要作到這一點可執行以下命令:spa

sudo iptables -P INPUT ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -F

在配置好容許SSH鏈接後(下面介紹),再將INPUT和OUTPUT鏈的默認規則更改成DROP便可。code

建立自已的IPTables規則

如今就要開始爲咱們的VPS建立自定義的防火牆規則啦,正如上篇文章中所說,因爲INPUT鏈會處理全部鏈接到服務器的入站數據包,所以咱們的全部操做都與INPUT鏈有關。如今先來配置服務器容許SSH鏈接。blog

完整命令應該是這樣的:ip

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配置進行保存,若是肯定的話選擇「是」便可。保存後下次重啓系統也不會形成配置丟失了。

相關文章
相關標籤/搜索