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