淺談linux防火牆之iptables

❎ 防火牆概念

1️⃣ 安全技術簡介

  • 入侵檢測與管理系統(Intrusion Detection System)
    特點:不阻斷任何網絡訪問
    功能:提供報告和事後監督
    旁路部署
  • 入侵防禦系統(Intrusion Prevention System)
    特點:透明模式工作,分析數據包
    功能:判定爲攻擊時,立即阻斷攻擊連接
    在線部署
  • 防火牆(Firewall)
    特點:默認關閉所有通過訪問,只開放允許訪問的策略
    功能:基於設置的規則對進出網絡或主機的數據包進行審查,並在符合相關規則時執行規則定義的某些行爲
    工作在網絡或主機的邊緣,起到隔離的作用

2️⃣ 防火牆的分類

  • 按照服務範圍分
    主機防火牆:服務範圍爲當前主機
    網絡防火牆:服務範圍爲防火牆一側的局域網
  • 按照實現方式分
    硬件防火牆:在專用硬件級別實現部分功能的防火牆,另一個部分功能基於軟件實現,Checkpoint,NetScreen
    軟件防火牆:運行於通用硬件平臺之上的防火牆的應用軟件
  • 按照工作的網絡層次分
    網絡層防火牆:OSI下面第三層
    應用層防火牆/代理服務器:代理網關,OSI七層

3️⃣ 網絡層防火牆

  • 包過濾防火牆
  • 網絡層對數據包進行選擇,選擇的依據是系統內設置的過濾邏輯,被稱爲訪問控制列表(ACL),通過檢查數據流中每個數據的源地址,目的地址,所用端口號和協議狀態等因素,或他們的組合來確定是否允許該數據包通過
  • 優點:對用戶來說透明,處理速度快且易於維護
  • 缺點:無法檢查應用層數據,如病毒等

4️⃣ 應用層防火牆/代理服務型防火牆

  • 將所有跨越防火牆的網絡通信鏈路分爲兩段
  • 內外網用戶的訪問都是通過代理服務器上的“鏈接”來實現
  • 優點:在應用層對數據進行檢查,比較安全
  • 缺點:增加防火牆的負載

❎ iptables的簡介

1️⃣ Netfilter組件

  • 內核空間,集成在linux內核中
  • 擴展各種網絡服務的結構化底層框架
  • 內核中選取五個位置放了五個hook(勾子) function(INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING),而這五個hook function向用戶開放,用戶可以通過一個命令工具(iptables)向其寫入規則
  • 由信息過濾表(table)組成,包含控制IP包處理的規則集(rules),規則被分組放在鏈(chain)上
  • 三種報文流向:
    流入本機:PREROUTING --> INPUT-->用戶空間進程
    流出本機:用戶空間進程-->OUTPUT--> POSTROUTING
    轉發:PREROUTING --> FORWARD --> POSTROUTING
  • 網絡協議棧各個函數定義的點
    • NF_IP_PRE_ROUTING注意:進入網絡堆棧後不久,任何傳入流量都會觸發此掛鉤。在做出關於將數據包發送到何處的任何路由決策之前,將處理此掛鉤。
    • NF_IP_LOCAL_IN注意:如果將數據包發送到本地系統,則在路由進來的數據包後觸發此掛鉤。
    • NF_IP_FORWARD注意:如果要將該數據包轉發到另一臺主機,則在路由傳入數據包之後將觸發此掛鉤。
    • NF_IP_LOCAL_OUT:此鉤子在到達網絡堆棧後立即由任何本地創建的出站流量觸發。
    • NF_IP_POST_ROUTING:此鉤子在路由發生之後和即將被放置到線路上之前由任何傳出或轉發的流量觸發。
      在這裏插入圖片描述

