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上,這樣就完成的目標地址轉換