|NO.Z.00048|——————————|Applications|——|防火牆.V2|----------------------------------------------|3臺server|
阿新 • • 發佈:2022-03-22
[Applications:防火牆.V2] [Applications.LBC&HAC$HPC] [|安全防護|防火牆|SNAT轉換|DNAT轉換|iptables指令碼|firewalld修改為iptables|3臺server|]
一、實驗專題:新增規則,常規操作。
### --- 新增規則,常規操作。 ### --- 開啟防火牆並設定開機自啟動 [root@server11 ~]# service iptables start iptables: Applying firewall rules: [ OK ] [root@server11 ~]# chkconfig iptables on
### --- 檢視當前防火牆的規則 [root@server11 ~]# iptables -L // 預設檢視的就是filter表 [root@server11 ~]# iptables -t filter -L // 上面命令完整寫法 Chain INPUT (policy ACCEPT) // 預設規則有兩種:ACCEPT和DROP Chain FORWARD (policy ACCEPT) Chain OUTPUT (policy ACCEPT)
### --- 清空當前表的所有規則
[root@server11 ~]# iptables -F
### --- 新增一條規則
[root@server11 ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT
[root@server11 ~]# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT tcp -- anywhere anywhere [root@server11 ~]# iptables -L -n // -n以埠號的方式去展示 Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 // 0.0.0.0/0表示所有地址 [root@server11 ~]# iptables -L -n -v Chain INPUT (policy ACCEPT 3 packets, 234 bytes) pkts bytes target prot opt in out source destination 36 2396 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 ~~~ 36:這條規則過濾了多個數據包了 2396:過濾的位元組大小 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 ~~~ 加入-v就知道那條規則過濾的報文多了,過濾的報文多的規則可以把它放在前面。 ~~~ 在書寫規則的時候,把匹配較多的規則放在最上面。
### --- 新增一條-I選項的規則
[root@server11 ~]# iptables -t filter -I INPUT -p udp -j ACCEPT
[root@server11 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- anywhere anywhere // -I 預設是新增到規則的第一行
ACCEPT tcp -- anywhere anywhere
[root@server11 ~]# iptables -t filter -A INPUT -p ICMP -j ACCEPT
[root@server11 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- anywhere anywhere
ACCEPT tcp -- anywhere anywhere
ACCEPT icmp -- anywhere anywhere // -A預設新增到規則的最後一行
[root@server11 ~]# iptables -I INPUT 2 -p ICMP -j ACCEPT // -I可以指定規則第二列新增的列的,2表示規則的
[root@server11 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT udp -- anywhere anywhere
ACCEPT icmp -- anywhere anywhere // -I INPUT 2 :INPUT鏈的第二列
ACCEPT tcp -- anywhere anywhere
ACCEPT icmp -- anywhere anywhere
### --- 顯示規則列的序號
[root@server11 ~]# iptables -L --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT udp -- anywhere anywhere
2 ACCEPT icmp -- anywhere anywhere
3 ACCEPT tcp -- anywhere anywhere
4 ACCEPT icmp -- anywhere anywhere
### --- 刪除一條固定的規則
[root@server11 ~]# iptables -t filter -D INPUT 4 // 刪除第四條的ICMP規則
[root@server11 ~]# iptables -L --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT udp -- anywhere anywhere
2 ACCEPT icmp -- anywhere anywhere
3 ACCEPT tcp -- anywhere anywhere
### --- 刪除所有規則
[root@server11 ~]# iptables -F
[root@server11 ~]# iptables -t filter -F // 上面命令的完整寫入,實現結果一樣
### --- 放行Apache服務
[root@server11 ~]# service httpd start
[root@server11 ~]# echo "this is iptables output port 80 22" >>/var/www/html/index.html
[root@server11 ~]# curl localhost
this is iptables output port 80 22
[root@server11 ~]# iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT // 放行2埠
[root@server11 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
[root@server11 ~]# iptables -t filter -I INPUT -p tcp --dport 80 -j ACCEPT // 放心80埠,80比22埠的訪問量大,解除安裝最前面。加入-I
[root@server11 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:http
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh
[root@server11 ~]# iptables -P INPUT DROP // 預設規則設定為拒絕
[root@server11 ~]# iptables -L
Chain INPUT (policy DROP) // 其它全部拒絕
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:http // 放行80
ACCEPT tcp -- anywhere anywhere tcp dpt:ssh // 放行22
### --- 驗證:
~~~ 通過Chrome訪問http://10.10.10.11/可以正常訪問
~~~ 通過CMD視窗ping 10.10.10.11是ping不同的,ICMP不在預設規則裡,所以拒絕。
二、防火牆型別
### --- 匹配型別(它們三者難度是依次增加的)
~~~ 通用匹配
~~~ 可直接使用,不依賴於其他條件或擴充套件
~~~ 包括網路協議、IP地址、網路介面等條件
~~~ 隱含匹配
~~~ 要求以特定的協議匹配作為前提
~~~ 包括埠、TCP標記、ICMP型別等條件
~~~ 顯示匹配
~~~ 要求以“-m 擴充套件模組”的形式明確指出型別
~~~ 包括多埠、MAC地址、IP範圍、資料包狀態等條件
### --- 通用匹配
~~~ 常見的通用匹配條件
~~~ 協議匹配:-p 協議名
~~~ 地址匹配:-s 源地址、-d 目的地址
~~~ 介面匹配:-i 入站網絡卡、-o 出站網絡卡
### --- 通用匹配
iptables -A FORWARD -s 192.168.1.11 -j REJECT // 新增一條規則到FORWARD表的末尾源地址192.168.1.11的值;filter表做的過濾,FORWARD鏈做的是轉發,在源地址是192.168.1.11的時候在我這臺機器做轉發請求的時候REJECT拒絕。
iptables -I INPUT -s 10.20.30.0/24 -j DROP // 在filter表的INPUT鏈的最開頭新增一條規則,當入站源地址是10.20.30.0/24位的時候拒絕
iptables -I INPUT -p icmp -j DROP // 當入站請求時ICMP協議的時候拒絕
iptables -A FORWARD -p ! icmp -j ACCEPT // 感嘆號表示非:非ICMP協議。非ICMP拒絕,其他的都放行。
iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP // 當你的入站網絡卡是eth1並且源地址是172.16.0.0/12位的時候丟棄。
三、實驗專題:丟棄和拒絕的區別
### --- 實驗專題:丟棄和拒絕的區別
~~~ HA-server1:10.10.10.11:web伺服器
~~~ HA-server2:10.10.10.12:client
### --- HA-server1下啟動iptables
[root@server11 ~]# service iptables start
[root@server11 ~]# chkconfig iptables on
[root@server11 ~]# iptables -P INPUT ACCEPT // 預設規則還原
[root@server11 ~]# iptables -L
Chain INPUT (policy ACCEPT) // 預設規則放行
[root@server11 ~]# iptables -F // 清空防火牆
[root@server11 ~]# iptables -L
### --- 新增一條丟棄規則
[root@server11 ~]# iptables -A INPUT -p tcp --dport 80 -j DROP
[root@server11 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP tcp -- anywhere anywhere tcp dpt:http // DROP丟棄
### --- 驗證丟棄:client HA-srver2向HA-server1服務端發起請求
[root@server11 ~]# service httpd start
[root@server11 ~]# echo "this is the HA-serve1 IPtablwes DROP" >>/var/www/html/index.html
[root@server11 ~]# curl localhost
this is the HA-serve1 IPtablwes DROP
[root@server12 ~]# curl 10.10.10.11 // 執行不下去,client發起資料報文,它認為服務端已經接受到資料報文了,等待服務端迴應,但服務端把資料包丟棄了,所以沒有迴應,所以client等待到響應超時。
curl: (7) couldn't connect to host
[root@server11 ~]# iptables -F // 把規則清空
[root@server12 ~]# curl 10.10.10.11
this is the HA-serve1 IPtablwes DROP // 可以正常訪問了
### --- 驗證拒絕:
[root@server11 ~]# iptables -A INPUT -p tcp --dport 80 -j REJECT
[root@server11 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
REJECT tcp -- anywhere anywhere tcp dpt:http reject-with icmp-port-unreachable
[root@server12 ~]# curl 10.10.10.11 //立馬響應,不會等到響應超時才中斷,直接決絕,立馬反饋響應。
curl: (7) couldn't connect to host
### --- 問題一:什麼時候用拒絕,什麼時候用丟棄呢?
~~~ 答案:REJECT需要消耗一定的資源,比如web維護這種需要響應給客戶的資料使用拒絕,
~~~ 而資料庫的3306,這是一個非法入侵,直接丟棄。不需要回應,DROP不需要消耗CPU資源。
四、實驗專題:新增一條規則,ICMP的所有型別全部拒絕
### --- 實驗專題:新增一條規則,ICMP的所有型別全部拒絕
### --- 新增一條規則,ICMP的所有型別全部拒絕。
[root@server11 ~]# iptables -F
[root@server11 ~]# iptables -A INPUT -p icmp -j DROP // 把入站ICMP的ping放行,出站ACCEPT放行。
[root@server11 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP icmp -- anywhere anywhere
[root@server11 ~]# ping 10.10.10.12 // ping不通,資料報文從10.10.10.11發起請求,可以正常出去,預設策略是ACCEPT放行,並且10.10.10.12也會給迴應,但會的時候迴應的這個資料報文要進行入站,入站的時候發現ICMP是DROP是丟棄的,所以ping是不通的。
### --- 新增一條規則,我可以ping 其它主機,其它主機不可以ping我
[root@server11 ~]# iptables -F
[root@server11 ~]# iptables -A INPUT -p icmp -j DROP
[root@server11 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
DROP icmp -- anywhere anywhere // 這條規則表示,我去ping其它主機,還是其它主機ping該主機都是ping不通的。
[root@server11 ~]# iptables -I INPUT -p icmp --icmp-type 0 -j ACCEPT
[root@server11 ~]# iptables -I INPUT -p icmp --icmp-type 3 -j ACCEPT
[root@server11 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT icmp -- anywhere anywhere icmp destination-unreachable //3級別,主機不可達destination-unreachable
ACCEPT icmp -- anywhere anywhere icmp echo-reply //0級別,回顯,echo-reply
[root@server11 ~]# ping 10.10.10.12 // 本機可以ping其它主機
PING 10.10.10.12 (10.10.10.12) 56(84) bytes of data.
64 bytes from 10.10.10.12: icmp_seq=1 ttl=64 time=0.237 ms
[root@server12 ~]# ping 10.10.10.11 // 其它主機不可以ping本主機
PING 10.10.10.11 (10.10.10.11) 56(84) bytes of data.
五、顯示匹配
### --- 顯示匹配
### --- 常用的顯示匹配條件
### --- 多埠匹配:-m multiport --sport 源埠列表
~~~ -m multiport --dport 目的埠列表
~~~ IP範圍匹配:-m iprange -src-range IP範圍
~~~ MAC地址匹配:-m mac --mac1-source MAC地址
~~~ 狀態匹配:-m state --state 連線狀態
### --- 顯示匹配
~~~ iptables -A INPUT -p tcp -m multiport --dport 25.80.110.143 -j ACCEPT
~~~ iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j ACCEPT // --src-range:新增ip的範圍
~~~ iptables -A INPUT -m mac --mac-source 00:0c:29:c0:55:3f: -j DROP //-mac-source:新增Mac地址的方式新增對應的處理
~~~ iptables -P INPUT DROP
~~~ iptables -I INPUT -p tcp -m multiport --dport 80-82,85 -j ACCEPT
~~~ iptables -I INPUT -p tcp -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT // -m state:表示當前的狀態模組,--state NEW:指定當前的狀態是NEW新建連線,ESTABLISHED:有資料傳輸,RELATED:有相關連,
### --- 建議生產環境中使用。
### --- 案例一:搭建一個ftp服務供視訊下載,待定時間是2點鐘。但是2點鐘的時候有一個使用者下載到99%,還有1%未下載完成,
### --- 方案一:若是直接中斷,導致該使用者下載不完成,體驗不行。
### --- 方案二:若是直接供下載完成,那麼這個時間段會有新的連線進來,也達不到我們的目的
### --- 解決方案:新建一條規則:讓這個使用者下載完成,拒絕其他使用者的連線。
iptables -I INPUT -p tcp -m --dport 21 state --state NEW -j DROP // 新增一條規則在最開頭,當原地址並且這個埠是21號埠的時候,並且這個連線時新建連線的時候拒絕。這樣舊的連線不會斷,新連線會斷。
### --- 案例二:80埠 443埠 22埠;之前有連結的都放行
iptables -I INPUT -p tcp state --state ESTABLISHED -j ACCEPT
iptables -I INPUT -p tcp state --state ERLATED -j ACCEPT // 之前和80/443//22之前有連線的都放行。
### --- 顯示匹配
~~~ SANT策略的典型應用環境
~~~ 區域網主機共享單個公網IP地址介入INternet
~~~ SNAT策略的原理
~~~ 源地址轉換:Source Network Address Translation
~~~ 修改資料包的源地址
===============================END===============================
Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart ——W.S.Landor
來自為知筆記(Wiz)