1. 程式人生 > >linux系統中的防火牆(iptables與firewalld)——iptables

linux系統中的防火牆(iptables與firewalld)——iptables

iptables

關閉firewalld開啟iptables
在這裡插入圖片描述

相關概念

IPTABLES 是與最新的 3.5 版本 Linux 核心整合的 IP 資訊包過濾系統。如果 Linux 系統連線到因特網或 LAN、伺服器或連線 LAN 和因特網的代理伺服器, 則該系統有利於在 Linux 系統上更好地控制 IP 資訊包過濾和防火牆配置。
防火牆在做資料包過濾決定時,有一套遵循和組成的規則,這些規則儲存在專用的資料包過濾表中,而這些表整合在 Linux 核心中。在資料包過濾表中,規則被分組放在我們所謂的鏈(chain)中。而netfilter/iptables IP 資料包過濾系統是一款功能強大的工具,可用於新增、編輯和移除規則。
雖然 netfilter/iptables IP 資訊包過濾系統被稱為單個實體,但它實際上由兩個元件netfilter 和 iptables 組成。
netfilter 元件也稱為核心空間(kernelspace),是核心的一部分,由一些資訊包過濾表組成,這些表包含核心用來控制資訊包過濾處理的規則集。
iptables 元件是一種工具,也稱為使用者空間(userspace),它使插入、修改和除去資訊包過濾表中的規則變得容易。除非您正在使用 Red Hat Linux 7.1 或更高版本,否則需要下載該工具並安裝使用它。
與Linux核心各版本整合的防火牆歷史版本:
2.0.X核心:ipfwadm
2.2.X核心:ipchains
2.4.X核心:iptables

iptables的組成

三張表五條鏈
三張表:
防火牆策略一般分為兩種,一種叫“通”策略,一種叫“堵”策略,通策略,預設門是關著的,必須要定義誰能進。堵策略則是,大門是洞開的,但是你必須有身份認證,否則不能進。所以我們要定義,讓進來的進來,讓出去的出去,所以通,是要全通,而堵,則是要選擇。當我們定義的策略的時候,要分別定義多條功能,其中:定義資料包中允許或者不允許的策略,filter過濾的功能,而定義地址轉換的功能的則是nat選項。為了讓這些功能交替工作,我們制定出了“表”這個定義,來定義、區分各種不同的工作功能和處理方式。
我們現在用的比較多的表有3個:

表名 功能
filter 過濾規則表,根據預定義的規則過濾符合條件的資料包
nat 地址轉換規則表
mangle 修改資料標記位規則表

五條鏈:
鏈:資料從進入到流出的五個環節,相當於源端到目的端的五道門
五條鏈也稱為五個鉤子函式,分別是:

鏈名 位置
PREROUTING 報文進入本機的路由前的位置
INPUT 到達本機內部的報文的位置
FORWARD 由本機轉發的報文的位置
OUTPUT 由本機內部發出的報文的位置
POSTROUTING 報文路由後流出本機的位置

這是NetFilter規定的五個規則鏈,任何一個數據包,只要經過本機,必將經過這五個鏈中的其中一個鏈。
表與規則之間的關係:一個表中放的是一條條規則
規則與鏈之間的關係:一條規則只能作用在某個鏈上

表和鏈的對應關係

表名
filter INPUT, FORWARD, OUTPUT
nat PREROUTING(SNAT),POSTROUTING(DNAT),OUTPUT
mangle PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING

iptables相關管理命令

基礎命令

iptables -n(不做解析)L(不接受當前火牆策略) #######檢視iptables規則
在這裡插入圖片描述
iptables -F ######清除iptables規則
在這裡插入圖片描述
service iptables save ######儲存修改過的iptables規則
在這裡插入圖片描述

相關引數

iptables -A -I -n -F -P -D -R

-A 新增(新增到指定鏈的最後一行)
-I 新增(可以指定新增到鏈的哪一行)
-n 不解析
-F 清空iptables表的資訊
-P 設定iptables的預設型別(DROP ACCEPT)
-D 刪除鏈中的某列資訊   ###iptables -D INPUT 2 刪除INPUT表中的第二列資訊
-R 修改鏈中特定列的資訊

iptables相關實驗操作

只讓指定主機使用ssh連線本機

