iptables防火牆基本概念及用法

                                  iptables防火牆基本概念及用法
前端

-------------------------------------------------------------------------------------------------------------------------------------------
linux

1、安全技術算法

◆***檢測與管理系統(Intrusion Detection Systems):特色是不阻斷任何網絡訪問,量化、定位來自內外網絡的威脅狀況,主要以提供報告和過後監督爲主,提供有針對性的指導措施和安全決策依據。通常採用旁路部署方式vim

◆***防護系統(Intrusion Prevention System):以透明模式工做,分析數據包的內容如:溢出***、拒絕服務***、***、蠕蟲、系統漏洞等進行準確的分析判斷,在斷定爲***行爲後當即予以阻斷,主動而有效的保護網絡的安全,通常採用在線部署方式centos

◆防火牆(FireWall):隔離功能,工做在網絡或主機邊緣(網絡進出的邊緣),對進出網絡或主機的數據包基於必定的規則檢查,並在匹配某規則時由規則定義的行爲進行處理的一組功能的組件,基本上的實現都是默認狀況下關閉全部的經過型訪問,只開放容許訪問的策略。防火牆是經過包過濾(packet filter)方式進行防禦的安全

面向某些特定的ip鏈接,設置白名單;面向全網絡訪問,只不容許某些ip訪問設置黑名單 服務器

2、防火牆的分類網絡

◆防火牆的分類併發

●主機防火牆:服務範圍爲當前主機框架

  網絡防火牆:服務範圍爲防火牆一側的局域網

●硬件防火牆:在專用硬件級別實現部分功能的防火牆;另外一個部分功能基於軟件實現,Checkpoint,NetScreen

軟件防火牆:運行於通用硬件平臺之上的防火牆的應用軟件

●網絡層防火牆:OSI模型下四層,傳輸層如下,效果好,但識別精度不高

應用層防火牆/代理服務器:代理網關,OSI模型七層,識別精度高,但實現防火牆的延遲高

3、網絡防火牆

◆網絡層防火牆

●包過濾防火牆

●網絡層對數據包進行選擇,選擇的依據是系統內設置的過濾邏輯,被稱爲訪問控制列表(ACL),經過檢查數據流中每一個數據的源地址,目的地址,所用端口號和協議狀態等因素,或他們的組合來肯定是否容許該數據包經過

●優勢:對用戶來講透明,處理速度快且易於維護

●缺點:沒法檢查應用層數據,如病毒等

image.png

4、應用層防火牆

◆應用層防火牆/代理服務型防火牆(Proxy Service)

●將全部跨越防火牆的網絡通訊鏈路分爲兩段

●內外網用戶的訪問都是經過代理服務器上的「連接」來實現

●優勢:在應用層對數據進行檢查,比較安全

●缺點:增長防火牆的負載

image.png

◆現實生產環境中所使用的防火牆通常都是兩者結合體

●即先檢查網絡數據,經過以後再送到應用層去檢查

5、iptables的基本認識

◆Netfilter組件

●內核空間,集成在linux內核中

●擴展各類網絡服務的結構化底層框架

●內核中選取五個位置放了五個hook(勾子) function(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING),而這五個hook function向用戶開放,用戶能夠經過一個命令工具(iptables)向其寫入規則

●由信息過濾表(table)組成,包含控制IP包處理的規則集(rules),規則被分組放在鏈(chain)上

◆三種報文流向:

●流入本機:PREROUTING --> INPUT-->用戶空間進程

●流出本機:用戶空間進程-->OUTPUT--> POSTROUTING

●轉發:PREROUTING --> FORWARD --> POSTROUTING

◆防火牆工具

◆iptables

●命令行工具,工做在用戶空間

●用來編寫規則,寫好的規則被送往netfilter,告訴內核如何去處理信息包

●iptables規則存放在文件/etc/sysconfig/iptables,編寫腳本開機運行iptables-restore < /etc/sysconfig/iptables,可實現開機啓動設置好的防火牆規則

◆firewalld(目前爲止只有rhel 七、centos7使用firewalld,其他大部分linux系統使用的是iptables,因此能夠不使用firewalld,卸載firewalld後安裝iptables,yum -y install iptables-services)

CentOS7 引入了新的前端管理工具

管理工具:

firewall-cmd命令行

firewall-config圖形

6、iptables的組成

◆iptables由五個表和五個鏈以及一些規則組成,規則放在鏈上,鏈傳送給表上

◆五個表table:filter、nat、mangle、raw、security

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

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

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

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

