iptables使用詳解

iptables使用詳解@(linux)[iptables]
前言最近買了一個VPS,并在上面搭了DOCKER , 然后再DOCKER中安裝Mysql 。但只要將網絡端口映射到宿主機上,那么外部網絡就可以直接訪問該數據 。屬實嚇人 。為此,我們需要使用防火墻 。
說到防火墻,CentOS有FirewallD,Ubuntu有ufw。它們的用法和語法不盡相同,但有一點卻是一致的,那就是他們底層都使用了iptables 。所以為了在不同發行版的linux下都能安全管理我們的服務器,教練,我想學這個iptables
由于FirewallD和ufw本質都是基于iptables的 , 那么它們都會在iptables中添加一些規則,甚至定義一些鏈 , 為了不跟往后我們自己定義的規則相沖突,第一件事 , 便是停止并卸掉FirewallD和ufw對應的服務 。
停掉FirewallD
sudo systemctl stop firewalld //停止FirewallDsudo systemctl disable firewalld //讓FirewallD 不要隨系統啟動而啟動停掉ufw
sudo ufw disable //停止并在系統啟動時不啟動ufwiptables是啥iptables是一個linux下的防火墻工具 , 它能幫助我們基于規則進行網絡流量控制 。它可以做到 , 但不限于以下功能:

  • 允許/拒絕某種協議的鏈接建立,比如TCP,UDP
  • 允許/拒絕 來自某個ip的訪問
  • 允許/拒絕某個端口被訪問
  • ...
表、鏈、規則規則(rule)來自192.168.2.31的訪問,就要將其拒絕,這即是一條規則
鏈(chain)往往我們的安全策略不只一條規則 , 除了來自192.168.2.31的訪問,就要將其拒絕 這條規則之外,我們還有其它規則,比如:來自192.168.43.22的訪問,也要將其拒絕
甚至,我們可能還有多個互斥的規則,這多個規則,哪個規則先執行? 這就涉及到鏈這個概念 。簡單來講,鏈就是將多個規則從上大小串起來的一個集合單位 。規則按從上倒下依次進行匹配 。
iptables使用詳解

文章插圖
表(table)鏈條可以有多個 。將多個鏈條再規整在一起的集合,叫做表 。
iptables使用詳解

文章插圖
總覽在iptables中,有四張表:
  • filter:這里面的鏈條,規則,可以決定一個數據包是否可以到達目標進程端口
  • mangle: 這里面的鏈條,規則,可以修改數據包的內容 , 比如ttl
  • nat:這里面的鏈條,規則 , 可以修改源和目標的ip地址,從而進行包路由 。
  • raw:這里面的鏈條,規則,能基于數據包的狀態進行規則設定
上述四張表中,會內置一些鏈 , 且每個鏈,都有默認包處理策略,默認策略一般在鏈中的所有規則都沒匹配時生效 。filter表中的鏈有:
- INPUT:對路由策略分派過來的包到達目標進程端口之前進行匹配并處理,后續會講到細節- FORWARD:對路由策略分派過來的包進行路由轉發,后續會講到細節- OUTPUT:判斷,從本地的目標進程端口處理好的包如何返回/要不要返回給請求方mangle表中的鏈有:
PREROUTING:包在到達網口時,進行規則匹配INPUT:含義同filterFORWARD: 含義同filterOUTPUT: 含義同filterPOSTROUTING: 包離開網口的時候匹配nat表中的鏈有:
PREROUTING:含義同mangleOUTPUT:含義同filterPOSTROUTING:含義同mangleraw表中的鏈有:PREROUTING:含義同mangleOUTPUT:含義同filter
注意,雖然不同的表中有同名的鏈,但他們并不是同一個鏈 , 并且一個鏈只能引用同一個表中的鏈,不能跨表引用 。,平時我們的防火墻策略配置,即是在上述各個表的各個鏈中配置具體的規則
規則生效順序雖然一個鏈中的規則是從上到下依次匹配,但多個表中的多個鏈,甚至同名鏈的之間的匹配優先順序是啥?這就要看下圖了
iptables使用詳解

文章插圖
PREROUTING 鏈PREROUTING 鏈是最先生效的,當數據包到達網口時 , 即開始工作 。同時由于其在raw, mangle, nat表中都存在,其執行的優先順序是:raw(PREROUTING) ----> mangle(PREROUTING)----> mangle(nat)
PREROUTING 一般用作對包進行目標地址修改 。比如將該包的目標地址,修改為非本機的另外的網絡ip , 一般通過DNAT規則進行修改 。
路由決策(Routing Decision)決定一個包該走哪個鏈 。如果上述PREROUTING 鏈對包進行了目標網絡ip更改 。那么決策會覺得這個是一個需要轉發的數據包,于是會將該包轉發給 FORWARD 鏈 。

推薦閱讀