centos7-防火牆

    netfilter/iptables是集成在linux2.4.x版本內核中的包過濾防火牆系統。linux

    該框架能夠實現數據包過濾,網絡地址轉換以及數據包管理功能。linux中的防火牆系統包括兩個部分:netfilte和iptables。netfilte能夠對本機全部流入、流出、轉發的數據包進行查看、修改、丟棄、拒絕等操做。因爲netfilter在內核空間中,用戶一般沒法接觸內核和修改內核,此時須要命令行工具,通常使用iptables,firewalld等工具。使用iptables能夠添加、刪除具體的過濾規則,iptables默認維護四個表和五個鏈,全部的防火牆策略規則都將被分別寫入表和鏈中。centos7系統防火牆模塊存放在/lib/modules/3.10.0-514.el7.x86_64/kernel/net/netfilter/目錄下,當須要某個模塊功能時,能夠經過modprobe加載。vim

    centos7在原有的netfilter/iptables架構上又增長了firewalld。iptables工具是一個比較低級別的工具,僅能夠調整ipv4的防火牆規則,因此在centos7上使用了firewalld做爲默認的用戶防火牆工具,但當用戶使用firewalld編寫ipv4防火牆規則時,firewalld依然是調用了底層的iptables實現具體的功能,只是這個調用過程對用戶是透明的。
後端


1、iptablescentos

    默認的iptables規則表又fileter表(過濾規則表),nat表(地址轉換規則表)、mangle(修改數據標記位規則表)、raw(跟蹤數據表規則表)。每一個規則表中包含多個數據鏈:INPUT(入站數據過濾)、OUTPUT(出站數據過濾)、FORWARD(轉發數據過濾)、PREROUTING(路由前過濾)和POSTROUTING(路由後過濾),防火牆規則須要寫入到這些具體的數據鏈中。bash

如下爲流程服務器

1)外部主機發送數據包給防火牆本機,數據將會通過PEROUTING與INPUT鏈;網絡

2)若是防火牆本機發送數據包到外部主機,數據通過OUTPUT於POSTRTOUTING鏈架構

3)若是防火牆做爲路由負責轉發數據,則數據通過PEROUTING鏈、FORWARD鏈已經POSTROUTING鏈框架


iptables的表與鏈的關係以下所示:
運維


1.1 iptables的語法

 iptables定義規則的方式比較複雜:

 格式:iptables [-t table] COMMAND chain CRETIRIA -j ACTION

 -t table :3個filter nat mangle

 COMMAND:定義如何對規則進行管理

 chain:指定你接下來的規則究竟是在哪一個鏈上操做的,當定義策略的時候,是能夠省略的

 CRETIRIA:指定匹配標準

 -j ACTION :指定如何進行處理

選項:

-t                      指定須要維護的防火牆規則表,不使用-t時,則默認操做對象爲filter表

-A                     追加防火牆規則

-D                     刪除防火牆規則

-I                       插入防火牆規則

-F                      清空防火牆規則

-L                      列出防火牆規則

-R                      替換防火牆規則

-Z                      清空防火牆數據表統計信息

-P                      設置默認規則


匹配參數:

[!]-p                    匹配協議,!表明取反

[!]-s                     匹配源地址

[!]-d                    匹配目標地址

[!]-o                    匹配入站網卡接口

[!]--sport            匹配源端口

[!]--dport            匹配目的端口

[!]--src-range      匹配目標地址範圍

[!]--dst-range     匹配目標地址範圍

[!]--limit              匹配數據錶速率

[!]--mac-source   匹配源mac地址

[!]--sports            匹配多個源地址

[!]--dports            匹配多個目的地址

[!]--state               匹配狀態(INVALID,ESTABLISHED,NEW,EELATED)

[!]--string              匹配應用層字符串


觸發動做:

ACCEPT                容許數據包經過

REJECT                 拒絕數據包經過

LOG                      將數據包信息記錄syslog日誌

