??
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ???——?小?峰?編?程
目錄:
一、防火墻作用
二、防火墻分類
1、邏輯上劃分:大體分為?主機防火墻?和?網絡防火墻
2、物理上劃分:?硬件防火墻 和 軟件防火墻
三、硬件防火墻
?四、軟件防火墻
五、iptables
1、iptables的介紹
2、netfilter/iptables功能
3、iptables中鏈的概念
4、iptables中表的概念
5、iptables中表鏈之間的關系
6、iptables中表的優先級?
7、iptables基礎語法結構?
?8、顯式匹配使用選項及功能
9、iptables應用
設置服務開啟
設置開機自啟動
查看配置文件
保存規則
重載
基本配置
????????案例:白名單
????????案例:黑名單
????????案例:通過lo訪問本機數據
????????案例:允許連接態產生衍生態
iptables filter表應用案例
案例1:iptables標準流程
案例2:本機無法訪問本機例如:ping 127.0.0.1
案例3:本機無法訪問其它主機例如:ssh remote_host
案例4:FTP無法訪問
案例5:擴展匹配
案例6:擴展動作
案例7:轉發功能的實現
開啟路由轉發功能
實現轉發(重點)
六、firewalld
1、FireWalld中zone
概念及作用
FireWalld中zone分類
FireWalld文件
2、Firewalld語法
3、Firewall的狀態
4、FireWalld中動作
4.1、動作中查看操作
4.2、更改區域操作
4.3、新建規則,新建 --add
4.4、刪除規則,刪除 --remove
4.5、改變規則,改變 change
4.6、端口轉發
4.7、Rich規則
4.7.1、Rich規則幫助
4.7.2、Rich規則選項
4.7.3、Rich規則案例
一、防火墻作用
在計算機領域,防火墻是用于保護信息安全的設備,其會依照用戶定義的規則,允許或限制數據的傳輸。
- 用于保護內網安全的一種設備
- 依據規則進行防護
- 用戶定義規則
- 允許或拒絕外部用戶訪問
二、防火墻分類
1、邏輯上劃分:大體分為?主機防火墻?和?網絡防火墻
- 主機防火墻:針對于單個主機進行防護
- 網絡防火墻:針對網絡進行防護,處于網絡邊緣,防火墻背后是本地局域網,網絡防火墻主外(服務集體),主機防火墻主內(服務個人)
2、物理上劃分:?硬件防火墻 和 軟件防火墻
- 硬件防火墻:在硬件級別實現防火墻功能,另一部分基于軟件實現,其性能高,硬件成本高
- 軟件防火墻:應用軟件處理邏輯運行于通用硬件平臺之上的防火墻,其性能相較于硬件防火墻低,成本較低,對于Linux系統已自帶,直接使用即可。
補充:防火墻性能——吞吐量、并發連接、新建連接、時延、抖動、硬件防火墻
三、硬件防火墻
????????硬件防火墻是指把具備配置數據包通過規則的軟件嵌入硬件設備中,為網絡提供安全防護的硬件設備。多見于網絡邊緣。
?硬件防火墻作用:
過濾網絡流量:硬件防火墻可以監控網絡流量,根據預先設定的規則過濾流經防火墻的數據包,阻止惡意流量進入網絡。
防止未經授權的訪問:硬件防火墻可以設置訪問控制規則,限制網絡用戶對特定資源的訪問,防止未經授權的用戶進入網絡。
提高網絡安全性:硬件防火墻可以檢測和阻止網絡中的惡意軟件、病毒、木馬等惡意代碼,保護網絡和系統不受攻擊。
日志記錄和審計:硬件防火墻可以記錄網絡流量和安全事件的日志,方便網絡管理員進行安全審計和排查安全事件。
硬件防火墻品牌:Juniper、cisco 思科ASA、華為、天融信。
?四、軟件防火墻
單獨使用具備配置數據包通過規則的軟件來實現數據包過濾。多見于單主機系統或個人計算機。
- 擴展:Web應用防火墻(WAF)
Web應用防火墻是對web防護(網頁保護)的安全防護設備(軟件),主要用于截獲所有HTTP數據或僅僅滿足某些規則的會話。多見于云平臺中。
- 擴充:硬件防火墻與軟件防火墻比較
硬件防火墻有獨立的硬件設備,運算效率較高,價格略高,可為計算機網絡提供安全防護。
軟件防火墻必須部署在主機系統之上,相較于硬件防火墻運算效率低,在一定程度上會影響到主機系統性能,一般用于單機系統或個人計算機中,不直接用于計算機網絡中。
五、iptables
1、iptables的介紹
????????netfilter/iptables可簡稱為iptables,為Linux平臺下的包過濾防火墻,是開源的,內核自帶的,可以代替成本較高的企業級硬件防火墻。即使在如今的Linux操作系統中已經引入了firewalld,但是在企業中目前主流的還是應用的iptables比較多。
????????iptables工作依據------規則(rules),iptables是按照規則(rules)來辦事的,而規則就是運維人員所定義的條件;規則一般定義為 “ 如果數據包頭符合這樣的條件,就這樣處理這個數據包 ” 。規則存儲在內核空間的 數據包過濾表 中,這些規則分別指定了源地址、目的地址、傳輸協議(TCP、UDP、ICMP)?和?服務類型(HTTP、FTP)?等。當數據包與規則匹配時,iptables 就?根據規則所定義的方法來處理這些數據包,比如 放行(ACCEPT)、拒絕(REJECT)、丟棄(DROP) 等。配置防火墻 主要工作就是對iptables規則進行添加、修改、刪除等。
- iptables不是防火墻,是防火墻用戶代理。
- 用于把用戶的安全設置添加到“安全框架”中。
- “安全框架”是防火墻,即就是netfilter。netfilter位于內核空間中,是Linux操作系統核心層內部的一個數據包處理模塊。
- iptables是用于在用戶空間對內核空間的netfilter進行操作的命令行工具
2、netfilter/iptables功能
- 數據包過濾,即防火墻
- 數據包重定向,即轉發
- 網絡地址轉換,即可NAT
注:平常我們使用iptables并不是防火墻的“服務”,而服務是由內核提供的。
3、iptables中鏈的概念
舉例說明:
????????當客戶端訪問服務器端的web服務時,客戶端發送訪問請求報文至網卡,而tcp/ip協議棧是屬于內核的一部分,所以,客戶端的請求報文會通過內核的TCP協議傳輸到用戶空間的web服務,而客戶端報文的目標地址為web服務器所監聽的套接字(ip:port)上,當web服務器響應客戶端請求時,web服務所回應的響應報文的目標地址為客戶端地址,我們說過,netfilter才是真正的防火墻,屬于內核的一部分,所以,我們要想讓netfilter起到作用,我們就需要在內核中設置“關口”,所有進出的數據報文都要通過這些關口,經檢查,符合放行條件的準允放行,符合阻攔條件的則被阻止,于是就出現了input和output關口,然而在iptables中我們把關口叫做“鏈”。
? ? ? ?上面的舉例中,如果客戶端發到本機的報文中包含的服務器地址并不是本機,而是其他服務器,此時本機就應該能夠進行轉發,那么這個轉發就是本機內核所支持的IP_FORWARD功能,此時我們的主機類似于路由器功能,所以我們會看到在iptables中,所謂的關口并只有上面所提到的input及output這兩個,應該還有“路由前”,“轉發”,“路由后”,它們所對應的英文名稱分別為“PREROUTING”,“FORWARD”,“POSTROUTING”,這就是我們說到的5鏈。? ? ? 通過上圖可以看出,當我們在本地啟動了防火墻功能時,數據報文需要經過以上關口,根據各報文情況,各報文經過的“鏈”可能不同,如果報文目標地址是本機,則會經常input鏈發往本機用戶空間,如果報文目標不是本機,則會直接在內核空間中經常forward鏈和postrouting鏈轉發出去。
????????有的時候我們也經常聽到人們在稱呼input為“規則鏈”,這又是怎么回事呢?我們知道,防火墻的作用在于對經過的數據報文進行規則匹配,然后執行對應的“動作”,所以數據包經過這些關口時,必須匹配這個關口規則,但是關口規則可能不止一條,可能會有很多,當我們把眾多規則放在一個關口上時,所有的數據包經常都要進行匹配,那么就形成了一個要匹配的規則鏈條,因此我們也把“鏈”稱作“規則鏈”。
- INPUT:處理入站數據包。
- OUTPUT:處理出站數據包。
- FORWARD:處理轉發數據包(主要是將數據包轉發至本機其它網卡)當數據報文經過本機時,網卡接收數據報文至緩沖區,內核讀取報文ip首部,發現報文不是送到本機時(目的ip不是本機),由內核直接送到forward鏈做匹配,匹配之后若符合forward的規則,再經由postrouting送往下一跳或目的主機。
- PREROUTING:在進行路由選擇前處理數據包,修改到達防火墻數據包的目的IP地址,用于判斷目標主機。
- POSTROUTING:在進行路由選擇后處理數據包,修改要離開防火墻數據包的源IP地址,判斷經由哪一接口送往下一跳。
4、iptables中表的概念
????????每個“規則鏈”上都設置了一串規則,這樣的話,我們就可以把不同的“規則鏈”組合成能夠完成某一特定功能集合分類,而這個集合分類我們就稱為表,iptables中共有5張表,學習iptables需要搞明白每種表的作用。
- filter: 過濾功能,確定是否放行該數據包,屬于真正防火墻,內核模塊:iptables_filter
- nat: 網絡地址轉換功能,修改數據包中的源、目標IP地址或端口;內核模塊:iptable_nat
- mangle: 對數據包進行重新封裝功能,為數據包設置標記;內核模塊:iptable_mangle
- raw: 確定是否對數據包進行跟蹤;內核模塊:iptables_raw
- security:是否定義強制訪問控制規則;后加上的
5、iptables中表鏈之間的關系
我們在應用防火墻時是以表為操作入口的,只要在相應的表中的規則鏈上添加規則即可實現某一功能。那么我們就應該知道哪張表包括哪些規則鏈,然后在規則鏈上操作即可。
- filter表可以使用哪些鏈定義規則:INPUT,FORWARD,OUTPUT
- nat表中可以使用哪些鏈定義規則:PREROUTING,OUTPUT ,POSTROUTING,INPUT
- mangle 表中可以使用哪些鏈定義規則:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
- raw表中可以使用哪些鏈定義規則:PREROUTING,OUTPUT
- security?表可以使用哪些鏈定義規則:INPUT,FORWARD,OUTPUT
6、iptables中表的優先級?
security-raw-mangle-nat-filter(由高至低)
數據包流經iptables流程
7、iptables基礎語法結構?
- iptables規則匹配及動作
規則:根據指定的匹配條件來嘗試匹配每個流經此處的數據包,匹配成功,則由規則指定的處理動作進行處理。規則是由匹配條件和動作組成的,那么動作是什么呢?
舉例說明:
兩個同學,一個白頭發,一個黑頭發,同時進教室,而進教室的條件是只有黑頭發可以進入,白頭發拒絕進入,黑頭發和白頭發就是匹配條件,在這里可以進入和拒絕進入就是動作。
- iptables規則匹配條件分類
- 基本匹配條件:
源地址,目標地址,源端口,目標端口等
- 基本匹配使用選項及功能
????????基本匹配的特點:無需加載擴展模塊,匹配規則生效。
擴展匹配條件:
? ? ? ? ? ? ? ? *??擴展匹配又分為顯示匹配和隱式匹配。
? ? ? ? ? ? ? ? *??擴展匹配的特點是:需要加載擴展模塊,匹配規則方可生效。
????????????????顯示匹配的特點:必須使用?-m選項?指明要調用的擴展模塊的擴展機制以及需要手動加載擴展模塊。
????????????????隱式匹配的特點:使用-p選項指明協議時,無需再同時使用-m選項指明擴展模塊以及不需要手動加載擴展模塊。
????????????????隱式匹配選項及功能:
????????????????????????-p指定規則協議,tcp udp icmp all;
????????????????????????-s指定數據包的源地址,ip hostname;
????????????????????????-d指定目的地址;
????????????????????????-i 輸入接口;
????????????????????????-o輸出接口;
? ? ? ? ? ? ? ???????????! 取反。
- -p tcp
????????--sport 匹配報文源端口;可以給出多個端口,但只能是連續的端口范圍
????????--dport 匹配報文目標端口;可以給出多個端口,但只能是連續的端口范圍
????????--tcp-flags mask comp 匹配報文中的tcp協議的標志位
- -p udp
????????--sport 匹配報文源端口;可以給出多個端口,但只能是連續的端口范圍
????????--dport 匹配報文目標端口;可以給出多個端口,但只能是連續的端口范圍
- --icmp-type
????????0/0: echo reply 允許其他主機ping
????????8/0:echo request 允許ping其他主機
- iptables?? ?[-t 表名]? ??管理選項? ??[鏈名]? ? ? [條件匹配]? ??[-j 目標動作或跳轉]
????????不指定表名時,默認表示filter表,不指定鏈名時,默認表示該表內所有鏈,除非設置規則鏈的默認策略,否則需要指定匹配條件。
- iptables鏈管理方法?
????????????????-N, --new-chain chain:新建一個自定義的規則鏈;
????????????????-X, --delete-chain [chain]:刪除用戶自定義的引用計數為0的空鏈;
? ? ? ? ? ? ? ? -F, --flush [chain]:清空指定的規則鏈上的規則;
????????????????-E, --rename-chain old-chain new-chain:重命名鏈;????????????????-P, --policy chain target 制定鏈表的策略(ACCEPT|DROP|REJECT)
????????????????-Z, --zero [chain [rulenum]]:置零計數器;
???????????????????????注意:每個規則都有兩個計數器
????????????????????????????????packets:被本規則所匹配到的所有報文的個數;
????????????????????????????????bytes:被本規則所匹配到的所有報文的大小之和;
????????
- iptables規則管理
????????????????-A, --append chain rule-specification:追加新規則于指定鏈的尾部;
????????????????-I, --insert chain [rulenum] rule-specification:插入新規則于指定鏈的指定位置,默認為首部;
????????????????-R, --replace chain rulenum rule-specification:替換指定的規則為新的規則;
????????????????-D, --delete chain rulenum:根據規則編號刪除規則;
????????????????-D, --delete chain rule-specification:根據規則本身刪除規則;
- iptables規則顯示
????????????????-L, --list [chain]:列出規則;
????????????????-v, --verbose:詳細信息;
????????????????-vv 更詳細的信息
????????????????-n, --numeric:數字格式顯示主機地址和端口號;
????????????????-x, --exact:顯示計數器的精確值,而非圓整后的數據;
????????????????--line-numbers:列出規則時,顯示其在鏈上的相應的編號;
????????????????-S, --list-rules [chain]:顯示指定鏈的所有規則;
?8、顯式匹配使用選項及功能
- multiport 多端口
iptables -I INPUT -p tcp -m multiport --dports 22,80 -j ACCEPT #在INPUT鏈中開放本機tcp 22,tcp80端口
- iprange 多ip地址
iptables -A INPUT -p tcp --dport 23 -m iprange --src-range 192.168.2.11-192.168.2.21 -j ACCEPT
- time 指定訪問時間范圍
iptables -A INPUT -p tcp --dport 901 -m time --weekdays Mon,Tus,Wed,Thu,Fri --timestart 08:00:00 --time-stop 18:00:00 -j ACCEPT
- ?string 字符串,對報文中的應用層數據做字符串模式匹配檢測(通過算法實現)。
--algo {bm|kmp}:字符匹配查找時使用算法 --string "STRING": 要查找的字符串 --hex-string “HEX-STRING”: 要查找的字符,先編碼成16進制格式
- ?connlimit 連接限制,根據每個客戶端IP作并發連接數量限制。
--connlimit-upto n 連接數小于等于n時匹配 --connlimit-above n 連接數大于n時匹配
- limit 報文速率限制
limit模塊對"報文到達速率"進行限制,我們可以以秒為單位進行限制,也可以以分鐘、小時、天作 為單位進行限 制。 --limit限制比較有意思,主要用來限制單位時間內可以流入的數據包的數量
iptables -t filter -I INPUT -m limit --limit 10/min -j ACCEPT iptables -t filter -A INPUT -p icmp -j REJECT
- state 追蹤本機上的請求和響應之間的數據報文的狀態。狀態有五種:INVALID, ESTABLISHED, NEW, RELATED,UNTRACKED.
--state state NEW 新連接請求 ESTABLISHED 已建立的連接 INVALID 無法識別的連接 RELATED 相關聯的連接,當前連接是一個新請求,但附屬于某個已存在的連接 UNTRACKED 未追蹤的連接
iptables規則中動作,iptables規則中的動作常稱為target,也分為基本動作和擴展動作。
- ?ACCEPT:允許數據包通過
- DROP:直接丟棄數據包,不給任何回應信息
- REJECT:拒絕數據包通過,發送回應信息給客戶端
- SNAT:源地址轉換
? ? ? ? ? ? ? 1、 解釋1:數據包從網卡發送出去的時候,把數據包中的源地址部分替換為指定的IP,接收方認為數據包的來源是被替換的那個IP主機,返回響應時,也以被替換的IP地址進行。
? ? ? ? ? ? ? ?2、解釋2:修改數據包源地址,當內網數據包到達防火墻后,防火墻會使用外部地址替換掉數據包的源IP地址(目的IP地址不變),使網絡內部主機能夠與網絡外部主機通信。
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth1 -j SNAT --to-source 202.12.10.100
- MASQUERADE:偽裝,類似于SNAT,適用于動態的、臨時會變的ip地址上,例如:家庭使用的寬帶。用發送數據的網卡上的IP來替換源IP,對于IP地址不固定場合使用。
- DNAT:目標地址轉換
? ? ? ? ? ? ? ?1、?解釋1:數據包從網卡發出時,修改數據包中的目的IP,表現為你想訪問A,但因網關做了DNAT,把所有訪問A的數據包中的目的IP地址全部修改為B,實際最終訪問的是B。
? ? ? ? ? ? ? ?2、?解釋2:改變數據包目的地址,當防火墻收到來自外網的數據包后,會將該數據包的目的IP地址進行替換(源IP地址不變),重新轉發到內網的主機。
?iptables -t nat -A PREROUTING -d 202.12.10.100 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.1
? ?注:? ? ?路由是按照目的地址進行路由選擇的,因此,DNAT是在PREROUTING鏈上進行的,SNAT是在數據包發出的時候進行的,因此是在POSTROUTING鏈上進行的。
- REDIRECT:在本機做端口映射
- LOG:在/var/log/message文件中記錄日志信息,然后將數據包傳遞給下一條規則。
補充:
- 黑名單:沒有被拒絕的流量都可以通過,這種策略下管理員必須針對每一種新出現的攻擊,制定新的規則,因此不推薦。
- 白名單:沒有被允許的流量都要拒絕,這種策略比較保守,根據需要,主機主機逐漸開放,目前一般都采用白名單策略,推薦。
制定iptables規則思路
- 選擇一張表,此表決定了數據報文處理的方式
- 選擇一條鏈,此鏈決定了數據報文流經哪些位置
- 選擇合適的條件,此條件決定了對數據報文做何種條件匹配
- 選擇處理數據報文的動作,制定相應的防火墻規則
9、iptables應用
注:本文章中的環境 centos7
- iptables-services安裝
????????centos7系統中默認存在iptables命令,此命令僅為簡單查詢及操作命令,不包含配置文件,安裝iptables-services后,將直接生成配置文件,便于配置保存。包含ipv4及ipv6。
yum -y install iptables-services
設置服務開啟
systemctl start iptables.service
設置開機自啟動
systemctl enable iptables.services
查看配置文件
rpm -ql iptables-services
保存規則
方法一:service iptables save 方法二人:iptables-save > /etc/sysconfig/iptables
重載
iptables-restore < /etc/sysconfig/iptables
基本配置
iptables -F #刪除現有規則 iptables -P OUTPUT DROP #配置默認鏈策略
????????案例:白名單
iptables -t filter -F iptables -P INPUT DROP iptables -t filter -I INPUT -p tcp --dport=22 -j ACCEPT iptables -t filter -I INPUT -p tcp --dport=80 -j ACCEPT
????????案例:黑名單
iptables -P INPUT ACCEPT iptables -F iptables -t filter -A INPUT -s 192.168.2.20/24 -p tcp --dport 80 -j DROP
????????案例:通過lo訪問本機數據
iptables -I INPUT -d 127.0.0.1 -p tcp --dport=9000 -i lo -j ACCEPT iptables -I INPUT -i lo -j ACCEPT #允許通過本地回環網卡訪問本機
????????案例:允許連接態產生衍生態
iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables filter表應用案例
案例1:iptables標準流程
iptables -F iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -s 192.168.2.0/24 -j ACCEPT #允許內網任何訪問 iptables -A INPUT -p tcp --syn --dport 80 -j ACCEPT iptables -A INPUT -p tcp --syn --dport 22 -j ACCEPT iptables -A INPUT -p tcp --syn --dport 21 -j ACCEPT iptables -A INPUT -j REJECT modprobe nf_conntrack_ftp iptables-save > /etc/sysconfig/iptables vim /etc/sysconfig/iptables-configIPTABLES_MODULES="nf_conntrack_ftp"
案例2:本機無法訪問本機
例如:ping 127.0.0.1iptables -I INPUT -i lo -j ACCEPT
案例3:本機無法訪問其它主機
例如:ssh remote_hostiptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
案例4:FTP無法訪問
解決方法1: iptables -I INPUT -p tcp --dport 20:21 -j ACCEPT vim /etc/vsftpd/vsftpd.conf pasv_min_port=50000 pasv_max_port=60000 iptables -I INPUT -p tcp --dport 50000:60000 -j ACCEPT解決方法2:使用連接追蹤模塊 iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -I INPUT -p tcp --dport 20:21 -j ACCEPT modprobe nf_conntrack_ftp #臨時方法,添加連接追蹤模塊#永久方法 vim /etc/sysconfig/iptables-config IPTABLES_MODULES="nf_conntrack_ftp" #啟動服務時加載 #針對數據端口連接時,將三次握手第一次狀態由NEW識別為RELATED
案例5:擴展匹配
#-m icmp [root@localhost ~]# iptables -F [root@localhost ~]# iptables -t filter -I INPUT -p icmp -m icmp --icmp-type echo-reply -j ACCEPT #允許ping回應 [root@localhost ~]# iptables -A INPUT -j REJECT #-m iprange [root@localhost ~]# iptables -t filter -I INPUT -m iprange --src-range 192.168.2.10- 192.168.2.100 -j REJECT #-m multiport [root@localhost ~]# iptables -t filter -I INPUT -p tcp -m multiport --dports 20,21,22,25,80,110 -j ACCEPT #-m tos 根據ip協議頭部 type of service進行過濾 [root@localhost ~]# iptables -F [root@localhost ~]# tcpdump -i eth0 -nn port 22 -vvv #抓取遠程主機訪問本機的ssh數據包,觀察TOS值 #ssh: tos 0x0 0x10 #scp: tos 0x0 0x8 #rsync: tos 0x0 0x8 [root@localhost ~]# iptables -t filter -A INPUT -p tcp --dport 22 -m tos --tos 0x10 -j ACCEPT [root@localhost ~]# iptables -t filter -A INPUT -j REJECT #-m tcp 按TCP控制位進行匹配 Flags:SYN ACK FIN RST URG PSH ALL NONE [root@localhost ~]# iptables -t filter -A INPUT -p tcp -m tcp --tcp-flags SYN,ACK,FIN,RST SYN --dport 80 -j ACCEPT [root@localhost ~]# iptables -t filter -A INPUT -p tcp --syn --dport 80 -j ACCEPT #--tcp-flags SYN,ACK,FIN,RST SYN 檢查四個標記位,只有SYN標記位才匹配,即只允許三次握手中的第一次握手,等價于--syn #-m comment 對規則進行備注說明 [root@localhost ~]# iptables -A INPUT -s 192.168.2.250 -m comment --comment "cloud host" -j REJECT#-m mark 使用mangle表的標記方法,配合mangle表使用 [root@localhost ~]# iptables -t filter -A INPUT -m mark 2 -j REJECT
案例6:擴展動作
#-j LOG 記錄至日志中 [root@localhost ~]# grep 'kern.*' /etc/rsyslog.conf kern.* /var/log/kernel.log [root@localhost ~]# systemctl restart rsyslog [root@localhost ~]# iptables -j LOG -h [root@localhost ~]# iptables -t filter -A INPUT -p tcp --syn --dport 22 -j LOG --log-prefix " localhost_ssh " [root@localhost ~]# iptables -t filter -A INPUT -p tcp --syn --dport 22 -j ACCEPT [root@localhost ~]# iptables -t filter -A INPUT -j REJECT #-j REJECT 當訪問一個未開啟的TCP端口時,應該返回一個帶有RST標記的數據包 當訪問一個未開啟的UDP端口,結果返回port xxx unreachable 當訪問一個開啟的TCP端口,但被防火墻REJECT,結果返回port xxx unreachable [root@localhost ~]# iptables -j REJECT -h [root@localhost ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j REJECT --reject-with tcp-reset //返回一個自定義消息類型 #-j MARK 進行標記,可在LVS調度器中應用 [root@localhost ~]# iptables -t mangle -L [root@localhost ~]# iptables -j MARK -h #查看相關的幫助手冊 [root@localhost ~]# iptables -t mangle -A PREROUTING -s 192.168.2.110 -j MARK --set-mark 1 [root@localhost ~]# iptables -t mangle -A PREROUTING -s 192.168.2.25 -j MARK --set-mark 2 [root@localhost ~]# iptables -t filter -A INPUT -m mark --mark 1 -j ACCEPT //按照標記匹配 [root@localhost ~]# iptables -t filter -A INPUT -m mark --mark 2 -j REJECT
案例7:轉發功能的實現
開啟路由轉發功能
[root@localhost ~]# sysctl -a | grep ip_forward net.ipv4.ip_forward = 1 [root@localhost ~]# cat /proc/sys/net/ipv4/ip_forward 1 #以上為開啟 #以下為關閉 [root@localhost ~]# echo 0 > /proc/sys/net/ipv4/ip_forward [root@localhost ~]# cat /proc/sys/net/ipv4/ip_forward 0#開啟路由轉發功能 --永久 [root@localhost ~]# cat /etc/sysctl.conf # sysctl settings are defined through files in # /usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/. # # Vendors settings live in /usr/lib/sysctl.d/. # To override a whole file, create a new file with the same in # /etc/sysctl.d/ and put new settings there. To override # only specific settings, add a file with a lexically later # name in /etc/sysctl.d/ and put new settings there. # # For more information, see sysctl.conf(5) and sysctl.d(5). net.ipv4.ip_forward = 1
實現轉發(重點)
#實現地址的轉發(內部主機訪問到外部主機,僅主機模式的虛擬機訪問到外網) #注意:實現本功能之前除了nat模式的虛擬機需要開啟路由轉發的功能之外,僅主機模式的虛擬機還需要配置域名解析。 iptables -t nat -I POSTROUTING -s 10.1.1.8 -o ens33 -j SNAT --to-source 192.168.17.156 或 iptables -t nat -I POSTROUTING -s 10.1.1.8 -o ens33 -j MASQUERADE#實現本機端口的轉發 iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port=8080 iptables -t nat -I OUTPUT -p tcp --dport 8080 -j REDIRECT --to-port 80#實現跨主機的端口轉發(外網訪問內網服務器) iptables -t nat -I PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 10.1.1.8:80
六、firewalld
首先我們來介紹一下Firewalld是什么?
- FireWalld屬于動態防火墻,是CentOS7系統中用于對netfilter內核模塊用戶空間管理工具。(動態防火墻、用于管理netfilter用戶空間的工具、調用了iptables命令)
- FireWalld僅僅替代了iptables service部分,其底層還是使用iptables做為防火墻規則管理入口。
1、FireWalld中zone
-
概念及作用
區域(zone)是firewalld預先準備好的防火墻策略集合,即可策略模板,用于可以根據不同的應用場景進行切換。
例如: 你有一臺筆記本電腦,每天都要在公司辦公室、咖啡廳和家使用。 我們來對場所進行安全性由高到低排序:家、公司辦公室、咖啡廳。我們希望為這臺筆記本電腦指定如下防火墻策略規則: 在家中允許訪問所有服務; 在公司辦公室內僅允許訪問文件共享服務; 在咖啡廳僅允許上網瀏覽。 在以往,我們需要頻繁地手動設置防火墻策略規則,而現在只需要預設好區域集合, 隨時都可以自動切換了,從而極大地提升了防火墻策略的應用效率。
-
FireWalld中zone分類
FireWalld不同區域之間的差異主要是每個區域對待數據包的默認行為不同,Firewalld默認共9個zone,分別為:
block(拒絕)
dmz(非軍事化)
drop(丟棄)
external(外部)
home(家庭)
internal(內部)
public(公開) Firewalld默認區域
trusted(信任)
work(工作區)
-
FireWalld文件
Firewalld文件分為兩大類:
/usr/lib/firewalld/services :firewalld服務默認在此目錄下定義了70多種服務,可以直接使用。
/usr/lib/firewalld/zones :區域配置文件
/etc/firewalld/zones :默認區域配置文件,配置文件中指定了編寫完成的規則
firewalld文件作用 :人性化管理規則;通過服務組織端口分組更加高效,如果一個服務使用若干網絡端口,則服務的配置文件就相當于提供了到這些端口的規則管理的批量操作快捷方式。
2、Firewalld語法
命令語法結構:
firewall-cmd [--zone=zone] 動作 [--permanent]
????????如果不指定--zone選項,則為當前所在的默認區域,--permanent選項為是否將改動寫入到區域配置文件中。
3、Firewall的狀態
[root@localhost ~]# firewall-cmd --state
running
#查看狀態
或
[root@localhost ~]# systemctl status firewalld[root@localhost ~]# firewall-cmd --reload
success
#重新加載防火墻,中斷用戶連接,臨時配置清除掉,加載配置文件中的永久配置[root@localhost ~]# firewall-cmd --complete-reload
success
#重新加載防火墻,不中斷用戶的連接(防火墻出嚴重故障時使用)[root@localhost ~]# firewall-cmd --panic-on
#緊急模式,強制關閉所有網絡連接[root@localhost ~]# firewall-cmd --panic-off
#關閉禁用的網絡
4、FireWalld中動作
-
4.1、動作中查看操作
[root@localhost ~]# firewall-cmd xxx
--get-icmptypes ##查看支持的所有ICMP類型
--get-zones ##查看所有區域
--get-default-zone ##查看當前的默認區域
--get-active-zones ##查看當前正在使用的區域
--get-services ##查看當前區域支持的服務
--list-services ##查看當前區域開放的服務列表
--list-services --zone=home ##查看指定域開放的服務列表
--list-all ##查看默認區域內的所有配置,類似與iptables -L -n
--list-all-zones ##查看所有區域所有配置
-
4.2、更改區域操作
root@localhost ~]# firewall-cmd xxx
--set-default-zone=work ##更改默認的區域
-
4.3、新建規則,新建 --add
[root@localhost ~]# firewall-cmd xxx
--add-interface=eth0 ##將網絡接口添加到默認的區域內
--add-port=12222/tcp --permanent ##添加端口到區域開放列表中
--add-port=5000-10000/tcp --permanent ##將端口范圍添加到開放列表中;
--add-service=ftp --permanent ##添加服務到區域開放列表中(注意服務的名稱需要與此區域支持的服務列表中的名稱一致)
--add-source=192.168.1.1 ##添加源地址的流量到指定區域
--add-masquerade ##開啟SNAT(源地址轉換)
-
4.4、刪除規則,刪除 --remove
[root@localhost ~]# firewall-cmd xxx
--remove-service=http ##在home區域內將http服務刪除在開放列表中刪除
--remove-interface=eth0 ##將網絡接口在默認的區域內刪除
--remove-source=192.168.1.1 ##刪除源地址的流量到指定區域
-
4.5、改變規則,改變 change
[root@localhost ~]# firewall-cmd xxx
--change-interface=eth1 ##改變指定的接口到其他區域
-
4.6、端口轉發
端口轉發可以將指定地址訪問指定的端口時,將流量轉發至指定地址的指定端口。轉發的目的如果不指定ip的話就默認為本機,如果指定了ip卻沒指定端口,則默認使用來源端口。
#通過firewalld實現SNAT
[root@localhost ~]# firewall-cmd --add-masquerade --permanent
[root@localhost ~]# firewall-cmd --reload
# 將80端口的流量轉發至8080
#firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080
# 將80端口的流量轉發至
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.2.20
#刪除
[root@localhost ~]#firewall-cmd --remove-forward port=port=80:proto=tcp:toaddr=192.168.2.20 --permanent
# 將80端口的流量轉發至192.168.2.20的8080端口
firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.2.20:toport=8080
如果配置好端口轉發之后不能用,可以檢查下面兩個問題:
- 比如將80端口轉發至8080端口,首先檢查本地的80端口和目標的8080端口是否開放監聽了
- 其次檢查是否允許偽裝IP,沒允許的話要開啟偽裝IP
-
4.7、Rich規則
當基本firewalld語法規則不能滿足配置要求時,可以使用rich規則來完成更加復雜的功能。
-
4.7.1、Rich規則幫助
root@localhost ~]# man 5 firewalld.richlanguage1
-
4.7.2、Rich規則選項
--add-rich-rule=’rule’ ##新建rich規則
--remove-rich-rule=’rule’ ##刪除rich規則
--query-rich-rule=’rule’ ##查看單條rich規則
--list-rich-rules ##查看rich規則列表
-
4.7.3、Rich規則案例
拒絕某一主機訪問
[root@localhost ~]#firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.2.20/32 reject'
[root@localhost ~]# firewall-cmd --reload
拋棄icmp協議所有數據包
[root@localhost ~]#firewall-cmd --permanent --add-rich-rule='rule protocol value=icmp drop'
success
[root@localhost ~]# firewall-cmd --reload
success
#刪除
[root@localhost ~]#firewall-cmd --permanent --remove-rich-rule='rule protocol value=icmp drop'
允許某一網段一段端口通過
[root@localhost ~]#firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.2.0/24 port port=7900-7905 protocol=tcp accept'
success
開啟SNAT
[root@localhost ~]#firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 masquerade'
端口轉發
[root@localhost ~]# firewall-cmd --add-masquerade --permanent
[root@localhost ~]#firewall-cmd --add-rich-rule='rule family=ipv4 forward-port port=8080 protocol=tcp to-port=80 to-addr=192.168.17.6'
[root@localhost ~]# firewall-cmd --reload
?本? ?篇? ?完? ?結? ?…? …
持? ? ?續? ? ?更? ? ?新? ? ?中???…? ? …?