2️⃣ 防火牆工具

  • iptables
    命令行工具,工作在用戶空間
    用來編寫規則,寫好的規則被送往netfilter,告訴內核如何去處理信息包
  • firewalld
    • 軟件包:
      firewalld
      firewalld-config
    • 管理工具:
      firewall-cmd 命令行工具
      firewall-config 圖形工作
      在這裏插入圖片描述

3️⃣ iptables的組成

  • 主要由四個表、五個鏈以及一些規則組成

  • 四個表(table): filter, nat, mangle, raw

  • filter: 過濾規則表,根據預定義的規則過濾符合條件的數據包

  • nat: network address translation 地址轉換規則表

  • mangle: 修改數據標記位規則表

  • raw: 關閉NAT表上啓用的連接跟蹤機制,加快封包穿越防火牆速度

  • 優先級由高到低的順序爲: raw–>mangle–>nat–>filter

  • 五個內置鏈chain

    • PREROUTING:由NF_IP_PRE_ROUTING掛鉤觸發。
    • INPUT:由NF_IP_LOCAL_IN掛鉤觸發。
    • FORWARD:由NF_IP_FORWARD掛鉤觸發。
    • OUTPUT:由NF_IP_LOCAL_OUT掛鉤觸發。
    • POSTROUTING:由NF_IP_POST_ROUTING掛鉤觸發。
  • 表跟鏈的對應關係
    在這裏插入圖片描述

4️⃣ 內核中數據包的傳輸過程

  • 當一個數據包進入網卡時,數據包首先進入PREROUTING鏈,內核根據數據包目的IP判斷是否需要轉送出去

  • 如果數據包就是進入本機的,數據包就會經過INPUT鏈供有關進程接收。本機上運行的程序可以發送數據包,這些數據包經過OUTPUT鏈,然後到達POSTROUTING鏈輸出

  • 如果數據包是要轉發出去的,且內核允許轉發,數據包就會經過FORWARD鏈,然後到達POSTROUTING鏈輸出

  • 流程圖
    在這裏插入圖片描述

5️⃣ iptables規則

  • 規則(rule):根據規則的匹配條件嘗試匹配報文,對匹配成功的報文根據規則定義的處理動作作出處理

  • 匹配條件:默認爲與條件,同時滿足
    基本匹配:IP,端口,TCP的Flags(SYN, ACK等)
    擴展匹配:通過複雜高級功能匹配

  • 處理動作(target):
    內建處理動作:ACCEPT, DROP, REJECT, SNAT, DNAT, MASQUERADE, MARK, LOG...
    自定義處理動作:自定義chain,利用分類管理複雜情形

  • 鏈(chain):
    內置鏈:每個內置鏈對應於一個鉤子函數
    自定義鏈:用於對內置鏈進行擴展或補充,可實現更靈活的規則組織管理機制
    只有Hook鉤子調用自定義鏈時,才生效

6️⃣ iptables添加要點

  • iptables規則添加時考量點

    • 要實現哪種功能:判斷添加在哪張表上
    • 報文流經的路徑:判斷添加在哪個鏈上
    • 報文的流向:判斷源和目的
    • 匹配規則:業務需要
  • 鏈上規則的次序,即爲檢查的次序,因此隱含一定的法則

    • 同類規則(訪問同一應用),匹配範圍小的放上面
    • 不同類規則(訪問不同應用),匹配到報文頻率較大的放上面
    • 可由一條規則描述的多個規則合併爲一個
    • 設置默認策略

❎ iptables命令

  • 環境準備
/ Centos7 關閉防火牆
systemctl stop firewalld
systemctl disable firewalld
/ Centos7 關閉防火牆
service iptables stop
chkconfig iptables off

1️⃣ 規則格式

在這裏插入圖片描述

iptables [-t table] SUBCOMMAND chain rule-specification
rule-specification = [matches...] [target]
match = -m matchname [per-match-options]
target = -j targetname [per-target-options]
  • -t table:raw|mangle|nat|[filter]:指定表,filter表爲默認
  • chain:PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING

