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