一.實驗環境
單網卡主機(workstation只能連接內網)
170.25.254.22
雙網卡主機(rhel8一塊連接內網,一塊連接外網)
170.25.254.11
172.25.254.33
真機(foundation17)
172.25.254.17
單網卡主機查看
雙網卡主機查看
vim ifcfg-enp1s0
雙網卡主機中能與單網卡連接的ip
vim ifcfg-enp6s0
雙網卡主機中設置網關爲真機ip
二.火牆介紹
防火牆在做數據包過濾決定時,有一套遵循和組成的規則。
這些規則存儲在專用的數據包過濾表中,而這些表集成在 Linux 內核中。
在數據包過濾表中,規則被分組放在我們所謂的鏈(chain)中。
netfilter/iptables IP 數據包過濾系統是一款功能強大的工具,可用於添加、編輯和移除規則。
- netfilter
netfilter 組件也稱爲內核空間(kernelspace),是內核的一部分,由一些信息包過濾表組成,這些表包含內核用來控制信息包過濾處理的規則集。 - iptables
iptables 組件是一種工具,也稱爲用戶空間(userspace),它使插入、修改和除去信息包過濾表中的規則變得容易。對netfilter進行管理。 - iptables|firewalld
對iptables進行管理,一個是其本身的插件,另一個是firewalld
三.火牆管理工具切換
在rhel8中默認使用的是firewalld
1.firewalld----->iptables
【1】代碼
firewalld----->iptables
- dnf install iptables-services -y #搭建好yum倉庫後,安裝iptables
- systemctl stop firewalld
- systemctl disable firewalld
- systemctl mask firewalld
- systemctl enable --now iptables
【2】過程
rhel7以上版本可以不用安裝,此處是爲了方便給大家展示,所以我dnf安裝了一下
dnf install iptables-services.x86_64 -y
搭建好yum倉庫後,安裝iptables
- 關閉火牆
- 開啓iptables
2.iptales -------> fiewalld
【1】代碼
iptales -------> fiewalld
- systemctl stop iptables
- systemctl disable iptables
- systemctl mask iptables
- systemctl enable --now firewalld
【2】過程
- 關閉iptables
- 鎖定iptables並且解鎖火牆
- 開啓火牆
3. iptables 的使用
/etc/sysconfig/iptables
是 iptables 策略記錄文件
命令 | 作用 |
---|---|
iptales-save > /etc/sysconfig/iptables | 將策略存放在記錄文件中 |
service iptables save | 自動存放 |
1)臨時
iptables -F 刷掉策略(這是臨時的,在刷新掉後restart會重新出現)
2)永久保存策略
【1】iptales-save > /etc/sysconfig/iptables
保存當前策略
-F
後保存策略
- 查看
/etc/sysconfig/iptables
中的內容
- 備份iptables文件到/mnt中,-F後重啓服務發現不會恢復
將文件放回後再次重啓,此時策略信息恢復了
【2】service iptables save
自動存放
四.火牆默認策略
1.默認策略中的5條鏈
input | 輸入 |
---|---|
output | 輸出 |
forward | 轉發 |
postrouting | 路由之後 |
prerouting | 路由之前 |
2.默認的3張表
-
filter
經過本機內核的數據(input output forward) -
nat
不經過內核的數據(postrouting,prerouting,input,output) -
mangle
當filter和nat表不夠用時使用(input output forward postrouting, prerouting,)
3.iptables的常見命令
命令 | 作用 |
---|---|
-t | 指定表名稱 |
-n | 不做解析 |
-L | 查看 |
-A | 添加策略 |
-p | 協議 |
- -dport | 目的地端口 |
-s | 來源 |
-j | 動作 |
-N | 新建鏈 |
-E | 更改鏈名稱 |
-X | 刪除鏈 |
-D | 刪除規則 |
-I | 插入規則 |
-R | 更改規則 |
-P | 更改默認規則 |
補充:
-j 動作
ACCEPT ##允許
DROP ##丟棄
REJECT ##拒絕
SNAT ##源地址轉換
DNAT ##目的地地址轉換
練習:
- 指定表名稱,不加 -t 則表示默認使用filter,此處可以結合理解3個表存在的鏈
- 添加策略
- (對鏈進行操作)新建鏈+更改鏈名稱+刪除鏈
默認的鏈是不能刪除的
- -D刪除INPUT中的第二條規則
- -I 默認插入在最前面,但是也可以插入在指定行
- -R更改規則
- -P修改默認規則
注意:默認規則只能是ACCEPT或DROP,不能是REJECT
4.數據包狀態
最開始的訪問狀態是NEW,後續就是ESTABLISHED和RELATED了。此設定會優化我們的火牆數據包狀態,使我們的數據包更易通過火牆。
命令 | 作用 |
---|---|
RELATED | 建立過連接的 |
ESTABLISHED | 正在連接的 |
NEW | 新的 |
【1】代碼
[root@workstation ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #這兩種狀態的直接讓過
[root@workstation ~]# iptables -A INPUT -m state --state NEW -i lo -j ACCEPT
[root@workstation ~]# iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
[root@workstation ~]# iptables -A INPUT -m state --state NEW -s 170.25.254.11 -p tcp --dport 22 -j ACCEPT #不加!表示只有這個ip的可以來訪問,加上!表示只有此ip不可訪問
[root@workstation ~]# iptables -A INPUT -j REJECT
[root@workstation ~]# service iptables save #對我們的策略進行保存
【2】驗證
- 自己訪問自己是可以成功的,因爲走的是lo迴環接口
- 使用170.25.254.11也是可以訪問的,使用其他主機是不可以的
5.nat表中的dnat snat
- snat
iptables -t nat -A POSTROUTING -o ens160 -j SNAT --to-source 172.25.254.33
- dnat
iptables -t nat -A PREROUTING -i enp6s0 -j DNAT --to-dest 170.25.254.22
從enp6s0進來的所有數據都轉給170.25.254.11,即給enp6s0(172.25.254.33)的所有請求,都會發送到170.25.254.11。下面的練習就是真機連接雙網卡主機,但是最後的連接位置卻是單網卡主機
【1】snat練習:內網訪問外網,源地址轉換(要在POSTROUTING)
實驗預計目標:初始狀態下單網卡主機不能訪問外網,但是經過設定後,可以訪問。
設定內容:將單網卡(170)可以通過雙網卡轉換爲可上網的(172)
-
單網卡主機初始狀態
-
在單網卡中添加網關(所添加部分就是雙網卡中與其網段一致的ip)
nmcli connection ~
route -n查看網關
-
rhel8中內核路由功能是開啓的
-
此時
iptables -t nat -A POSTROUTING -o enp6s0 -j SNAT --to-source 172.25.254.33
添加規則,表示所有輸出都是以172.25.254.33輸出
-
此時單網卡主機能成功ping通外網與真機,單網卡170…通過雙網卡的轉換,能夠連接真機172…
使用ssh命令完成單網卡連接真機
【2】dnat練習:目的地地址轉換(要在PREROUTING)
iptables -t nat -A PREROUTING -i enp6s0 -j DNAT --to-dest 170.25.254.22
將所有從enp6s0連接的都轉到170.25.254.22
- 真機連接33,但是真正的連接位置是22。這就是做了目的地地址轉換!