security:用於強制訪問控制(MAC)網絡規則,由Linux安全模塊(如SELinux)實現

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

◆五個內置鏈chain

INPUT:到本機內部來

OUTPUT:由本機內部來

FORWARD:經由本機轉發

PREROUTING:路由前,剛到路由表未作決策

POSTROUTING:路由後

7、表與鏈的對應關係

◆filter:INPUT,FORWARD,OUTPUT

◆nat:PREROUTING,INPUT,OUTPUT,POSTROUTING

◆mangele:INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING

◆raw:PREROUTING,OUTPUT

image.png

8、數據包過濾匹配流程

image.png

9、傳輸過程

◆路由功能發生的時間點

●報文進入本機後

•判斷目標主機是否爲本機

是:INPUT

否:FORWARD

◆報文離開本機以前

●判斷由哪一個接口送往下一跳

image.png

10、iptables規則

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

●匹配條件:默認爲與條件,同時知足

基本匹配:IP,端口,TCP的Flags(SYN,ACK等)

擴展匹配:經過複雜高級功能匹配(端口屬於擴展匹配)

隱式擴展:支持tcp,udp,icmp協議擴展

顯示擴展:必須明確指定擴展模塊進行的擴展

●處理動做:稱爲target,跳轉目標

內建處理動做:ACCEPT,DROP,REJECT,SNAT,DNATMASQUERADE,MARK,LOG...

ACCEPT:容許tongue

DROP:丟棄,請求無響應後當即釋放

REJECT:拒絕,請求有響應但不能訪問

自定義處理動做:自定義chain,利用分類管理複雜情形

◆規則要添加在鏈上,才生效;添加在自定義上不會自動生效

注意:規則執行順序從上而下,第一個規則處理完後有可能不用向下繼續執行,所以把匹配條件更加精確,範圍更小的規則放到上面

◆鏈chain:

內置鏈:每一個內置鏈對應於一個鉤子函數

自定義鏈:用於對內置鏈進行擴展或補充,可實現更靈活的規則組織管理機制;只有Hook鉤子調用自定義鏈時,才生效

11、iptables添加要點

◆iptables規則添加時考量點

●要實現哪一種功能:判斷添加在哪張表上

●報文流經的路徑:判斷添加在哪一個鏈上

●報文的流向:判斷源和目的

●匹配規則:業務須要

◆實驗環境準備:

Centos7:systemctl stop firewalld.service

systemctl disable firewalld.service

Centos6:service iptables stop

chkconfig iptables off

12、iptables命令

◆man 8 iptables

◆iptables [-t table] {-A|-C|-D} chain rule-specification

-A ,attend追加規則

◆iptables [-t table] -I chain [rulenum] rule-specification

-I,insert插入規則,插入第幾條規則

◆iptables [-t table] -R chain rulenum rule-specification

-R,replace替換規則

◆iptables [-t table] -D chain rulenum

-D,delete刪除規則

◆iptables [-t table] -S [chain [rulenum]]

◆iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]

-F,flush清空鏈規則

-L,list列出指定規則

子命令-n,避免反解,經常使用-nL,不能-Ln

-v,-vv,-vvv顯示詳細信息,經常使用組合-vnL

-Z,zero歸零規則,從新計數

◆iptables [-t table] -N chain

-N,new新建自定義鏈

◆iptables [-t table] -X [chain]

-X,刪除自定義空鏈或者未被引用的鏈

◆iptables [-t table] -P chain target

-P,policy指定鏈的默認規則

◆iptables [-t table] -E old-chain-name new-chain-name

-E,重命名鏈

◆rule-specification = [matches...] [target],規則的定義規範

◆match = -m matchname [per-match-options]

◆target = -j targetname [per-target-options],j是jump的意思

image.png

注意:圖片摘自紅帽官網,格式有錯誤,圖中input應該是INPUT

◆規則格式:iptables [-t table] SUBCOMMAND chain [-m matchname [per-match-options]] -j targetname [per-target-options]

◆-t table:

raw, mangle, nat, [filter]默認,其他項不能省

◆匹配條件

基本:通用的,PARAMETERS

擴展:需加載模塊,MATCH EXTENTIONS

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

[!] -s, --source address[/mask][,...]:源IP地址或範圍

[!] -d, --destination address[/mask][,...]:目標IP地址或範圍

[!] -p, --protocol protocol:指定協議,可以使用數字如0(all)

protocol: tcp, udp, icmp, icmpv6,udplite,esp, ah, sctp, mhor「all「

參看:/etc/protocols

