文章目錄
1. 火牆介紹
防火牆指的是一個由軟件和硬件設備組合而成、在內部網和外部網之間、專用網與公共網之間的邊界上構造的保護屏障.是一種獲取安全性方法的形象說法,它是一種計算機硬件和軟件的結合,使Internet與Intranet之間創建起一個安全網關(Security Gateway),從而保護內部網免受非法用戶的侵入,防火牆主要由服務訪問規則、驗證工具、包過濾和應用網關4個部分組成,防火牆就是一個位於計算機和它所鏈接的網絡之間的軟件或硬件。該計算機流入流出的全部網絡通訊和數據包均要通過此防火牆。node
1.1 iptables簡介
IPTABLES 是與最新的 3.5 版本 Linux 內核集成的 IP 信息包過濾系統。若是 Linux 系統鏈接到因特網或 LAN、服務器或鏈接 LAN 和因特網的代理服務器, 則該系統有利於在 Linux 系統上更好地控制 IP 信息包過濾和防火牆配置shell
iptables其實不是真正的防火牆,咱們能夠把它理解成一個客戶端代理,用戶經過iptables這個代理,將用戶的安全設定執行到對應的"安全框架"中,這個"安全框架"纔是真正的防火牆,這個框架的名字叫netfilter。netfilter纔是防火牆真正的安全框架(framework),netfilter位於內核空間。vim
iptables實際上是一個命令行工具,位於用戶空間,咱們用這個工具操做真正的框架。netfilter/iptables(下文中簡稱爲iptables)組成Linux平臺下的包過濾防火牆,與大多數的Linux軟件同樣,這個包過濾防火牆是免費的,它能夠代替昂貴的商業防火牆解決方案,完成封包過濾、封包重定向和網絡地址轉換(NAT)等功能。安全
Netfilter是Linux操做系統核心層內部的一個數據包處理模塊,它具備以下功能:服務器
- 網絡地址轉換(Network Address Translate)
- 數據包內容修改
- 以及數據包過濾的防火牆功能
2. 火牆管理工具切換
2.1 firewalld切換到iptables
- 關閉firewalld
systemctl disable --now firewalld.service systemctl mask firewalld.service
- 打開iptables
dnf install iptables-services.x86_64 -y systemctl unmask iptables.service systemctl enable --now iptables.service
2.2 iptables切換到firewalld
- 關閉iptables
systemctl disable --now iptables.service systemctl mask iptables.service
- 打開firewalld
dnf install firewalld -y #安裝firewalld(rhel8中默認已安裝) systemctl unmask firewalld.service systemctl enable --now firewalld.service
3. iptables的四表五鏈
每一個規則表,其實就至關於一個內核空間的容器,按照規則集的不一樣用途進行劃分爲默認的四個表,在每一個規則表中包含不一樣的規則鏈,處理數據包的不一樣時機分爲五種鏈,決定是否過濾或處理數據包的各類規則並按照前後順序存放在各規則鏈中。網絡
- 規則的做用:對數據包進行過濾或處理;
- 鏈的做用:容納多種防火牆規則;
規則表:iptables管理着四個不一樣的規則表,分別由獨立的內核模塊實現
框架
- filter 表:通過本機內核的數據,用來對數據包進行過濾,具體的規則要求決定如何處理一個數據包。對應的內核模塊爲:iptable_filter,其表內包括三個鏈:input、forward、output;
- nat 表:(network address translation,網絡地址轉換)不通過內核,主要用來修改數據包的 IP 地址、端口號信息。對應的內核模塊爲:iptable_nat,其表內包括三個鏈:prerouting、postrouting、output;
- mangle 表:當fileter和nat表不夠用時使用主要用來修改數據包的服務類型,生存週期,爲數據包設置標記,實現流量整形、策略路由等。對應的內核模塊爲:iptable_mangle,其表內包括五個鏈:prerouting、postrouting、input、output、forward;
- raw 表:主要用來決定是否對數據包進行狀態跟蹤。對應的內核模塊爲:iptable_raw,其表內包括兩個鏈:output、prerouting;
規則鏈
tcp
- input 鏈:輸入(當收到訪問防火牆本機地址的數據包時,將應用此鏈中的規則;)
- output 鏈:輸出(當防火牆本機向外發送數據包時,將應用此鏈中的規則;)
- forward 鏈:轉發(當收到須要經過防火中轉發給其餘地址的數據包時,將應用此鏈中的規則;)
- prerouting 鏈:路由以前(在對數據包作路由選擇以前,將應用此鏈中的規則;)
- postrouting 鏈:路由以後(在對數據包作路由選擇以後,將應用此鏈中的規則;)
數據包狀態
工具
RELATED | 創建過鏈接的 |
ESTABLISHED | 正在鏈接的 |
NEW | 新的 |
4. iptables的永久保存
iptables策略記錄文件:/etc/sysconfig/iptablespost
iptables-save > /etc/sysconfig/iptables service iptables save
5. iptables命令
iptables [ -t 表名 ] 管理選項 [ 鏈名 ] [ 條件匹配 ] [ -j 目標動做或跳轉 ]
注意事項:
1.不指定表名時,默認表示filter表,
2.不指定鏈名時,默認表示該表內全部鏈,除非設置規則鏈的缺省策略,不然須要指定匹配條件
鏈管理 | |||||
---|---|---|---|---|---|
-N | 增長鏈 | -X | 刪除鏈 | -E | 重命名鏈 |
規則管理 | |||
---|---|---|---|
-F | 清空規則 | -A | 增長策略 |
-D | 刪除規則 | -I | 插入規則 |
-R | 修改規則 | -P | 修改默認規則 |
基本命令 | |||
---|---|---|---|
-t | 指定表名稱 | -n | 不作解析 |
-L | 列出指定表的策略 | --dport | 目標端口 |
-s | 數據來源 | -p | 協議 |
-o | 輸出接口 | -i | 輸入接口 |
ACCEPT | 容許 | DROP | 丟棄 |
REJECT | 拒絕 | -SNAT | 源地址轉換 |
DNAT | 目的地地址轉換 | -j | 動做 |
6. 火牆優化部署
容許ESTABLISHED與RELATED狀態的數據鏈接: iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 容許迴環接口中NEW狀態的數據鏈接: iptables -A INPUT -i lo -m state --state NEW -j ACCEPT 容許狀態爲NEW的數據訪問80端口: iptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPT 容許172.25.254.10中狀態爲NEW的數據訪問22端口: iptables -A INPUT -s 172.25.254.10 -p tcp --dport 22 -m state --state NEW -j ACCEPT 其他訪問一律拒絕: iptables -A INPUT -j REJECT #最後必須保存 service iptables save
7. nat表中的SNAT(內網訪問外網)
實驗環境:
- 雙網卡主機(路由):192.168.43.101;1.1.1.101
- 單網卡主機(內網):1.1.1.111(網關設爲雙網卡 1 段IP)
- 單網卡主機(外網):192.168.43.121
7.1 路由器端
- 打開iptables服務
systemctl disable --now firewalld.service systemctl mask firewalld.service 上鎖 dnf install iptables-services.x86_64 -y systemctl enable --now iptables.service
iptables -F
:清空默認表(filter)- 檢查基本配置
sysctl -a | grep ip_forward vim /etc/sysctl.conf ===> net.ipv4.ip_forward = 1 #能夠ping sysctl -p
iptables -t nat -A POSTROUTING -o ens160 -j SNAT --to-source 192.168.43.101
:將內網訪問外網的經過此路由的IP轉換爲192.168.43.101service iptables save
:保存修改iptables -t nat -nL
:查看nat表
7.2 客戶端配置
內網主機
外網主機
7.3 客戶端測試
在內網主機(1.1.1.111)中訪問外網(192.168.43.121)
在外網主機(192.168.43.121)中查看登錄者,卻顯示路由器IP
8.nat表中的DNAT(外網訪問內網)
實驗環境:
- 雙網卡主機(路由):192.168.43.101;1.1.1.101
- 單網卡主機(內網):1.1.1.111(網關設爲雙網卡 1 段IP)
- 單網卡主機(外網):192.168.43.121
8.1 路由器端
-
iptables -t nat -A PREROUTING -i ens160 -j DNAT --to-dest 1.1.1.111
:將外網訪問內網的經過此路由的IP轉換爲1.1.1.111 -
service iptables save
:保存修改
8.2 客戶端配置
內網主機
外網主機
8.3 客戶端測試
在外網主機node3中登錄路由器node1,顯示登錄在node2上
在node2中查看登錄本身的主機,顯示是node3主機