2️⃣ SUBCOMMAND:子命令

🌐 查看類

  • 選項:
-L:list, 列出指定鏈上的所有規則,本選項須置後
-n:numberic,以數字格式顯示地址和端口號
-v:verbose,詳細信息
-vv:更詳細
-x:exactly,顯示計數器結果的精確值,而非單位轉換後的易讀值
--line-numbers:顯示規則的序號
-S:selected,以iptables-save命令格式顯示鏈上規則
  • 常用組合:
    --vnL
    --vnxL --line-numbers
  • 查看當前策略
[root@Centos7 ~]# iptables -vnL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination   
  • 查看當前的策略,並詳細顯示策略編號以及計數器的精確值
[root@Centos7 ~]# iptables -vnL --line-numbers
Chain INPUT (policy ACCEPT 73 packets, 5143 bytes)     / 計數器的值
num   pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 36 packets, 3136 bytes)
num   pkts bytes target     prot opt in     out     source               destination 

🌐 規則管理類

  • -A:append,追加

  • -I:insert, 插入,要指明插入至的規則編號,默認爲第一條

  • -D:delete,刪除
    (1) 指明規則序號
    (2) 指明規則本身

  • -R:replace,替換指定鏈上的指定規則編號

  • -F:flush,清空指定的規則鏈

  • -Z:zero,置零

  • iptables的每條規則都有兩個計數器
    (1) 匹配到的報文的個數
    (2) 匹配到的所有報文的大小之和

  • 實驗:iptables規則管理

  • 添加策略:阻止來自172.20.54.7主機的訪問
    iptables -A INPUT -s 172.20.54.7 -j REJECT
    在這裏插入圖片描述

  • 插入策略:阻止來自172.20.54.0/24網段的訪問,並且此策略編號爲1
    iptables -I INPUT 1 -s 172.20.54.0/24 -j REJECT
    在這裏插入圖片描述

  • 替換策略:將策略2替換成阻止來自172.20.54.8主機的訪問
    iptables -R INPUT 2 -s 172.20.54.8 -j REJECT
    在這裏插入圖片描述

  • 刪除策略:刪除策略1
    iptables -D INPUT 1
    在這裏插入圖片描述

  • 清空策略,並將計數器歸0
    iptables -F
    iptables -Z
    在這裏插入圖片描述

3️⃣ 匹配條件

  • 分類:
    基本:通用的,PARAMETERS
    擴展:需加載模塊,MATCH EXTENTIONS

🌐 基本匹配條件:無需加載模塊,由iptables/netfilter自行提供

  • 選項:
-s, --source address[/mask][,...]:源IP地址或範圍
-d, --destination address[/mask][,...]:目標IP地址或範圍
-p, --protocol protocol:指定協議
protocol: tcp, udp, icmp, 參看:/etc/protocols
-i, --in-interface name:報文流入的接口;只能應用於數據報文流入環節,只應用於INPUT, FORWARD, PREROUTING鏈
-o, --out-interface name:報文流出的接口;只能應用於數據報文流出的環節,只應用於FORWARD, OUTPUT, POSTROUTING鏈
  • 示例:阻止來自172.20.54.0/24網段主機的icmp連接
    iptables -A INPUT -s 172.20.54.0/24 -p icmp -j REJECT
    ping -c3 172.20.54.6
    在這裏插入圖片描述