DNAT                   目標地址轉換

SNAT                    源地址轉換

MASQUERADE     地址欺騙

REDIRECT             重定向


iptables防火牆規則的順序很是重要,內核按順序檢查這些規則,若是發現有匹配的股則條目按,則馬上執行相關動做,中止繼續向下查找規則條目,若是全部的防火牆規則都未能匹配成功,

則按照默認策略處理。使用-A選項添加防火牆規則會將該規則追加到整個鏈的最後,而使用-I選項添加的規則則默認會插入到鏈中做爲第一條規則。下面經過實例簡單演示iptables命令的使用方法。

iptables -nL                         #查看filter表的全部規則
iptables -t nat -nL                  #查看nat表全部的規則
iptables -F                          #清空filter表中全部的規則
iptables -A INPUT -s 192.168.0.1 -j DROP         #向filter表中添加一條新的入站規則,丟棄192.168.0.1主機發送給防火牆本機的全部的數據包
iptables -I INPUT -s 192.168.0.22 -p icmp -j REJECT       #向filter表中插入一條新的入站規則,拒絕192.168.0.22 ping
iptables -nL --line-number           #查看錶中防火牆規則並顯示規則編號
iptables -D INPUT 1                  #刪除表中INPUT鏈的第一條規則
iptables -R INPURT 2 ! -s 192.168.0.254 -j REJECT        #替換filter表中INPUT鏈的第二條規則,拒絕192.168.0.254以外的任何主機鏈接防火牆本機
iptables -t fileter -p INPUT ACCEPT  #修改filte表中INPUT鏈的默認規則爲接收數據包
iptables -I INPUT -s 192.168.0.10 -p tcp --dport 22 -j LOG #將192.168.0.10主機發送給防火牆本機的22端口的全部數據包信息記錄到messages日誌
iptables -I INPUT -i eth1 --p tcp --dport 80 -j ACCEPT     #容許任何主機從eth1網絡接口訪問本機的80端口

 

1.2運用舉例

 1) 容許任意客戶端訪問服務器主機提供的平常服務(HTTP,HTTPS,DNS,NTP,SMTP,POP3,SSH),在linux系統中,/etc/services文件能夠找到各類服務所對應的標準端口信息

image.png

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p udp --dport 25 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 110 -j ACCEPT
iptables -A INPUT -p tcp --dport 143 -j ACCEPT
iptables -A INPUT -p tcp --dport 123 -j ACCEPT
iptables -P INPUT -P INPUT DROP
iptables -P INPUT -p OUTPUT ACCEPT


2)使用SNAT共享上網,服務器做爲軟路由,內部全部的192.168.0.0/24網端內的主機鏈接外網時,防火牆自動將全部源地址修改成公網IP,最後互聯網將信息返回給路由後,由路由再轉交給真正的後端主機。防火牆源地址轉換(SNAT)規則須要被寫入到NAT表中的POSTROUTING鏈

vim /etc/sysctl.conf

image.png

systctl -p      #從新加載內核參數配置文件
iptables -t nat -I POSTROUTING -s 192.168.0.0/24 -j SNAT --to-source 124.125.199.84    #配置nat表,使用snat方式將源地址段192.168.0.0/24  轉換爲124.125.199.84公網地址


3)配置DNAT,外部網絡公網IP訪問內網業務服務器

sed -i '$a\net.ipv4.ip_forward = 1' /etc/sysctl.conf   #配置文件最後一行添加
systctl -p       #從新加載內核配置文件
iptables -t nat -I PREROUTING -d 124.126.199.84 -p tcp --dport 80 -j DNAT --to-destination 192.168.0.100   #配置nat表,使用dnat方式,訪問公網地址80端口轉換192.168.0.100
iptables -t nat -I PREROUTING -d 124.126.199.84 -p tcp --dport 25 -j DNAT --to-destination 192.168.0.101



