Linux基础(iptables与firewalld防火墙)
iptables
在早期的Linux系統(tǒng)中,默認(rèn)使用的是iptables防火墻管理服務(wù)來配置防火墻。盡管新型的fierwalld防火墻管理服務(wù)已經(jīng)被投入使用多年,但是大量的企業(yè)在生產(chǎn)環(huán)境中依然出于各種原因而繼續(xù)使用iptables。
策略與規(guī)則鏈
防火墻會(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ù)包( PREROUTING);
?處理流入的數(shù)據(jù)包( INPUT );
?處理流出的數(shù)據(jù)包( OUTPUT );
?處理轉(zhuǎn)發(fā)的數(shù)據(jù)包( FORWARD );
?在進(jìn)行路由選擇后處理數(shù)據(jù)包( POSTROUTING )。
一般來說, 從內(nèi)網(wǎng)向外網(wǎng)發(fā)送的流量一般都是可控且良性的,因此我們使用最多的就是INPUT規(guī)則鏈,該規(guī)則鏈可以增大黑客人員從外網(wǎng)人侵內(nèi)網(wǎng)的難度。比如在您居住的社區(qū)內(nèi),物業(yè)管理公司有兩條規(guī)定:禁止小商小販進(jìn)入社區(qū);各種車輛在進(jìn)人社區(qū)時(shí)都要登記。顯而易見,這兩條規(guī)定應(yīng)該是用于社區(qū)的正門的(流量必須經(jīng)過的地方),而不是每家每戶的防盜門上。根據(jù)前面提到的防火墻策略的匹配順序,可能會(huì)存在多種情況。比如,來訪人員是小商小販,則直接會(huì)被物業(yè)公司的保安拒之門外,也就需再對車輛進(jìn)行登記。如果來訪人員乘坐輛汽車進(jìn)人社區(qū)正門,則“禁止小商小販進(jìn)人社區(qū)”的第一條規(guī)則就沒有被匹配到,因此按照順序匹配第二條策略, 即需要對車輛進(jìn)行登記。如果是社區(qū)居民要進(jìn)入正門,則這兩條規(guī)定都不會(huì)匹配到,因此會(huì)執(zhí)行默認(rèn)的放行策略。
但是,僅有策略規(guī)則還不能保證社區(qū)的安全,保安還應(yīng)該知道采用什么樣的動(dòng)作來處理這些匹配的流量,比如“允許”、“拒絕”、“登記”、“不理它”。
這些動(dòng)作對應(yīng)到iptables服務(wù)的術(shù)語中分別是ACCEPT(允許流量通過)、REJECT(拒絕流量通過)、LOG(記錄日志信息)、DROP (拒絕流量通過)。
“允許流量通過”和“記錄日志信息”都比較好理解,這里需要著重講解的是REJECT和DROP的不同點(diǎn)。
就DROP來說,它是直接將流量丟棄而且不響應(yīng);
REJECT則會(huì)在拒絕流量后再回復(fù)條“您的信息已經(jīng)收到, 但是被扔掉了”信息,從而讓流量發(fā)送方清晰地看到數(shù)據(jù)被拒絕的響應(yīng)信息。
iptables是一款基于命令行的防火墻策略工具,具有大量參數(shù),學(xué)習(xí)難度大。
不過大家無須深入了解眾多的理論概念,只需要掌握常用的參數(shù)并做到靈活搭配就好。
iptables命令可以根據(jù)流量的源地址、目的地址、傳輸協(xié)議、服務(wù)類型等信息進(jìn)行匹配,一旦匹配成功。iptables就會(huì)根據(jù)策略規(guī)則所預(yù)設(shè)的動(dòng)作來處理這些流量。另外,防火墻策略規(guī)則的匹配順序是從上至下的,因此要把控嚴(yán)格,優(yōu)先級越高的策略規(guī)則放在前面,以免發(fā)生錯(cuò)誤。
以下是iptables的參數(shù),無須死記硬背,慢慢使用理解
| 參數(shù) | 作用 |
| -P | 設(shè)置默認(rèn)策略 |
| -F | 清空規(guī)則鏈 |
| -L | 查看規(guī)則鏈 |
| -A | 在規(guī)則鏈的末尾加入新規(guī)則 |
| -I num | 在規(guī)則鏈的頭部加入新規(guī)則 |
| -D num | 刪除某一條規(guī)則 |
| -s | 匹配來源地址IP/MASK,加嘆號“!”表示除這個(gè)IP外 |
| -d | 匹配目標(biāo)地址 |
| -i 網(wǎng)卡名稱 | 匹配從這塊網(wǎng)卡流入的數(shù)據(jù) |
| -o 網(wǎng)卡名稱 | 匹配從這塊網(wǎng)卡流出的數(shù)據(jù) |
| -p | 匹配協(xié)議 |
| --dport num | 匹配目標(biāo)端口號 |
| --sport num | 匹配來源端口號 |
在iptables命令后加 -L 參數(shù)查看已有的防火墻規(guī)則鏈
在iptables命令后加 -F 參數(shù)清空已有的防火墻規(guī)則鏈
把INPUT規(guī)則鏈的默認(rèn)策略設(shè)置為拒絕
把INPUT規(guī)則鏈改為默認(rèn)策略設(shè)置
?前面提到,防火墻策略規(guī)則的設(shè)置有兩種:通 和 堵
當(dāng)把INPUT鏈設(shè)置為默認(rèn)拒絕后,就要在防火墻策略中寫入允許策略了,否則所有到來的流量都會(huì)被拒接掉。另外。需要注意的是,規(guī)則鏈的默認(rèn)拒絕動(dòng)作只能是DROP,而不是REJECT
向INPUT鏈中添加ICMP流量進(jìn)入的策略規(guī)則:
在日常運(yùn)維工作中,經(jīng)常會(huì)使用ping命令來檢查對方主機(jī)是否在線,而向防火墻的INPUT規(guī)則鏈中添加一條允許ICMP流量進(jìn)入的策略規(guī)則就默認(rèn)允許了這種ping命令檢測行為:
刪除INPUT規(guī)則鏈中剛剛加入的那條策略(允許ICMP流量),并把默認(rèn)策略設(shè)置為允許:
將INPUT規(guī)則鏈設(shè)置為只允許指定網(wǎng)段的主機(jī)訪問本機(jī)的22端口,拒絕來自其他所有主機(jī)的流量
?再次重申,防火墻策略規(guī)則是按照從上到下的順序匹配的,因此一定要把允許動(dòng)作放到拒絕動(dòng)作前面,否則所有的流量就將被拒絕掉,從而導(dǎo)致任何主機(jī)都無法訪問我們的服務(wù)。
另外,這里提到的22號端口是ssh服務(wù)使用的(有關(guān)ssh服務(wù),后續(xù)會(huì)介紹)
在設(shè)置完上述INPUT規(guī)則鏈之后,我們使用192.168.203.0/24網(wǎng)段內(nèi)主機(jī)訪問服務(wù)器的22端口,效果如下
?然后,我們再使用ip地址在192.168.20.0/24,網(wǎng)段內(nèi)的主機(jī)訪問服務(wù)器的22端口,效果如下
?向INPUT規(guī)則鏈中添加拒絕所有人訪問本機(jī)12345端口的策略規(guī)則:
向INPUT規(guī)則鏈中添加拒絕192.168.203.100主機(jī)訪問本機(jī)的80端口(Web服務(wù))的策略:
向INPUT規(guī)則鏈中添加拒絕所有主機(jī)訪問本機(jī)1000-1024端口的規(guī)則:
使用iptables命令配置的防火墻規(guī)則默認(rèn)會(huì)在下次重啟時(shí)失效,如果想讓配置的防火墻策略永久生效,還需要執(zhí)行保存命令:
firewalld
RHEL7系統(tǒng)中集成了多款防火墻管理工具,其中firewalld服務(wù)是默認(rèn)的防火墻配置管理工具,它擁有基于CLI(命令行界面)和基于GUI(圖形用戶界面)的兩種管理方式。
相較于傳統(tǒng)的防火墻管理配置工具,firewalld支持動(dòng)態(tài)更新技術(shù)并加入了區(qū)域(zone)的概念。
簡單來說,區(qū)域就是firewalld預(yù)先準(zhǔn)備了幾套防火墻策略集合(策略模板),用戶可以根據(jù)生產(chǎn)場景的不同而選擇合適的策略集合,從而實(shí)現(xiàn)防火墻策略之間的加速切換。
例如,有臺筆記本電腦,每天都要在辦公室,咖啡廳和家里使用,按照常理來說,這三者的安全性由高到低的順序排序,應(yīng)該是家庭,公司辦公室,咖啡廳。當(dāng)前,我們希望為這臺筆記本指定如下防火墻策略規(guī)則:
在家中允許訪問所有服務(wù);
在辦公室僅允許訪問文件共享服務(wù);
在咖啡廳僅允許上網(wǎng)瀏覽。
在以往,我們需要頻繁地手動(dòng)設(shè)置防火墻策略規(guī)則,而現(xiàn)在只需要預(yù)設(shè)好區(qū)域集合,然后只需輕點(diǎn)鼠標(biāo)可以自動(dòng)切換了,從而極大地提升了防火墻策略的應(yīng)用效率。
firewalld中常見的區(qū)域名稱(默認(rèn)為public)以及相應(yīng)的策略規(guī)則
如圖
| 區(qū)域 | 默認(rèn)策略規(guī)則 |
| trusted | 允許所有的數(shù)據(jù)包 |
| home | 拒絕流入的流量,除非與流出的流量相關(guān);而如果流量與ssh、mdns、ipp-client、dhcpv6-client、amba-client服務(wù)相關(guān),則允許流量 |
| internal | 等同于home區(qū)域 |
| work | 拒絕流入的流量,除非與流出的流量相關(guān);而如果流量與ssh、ipp-client、dhcpv6-client服務(wù)相關(guān),則允許流量 |
| public | 拒絕流入的流量,除非與流出的流量相關(guān);而如果流量與ssh、ipp-client服務(wù)相關(guān),則允許流量 |
| external | 拒絕流入的流量,除非與流出的流量相關(guān);而如果流量與ssh服務(wù)相關(guān),則允許流量 |
| dmz | 拒絕流入的流量,除非與流出的流量相關(guān);而如果流量與ssh服務(wù)相關(guān),則允許流量 |
| block | 拒絕流入的流量,除非與流出的流量相關(guān) |
| drop | 拒絕流入的流量,除非與流出的流量相關(guān) |
終端管理工具
firewall-cmd是firewalld防火墻配置管理工具的CLI(命令行界面)版本。它的參數(shù)一般都是以長格式來提供的。(Tab自動(dòng)補(bǔ)齊)
| 參數(shù) | 作用 |
| --get-default-zone | 查詢默認(rèn)的區(qū)域名稱 |
| --get-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=<端口號/協(xié)議> | 設(shè)置默認(rèn)區(qū)域允許該端口的流量 |
| --remove-service=<服務(wù)名> | 設(shè)置默認(rèn)區(qū)域不再允許該服務(wù)的流量 |
| --remove-port=<端口號/協(xié)議> | 設(shè)置默認(rèn)區(qū)域不再允許該端口的流量 |
| --reload | 讓“永久生效”的配置立即生效,并覆蓋當(dāng)前的配置規(guī)則 |
| --panic-on | 開啟應(yīng)急狀況模式 |
| --panic-off | 關(guān)閉應(yīng)急狀況模式 |
與Linux系統(tǒng)中其他的防火墻策略配置一樣,使用firewalld配置的防火墻策略默認(rèn)為運(yùn)行時(shí)(Runtime)模式,又稱為當(dāng)前生效模式,而且隨著系統(tǒng)的重啟會(huì)失效。如果想讓配置策略一直存在,就需要使用永久模式了。方法就是在用firewall-cmd命令正常設(shè)置防火墻策略時(shí)添加 --permanent 參數(shù),這樣配置的防火墻策略就可永久生效了。但是。永久生效有一個(gè)特點(diǎn),就是使用它設(shè)置的策略只有在系統(tǒng)重啟之后才能生效。如果想讓配置的策略立即生效,需要手動(dòng)執(zhí)行firewall-cmd --reload命令。
查看firewalld服務(wù)當(dāng)前所使用的區(qū)域
查看ens160網(wǎng)卡在firewalld服務(wù)中的區(qū)域
把firewalld服務(wù)中ens160網(wǎng)卡的默認(rèn)區(qū)域修改為external,并在系統(tǒng)重啟后生效。分別查看當(dāng)前永久模式下的區(qū)域名稱:
把firewalld服務(wù)的當(dāng)前默認(rèn)區(qū)域設(shè)置為public
啟動(dòng)/關(guān)閉firewalld防火墻服務(wù)的應(yīng)急狀況模式,阻斷一切網(wǎng)絡(luò)連接:
firewall-cmd --panic-on
firewall-cmd --panic-off
查詢public區(qū)域是否允許請求SSH和HTTPS協(xié)議流量:
?把firewalld服務(wù)中請求HTTPS協(xié)議的流量設(shè)置為永久允許,并立即生效:
? 把firewalld服務(wù)中請求HTTPS協(xié)議的流量設(shè)置為永久NO,并立即生效:
把在firewalld服務(wù)中訪問8080和8081端口的流量策略設(shè)置為允許,但僅限當(dāng)前生效:
把原本訪問本機(jī)888端口的流量轉(zhuǎn)發(fā)到22端口,要且求當(dāng)前和長期有效:
下一篇我們介紹圖形管理工具
總結(jié)
以上是生活随笔為你收集整理的Linux基础(iptables与firewalld防火墙)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: u盘找不到模块怎么修复 修复U盘模块丢失
- 下一篇: java w3c xml_org.w3c