內核空間,集成在linux內核中擴展各種網絡服務的結構化底層框架內核中選取五個位置放了五個Hook(勾子)function(INPUT、OUTPUT、FORWARD、PREROUTING、POST ROUTING),而這五個hoot function 向用戶開放,用戶可以通過一個命令工具(iptables)向其寫入規則。由信息過濾表(table)組成,包含控制IP包處理的規則集(rules),規則被分組放在鏈(chain)上。
三種報文流向:
流入本機:PREROUTING —> INPUT —>用戶空間進程流出本機:用戶空間進程 —>OUTPUT —>POSTROUTING轉發:PREROUTING —> FORWARD –> POSTROUTING
防火墻工具
iptables:
命令行工具,工作在用戶空間用來編寫規則,寫好的規則被送往netfilter,告訴內核如何去處理信息包 .
CentOS 7引入了新的前端管理工具管理工具:firewall-cmd 命令行firewall-config 圖形
iptables由四個表和五個鏈以及一些規則組成四個表table:filter, nat, mangle, rawfilter表:過濾規則表,根據預定義的規則過濾符合條件的數據包 ;nat表:network address translation 地址轉換規則表mangle:修改數據標記位規則表Raw:關閉NAT表上啟用的連接跟蹤機制,加快封包穿越防火墻速度優先級由高到低的順序為:raw–>mangle—>nat–>filter
INPUT OUTPUT FORWARD PREROUTI

當一個數據包進入網卡時,數據包首先進入PREROUTING鏈, 內核根據
數據包目的IP判斷是否需要轉送出去;
如果數據包就是進入本機的,數據包就會沿著圖向下移動,到達 INPUT
鏈。數據包到達INPUT鏈后,任何進程都會收到它。本 機上運行的程序
可以發送數據包,這些數據包經過OUTPUT鏈 ,然后到達POSTROTING
鏈輸出 ;
如果數據包是要轉發出去的,且內核允許轉發,數據包就會向右 移動,
經過FORWARD鏈,然后到達POSTROUTING鏈輸出。
iptables規則
規則rule:根據規則的匹配條件嘗試匹配報文,對匹配成功的報文根據規則定義的處理動作作出處理匹配條件:默認為與條件,同時滿足基本匹配:IP,端口,TCP的Flags(SYN,ACK等)擴展匹配:通過復雜高級功能匹配處理動作:稱為target,跳轉目標。內建處理動作:ACCEPT,DROP,REJECT,SNAT,DNAT,MASQUERADE,MARK,LOG…自定義處理動作:自定義chain,利用分類管理復雜情形規則要添加在鏈上,才生效;添加在自定義上不會自動生效鏈chain:內置鏈:每個內置鏈對應于一個鉤子函數自定義鏈:用于對內置鏈進行擴展或補充,可實現更靈活的規則組織管理機制;只有Hook鉤子調用自定義鏈時,才生效.iptables添加要點iptables規則添加時考量點:
要實現哪種功能:判斷添加在哪張表上
報文流經的路徑:判斷添加在哪個鏈上
報文的流向:判斷源和目的
匹配規則:業務需要
鏈上規則的次序,即為檢查的次序,因此隱含一定的法則 :
同類規則(訪問同一應用),匹配范圍小的放上面
不同類規則(訪問不同應用),匹配到報文頻率較大的放上面
將那些可由一條規則描述的多個規則合并為一個
設置默認策略
實驗環境準備:
Centos7: systemctl stop firewalld.service
systemctl disable firewalld. service
Centos6:service iptables stop; chkconfig iptables off
-N:new, 自定義一條新的規則鏈
-X:delete,刪除自定義的空的規則鏈
-P:Policy,設置默認策略;對filter表中的鏈而言,其默認策略有:
ACCEPT:接受
DROP:丟棄
REJECT:拒絕
-E:重命名自定義鏈;引用計數不為0的自定義鏈不能夠被重命名,
也不能被刪除.
-L:list, 列出指定鏈上的所有規則,本選項須置后
-n:numberic,以數字格式顯示地址和端口號
-v:verbose,詳細信息
-vv 更詳細
-x:exactly,顯示計數器結果的精確值,而非單位轉換后的易讀值
–line-numbers:顯示規則的序號
-A:append,追加
-I:insert, 插入,要指明插入至的規則編號,默認為第一條
-D:delete,刪除
(1) 指明規則序號
(2) 指明規則本身
-R:replace,替換指定鏈上的指定規則編號
-F:flush,清空指定的規則鏈
-Z:zero,置零
[!] -s, –source address[/mask][,…]:源IP地址或范圍
[!] -d, –destination address[/mask][,…]:目標IP地址或范圍
[!] -p, –protocol protocol:指定協議,可使用數字如0(all)
protocol: tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp, mh or
“all“ 參看:/etc/protocols
[!] -i, –in-interface name:報文流入的接口;只能應用于數據 報文流入
環節,只應用于INPUT、FORWARD、PREROUTING鏈
[!] -o, –out-interface name:報文流出的接口;只能應用于數 據報文流
出的環節,只應用于FORWARD、OUTPUT、POSTROUTING鏈
[!] –source-port, –sport port[:port]:匹配報文源端口, 可為端口范圍
[!] –destination-port,–dport port[:port]:匹配報文目標 端口,可為范圍
[!] –tcp-flags mask comp mask 需檢查的標志位列表,用,分隔。
例如: SYN,ACK,FIN,RST comp 在mask列表中必須為1的標志
位列表,無指定則必須 為0,用,分隔。
允許訪問SSH服務:


–tcp-flags SYN,ACK,FIN,RST SYN 表示要檢查的標志位為SYN,ACK,FIN,RST四個,其中SYN必須為1,余 下的必須為0
–tcp-flags SYN,ACK,FIN,RST SYN,ACK
–tcp-flags ALL ALL
–tcp_flags ALL NONE
[!] –syn:用于匹配第一次握手
相當于:–tcp-flags SYN,ACK,FIN,RST SYN
[!] –source-port, –sport port[:port]:匹配報文的 源端口;
可以是端口范圍
[!] –destination-port,–dport port[:port]:匹配報 文的目標端口;
可以是端口范圍
[!] –icmp-type {type[/code]|typename}
type/code
0/0 echo-reply icmp應答
8/0 echo-request icmp請求
(2)顯式擴展:必須使用-m選項指明要調用的擴展模塊的擴展 機制,要手動
加載擴展模塊:
[-m matchname [per-match-options]]
![]()
原創文章,作者:shenjialong,如若轉載,請注明出處:http://www.www58058.com/85174