1:將指定主機新增進本機的iptables規則
iptables -A INPUT -p tcp --dport 22 -s 172.25.66.250 -j ACCEPT
在這裡插入圖片描述
2:將iptables預設型別設定為DROP

-P:設定預設策略的(設定預設門是關著的還是開著的)
預設策略一般只有兩種
iptables -P INPUT (DROP|ACCEPT):預設是關的/預設是開的

iptables -P INPUT DROP :這就把預設規則給拒絕了。並且沒有定義哪個動作,所以關於外界連線的所有規則包括Xshell連線之類的,遠端連線都被拒絕了。
在這裡插入圖片描述
現在,這臺主機已經拒絕除172.25.66.250主機外的所有主機的遠端訪問了,172.25.66.250主機也只能使用ssh訪問
用172.25.66.250主機連線本機(被允許,可以連線):
在這裡插入圖片描述
我們使用其他主機遠端訪問本機試試,用172.25.66.12主機:
在這裡插入圖片描述
無法連線

使允許過的服務或者正在連線的服務在下次連線時直接通過(速度快)

只要不是第一次允許的服務,在下一次連線時直接通過,不用進行驗證
1:清空表中資訊 -F
在這裡插入圖片描述
2:將已經連線過或者正在連線的服務的iptables策略設定為ACCEPT,即為這些服務開啟門
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
在這裡插入圖片描述
將從未連線過的服務新增進iptables的ACCEPT策略
iptables -A INPUT -m state --state NEW -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -m state --state NEW -p tcp --dport 443 -j ACCEPT
在這裡插入圖片描述
service iptables save
在這裡插入圖片描述
vim /etc/sysconfig/iptables
此檔案中就是剛剛新增的iptables規則
在這裡插入圖片描述

nat地址轉換

NAT地址轉換詳細原理可以參考:網路地址轉換NAT的原理及其作用
1:iptables -F
在這裡插入圖片描述
2:SNAT源地址轉換
nat閘道器將內網中客戶機發出的資料包中的私有IP轉換成對外的公有IP然後將資料包發給服務端
(一):將本機作為SNAT server
網絡卡eth0設定內部IP:172.25.66.11
網絡卡eth1設定外部IP:172.25.254.22
將server2主機作為區域網內的主機
網絡卡eth0設定IP:172.25.66.12
預設路由指向SNAT server的內部地址172.25.66.11
在這裡插入圖片描述
(二):在SNAT server中
iptables -t nat -A POSTROUTING -o 外網網絡卡 -s 內網網段 -j SNAT --to-source 外網IP
iptables -t nat -A POSTROUTING -o eth1 -s 172.25.66.0/24 -j SNAT --to-source 172.25.254.22
在這裡插入圖片描述
修改/etc/sysctl.conf net.ipv4.ip_forward = 1
sysctl -p
在這裡插入圖片描述
(三):在server2中用ssh連線一臺外網主機,然後在登陸上的外網主機中檢視登陸審計
在這裡插入圖片描述
如此,便實現了源地址轉換,使用區域網內主機server2(172.25.66.12)連線外網主機,server2經過SNAT server(172.25.66.11)後,SNAT server將server2的源地址轉換成了SNAT server中的外網IP,這樣就等於是將區域網內的地址保護了起來,所以在連線上的外網主機上登陸審計看到的是外網IP
3:DNAT目標地址轉換
(一):將本機作為DNAT server
網絡卡eth0設定內部IP:172.25.66.11
網絡卡eth1設定外部IP:172.25.254.22
將server2主機作為區域網內的主機
網絡卡eth0設定IP:172.25.66.12
現在要把外網訪問172.25.254.22的所有流量對映到172.25.66.12上
(二):iptables -F
iptables -F -t nat
在這裡插入圖片描述
(三):iptables -t nat -A PREROUTING -d 172.25.254.22 -j DNAT --to-dest 172.25.66.12
iptables -t nat -A POSTROUTING -d 172.25.66.12 -j SNAT --to-source 172.25.66.11
在這裡插入圖片描述
(四):我們用外網主機ssh連線DNAT server的外網IP172.25.254.22
在這裡插入圖片描述
可以看到,我們用外網主機連線DNAT server的外網IP,直接對映到了區域網內部主機server2上,這樣就完成的目標地址轉換