[!] -i, --in-interface name:報文流入的接口;只能應用於數據報文流入環節,只應用於INPUT、FORWARD、PREROUTING鏈,只匹配報文前半段

[!] -o, --out-interface name:報文流出的接口;只能應用於數據報文流出的環節,只應用於FORWARD、OUTPUT、POSTROUTING鏈,只匹配報文後半段

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

◆查看幫助man iptables-extensions

●(1)隱式擴展:在使用-p選項指明瞭特定的協議時,無需再用-m選項指明擴展模塊的擴展機制,不須要手動加載擴展模塊

•tcp協議的擴展選項

[!] --source-port, --sport port[:port]:匹配報文源端口,可爲端口範圍

[!] --destination-port,--dportport[:port]:匹配報文目標端口,可爲範圍

[!] --tcp-flags mask comp

mask 需檢查的標誌位列表,用,分隔,例如SYN,ACK,FIN,RST

comp 在mask列表中必須爲1的標誌位列表,無指定則必須爲0,用,分隔

[!] --syn:用於匹配第一次握手

至關於:--tcp-flags SYN,ACK,FIN,RST SYN

iptables -t filter -I INPUT -p --syn --deport 21 -j ACCEPT

注:--tcp-flags SYN表示第一次握手

--tcp-flags SYN,ACK表示第二次握手

--tcp-flasg ACK表示第三次握手

用處:維護系統以前能夠設置iptables -A INPUT -tcp-flags SYN -j REJECT,這麼設置使得已經處於鏈接的用戶不會被踢下線,並且新用戶也鏈接不了,等待全部用戶(who查看鏈接的主機)都不鏈接了再維護系統

•udp

[!] --source-port, --sport port[:port]:匹配報文的源端口或端口範圍

[!] --destination-port,--dportport[:port]:匹配報文的目標端口或端口範圍

•icmp:網絡通信探測協議,icmp和ip都屬於第三層網絡層,但在該層的子層中,icmp位於ip層的上面

[!] --icmp-type {type[/code]|typename}

type/code

0/0 echo-replyicmp應答

8/0 echo-request icmp請求

●(2)顯式擴展:必須使用-m選項指明要調用的擴展模塊的擴展機制,要手動加載擴展模塊

[-m matchname[per-match-options]]

•處理動做:

•-j targetname[per-target-options]

簡單:ACCEPT,DROP

擴展:REJECT:--reject-with:icmp-port-unreachable默認

RETURN:返回調用鏈

REDIRECT:端口重定向

LOG:記錄日誌,dmesg

MARK:作防火牆標記

DNAT:目標地址轉換

SNAT:源地址轉換

MASQUERADE:地址假裝

...

自定義鏈:

•顯式擴展:必須顯式地指明使用的擴展模塊進行的擴展

•使用幫助:

CentOS 6: man iptables

CentOS 7: man iptables-extensions

十3、顯示擴展的擴展模塊

◆一、multiport擴展

以離散方式定義多端口匹配,最多指定15個端口,一個,隔開的算一個端口,可是好比20:23此樣的算一個端口

[!] --source-ports,--sports port[,port|,port:port]...

指定多個源端口

[!] --destination-ports,--dportsport[,port|,port:port]...

指定多個目標端口

[!] --ports port[,port|,port:port]...多個源或目標端口

示例:iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp -m multiport --dports 20:22,80 -j ACCEPT

端口號20到22,81端口

◆二、iprange擴展

指明連續的(但通常不是整個網絡)ip地址範圍

[!] --src-range from[-to]源IP地址範圍

[!] --dst-range from[-to]目標IP地址範圍

示例:iptables -A INPUT -d 172.16.1.100 -p tcp --dport80 -m iprange --src-range 172.16.1.5-172.16.1.10 -j DROP

◆三、mac擴展

指明源MAC地址

適用於:PREROUTING, FORWARD,INPUT chains

[!] --mac-source XX:XX:XX:XX:XX:XX

示例:iptables-A INPUT -s 172.16.0.100 -m mac --mac-source 00:50:56:12:34:56 -j ACCEPT

iptables-A INPUT -s 172.16.0.100 -j REJECT

◆四、string擴展

對報文中的應用層數據作字符串模式匹配檢測

--algo {bm|kmp}字符串匹配檢測算法

bm:Boyer-Moore

kmp:Knuth-Pratt-Morris

--from offset 開始偏移

--to offset 結束偏移

[!] --string pattern要檢測的字符串模式

[!] --hex-string pattern要檢測字符串模式,16進制格式

