一、防火墻
1、簡介
所謂“防火墻”是指一種將內部網和公眾訪問網(如Internet)分開的方法,它實際上是一種建立在現代通信網絡技術和信息安全技術基礎上的應用性安全技術,隔離技術。越來越多地應用于專用網絡與公用網絡的互聯環境之中,尤其以接入Internet網絡為最甚。
防火墻技術是通過有機結合各類用于安全管理與篩選的軟件和硬件設備,幫助計算機網絡于其內、外網之間構建一道相對隔絕的保護屏障,以保護用戶資料與信息安全性的一種技術。
防火墻技術的功能主要在于及時發現并處理計算機網絡運行時可能存在的安全風險、數據傳輸等問題,其中處理措施包括隔離與保護,同時可對計算機網絡安全當中的各項操作實施記錄與檢測,以確保計算機網絡運行的安全性,保障用戶資料與信息的完整性,為用戶提供更好、更安全的計算機網絡使用體驗。
2、功能
防火墻對流經它的網絡通信進行掃描,這樣能夠過濾掉一些攻擊,以免其在目標計算機上被執行。防火墻還可以關閉不使用的端口。而且它還能禁止特定端口的流出通信,封鎖特洛伊木馬。最后,它可以禁止來自特殊站點的訪問,從而防止來自不明入侵者的所有通信。
① 網絡安全的屏障
一個防火墻(作為阻塞點、控制點)能極大地提高一個內部網絡的安全性,并通過過濾不安全的服務而降低風險。由于只有經過精心選擇的應用協議才能通過防火墻,所以網絡環境變得更安全。如防火墻可以禁止諸如眾所周知的不安全的NFS協議進出受保護網絡,這樣外部的攻擊者就不可能利用這些脆弱的協議來攻擊內部網絡。防火墻同時可以保護網絡免受基于路由的攻擊,如IP選項中的源路由攻擊和ICMP重定向中的重定向路徑。防火墻應該可以拒絕所有以上類型攻擊的報文并通知防火墻管理員。
② 強化網絡安全策略
通過以防火墻為中心的安全方案配置,能將所有安全軟件(如口令、加密、身份認證、審計等)配置在防火墻上。與將網絡安全問題分散到各個主機上相比,防火墻的集中安全管理更經濟。例如在網絡訪問時,一次一密口令系統和其它的身份認證系統完全可以不必分散在各個主機上,而集中在防火墻一身上。
③ 監控審計
如果所有的訪問都經過防火墻,那么,防火墻就能記錄下這些訪問并作出日志記錄,同時也能提供網絡使用情況的統計數據。當發生可疑動作時,防火墻能進行適當的報警,并提供網絡是否受到監測和攻擊的詳細信息。另外,收集一個網絡的使用和誤用情況也是非常重要的。首先的理由是可以清楚防火墻是否能夠抵擋攻擊者的探測和攻擊,并且清楚防火墻的控制是否充足。而網絡使用統計對網絡需求分析和威脅分析等而言也是非常重要的。
④ 防止內部信息的外泄
通過利用防火墻對內部網絡的劃分,可實現內部網重點網段的隔離,從而限制了局部重點或敏感網絡安全問題對全局網絡造成的影響。再者,隱私是內部網絡非常關心的問題,一個內部網絡中不引人注意的細節可能包含了有關安全的線索而引起外部攻擊者的興趣,甚至因此而暴漏了內部網絡的某些安全漏洞。使用防火墻就可以隱蔽那些透漏內部細節如Finger,DNS等服務。Finger顯示了主機的所有用戶的注冊名、真名,最后登錄時間和使用shell類型等。但是Finger顯示的信息非常容易被攻擊者所獲悉。攻擊者可以知道一個系統使用的頻繁程度,這個系統是否有用戶正在連線上網,這個系統是否在被攻擊時引起注意等等。防火墻可以同樣阻塞有關內部網絡中的DNS信息,這樣一臺主機的域名和IP地址就不會被外界所了解。除了安全作用,防火墻還支持具有Internet服務性的企業內部網絡技術體系VPN(虛擬專用網)。
⑤ 日志記錄與事件通知
進出網絡的數據都必須經過防火墻,防火墻通過日志對其進行記錄,能提供網絡使用的詳細統計信息。當發生可疑事件時,防火墻更能根據機制進行報警和通知,提供網絡是否受到威脅的信息。
3、應用
1、內網中的防火墻技術
防火墻在內網中的設定位置是比較固定的,一般將其設置在服務器的入口處,通過對外部的訪問者進行控制,從而達到保護內部網絡的作用,而處于內部網絡的用戶,可以根據自己的需求明確權限規劃,使用戶可以訪問規劃內的路徑。總的來說,內網中的防火墻主要起到以下兩個作用:一是認證應用,內網中的多項行為具有遠程的特點,只有在約束的情況下,通過相關認證才能進行;二是記錄訪問記錄,避免自身的攻擊,形成安全策略。
2、外網中的防火墻技術
應用于外網中的防火墻,主要發揮其防范作用,外網在防火墻授權的情況下,才可以進入內網。針對外網布設防火墻時,必須保障全面性,促使外網的所有網絡活動均可在防火墻的監視下,如果外網出現非法入侵,防火墻則可主動拒絕為外網提供服務。基于防火墻的作用下,內網對于外網而言,處于完全封閉的狀態,外網無法解析到內網的任何信息。防火墻成為外網進入內網的唯一途徑,所以防火墻能夠詳細記錄外網活動,匯總成日志,防火墻通過分析日常日志,判斷外網行為是否具有攻擊特性。
二、Firewall問題被問了無數次!
1、簡述
centos 7中防火墻是一個非常的強大的功能,在CentOS 6.5中在iptables防火墻中進行了升級了。
動態防火墻守護程序firewalld提供動態管理的防火墻,支持網絡“區域”,以便為網絡及其關聯的連接和接口分配信任級別。它支持IPv4和IPv6防火墻設置。它支持以太網橋,并具有運行時和永久配置選項的分離。它還有一個服務或應用程序接口,可以直接添加防火墻規則。
2、區域
① 概念
由firewalld提供的區域按照從不信任到信任的順序排序;網絡區域定義了網絡連接的可信等級。這是一個一對多的關系,這意味著一次連接可以僅僅是一個區域的一部分,而一個區域可以用于很多連接。
② 區域的分類
- public
用于公共場所。您不相信網絡上的其他計算機不會損害您的計算機。僅接受選定的傳入連接。
- trusted
接受所有網絡連接。
- block
阻止傳入的網絡連接被拒絕,其中包含用于IPv4的icmp-host-prohibited消息和用于IPv6的icmp6-adm-prohibited。只能從系統內啟動網絡連接。
- drop
任何傳入的網絡數據包都被丟棄,沒有回復。只能進行傳出網絡連接。
- external
對偽裝的進入連接,一般用于路由轉發
3、firewall服務管理
[root@localhost ~]# systemctl status firewalld // 查看服務狀態
[root@localhost ~]# systemctl start firewalld // 啟動服務
[root@localhost ~]# systemctl stop firewalld //關閉服務
[root@localhost ~]# systemctl restart firewalld // 重新啟動服務
[root@localhost ~]# systemctl enable firewalld // 永久開啟服務
[root@localhost ~]# systemctl disable firewalld // 永久關閉服務
[root@localhost ~]# systemctl is-enabled firewalld // 查看服務是否開機自啟動
4、firewall-cmd
① firewall-cmd基礎命令
[root@localhost ~]# firewall-cmd --version // 查看版本
[root@localhost ~]# firewall-cmd --help // 查看幫助
[root@localhost ~]# firewall-cmd --state // 顯示狀態
[root@localhost ~]# firewall-cmd --zone=public --list-ports // 查看所有打開的端口
[root@localhost ~]# firewall-cmd --reload // 更新防火墻規則
[root@localhost ~]# firewall-cmd --get-active-zones // 查看區域信息
[root@localhost ~]# firewall-cmd --get-zone-of-interface=eth0 // 查看指定接口所屬區域
[root@localhost ~]# firewall-cmd --panic-on // 拒絕所有包
[root@localhost ~]# firewall-cmd --panic-off // 取消拒絕所有包
[root@localhost ~]# firewall-cmd --query-panic // 查看是否拒絕
② firewall-cmd配置管理
--permanent(--permanent永久生效,沒有此參數重啟后失效)
[root@localhost ~]# firewall-cmd --zone=block --list-all // 查看block策略
[root@localhost ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent // 永久開啟tcp的80端口
[root@localhost ~]# firewall-cmd --zone=public --remove-port=80/tcp --permanent // 永久刪除tcp的80端口
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-source=192.168.4.207/24 // 永久開啟此地址訪問本機
[root@localhost ~]# firewall-cmd --permanent --zone=block --add-source=192.168.4.207/24 // 永久拒絕此地址訪問本機
[root@localhost ~]# firewall-cmd --permanent --zone=public --add-service=http // public區域中添加允許策略,讓http協議可以通過
[root@localhost ~]# firewall-cmd --permanent --zone=public --remove-service=http // public區域中添加允許策略,拒絕http協議通過
③ firewall-cmd地址偽裝與端口轉發
--permanent(--permanent永久生效,沒有此參數重啟后失效)
[root@localhost ~]# firewall-cmd --list-all --zone=external // 查看網關服務器的external區域是否開啟了地址偽裝
masquerade: yes # 表示地址偽裝已啟用
[root@localhost ~]# firewall-cmd --zone=external --add-masquerade // 打開IP地址偽裝(打開端口轉發,首先需要打開IP地址偽裝)
[root@localhost ~]# firewall-cmd --zone=external --add-forward-port=22:porto=tcp:toaddr=192.168.1.100 // 轉發端口數據至另一個IP的相同端口
[root@localhost ~]# firewall-cmd --zone=external --add-forward-port=22:porto=tcp::toport=4283 :toaddr=192.168.1.100 // 轉發端口數據至另一個IP的 4283 端口
[root@localhost ~]# firewall-cmd --zone=external --add-forward-port=23:porto=tcp:toport=4283 // 轉發 tcp 23端口至 4283
三、原來Iptables應該這樣用!!!
我們知道iptables是按照規則來辦事的,我們就來說說規則(rules),規則其實就是網絡管理員預定義的條件,規則一般的定義為”如果數據包頭符合這樣的條件,就這樣處理這個數據包”。規則存儲在內核空間的信息包過濾表中,這些規則分別指定了源地址、目的地址、傳輸協議(如TCP、UDP、ICMP)和服務類型(如HTTP、FTP和SMTP)等。當數據包與規則匹配時,iptables就根據規則所定義的方法來處理這些數據包,如放行(accept)、拒絕(reject)和丟棄(drop)等。配置防火墻的主要工作就是添加、修改和刪除這些規則。
1、iptables簡述
iptables防火墻存在四張表:
① filter表:過濾表,想要允許或拒絕數據包通過,需要將對應規則寫入filter表中;
② nat表:地址轉換表,想要實現linux的路由轉發功能,需要在nat表中添加對應規則;
③ mangle表:包標記表,網絡中傳輸數據,發送的是數據包,每個數據包都有包頭信息,想要修改數
據包的包頭信息,需要將對應規則寫入到mangle表中;
④ raw表:狀態跟蹤表,跟蹤本機發送的數據包,想要知道哪些人第一次訪問本機,哪些人第二次訪問本機,那些人第三次訪問本機,需要將對應規則寫入到raw表中;
每張表存在著固定的鏈:
1、filter表:
INPUT // 存放進站流量規則;指入站流量,別人發給本機的數據包
OUTPUT // 存放出站流量規則;指出站流量,本機發給其他主機的數據包
FORWARD // 存放數據包轉發規則;軟路由,所有經過本機轉發的數據包會通過FORWARD
2、nat表:
PREROUTING // 路由前
POSTROUTING // 路由后
OUTPUT // 出站
3、mangle表:
PREROUTING // 路由前
POSTROUTING // 路由后
INPUT // 存放進站流量規則
OUTPUT // 存放出站流量規則
FORWARD // 存放數據包轉發規則
4、raw表:
PREROUTING // 路由前
OUTPUT // 出站
包過濾匹配流程
順序比對,匹配即停止(LOG除外);若無任何匹配,則按該鏈的默認策略處理
一個規則鏈中可以寫很多規則,防火墻匹配規則時:
1> 從上到下,順序匹配,匹配到規則就停止,不再匹配下面的規則;
2> LOG 屬于特殊操作,數據包進入防火墻,只會記錄到日志中,不做其他任何操作;
3> 防火墻在所有的規則中都沒有找到匹配的規則,則按照每張表的默認規則處理;
2、iptbales基礎
☆☆☆ 注意事項/整體規律:
① 可以不指定表,默認為?lter表
② 可以不指定鏈,默認為對應表的所有鏈
③ 如果沒有匹配的規則,則使用防火墻默認規則
④ 選項/鏈名/目標操作用大寫字母,其余都小寫
管理程序位置: /sbin/iptables
命令組成結構: iptables [-t 表名] 選項 [鏈名] [條件] [-j 目標操作]
基本的目標操作:
- ACCEPT:允許通過/放行
- DROP:直接丟棄,不給出任何回應
- REJECT:拒絕通過,必要時會給出提示
? 插入規則時,默認會將規則插入到鏈的最頂端
[root@localhost ~]# iptables -t filter -I INPUT -p icmp -j DROP // 插入防火墻規則,拒絕其他主機通過icmp協議ping本機,丟棄數據包
3、iptbales進階
-A: 在鏈的末尾追加一條規矩
-I:在鏈的開頭(或指定序號)插入一條規則
-L:列出所有的規則條目
-n:以數字形式顯示地址、端口等信息
--line-numbers:查看規則時,顯示規則的序號
-D:刪除鏈內指定序號(或內容)的一條規則
-F:清空所有的規則
-P:為指定的鏈設置默認規則
不指定表,則默認向filter表中插入規則
[root@localhost ~]# iptables -nL // #查看iptables防火墻規則,不會顯示每條規則的行號,不指定表默認查看的表是filter表
[root@node1 ~]# iptables -nL --line-numbers # 查看防火墻規則,顯示每條規則的行號
# -t 指定filter表;-A 指向INPUT鏈的最后一行追加一條規則;
# -p 指進入本機的數據包,是通過tcp協議進入的;-j 指對數據包的操作,ACCEPT 允許通過
[root@localhost ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT
# -I 將規則插入到INPUT鏈的最前面;
# -p 指定數據包通過的協議為udp協議;
# -j ACCEPT允許滿足條件的數據包通過
[root@localhost ~]# iptables -I INPUT -p udp -j ACCEPT
# 在filter表的INPUT鏈中的,第二條規則的前面插入一條規則
# 允許icmp協議的數據包進入本機
[root@localhost ~]# iptables -I INPUT 2 -p icmp -j ACCEPT
# 清除防火墻的filter表中,INPUT鏈中的第三條規則(清除其他特定的規則,修改鏈后的數字即可)
[root@localhost ~]# iptables -D INPUT 3
[root@localhost ~]# iptables -F // 清空filter過濾表中的防火墻規則,filter是默認表
[root@localhost ~]# iptables -t nat -F // 清空nat表中的所有規則,【地址轉換表】
[root@localhost ~]# iptables -t mangle -F // 清空mangle表中的所有規則,【包標記表】
[root@localhost ~]# iptables -t raw-F // 清空raw表中的所有規則,【狀態跟蹤表】
4、iptables高匹配條件
設置默認規則
- 所有鏈的初始默認規則均為ACCEPT
- 通過-P可以重置默認規則
匹配條件(需要取反條件時,用嘆號!)
通用匹配
- 可直接使用,不依賴于其他條件或擴展
- 包括網絡協議、IP地址、網絡接口等條件
協議匹配:-p 協議名
地址匹配:-s 源地址、-d 目的地址
接口地址:-i 收數據的網卡、-o 發數據的網卡
隱含匹配
- 要求以特定的協議匹配作為前提
- 包括端口、TCP標記、ICMP類型等條件
端口匹配:--sport 源端口、--dport 目標端口
ICMP類型匹配:--icmp-type ICMP類型
[root@localhost ~]# iptables -P FORWARD DROP // 將FORWARD的默認規則設置為DROP,丟棄所有數據包
#-s 當192.168.2.254的真機; -p 通過tcp協議;--dport 訪問本機的22端口;
#-j 防火墻允許訪問
#--dport 端口必須和協議組合起來使用,單獨使用報錯
#-p 協議可以單獨使用,也可以和端口組合起來使用
[root@localhost ~]# iptables -A INPUT -s 192.168.2.254 -p tcp --dport 22 -j ACCEPT
*********從進站的角度,設置規則,本機可以ping其他主機,其他主機不可以ping本機********
#插入一條規則:想要實現禁止其他所有主機通過icmp協議ping本機,但本機可以ping通其他主機
[root@localhost ~]# iptables -I INPUT -p icmp -j REJECT
#其他主機ping本機時,通過icmp協議,發送過來的請求 echo-request,直接丟棄
[root@localhost ~]# iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
#本機ping其他主機時,其他主機返回的數據包類型不是echo-request的,都接受
[root@localhost ~]# iptables -A INPUT -p icmp ! --icmp-type echo-request -j ACCEPT
#本機ping其他主機時,發送數據包的類型為 echo-request,防火墻通過,可以發送出去
[root@localhost ~]# iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
[root@localhost ~]# iptables -A OUTPUT -p icmp ! --icmp-type echo-request -j DROP