4)限制單位時間內數據包的個數,防止網絡***發送大量無效的數據包給服務器,形成服務器沒法響應正常的請求包

iptables -I INPUT -m limit --limit 500/sec -j ACCCEPT   #當每秒數據包個數爲500的時候接收入站鏈接,不然拒絕鏈接
iptables -P INPURT DROP


5)根據數據鏈接狀態設置防火牆規則,放行全部的出站數據包,拒絕入站的新鏈接請求與無效連接,放行入站的迴應請求

iptables -F
iptables -A INPUT -m state --state NEW -j DROP
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P OUTPUT ACCEPT


6)防火牆設置規則,記錄192.168.0.1 到192.168.0.22地址段內全部的主機發送給路由要求轉發的數據包,並容許轉發這些數據包

iptables -A FORWARD -m iprange --src-range 192.168.0.1-192.168.0.10 -p tcp --dport 80 -j LOG
iptables -A FORWARD -m iprange --src-range 192.168.0.1-192.168.0.10 -p tcp --dport 80 -j ACCEPT


1.4 iptables備份與還原

    默認的iptables防火牆規則會馬上生效,可是若是不保存,當計算機重啓後,全部的規則將會丟失,因此須要即時保存。

iptables軟件包提供了兩個很是有用的工具,iptables-save和iptables-restore,能夠方便的處理大量的防火牆規則。centos7系統中的防火牆規則默認保存再/etc/sysconfig/iptables文件中,使用iptables-save將規則保存至該文件中實現保存防火牆規則的做用,重啓後會自動加載該文件中的規則。若是使用iptables-save將規則保存到其餘位置,能夠實現備份防火牆規則的做用。當防火牆規則須要作還原時,可使用iptables-restore將備份文件直接導入當前防火牆規則。

iptables-save > /etc/sysconfig/iptables
iptables-save > firewall.bak
iptables-restore < firewall.bak



2、firewalld

firewalld將全部的網絡流量都分類匯聚到zones中,它經過zones管理防火牆規則,每個進入系統的數據包,都會首先檢查源IP地址和接口,若是與某個zone匹配,則該zone的規則將生效。而每一個zone都會有開啓或關閉服務和端口的列表,以實現容許或拒絕連接服務和端口。若是數據包的源IP地址和網卡接口都不能和任何zone匹配,則該數據包將匹配默認zone,通常狀況下是一個public的默認zone。firewalld會提供block,dmz,drop,external,home,internal,public,trusted,work這九個zone。好比有一個數據包從eno1網卡進入本機,根據規則進入work這個zone而在work這和zone中有容許訪問http服務的規則,則最後該數據包將能夠進入本機並訪問http服務

大部分zone都定義的有本身的容許規則,規則經過端口/協議(631/udp)或者預約義的服務(ssh)這種形式設置,若是數據包沒有匹配這些容許的規則,則該數據包通常會被防火牆拒絕。可是若是有名爲trusted的zone,默認會運行全部的數據流量,若是有一個數據包進入了該zone,則被容許訪問全部的資源。

具體的firwalld預約義zone及其描述信息以下所示:


drop(丟棄):任何接受的網絡數據包都被丟棄,沒有任何回覆,

僅能有發送出去的網絡鏈接(數據包不能進來,可是能夠出去)


block(限制):任何接受的網絡鏈接都被IPv4的icmp-host-prohibited信息和IPv6的icmp6-adm-prohibited信息所拒絕。(和drop相比,比較寬鬆一些,主要是爲了針對icmp)


piblic(公共):在公共區域內使用,不能相信網絡內其餘計算機不會對你形成危害,只能接受通過選取的鏈接。


external(外部):特別是爲路由器啓用了假裝功能的外部網,你不能信任來自網絡的其餘計算,不能相信他們不會對你形成傷害,只能接受通過選擇的鏈接。