示例:iptables -A OUTPUT -s 172.16.100.10 -d 0/0 -p tcp --sport 80 -m string --algo bm --string "google" -j REJECT

◆五、time擴展

根據將報文到達的時間與指定的時間範圍進行匹配

--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...] 星期幾,1 –7 分別表示星期一到星期日

--kerneltz:內核時區,不建議使用,CentOS7系統默認爲UTC

注意:centos6 不支持kerneltz,--localtz指定本地時區(默認)

示例:

iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp --dport 80 -m time --timestart 14:30 --timestop 18:30 --weekdays Sat,Sun --kerneltz -j DROP

◆六、connlimit擴展

根據每客戶端IP作併發鏈接數數量匹配

可防止CC(Challenge Collapsar挑戰黑洞)***--connlimit-upto#:鏈接的數量小於等於#時匹配

--connlimit-above #:鏈接的數量大於#時匹配

一般分別與默認的拒絕或容許策略配合使用

示例:

iptables -A INPUT -d 172.16.100.10 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT

◆七、limit擴展

基於收發報文的速率作匹配,記錄每秒鐘記錄多少個報文

令牌桶過濾器:勻速放行,每一個時間段存放固定數量的報文,以致於發送報文是勻速放行

--limit #[/second|/minute|/hour|/day]

--limit-burst number 峯值速率

示例:

iptables-I INPUT -d 172.16.100.10 -p icmp--icmp-type 8 -m limit --limit 10/minute --limit-burst 5 -j ACCEPT

iptables-I INPUT 2 -p icmp-j REJECT

◆八、state擴展

根據」鏈接追蹤機制「去檢查鏈接的狀態,較耗資源

●conntrack機制:追蹤本機上的請求和響應之間的關係

●狀態有以下幾種:

NEW:新發出請求;鏈接追蹤信息庫中不存在此鏈接的相關信息條目,所以,將其識別爲第一次發出的請求,三次握手第一次

ESTABLISHED:NEW狀態以後,鏈接追蹤信息庫中爲其創建的條目失效以前期間內所進行的通訊狀態

RELATED:新發起的但與已有鏈接相關聯的鏈接,如:ftp協議中的數據鏈接與命令鏈接之間的關係

INVALID:無效的鏈接,如flag標記不正確

UNTRACKED:未進行追蹤的鏈接,如raw表中關閉追蹤

●[!] --state state

示例:

iptables-A INPUT -d 172.16.1.10 -p tcp-m multiport --dports22,80 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables-A OUTPUT -s 172.16.1.10 -p tcp-m multiport --sports 22,80 -m state --state ESTABLISHED -j ACCEPT

●已經追蹤到的並記錄下來的鏈接信息庫

/proc/net/nf_conntrack

●調整鏈接追蹤功能所可以容納的最大鏈接數量,此值能夠修改,建議必要時調整到足夠大

/proc/sys/net/nf_conntrack_max

●不一樣的協議的鏈接追蹤時長

/proc/sys/net/netfilter/

●注意:CentOS7 須要加載模塊:modprobenf_conntrack

舉例:iptables的連接跟蹤表最大容量爲/proc/sys/net/nf_conntrack_max,各類狀態的超時連接會從表中刪除;當模板滿載時,後續鏈接可能會超時,解決方法兩個:

(1) 加大nf_conntrack_max值

vi /etc/sysctl.conf

net.nf_conntrack_max= 393216

net.netfilter.nf_conntrack_max= 393216

(2) 下降nf_conntracktimeout時間

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

十4、開放被動模式的ftp服務

◆裝載ftp鏈接追蹤的專用模塊:

跟蹤模塊路徑:/lib/modules/kernelversion/kernel/net/netfilter

vim /etc/sysconfig/iptables-config配置文件

IPTABLES_MODULES=「nf_conntrack_ftp"

modproblenf_conntrack_ftp

◆放行請求報文:

命令鏈接:NEW, ESTABLISHED

數據鏈接:RELATED, ESTABLISHED

iptables–I INPUT -d LocalIP-p tcp-m state --state ESTABLISHED,RELATED -j ACCEPT

iptables-A INPUT -d LocalIP-p tcp--dport21 -m state --state NEW -j ACCEPT

◆放行響應報文:

iptables-I OUTPUT -s LocalIP-p tcp-m state --state ESTABLISHED -j ACCEPT

◆舉例:

yum install vsftpd

systemctlstart vsftpd

modprobenf_conntrack_ftp

iptables-F

iptables-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables-A INPUT -p tcp--dport21 -m state --state NEW -j ACCEPT