🌐 擴展匹配條件:需要加載擴展模塊(/usr/lib64/xtables/*.so),方可生效

  • 查看幫助:man iptables-extensions (CentOS 7),man iptables (CentOS 6)

▶1 隱式擴展

  • 在使用-p選項指明瞭特定的協議時,無需再用-m選項指明擴展模塊的擴展機制,不需要手動加載擴展模塊
  • tcp協議的擴展選項
--source-port, --sport port[:port]
匹配報文源端口,可爲端口範圍
--destination-port, --dport port[:port]
匹配報文目標端口,可爲端口範圍
--tcp-flags mask comp
mask:需檢查的標誌位列表(例如SYN,ACK,FIN,RST),用","分隔
comp:在mask列表中必須爲1的標誌位列表,無指定則必須爲0,用","分隔
  • 實驗:拒絕telnet和ssh服務的建立新連接,舊連接保持原狀
    分析:拒絕telnet和ssh服務可以封禁端口,只拒絕建立新連接即拒絕TCP狀態位中只有SYN=1的狀態
/ 設置策略(IP:172.20.54.6).以下兩個命令等價,一個意思
iptables  -A INPUT -p tcp --dprot 22:23 --tcp-flages SYN,ACK,FIN,RST SYN -j REJECT
iptables -A INPUT -p tcp --dpot 22:23 --syn -j REJECT

/ 其他主機測試
[root@Centos7 ~]# ssh 172.20.54.6
ssh: connect to host 172.20.54.6 port 22: Connection refused
[root@Centos7 ~]# telnet 172.20.54.6
Trying 172.20.54.6...
telnet: connect to address 172.20.54.6: Connection refused
  • udp協議的擴展選項
--source-port, --sport port[:port]
匹配報文的源端口,可以是端口範圍
--destination-port, --dport port[:port]
匹配報文的目標端口,可以是端口範圍
  • icmp協議的擴展選項
--icmp-type {type[/code]|typename}
type/code
0/0 echo-reply:icmp應答
8/0 echo-request:icmp請求
  • 示例:阻止對本機的icmp請求
    iptables -A INPUT -p icmp --icmp-tyme 8/0 -j REJECT
    在這裏插入圖片描述

▶2 顯式擴展

  • 必須使用-m選項指明要調用的擴展模塊的擴展機制,需要手動加載擴展模塊
    [-m matchname[per-match-options]]
  • multiport擴展:以離散方式定義多端口匹配,最多指定15個端口
--source-ports, --sports port[,port|,port:port]...
指定多個源端口
--destination-ports, --dports port[,port|,port:port]...
指定多個目標端口
--ports port[,port|,port:port]...多個源或目標端口
  • 示例:阻止來自172.20.54.0/24網段主機在TCP的20-25, 80端口的訪問請求
/ 設置策略(172.20.54.6)
iptables -A INPUT -s 172.20.54.0/24 -p tcp  -m multiport --dports 20:25,80 -j REJECT

/ 在其他主機測試
ftp 172.20.54.6
ssh 172.20.54.6
telnet 172.20.54.6
curl 172.20.54.6
  • 設置策略前
    在這裏插入圖片描述
  • 設置策略後
    在這裏插入圖片描述

▶3 iprange擴展

  • 指明連續的(但一般不是整個網絡)ip地址範圍
    --src-range from [-to] 源IP地址範圍
    --dst-range from [-to] 目標IP地址範圍
  • 示例:阻止IP在172.20.54.7-172.20.54.20範圍內的主機建立tcp連接
    iptables -A INPUT -p tcp -m iprange --src-range 172.20.54.7-172.20.54.20 -j REJECT
    在這裏插入圖片描述

▶4 mac擴展

  • 指明源MAC地址
  • 適用於:PREROUTING, FORWARD, INPUT chains
    --mac-source XX:XX:XX:XX:XX:XX
  • 示例:阻止來自MAC地址爲00:50:56:3f:60:3c的主機建立icmp連接
    iptables -A INPUT -p icmp -m mac --mac-source 00:50:56:3f:60:3c -j REJECT
    在這裏插入圖片描述

▶5 string擴展

  • 對報文中的應用層數據做字符串模式匹配檢測
--algo {bm|kmp}:字符串匹配檢測算法
  bm:Boyer-Moore
  kmp:Knuth-Pratt-Morris
--from offset:開始偏移
--to offset:結束偏移
--string pattern:要檢測的字符串模式
--hex-string pattern:要檢測字符串模式,16進制格式
  • 示例:阻斷http服務器返回報文中包含goole字樣的連接
    iptables -A OUTPUT -p tcp -sport 80 -m string --alog bm --string "goole" -j REJECT
    在這裏插入圖片描述

▶6 time擴展

  • 注意:CentOS 8 此模塊有問題
  • 根據將報文到達的時間與指定的時間範圍進行匹配
--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]] 日期
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--timestart hh:mm[:ss] 時間
--timestop hh:mm[:ss]
[!] --monthdays day[,day...] 每個月的幾號
[!] --weekdays day[,day...] 星期幾,17 分別表示星期一到星期日
--kerneltz:內核時區,不建議使用,CentOS 7系統默認爲 UTC
注意: centos6 不支持kerneltz ,--localtz指定本地時區(默認)
  • 示例:設置工作日指定時間段禁止http連接
/ 設置時間段爲UTC 04:00 - 10:00 ,當前時間在範圍內,直接拒絕
iptables -A INPUT -p tcp -dport 80 -m time --timestart 04:00 --timestop 10:00 --weekdays Sau,Sun -j REJECT
/ 修改時間段爲UTC 04:00 - 04:30 , 當前時間不在範圍內,允許訪問
iptables -R INPUT 1 -p tcp -dprot 80 -m time --timestart 04:00 --timestop 04:30 --weekdays Sau,Sun -j REJECT

在這裏插入圖片描述

▶7 connlimit擴展

  • 根據每客戶端IP做併發連接數數量匹配
  • 可防止Dos(Denial of Service,拒絕服務)攻擊
--connlimit-upto n:連接的數量小於等於n時匹配,與默認的拒絕策略配合使用
--connlimit-above n:連接的數量大於n時匹配,與默認的允許策略配合使用
  • 示例:只允許來自172.20.54.7主機發起最多2個併發ssh連接
    iptables -A INPUT -s 172.20.54.7 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT
    在這裏插入圖片描述

▶8 limit擴展

  • 基於收發報文的速率做匹配
  • 令牌桶過濾器
--limit rate [/second|/minute|/hour|/day]:限速
--limit-burst number:前多少個報文不做限速
  • 示例:對icmp發起的請求進行限速,前5個請求不限速,之後的請求每10秒允許一個
/ 定義允許規則
iptables -A INPUT -p icmp --icmp-type 8/0 -m limit --limit-burst 5 --limit 6/minute -j REJECT

/ 定義拒絕規則
iptables -A INPUT -p icmp --icmp-type 8/0 -j DROP

在這裏插入圖片描述

▶9 state擴展

  • 根據連接追蹤機制去檢查連接的狀態,較耗資源

  • conntrack機制:追蹤本機上的請求和響應之間的關係,狀態有如下幾種:

    • NEW:到達的數據包與現有連接無關,但作爲第一個數據包無效時,將使用此標籤將新連接添加到系統。對於諸如TCP之類的可感知連接的協議以及對於諸如UDP之類的無連接協議,都會發生這種情況。
    • ESTABLISHED:一個連接是從改變NEWESTABLISHED時,它接收在相反方向上的有效響應。對於TCP連接,這意味着SYN/ACK,對於UDP和ICMP流量,這意味着在原始數據包的源和目的地之間進行交換的響應。
    • RELATED:不屬於現有連接但與系統中已有連接關聯的數據包標記爲RELATED。這可能意味着一個輔助連接,例如FTP數據傳輸連接,或者可能是ICMP對其他協議對連接嘗試的響應。
    • INVALIDINVALID如果數據包不與現有連接相關聯並且不適合用於打開新連接,如果無法識別或在其他原因中不可路由,則可以進行標記。
    • UNTRACKED:可以將數據包標記爲UNTRACKED好像已在raw錶鏈中被定位爲繞過跟蹤一樣。
    • SNAT:當通過NAT操作更改了源地址時設置的虛擬狀態。連接跟蹤系統使用它,以便它知道將源地址改回答覆數據包。
    • DNAT:當通過NAT操作更改了目標地址時設置的虛擬狀態。連接跟蹤系統使用它,以便在路由答覆數據包時知道將目標地址改回。
  • 查詢連接追蹤信息

    • 已經追蹤到的並記錄下來的連接信息庫
      /proc/net/nf_conntrack
    • 調整連接追蹤功能所能夠容納的最大連接數量
      /proc/sys/net/nf_conntrack_max
    • 查看連接跟蹤有多少條目
      /proc/sys/net/netfilter/nf_conntrack_count
    • 不同的協議的連接追蹤時長
      /proc/sys/net/netfilter/
      在這裏插入圖片描述
    • 說明:
      • 連接跟蹤,需要加載模塊: modprobe nf_conntrack_ipv4
      • iptables的鏈接跟蹤表最大容量爲/proc/sys/net/nf_conntrack_max
      • 當服務器連接多於最大連接數時會出現kernel: ip_conntrack: table full, dropping packet錯誤
      • 各種狀態的超時後,鏈接會從表中刪除
  • 連接過多的解決方法兩個:

    • 加大nf_conntrack_max
    vi /etc/sysctl.conf
    net.nf_conntrack_max = 393216
    net.netfilter.nf_conntrack_max = 393216
    
    • 降低 nf_conntrack timeout時間
    vi /etc/sysctl.conf
    net.netfilter.nf_conntrack_tcp_timeout_established = 300
    net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
    net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
    net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
    iptables -t nat -L -n
    
  • 實驗:開放ftp服務的被動模式

  • 分析:ftp服務的被動模式端口不固定,一般指定端口的方法不適用,通過放行21端口的相關端口的方法設置相關策略

/ 查看模塊是否加載
lsmod | grep ftp
/ 加載ftp模塊
modprode nf_conntrack_ftp
/ 放行已經建立的命令連接、數據連接以及新發起的數據連接
iptables -A INPUT -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
/ 放行新發起的命令連接
iptables -A INPUT -p tcp --dport 21 -m state --state NEW -j ACCEPT
/ 拒絕其他無關連接
iptables -A INPUT -j REJECT

在這裏插入圖片描述

4️⃣ Target:處理動作

  • 語法:-j targetname [per-target-options]

  • 簡單:
    ACCEPT:放行
    DROP:丟棄

  • 擴展:

REJECT:拒絕
RETURN:返回調用鏈
REDIRECT:端口重定向
LOG:記錄日誌,dmesg
MARK:做防火牆標記
DNAT:目標地址轉換
SNAT:源地址轉換
MASQUERADE:地址僞裝
  • LOG:非中斷target,本身不拒絕和允許,放在拒絕和允許規則前並將日誌記錄在/var/log/messages系統日誌中
--log-level level 級別:emerg, alert, crit, error, warning, notice, info or debug
--log-prefix prefix 日誌前綴,用於區別不同的日誌,最多29個字符
  • 示例:將新發起的ssh和http請求記錄在系統日誌中,日誌條目以"new connections: "作爲前綴存儲
    iptables -A INPUT -p tcp -m multiport --dports 22,80 -m state --state NEW -j LOG --log-prefix "new connections: "
    在這裏插入圖片描述

5️⃣ 鏈管理

  • 選項
-N:new,自定義一條新的規則鏈
-X:delete,刪除自定義的空規則鏈
-P:Policy,設置默認策略;對filter表中的鏈而言,其默認策略有:
ACCEPT:接受
DROP:丟棄
-E:重命名自定義鏈
  • 注意:
    引用計數不爲0的自定義鏈不能夠被重命名,也不能被刪除
    不建議修改鏈默認策略,可以設置策略兜底

  • 實驗:自定義鏈"DENY_ICMP_SSH",作用爲拒絕icmp和ssh連接。關聯"DENY_ICMP_SSH"鏈至INPUT鏈,實現拒絕來自172.20.54.7-172.20.54.20範圍內主機的icmp和ssh連接

/ 新建自定義鏈
iptables -N DENY_ICMP_SSH
iptables -A DENY_ICMP_SSH -p icmp -j REJECT
iptables -A DENY_ICMP_SSH -P tcp --dport 22 -j REJECT

/ 關聯DENY_ICMP_SSH
iptables -A INPUT -m iprange --src-range 172.20.54.7-172.20.54.20 -j DENY_ICMP_SSH

/ 主機測試
ping -c3 172.20.54.6
ssh 172.20.54.6

/ 清楚自定義鏈
iptables -F INPUT 1                 / 清除INPUT鏈上關聯DENY_ICMP_SSH規則
iptables -F DENY_ICMP_SSH           / 清除DENY_ICMP_SSH鏈上的規則
iptables -X DENY_ICMP_SSH           / 刪除DENY_ICMP_SSH鏈
  • 設置完畢的策略:自定義鏈下兩條策略,INPUT鏈的策略關聯了自定義鏈
    在這裏插入圖片描述
  • 在IP: 172.20.54.7主機測試ping和ssh登錄,均失敗
    在這裏插入圖片描述
  • 在IP: 172.20.54.1主機測試ping和ssh登錄,均成功
    在這裏插入圖片描述

6️⃣ iptables規則安排的基本原則

  • 任何不允許的訪問,應該在請求到達時給予拒絕

  • 規則在鏈接上的次序即爲其檢查時的生效次序

  • 基於上述,規則優化

    • 安全放行所有入站和出站的狀態爲ESTABLISHED狀態連接
    • 謹慎放行入站的新請求
    • 有特殊目的限制訪問功能,要在放行規則之前加以拒絕
    • 同類規則(訪問同一應用),匹配範圍小的放在前面,用於特殊處理
    • 不同類的規則(訪問不同應用),匹配範圍大的放在前面
    • 應該將那些可由一條規則能夠描述的多個規則合併爲一條
    • 設置默認策略,建議白名單(只放行特定連接)
    • 修改默認策略時不建議iptables -P,建議在規則的最後定義規則做爲默認策略

7️⃣ iptables規則的保存和生效

  • 規則有效期限:
    使用iptables命令定義的規則,手動刪除之前,其生效期限爲kernel存活期限

  • 保存規則至指定的文件:

    • Centos6 環境
    / 將規則覆蓋保存至/etc/sysconfig/iptables文件中
    service iptables save
    /  自動從/etc/sysconfig/iptables重新載入規則
    service iptables start
    
    • Centos7 8 環境
    / 規則文件重定向至文件,以下兩條命令等效
    iptables -S > /PATH/TO/SOME_RULES_FILE
    iptables-save > /PATH/TO/SOME_RULES_FILE
    / 重新載入預存規則文件中的規則
    iptables-restore < /PATH/FROM/SOME_RULES_FILE
    
    • iptables-restore 選項:
      -n, --noflush:不清除原有規則
      -t, --test:僅分析生成規則集,但不提交
  • 開機自動重載規則文件中的規則:

    • CentOS 6:設置iptables開機啓動
      chkconfig --list iptables
    • CentOS 7:在/etc/rc.d/rc.local文件添加規則恢復命令
    vim /etc/rc.d/rc.local
    iptables-restore < /PATH/FROM/SOME_RULES_FILE
    chmod +x /etc/rc.d/rc.local
    
    • 定義Unit File, CentOS 7,8 可以安裝 iptables-services 實現iptables.service
    yum install iptables-services
    iptables-save > /etc/sysconfig/iptables
    systemctl enable iptables.service
    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章