什么是iptables(1)


什么是iptables

iptables是用於監控進/出服務器流量的一個工具,iptables使用一個叫做table的結構,而這些tables包含了一系列規則(set of rules),我們稱這些規則為chain,chain會過濾進/出服務器的數據包(data packets)。

當一個數據包與一個chain相匹配時,會被賦予一個target,而這個target可能是另一個chain,或者可能是以下幾種特殊值:

  • ACCEPT:允許數據包通過
  • DROP:不允許數據包通過
  • RETURN:停止數據包在chain鏈中傳輸,並告知返回至前一個chain

而在iptables中有一個默認的table,我們稱之為filter,它包含了以下3個chain:

  • INPUT:控制發送至服務器的數據包
  • FORWARD:過濾發送至服務器的數據包,用於轉發至其他地方
  • OUTPUT:過濾由服務器發出去的數據包

安裝iptables

注意:iptables執行時均在root用戶下進行。

一般來說,iptables是默認安裝在linux系統中的,當然也可以手動安裝:

# sudo apt-get update
# sudo apt-get install iptables

檢查iptables的版本:

# sudo iptables -V
iptables v1.4.21

查看當前iptables的信息:

# sudo iptables -L -v

在這里,-L用於列出所有的規則,而-v用於顯示詳細的信息。

如何自定義iptables規則

自定義一個新的規則,相當於是向其中添加一個chain,為此,我們需要使用-A這個選項(其表示append)。此外,還有一些其他選項參數,介紹如下:

  • -i:interface,后面添加想要過濾的網卡名稱,比如eth0lodocker0等等;
  • -p:protocol,后面添加想要過濾的網絡協議名稱,比如tcpudpicmp等等,此外還可以使用關鍵詞all表示選擇所有的協議;
  • -s:source,表示數據流量的源地址,可以在其后面hostname或ip地址;
  • -dport:destination port,目標地址的端口號,比如https對應的是443等;
  • -j:target,后面跟着target的名字(即ACCEPT, DROP, RETURN);

因此,添加一條新的規則,使用如下命令:

# sudo iptables -A <chain> -i <interface> -p <protocol(tcp/udp)> -s <source> --dport <port>  -j <target>

比如說,我們想要阻擋指定ip地址的訪問,則可以通過如下命令簡歷規則:

# sudo iptables -A INPUT -s 192.168.1.3 -j DROP

設置后,由IP地址為192.168.1.3發送過來的數據包就會被丟棄掉。

此外,我們還可以指定一個IP地址范圍,比如,對於192.168.1.100-192.168.1.200這個范圍內的IP地址,我們都要將其過濾掉,則可以使用如下命令進行創建:

# sudo iptables -A INPUT -m iprange --src-range 192.168.1.100-192.168.1.200 -j DROP

注意,這里必須指定-m選項以及iprange模式,並使用--src-range參數,后面跟着IP地址范圍,並且兩個IP地址間必須用-連着。

如果想要刪除一條規則呢?

首先,我們需要查看當前可用的規則,命令如下:

# sudo iptables -L --line-numbers

然后,我們將會看到:

接着,就可以執行刪除操作了。為了刪除一個規則,需要指定對應的chain和標號(即num),比如,我們要刪除INPUT鏈的第3條規則,則可以執行如下命令:

# sudo iptables -D INPUT 3

持久化自定義的iptables規則

新建的iptables規則是保留在內存中的,重新啟動機器后數據就消失了,因此,我們要對其進行持久化。只要執行如下命令即可:

# sudo /sbin/iptables-save

這一命令會將當前的規則保存至系統的配置文件中,當機器重啟時,會去讀取這份配置文件來還原iptables。

iptables進階介紹

前面經過一些簡單的操作,已經對iptables有了具象的了解。但事實上,iptables遠比想象的復雜的多。前面的例子中,我們只簡單介紹了Filter Table這一種table,接下來,我們會進一步深入的介紹iptables。

我們重新認識一下iptables,這到底是個什么玩意兒呢?

簡單的說,iptables是構築Linux系統的防火牆的基礎,我們可以自定義設置一些規則,用於數據包的過濾。但是,其功能可不只是過濾,事實上,iptables可以理解為:

Tables which has Chains and the Chains which contains Rules.

即Tables --> Chains --> Rules,而rules用於控制數據包的input/output。

首先,iptables包含3種table,分別是: Filter TableNAT tableMangle table

  • Filter table:filter是iptables默認的table,就如我們上面演示的,我們在對filter table進行操作時,不需要指定table的名稱。如果對NAT table或Mangle table進行操作,則必須要指定(通過-t選項)。前面執行過的命令iptables -L ,相當於iptables -t filter -L
    • INPUT chain
    • FORWARD chain
    • OUTPUT chain
  • NAT table:NAT即Network address translation,網絡地址轉換。如果想要操作NAT table,則必須要指定名字,比如iptables -t nat -L
    • PREROUTING chain:在數據包被路由之前
    • POSTROUTING chain:在數據包被路由之后
    • OUTPUT chain
  • Mangle table:
    • PREROUTING chain
    • OUTPUT chain
    • FORWARD chain
    • INPUT chain
    • POSTROUTING chain

iptables總結如下:


參考:

  1. https://www.hostinger.in/tutorials/iptables-tutorial#What-is-Iptables-and-How-Does-It-Work
  2. https://www.crybit.com/what-is-iptables-in-linux/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM