Redhat防火墙
Redhat防火墻
什么防火墻
? 防火墻:防火墻是位于內(nèi)部網(wǎng)和外部網(wǎng)之間的屏障,它按照系統(tǒng)管理員預(yù)先定義好的規(guī)則來控制數(shù)據(jù)包的進(jìn)出。
? 防火墻又可以分為硬件防火墻與軟件防火墻。硬件防火墻是由廠商設(shè)計(jì)好的主機(jī)硬件,這臺(tái)硬件防火墻的操作系統(tǒng)主要以提供數(shù)據(jù)包數(shù)據(jù)的過濾機(jī)制為主,并將其他不必要的功能拿掉。軟件防火墻就是保護(hù)系統(tǒng)網(wǎng)絡(luò)安全的一套軟件(或稱為機(jī)制)
iptables與firewalld都不是真正的防火墻,它們都只是用來定義防火墻策略的防火墻管理工具
這些工具的作用
拒絕讓Internet的數(shù)據(jù)包進(jìn)入主機(jī)的某些端口;
拒絕讓某些來源ip的數(shù)據(jù)包進(jìn)入;
拒絕讓帶有某些特殊標(biāo)志(flag)的數(shù)據(jù)包進(jìn)入,最常拒絕的就是帶有SYN的主動(dòng)連接的標(biāo)志了;
分析硬件地址(MAC)來決定連接與否。
防火墻并不能有效阻擋病毒或木馬程序。(假設(shè)主機(jī)開放了www服務(wù),防火墻的設(shè)置是一定要將www服務(wù)的port開放給client端的。假設(shè)www服務(wù)器軟件有漏洞,或者請(qǐng)求www服務(wù)的數(shù)據(jù)包本身就是病毒的一部分時(shí),防火墻是阻止不了的)
防火墻對(duì)于內(nèi)部LAN的攻擊無能為力(防火墻對(duì)于內(nèi)部的規(guī)則設(shè)置通常比較少,所以就很容易造成內(nèi)部員工對(duì)于網(wǎng)絡(luò)無用或?yàn)E用的情況)
?
iptables
? 防火墻會(huì)從以上至下的順序來讀取配置的策略規(guī)則,在找到匹配項(xiàng)后就立即結(jié)束匹配工作并去執(zhí)行匹配項(xiàng)中定義的行為(即放行或阻止)。如果在讀取完所有的策略規(guī)則之后沒有匹配項(xiàng),就去執(zhí)行默認(rèn)的策略。一般而言,防火墻策略規(guī)則的設(shè)置有兩種:一種是“通”(即放行),一種是“堵”(即阻止)。當(dāng)防火墻的默認(rèn)策略為拒絕時(shí)(堵),就要設(shè)置允許規(guī)則(通),否則誰都進(jìn)不來;如果防火墻的默認(rèn)策略為允許時(shí),就要設(shè)置拒絕規(guī)則,否則誰都能進(jìn)來,防火墻也就失去了防范的作用。
? iptables服務(wù)把用于處理或過濾流量的策略條目稱之為規(guī)則,多條規(guī)則可以組成一個(gè)規(guī)則鏈,而規(guī)則鏈則依據(jù)數(shù)據(jù)包處理位置的不同進(jìn)行分類,具體如下:
在進(jìn)行路由選擇前處理數(shù)據(jù)包,用于目標(biāo)地址轉(zhuǎn)換(PREROUTING);
處理流入的數(shù)據(jù)包(INPUT);
處理流出的數(shù)據(jù)包(OUTPUT);
處理轉(zhuǎn)發(fā)的數(shù)據(jù)包(FORWARD);
在進(jìn)行路由選擇后處理數(shù)據(jù)包,用于源地址轉(zhuǎn)換(POSTROUTING)。
安裝iptables服務(wù)的包:(因?yàn)槭褂玫腞edhat8,8上默認(rèn)沒有這個(gè)包)
yum install iptables-services.x86_64 -ysystemctl stop firewalld #關(guān)閉Redhat8默認(rèn)得防火墻systemctl start iptables #啟動(dòng)服務(wù) iptables -F #清空所有的規(guī)則表,清空之后客戶端可以訪問ssh和http服務(wù)? iptables命令可以根據(jù)流量的源地址、目的地址、傳輸協(xié)議、服務(wù)類型等信息進(jìn)行匹配,一旦匹配成功,iptables就會(huì)根據(jù)策略規(guī)則所預(yù)設(shè)的動(dòng)作來處理這些流量。
? 用法:iptables -t 表名 <-A/I/D/R> 規(guī)則鏈名 [規(guī)則號(hào)] <-i/o 網(wǎng)卡名> -p 協(xié)議名 <-s 源IP/源子網(wǎng)> --sport 源端口 <-d 目標(biāo)IP/目標(biāo)子網(wǎng)> --dport 目標(biāo)端口 -j 動(dòng)作
iptables的參數(shù)說明:
? -t:對(duì)指定的表進(jìn)行操作,table必須是raw,nat,filter,mangle中的一個(gè)。默認(rèn)是filter表。
? -p:指定要匹配的數(shù)據(jù)包協(xié)議類型;
? -s, --source address[/mask][,…]:把指定的一個(gè)或者一組地址作為源地址,按此規(guī)則進(jìn)行過濾。當(dāng)后面沒有mask 時(shí),address 是一個(gè)地址,比如:192.168.1.1;當(dāng) mask 指定時(shí),可以表示一組范圍內(nèi)的地址,比如:192.168.1.0/255.255.255.0。
-d, --destination address[/mask][,…]:地址格式同上,但這里指定地址為目的地址,按此進(jìn)行過濾
? -i, --in-interface name:指定數(shù)據(jù)包的來自來自網(wǎng)絡(luò)接口,比如最常見的 eth0 。注意:它只對(duì) INPUT,FORWARD,PREROUTING 這三個(gè)鏈起作用。如果沒有指定此選項(xiàng), 說明可以來自任何一個(gè)網(wǎng)絡(luò)接口。同前面類似,"!" 表示取反。
-o, --out-interface name:指定數(shù)據(jù)包出去的網(wǎng)絡(luò)接口。只對(duì) OUTPUT,FORWARD,POSTROUTING 三個(gè)鏈起作用。
? -L, --list [chain] 列出鏈 chain 上面的所有規(guī)則,如果沒有指定鏈,列出表上所有鏈的所有規(guī)則。
? -A, --append chain rule-specification:在指定鏈 chain 的末尾插入指定的規(guī)則,也就是說,這條規(guī)則會(huì)被放到最后,最后才會(huì)被執(zhí)行。規(guī)則是由后面的匹配來指定。
? -I, --insert chain [rulenum] rule-specification:在鏈 chain 中的指定位置插入一條或多條規(guī)則。如果指定的規(guī)則號(hào)是1,則在鏈的頭部插入。這也是默認(rèn)的情況,如果沒有指定規(guī)則號(hào)。
? -D, --delete chain rule-specification -D, --delete chain rulenum:在指定的鏈 chain 中刪除一個(gè)或多個(gè)指定規(guī)則。
? -R num:Replays替換/修改第幾條規(guī)則。
? -P, --policy chain target :為指定的鏈 chain 設(shè)置策略 target。注意,只有內(nèi)置的鏈才允許有策略,用戶自定義的是不允許的。
? -F, --flush [chain] 清空指定鏈 chain 上面的所有規(guī)則。如果沒有指定鏈,清空該表上所有鏈的所有規(guī)則。
? -N, --new-chain chain 用指定的名字創(chuàng)建一個(gè)新的鏈。
? -X, --delete-chain [chain] :刪除指定的鏈,這個(gè)鏈必須沒有被其它任何規(guī)則引用,而且這條上必須沒有任何規(guī)則。如果沒有指定鏈名,則會(huì)刪除該表中所有非內(nèi)置的鏈。
? -j, --jump target <指定目標(biāo)> :即滿足某條件時(shí)該執(zhí)行什么樣的動(dòng)作。target 可以是內(nèi)置的目標(biāo),比如 ACCEPT,也可以是用戶自定義的鏈。
實(shí)驗(yàn)一:搭建web服務(wù),設(shè)置任何人能夠通過80端口訪問。
iptables -I INPUT -p tcp --dport 80 -j ACCEPT iptables -L --line-numbersiptables -D INPUT 1#禁止某個(gè)IP訪問web服務(wù)器iptables -I INPUT -p tcp --dport 80 -s 192.168.19.1 -j REJECT測(cè)試:在Linux本機(jī)(測(cè)試的時(shí)候并未刪除之前書寫的規(guī)則)
在window下,在iptables中httpd服務(wù)是默認(rèn)可以通過得,在firewalld中httpd服務(wù)默認(rèn)不通過
實(shí)驗(yàn)二:禁止所有人ssh遠(yuǎn)程登錄該服務(wù)器
iptables -I INPUT -p tcp --dport 22 -j REJECT#刪除設(shè)置的拒絕ssh連接:iptables -D INPUT 1測(cè)試:在遠(yuǎn)程輸入指令之后,我們得終端馬上就掉線了
現(xiàn)在進(jìn)入虛擬機(jī)中查看相應(yīng)得防火墻規(guī)則
刪除剛剛寫的規(guī)則
再次嘗試遠(yuǎn)程連接,連接成功
實(shí)驗(yàn)三:禁止某個(gè)主機(jī)地址ssh遠(yuǎn)程登錄該服務(wù)器,允許該主機(jī)訪問服務(wù)器的web服務(wù)。服務(wù)器地址為192.168.19.1
#拒絕192.168.19.1通過ssh遠(yuǎn)程連接服務(wù)器:iptables -I INPUT -p tcp -s 192.168.19.1 --dport 22 -j REJECT#允許192.168.19.1訪問服務(wù)器的web服務(wù):iptables -I INPUT -p tcp -s 192.168.19.1 --dport 80 -j ACCEPTfirewalld
? iptables service 的操作首先對(duì)舊的防火墻規(guī)則進(jìn)行了清空,然后重新完整地加載所有新的防火墻規(guī)則,而如果配置了需要 reload 內(nèi)核模塊的話,過程背后還會(huì)包含卸載和重新加載內(nèi)核模塊的動(dòng)作,而不幸的是,這個(gè)動(dòng)作很可能對(duì)運(yùn)行中的系統(tǒng)產(chǎn)生額外的不良影響,特別是在網(wǎng)絡(luò)非常繁忙的系統(tǒng)中。
? 如果我們把這種哪怕只修改一條規(guī)則也要進(jìn)行所有規(guī)則的重新載入的模式稱為靜態(tài)防火墻的話,那么 firewalld 所提供的模式就可以叫做動(dòng)態(tài)防火墻,它的出現(xiàn)就是為了解決這一問題,任何規(guī)則的變更都不需要對(duì)整個(gè)防火墻規(guī)則列表進(jìn)行重新加載,只需要將變更部分保存并更新即可,它具備對(duì) IPv4 和 IPv6 防火墻設(shè)置的支持。
? 相比于傳統(tǒng)的防火墻管理工具,firewalld支持動(dòng)態(tài)更新技術(shù)并加入了區(qū)域的概念。區(qū)域就是firewalld預(yù)先準(zhǔn)備了幾套防火墻策略集合(策略模板),用戶可以選擇不同的集合,從而實(shí)現(xiàn)防火墻策略之間的快速切換。
firewalld中常見的區(qū)域名稱(默認(rèn)為public)以及相應(yīng)的策略規(guī)則:
| 阻塞區(qū)域 (block) | 拒絕流入的流量,除非與流出的流量相關(guān) |
| 工作區(qū)域(work) | 拒絕流入的流量,除非與流出的流量相關(guān) |
| 家庭區(qū)域(home) | 拒絕流入的流量,除非與流出的流量相關(guān) |
| 公共區(qū)域(public) | 不相信網(wǎng)絡(luò)上的任何計(jì)算機(jī),只有選擇接受傳入的網(wǎng)絡(luò)連接 |
| 隔離區(qū)域(DMZ) | 隔離區(qū)域也稱為非軍事區(qū)域,內(nèi)外網(wǎng)絡(luò)之間增加的一層網(wǎng)絡(luò),起到緩沖作用。對(duì)于隔離區(qū)域,只有選擇接受傳入的網(wǎng)絡(luò)連接。 |
| 信任區(qū)域(trusted) | 允許所有的數(shù)據(jù)包 |
| 丟棄區(qū)域(drop) | 拒絕流入的流量,除非與流出的流量相關(guān) |
| 內(nèi)部區(qū)域(internal) | 等同于home區(qū)域 |
| 外部區(qū)域(external) | 拒絕流入的流量,除非與流出的流量有關(guān);而如果流量與ssh服務(wù)相關(guān),則允許流量 |
? firewalld默認(rèn)提供的九個(gè)zone配置文件都保存在“/usr/lib/firewalld/zones/”目錄下,分別為:block.xml drop.xml home.xml public.xml work.xml dmz.xml external.xml internal.xml trusted.xml。
nm-shared.xml文件并不是firewalld自己提供的配置文件,是由NetworkManager提供的
? 在RHEL7中,firewalld服務(wù)是默認(rèn)的防火墻配置管理工具,他擁有基于CLI(命令行界面)和基于GUI(圖形用戶界面)的兩種管理方式。firewall-config和firewall-cmd是直接編輯xml文件,其中firewall-config是圖形化工具,firewall-cmd是命令行工具。
圖形化測(cè)試
yum -y install firewall-config firewall-configfirewall-cmd命令的參數(shù)說明如下:
| –get-default-zone | 查詢默認(rèn)的區(qū)域名稱 |
| –set-default-zone=<區(qū)域名稱> | 設(shè)置默認(rèn)的區(qū)域,使其永久生效 |
| –get-zones | 顯示可用的區(qū)域 |
| –get-services | 顯示預(yù)先定義的服務(wù) |
| –get-active-zones | 顯示當(dāng)前正在使用的區(qū)域與網(wǎng)卡名稱 |
| –add-source= | 將源自此IP或子網(wǎng)的流量導(dǎo)向指定的區(qū)域 |
| –remove-source= | 不再將源自此IP或子網(wǎng)的流量導(dǎo)向某個(gè)指定區(qū)域 |
| –add-interface=<網(wǎng)卡名稱> | 將源自該網(wǎng)卡的所有流量都導(dǎo)向某個(gè)指定區(qū)域 |
| –change-interface=<網(wǎng)卡名稱> | 將某個(gè)網(wǎng)卡與區(qū)域進(jìn)行關(guān)聯(lián) |
| –list-all | 顯示當(dāng)前區(qū)域的網(wǎng)卡配置參數(shù)、資源、端口以及服務(wù)等信息 |
| –list-all-zones | 顯示所有區(qū)域的網(wǎng)卡配置參數(shù)、資源、端口以及服務(wù)等信息 |
| –add-service=<服務(wù)名> | 設(shè)置默認(rèn)區(qū)域允許該服務(wù)的流量 |
| –add-port=<端口號(hào)/協(xié)議> | 設(shè)置默認(rèn)區(qū)域允許該端口的流量 |
| –remove-service=<服務(wù)名> | 設(shè)置默認(rèn)區(qū)域不再允許該服務(wù)的流量 |
| –remove-port=<端口號(hào)/協(xié)議> | 設(shè)置默認(rèn)區(qū)域不再允許該端口的流量 |
| –reload | 讓“永久生效”的配置規(guī)則立即生效,并覆蓋當(dāng)前的配置規(guī)則 |
| –panic-on | 開啟應(yīng)急狀況模式 |
| –panic-off | 關(guān)閉應(yīng)急狀況模式 |
示例:
firewall-cmd --version #查看版本firewall-cmd --help #查看幫助firewall-cmd --state #顯示狀態(tài)firewall-cmd --panic-on #啟用緊急模式,所有的規(guī)則出入都拒絕firewall-cmd --panic-off #關(guān)閉緊急模式firewall-cmd --query-panic #查詢緊急模式狀態(tài)firewall-cmd --get-zone-of-interface=ens160 # 根據(jù)接口查詢區(qū)域firewall-cmd --reload #重載查看才有該服務(wù) #使用firewalld配置的防火墻策略默認(rèn)為當(dāng)前生效,會(huì)隨著系統(tǒng)的重啟而失效。如果想讓策略一直存在, #就需要使用永久模式了,即在使用firewall-cmd命令設(shè)置防火墻策略時(shí)添加--permanent參數(shù),這樣配置的防火墻策略就可以永久生效了, #最后想要使用這種方式設(shè)置的策略生效,只能重啟或者輸入命令:firewall-cmd --reload。systemctl restart firewalld#任何人可以訪問該服務(wù)器的web服務(wù): firewall-cmd --add-port=80/tcp #或者 firewall-cmd --add-service=http #(臨時(shí)生效,重啟失效)#添加富規(guī)則firewall-cmd --permanent --add-service=ssh #先添加服務(wù),默認(rèn)已添加firewall-cmd --permanent --add-rich-rule 'rule family="ipv4" source address="172.24.8.0/24" service name="ssh" reject' #禁止172.24.8.0網(wǎng)段的地址進(jìn)行ssh訪問firewall-cmd --reload #重載之后當(dāng)前會(huì)話不會(huì)斷開,新連接的被拒絕firewall-cmd --permanent --remove-rich-rule='rule family="ipv4" source address="172.24.8.0/24" service name="ssh" reject' #刪除富規(guī)則 #端口轉(zhuǎn)發(fā) #配置端口轉(zhuǎn)發(fā)(在172.24.8.0網(wǎng)段的主機(jī)訪問該服務(wù)器的5423端口將被轉(zhuǎn)發(fā)到80端口) firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="172.24.8.0/24" forward-port port="5423" protocol="tcp" to-port="80"'#此規(guī)則將本機(jī)80端口轉(zhuǎn)發(fā)到192.168.1.1的8080端口上:firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080:toaddr=192.168.1.1 --permanent防火墻常用的指令:firewall-cmd --get-services #查看命令支持的服務(wù)firewall-cmd --list-all #查看所有的規(guī)則firewall-cmd --get-default-zone #查看當(dāng)前區(qū)域firewall-cmd --permanent --add-service=服務(wù)名 #添加區(qū)域默認(rèn)服務(wù)firewall-cmd --get-zones #查看所有支持的區(qū)域firewall-cmd --set-default-zone=trusted #設(shè)置trusted區(qū)域?yàn)楫?dāng)前區(qū)域samba服務(wù)對(duì)應(yīng)應(yīng)該在防火墻添加的服務(wù)為:samba
nfs服務(wù)對(duì)應(yīng)應(yīng)該在防火墻添加的服務(wù)為:nfs,rpc-bind,mountd
iscsi服務(wù)對(duì)應(yīng)應(yīng)該在防火墻添加的服務(wù)為:iscsi-target
ll-cmd --permanent --add-service=服務(wù)名 #添加區(qū)域默認(rèn)服務(wù)
firewall-cmd --get-zones #查看所有支持的區(qū)域
firewall-cmd --set-default-zone=trusted #設(shè)置trusted區(qū)域?yàn)楫?dāng)前區(qū)域
總結(jié)
- 上一篇: 新手请看:三菱PLC学习方法分享
- 下一篇: magics 24.0 安装教程 百度