dmz(非軍事區):用於你的非軍事區內的電腦,此區域可公開訪問,能夠有限的進入你的內部網絡,僅僅接受通過選擇的鏈接。


work(工做):用於工做區,你能夠基本信任網絡內的其餘電腦不會對你形成危害,僅僅接收通過選擇的鏈接。


home(家庭):用於內部網絡,你能夠基本上信任網絡內其餘電腦不會對你形成危害,僅僅接收通過選擇的鏈接。


internal(內部):用於內部網絡,你能夠基本上信任網絡內其餘電腦不會對你形成危害,僅僅接收通過選擇的鏈接。


trusted(信任):可接受全部的網絡鏈接。


2.1 firewalld-cmd命令

   可使用firewall-cmd命令來管理防火牆規則,語法格式以下:

  用法:

firwall-cmd [OPTIONS....]

選項:

--get-default-zone                        獲取默認zone信息

--set-default-zone=<zone>          設置默認zone

--get-active-zones                          顯示當前正在使用的zone信息

--get-zones                                       顯示系統預約義的zone

--get-zone-of-interface=<interface>      查詢某個接口與哪一個zone匹配

--get-zone-of-source=<source>[/<mast>/]        查詢某個源地址與哪一個zone匹配

--list-all-zones                                            顯示全部的zone信息的全部規則

--add-service=<service>                            向zone中添加容許訪問的服務

--add-port=<portid>[-<portid>]/<protocol>       向zone中添加容許訪問的端口

--add-interface=<interface>                        將接口與zone綁定

--add-source=<source>[/<mask>/]            將源地址與zone綁定

 


--list-all                                         列出某個zone全部的規則信息

--remove-service=<service>       從zone中移除容許某個服務的規則

--remove-port=<portid>[-<portid>]/<protocol>            從zone中移除容許的某個端口規則

--remove-source=<source>[/<mask>]            將源地址與zone解除綁定

--remove-interface=<interface>                     將網卡接口與zone接觸綁定

--permanent                                                      設置永久有效的規則,默認的狀況規則都是臨時的

--reload                                                            從新加載防火牆規則

firewall-cmd --get-default-zone            #查看默認zone,爲public
firewall-cmd --set-default-zone=trusted     #設置默認zone爲trusted
firewall-cmd --get-active-zones            #顯示當前正在使用的zone信息

image.png

firewall-cmd --get-zones                    #顯示系統預約義的zone,默認爲九個zone

image.png

firewall-cmd --get-services                #顯示系統預約義的服務名稱

image.png

firewall-cmd --get-zone-of-interface=ens192                #查詢接口匹配的zone

image.png

firewall-cmd --list-all-zones                        #顯示全部的zone以及對應的規則信息

image.png

firewall-cmd --add-service=ftp --zone=public                    #public中添加容許訪問ftp服務的規則
firewall-cmd --remove-service=ftp --zone=public                 #public中刪除容許訪問ftp服務的規則
firewall-cmd --add-port=3306/tcp --zone=public                   #public中添加容許訪問3306服務的規則
firewall-cmd  --remove-port=3306/tcp --zone=public                                     #public中刪除容許訪問3306服務的規則
firewall-cmd  --add-interface=eno1 --zone=public                                       #將網卡eno1與public綁定,流量接入該接口匹配public規則
firewall-cmd  --remove-port=eno1 --zone=public                                          #將網卡eno1與public解綁定
firewall-cmd  --add-source=1.1.1 --zone=public                                           #將源地址1.1.1.1與public綁定,之後該主機訪問本機時匹配public中的規則
firewall-cmd  --list-all --zone=public                                                   #查看public中這個zone的規則列表
firewall-cmd  --permanet --add-port=3306/tcp --zone=public                               #public中添加一條永久規則
firewall-cmd  --reload                                                                    #重啓防火牆

    


通常在實際運維中,咱們主要使用 iptables作爲防火牆,將firewalld服務禁用,避免干擾

相關文章
相關標籤/搜索