iptables-A OUTPUT -m state --state ESTABLISHED -j ACCEPT

iptables-P INPUT DROP

iptables-P OUTPUT DROP

iptables-vnL

十5、iptables命令的target

◆Target:

●ACCEPT,DROP,REJECT,RETURN

●LOG,SNAT,DNAT,REDIRECT,MASQUERADE,..

●LOG:非中斷target,自己不拒絕和容許,放在拒絕和容許規則前,並將日誌記錄在/var/log/messages系統日誌中

--log-level level 級別:debug,info,notice, warning, error, crit, alert,emerg

--log-prefix prefix 日誌前綴,用於區別不一樣的日誌,最多29個字符

●示例:

iptables-I INPUT -s 10.0.1.0/24 -p tcp-m multiport --dports80,21,22,23 -m state --state NEW -j LOG --log-prefix "new connections: "

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

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

◆基於上述,規則優化

● 安全放行全部入站和出站的狀態爲ESTABLISHED狀態鏈接

●謹慎放行入站的新請求

● 有特殊目的限制訪問功能,要在放行規則以前加以拒絕

同類規則(訪問同一應用),匹配範圍小的放在前面,用於特殊處理

不一樣類的規則(訪問不一樣應用),匹配範圍大的放在前面

●應該將那些可由一條規則可以描述的多個規則合併爲一條

●設置默認策略,建議白名單(只放行特定鏈接)

1)iptables-P,不建議

2)建議在規則的最後定義規則作爲默認策略

◆規則有效期限:

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

◆保存規則:

保存規則至指定的文件

◆CentOS 6

service iptables save

將規則覆蓋保存至/etc/sysconfig/iptables文件中

◆CentOS7

iptables-save > /etc/sysconfig/iptables

◆CentOS 6:

service iptables restart

會自動從/etc/sysconfig/iptables從新載入規則

◆CentOS 7從新載入預存規則文件中規則:

iptables-restore < /PATH/FROM/SOME_RULES_FILE

-n, --noflush:不清除原有規則

-t, --test:僅分析生成規則集,但不提交

十6、開機自動重載規則

◆開機自動重載規則文件中的規則:

◆(1) 用腳本保存各iptables命令;讓此腳本開機後自動運行

/etc/rc.d/rc.local文件中添加腳本路徑

/PATH/TO/SOME_SCRIPT_FILE

◆(2) 用規則文件保存各規則,開機時自動載入此規則文件中的規則

/etc/rc.d/rc.local文件添加

iptables-restore < /PATH/FROM/IPTABLES_RULES_FILE

◆(3)自定義Unit File,進行iptables-restore

十7、網絡防火牆

◆iptables/netfilter網絡防火牆:

(1) 充當網關

(2) 使用filter表的FORWARD鏈

◆注意的問題:

(1) 請求-響應報文均會經由FORWARD鏈,要注意規則的方向性

(2) 若是要啓用conntrack機制,建議將雙方向的狀態爲ESTABLISHED的報文直接放行

十8、NAT,只支持單個端口的目標映射

NAT:network address translation

PREROUTING,INPUT,OUTPUT,POSTROUTING

請求報文:修改源/目標IP,由定義如何修改

響應報文:修改源/目標IP,根據跟蹤機制自動實現

SNAT:source NAT POSTROUTING,INPUT

讓本地網絡的主機經過某一特定地址訪問外部網絡,實現地址假裝,好比說在公司內部訪問外部網站,使用的ip是通過SNAT轉換過的公司外網IP

請求報文:修改源IP

DNAT:destination NAT PREROUTING,OUTPUT

把本地網絡中的主機上的某服務開放給外部網絡訪問(發佈服務和端口映射),但隱藏真實IP,好比說內部服務器開放了80端口,外網訪問公司的httpd服務是訪問開放80端口的服務器

請求報文:修改目標IP

PNAT:port nat,端口和IP都進行修改,通常咱們說的NAT就是指PNAT

私網規劃地址時候不要將地址規劃爲公網地址

十9、SNAT的規則

一、nat表的target:

二、SNAT:固定IP

--to-source [ipaddr[-ipaddr]][:port[-port]]

--random

三、iptables -t nat -A POSTROUTING -s LocalNET! -d LocalNet -j SNAT --to-source ExtIP

四、iptables -t nat -A POSTROUTING -s 10.0.1.0/24 ! –d 10.0.1.0/24-j SNAT --to-source 172.18.1.6-172.18.1.9

相關文章
相關標籤/搜索