在向你們介紹複雜防火牆規則以前,仍是先上一些簡單的料,讓你們對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
如今就要開始爲咱們的VPS建立自定義的防火牆規則啦,正如上篇文章中所說,因爲INPUT鏈會處理全部鏈接到服務器的入站數據包,所以咱們的全部操做都與INPUT鏈有關。如今先來配置服務器容許SSH鏈接。blog
完整命令應該是這樣的:ip
sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -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
前面講的內容其實都是基於一個前提假設的,但事先咱們須要先把防火牆的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配置進行保存,若是肯定的話選擇「是」便可。保存後下次重啓系統也不會形成配置丟失了。