該系列文章只是本人的學習筆記,文章中的文字描述提取自《Linux鳥哥私房菜》《Linux運維之道》等書中的重點內容,化繁為簡能夠在工作中快速復習掌握重點,並不代表個人立場,但轉載請加出處,並注明參考文獻。
防火牆指的是一個由軟件和硬件設備組合而成、在內部網和外部網之間、專用網與公共網之間的邊界上構造的保護屏障.是一種獲取安全性方法的形象說法,它是一種計算機硬件和軟件的結合,使Internet與Intranet之間建立起一個安全網關(Security Gateway),從而保護內部網免受非法用戶的侵入,防火牆主要由服務訪問規則、驗證工具、包過濾和應用網關4個部分組成,防火牆就是一個位於計算機和它所連接的網絡之間的軟件或硬件.該計算機流入流出的所有網絡通信和數據包均要經過此防火牆,實際上防火牆是一種隔離技術,防火牆是在兩個網絡通訊時執行的一種訪問控制尺度,它能允許你"同意"的人和數據進入你的網絡,同時將你"不同意"的人和數據拒之門外,最大限度地阻止網絡中的黑客來訪問你的網絡.
Iptables防火牆
Iptables的前身叫ipfirewall,這是一個作者從FreeBSD上移植過來的,能夠工作在內核當中的,對數據包進行檢測的一款簡易訪問控制工具.但是ipfirewall工作功能極其有限(它需要將所有的規則都放進內核當中,這樣規則才能夠運行起來,而放進內核,這個做法一般是極其困難的).當內核發展到2.x系列的時候,軟件更名為ipchains,它可以定義多條規則,將他們串起來,共同發揮作用,而現在,它叫做iptables,可以將規則組成一個列表,實現絕對詳細的訪問控制功能.
IPTABLES是與 3.5 版本 Linux 內核集成的 IP 信息包過濾系統,如果 Linux 系統連接到因特網或 LAN、服務器或連接 LAN 和因特網的代理服務器,則該系統有利於在 Linux 系統上更好地控制 IP 信息包過濾和防火牆配置.
網絡安全設備的分類:
基礎類防火牆:通過數據包過濾加固服務器
IDS類防火牆:入侵檢測系統,沒有防護能力,僅僅提供事后日志的報告
IPS類防火牆:入侵防御系統
主動安全類防火牆:waf和daf
雲盾:相當於代理服務器,有大量帶寬,和性能,普通攻擊無效
關於常見的DDOS攻擊:
SYN攻擊:發起最小syn包,通過頻繁發送大量數據包,導致CPU消耗殆盡
CC攻擊:請求大量請求,通過http協議發起大量正常連接,導致內存消耗殆盡
長連接攻擊:通過http1.1協議,建立正常通信,一點一點的發送請求,導致網絡帶寬消耗殆盡
UDP攻擊:DNS攻擊,向DNS一直發送解析請求,導致癱瘓
死亡Ping:把你的外網帶寬占滿,正常主機就無法訪問
QPS:代表每秒攻擊數
防火牆的安裝位置:
工作在主機邊緣處或工作在網絡邊緣處,根據自定義規則或者默認規則對數據報文操作的組件
如果路由器性能比防火牆好,應把路由器放在前面(讓路由器抗壓)
如果防火牆性能比路由器好,應把防火牆放在前面(讓交換機抗壓)
如果裝在主機與交換機之間,可以隔離內網,但一般不這樣配置,不方便
◆替換默認防火牆◆
在早期的Linux系統中,默認使用的是Iptables防火牆管理服務來配置防火牆,盡管新型的防火牆已經投入使用多年,但是大量的企業生產環境中,依然出於各種原因繼續使用Iptables,下面我們將手動關閉系統中的Firewall防火牆,而安裝Iptables防火牆.
1.在替換之前我們要先將firewalld防火牆關閉,並設置開機禁止啟動
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
[root@localhost ~]# systemctl status firewalld
2.通過Yum倉庫安裝,Iptables防火牆管理工具
[root@localhost ~]# yum install -y iptables iptables-services
Loaded plugins: product-id, search-disabled-repos, subscription-manager
This system is not registered with an entitlement server. You can use subscription-manager.
Package iptables-1.4.21-24.el7.x86_64 already installed and latest version
Package iptables-services-1.4.21-24.el7.x86_64 already installed and latest version
Nothing to do
3.啟動Iptables並設置成開機自啟動.
[root@localhost ~]# systemctl restart iptables
[root@localhost ~]# systemctl enable iptables
[root@localhost ~]# systemctl status iptables
◆配置防火牆實例◆
此處在配置規則的時候,要注意防火牆規則順序是按照,從上到下的規則匹配的,因此一定要把允許動作放在拒絕動作前面,否則所有流量就被拒絕掉了,從而導致任何主機都無法訪問我們的服務.
Iptable常用參數說明:
[root@localhost ~]# iptables --help
Commands:
-P #設置默認策略
-F #清空策略
-L #查看規則鏈
-A #在規則鏈末尾加入新規則
-I num #在規則鏈頭部加入新規則
-D num #刪除一個規則
-s #匹配來源地址IP/MASK,加!表示除這個IP外
-d #匹配目標地址
-i 網卡名稱 #匹配從這塊網卡流入的數據
-o 網卡名稱 #匹配從這塊網卡流出的數據
-p #匹配協議,如TCP,UDP,ICMP
--dport num #匹配目標端口
--sport num #匹配來源端口
[添加配置]
-A #在規則鏈末尾加入新規則
-I num #在規則鏈頭部加入新規則
[查看配置]
-L #列出所有規則項目
-n #以數字形式顯示地址,端口等信息
-v #詳細信息顯示
--line-numbers #查看規則時,顯示規則序號
[刪除清空]
-D num #刪除一個規則
-F #清空策略
-P #設置默認策略
[協議匹配]
-p 協議名 #匹配協議,如TCP,UDP,ICMP
-s 源地址 #匹配來源地址IP/MASK,加!表示除這個IP外
-d 目標地址 #匹配目標地址
-i 入站網卡 #匹配從這塊網卡流入的數據
-o 出站網卡 #匹配從這塊網卡流出的數據
[隱含匹配]
--dport 目的端口 #匹配目標端口號
--sport 源端口號 #匹配源端口號
--tcp-flags 檢查范圍 #tcp標記匹配
--icmp-type ICMP類型 #icmp類型匹配
查詢規則: 使用 -L -n --line-numbers
參數查看防火牆默認配置規則.
[root@localhost ~]# iptables -L -n --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
3 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
5 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
1 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
清空規則: 使用 -F
參數暫時清空防火牆規則,需要注意的是暫時清空后下次登陸后依舊會恢復回來.
[root@localhost ~]# iptables -F
[root@localhost ~]# iptables -L -n --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
設置默認拒絕: 設置默認拒絕規則,把 INPUT
鏈設置為默認拒絕,也就是拒絕所有連接請求.
[root@localhost ~]# iptables -P INPUT DROP
[root@localhost ~]# iptables -L -n --line-numbers
Chain INPUT (policy DROP) #這里可以看出INPUT鏈已變成DROP
num target prot opt source destination
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
開啟ICMP: 在默認規則拒絕的情況下,設置開啟ICMP測試,允許主機ping通.
[root@localhost ~]# iptables -I INPUT -p icmp -j ACCEPT
[root@localhost ~]# iptables -L -n --line-numbers
Chain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
允許SSH連接: 在默認拒絕的情況下,設置開啟22號端口,允許遠程ssh連接到本機.
[root@localhost ~]# iptables -I INPUT -p tcp --dport 22 -j ACCEPT
[root@localhost ~]# iptables -I OUTPUT -p tcp --sport 22 -j ACCEPT
[root@localhost ~]# iptables -L -n --line-numbers
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:22
規則的刪除: 在默認拒絕的情況下,刪除INPUT鏈,第2條數據,刪除ICMP規則.
[root@localhost ~]# iptables -L -n --line-numbers
Chain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:22
[root@localhost ~]# iptables -D INPUT 2
[root@localhost ~]# iptables -L -n --line-numbers
Chain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:22
指定允許網段: 在默認拒絕的情況下,設置只允許192.168.1.0/24
網段的主機訪問本機的22號端口.
[root@localhost ~]# iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
[root@localhost ~]# iptables -I OUTPUT -s 192.168.1.0/24 -p tcp --sport 22 -j ACCEPT
[root@localhost ~]# iptables -L -n --line-numbers
Chain INPUT (policy DROP)
num target prot opt source destination
1 ACCEPT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp dpt:22
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp spt:22
拒絕指定端口: 在INPUT規則鏈中,添加拒絕所有人訪問本機的8888號端口.
[root@localhost ~]# iptables -I INPUT -p tcp --dport 8888 -j REJECT
[root@localhost ~]# iptables -L -n --line-numbers
Chain INPUT (policy DROP)
num target prot opt source destination
1 REJECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8888 reject-with icmp-port-unreachable
2 ACCEPT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp dpt:22
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp spt:22
拒絕指定端口: 在INPUT規則鏈中,添加拒絕192.168.1.20
主機訪問本機的80端口.
[root@localhost ~]# iptables -I INPUT -p tcp -s 192.168.1.20 --dport 80 -j REJECT
[root@localhost ~]# iptables -L -n --line-numbers
Chain INPUT (policy DROP)
num target prot opt source destination
1 REJECT tcp -- 192.168.1.20 0.0.0.0/0 tcp dpt:80 reject-with icmp-port-unreachable
2 REJECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8888 reject-with icmp-port-unreachable
3 ACCEPT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp dpt:22
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp spt:22
拒絕端口范圍: 在INPUT規則鏈中,添加拒絕所有主機訪問本機1000-2000端口.
[root@localhost ~]# iptables -A INPUT -p tcp --dport 1000:2000 -j REJECT
[root@localhost ~]# iptables -A INPUT -p udp --dport 1000:2000 -j REJECT
[root@localhost ~]# iptables -L -n --line-numbers
Chain INPUT (policy DROP)
num target prot opt source destination
1 REJECT tcp -- 192.168.1.20 0.0.0.0/0 tcp dpt:80 reject-with icmp-port-unreachable
2 REJECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8888 reject-with icmp-port-unreachable
3 ACCEPT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp dpt:22
4 REJECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpts:1000:2000 reject-with icmp-port-unreachable
5 REJECT udp -- 0.0.0.0/0 0.0.0.0/0 udp dpts:1000:2000 reject-with icmp-port-unreachable
Chain FORWARD (policy ACCEPT)
num target prot opt source destination
Chain OUTPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- 192.168.1.0/24 0.0.0.0/0 tcp spt:22
SNAT-源地址轉換<內網-->公網>: 從本地發出的數據包,經過SNAT后,會自動偽裝成公網的IP,並以公網IP訪問指定服務.
#例:將本地 192.168.1.1 的請求自動偽裝成外網地址 8.8.8.8
[root@localhost ~]# iptables -t nat -A POSTROUTING -o ens32 -s 192.168.1.1 -j SNAT --to-source 8.8.8.8
-o #指定外網接口,此處為ens32
-s #指定內網口地址,此處為192.168.1.1
--to-source #外網口的地址
DNAT-目標地址轉換<公網-->內網>: 從公網接收的數據包,經過DNAT后,會自動將數據包轉到指定的內網主機.
#例:將請求 8.8.8.8 且端口為 80 的數據包,自動映射到內網 192.168.1.1
[root@localhost ~]# iptables -t nat -A PREROUTING -i ens32 -d 8.8.8.8 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.1
--to-destination #內網口地址,此處為192.168.1.1
-i #綁定外網接口,此處為ens32
-d #外網地址,此處為8.8.8.8
-dport #內網端口,此處為80
其他常用總結: 下面是幾個生產常用小總結,這些基礎很重要,必須要掌握.
iptables -L -n --line-number #查看默認規則
iptables -F #清空當前的規則
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT #放行80端口
iptables -t filter -I INPUT -p tcp --dport 443-j ACCEPT #插入在頂端一條放行443端口的規則
iptables -t filter -I INPUT 2 -p tcp --dport 443 -j ACCEPT #在第二列插入一條443放行規則
iptables -t filter -A INPUT -p tcp --dport 80 -j DROP #丟棄80端口的請求
iptables -I INPUT 2 -p icmp -j DROP #丟棄ICMP請求
iptables -t filter -D INPUT 3 #刪除第三條規則
iptables -t filter -P INPUT DROP #設置默認規則,拒絕所有
iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT #放行80口
iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT #放行22口
iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT #放行22口
iptables -A FORWARD -s 192.168.1.10 -j REJECT #拒接IP的轉發請求
iptables -I INPUT -s 10.20.30.0/24 -j DROP #丟棄IP網段的入站請求
iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP
iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
ables -I INPUT -p tcp -m multiport --dport 80-82,85 -j ACCEPT
iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.10-192.168.1.100 -j ACCEPT
/sbin/iptables-save #保存規則
配置生產規則: 以下一段腳本,用來配置生產環境中最基本的防火牆規則.
#===================================================================
# 刪除已有規則
iptables --delete-chain
iptables --flush
# 禁止進,允許出,允許回環網卡
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
#===================================================================
# 允許已建立的或相關連接的通行
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
#===================================================================
# 限制80端口單個IP的最大連接數為10
iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j DROP
# 允許80(HTTP)/873(RSYNC)/443(HTTPS)/20,21(FTP)/25(SMTP)端口的連接
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 873 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT
#===================================================================
# 允許SSH端口的連接,腳本自動偵測目前的SSH端口,否則默認為22端口
# 獲取SSH端口
if grep "^Port" /etc/ssh/sshd_config>/dev/null;then
sshdport=`grep "^Port" /etc/ssh/sshd_config | sed "s/Port\s//g" `
else
sshdport=22
fi
# 放行SSH端口
iptables -A INPUT -p tcp -m tcp --dport $sshdport -j ACCEPT
iptables -A OUTPUT -p tcp -m tcp --dport $sshdport -j ACCEPT
#===================================================================
# 允許ping
iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT
#===================================================================
# 放行允許DNS解析端口.
# 獲取DNS服務器IP
if [ -s /etc/resolv.conf ]
then
DNS1=`cat /etc/resolv.conf |grep nameserver |awk 'NR==1{print $2 }'`
DNS2=`cat /etc/resolv.conf |grep nameserver |awk 'NR==2{print $2 }'`
fi
# 放行允許DNS解析端口.
[ ! -z "$DNS1" ] && iptables -A OUTPUT -p udp -m udp -d $DNS1 --dport 53 -j ACCEPT
[ ! -z "$DNS2" ] && iptables -A OUTPUT -p udp -m udp -d $DNS2 --dport 53 -j ACCEPT
#===================================================================
# 保存規則
iptables-save
#===================================================================
firewall 防火牆
在Centos7系統中默認集成了許多防火牆,其中firewalld服務是默認的防火牆工具,它擁有基於CLI和基於GUI的兩種工作方式,相比於iptables防火牆firewall支持動態更新的技術並且加入的區域(zone)相關的概念.簡單來說,區域就是firewall預先准備了幾套防火牆策略的集合,從而實現防火牆之間策列的快速切換技術,從而極大地提升了防火牆的快速切換應用效率.
firewalld跟iptables比起來的兩大優勢:
1.firewalld可以動態修改單條規則,而不需要像iptables那樣,在修改了規則后必須得全部刷新才可以生效.
2.firewalld在使用上要比iptables人性化很多,即使不明白"5表5鏈",而且對TCP/IP協議也不理解也可以實現大部分功能.
3.firewalld自身並不具備防火牆的功能,而是和iptables一樣需要通過內核的netfilter來實現,也就是說firewalld和iptables一樣,他們的作用都是用於維護規則,而真正使用規則干活的是內核的netfilter,只不過firewalld和iptables的結構以及使用方法不一樣罷了.
firewall的常用區域說明:
區域 | 默認策略規則 |
---|---|
trusted | 允許所有數據包 |
home | 拒絕流入流量,但是與ssh,mdns,ipp-client,dhcpv6-client服務則允許通過 |
internal | 等同於home區域 |
work | 拒絕流入流量,但是與ssh,ipp-client,dhcpv6-client服務則允許通過 |
public | 拒絕流入流量,但是與ssh,ipp-client,dhcpv6-client服務則允許通過 |
external | 拒絕流入流量,但是與ssh服務相關則允許通過 |
dmz | 拒絕流入流量,但是與ssh服務相關則允許通過 |
block | 拒絕流入流量,除非與流出的流量相關 |
drop | 拒絕流入流量,除非與流出的流量相關 |
◆常用命令說明◆
狀態顯示相關:
[root@localhost ~]# firewall-cmd --version #顯示版本
[root@localhost ~]# firewall-cmd --state #顯示運行狀態
[root@localhost ~]# firewall-cmd --get-zones #顯示所有zone區域
[root@localhost ~]# firewall-cmd --get-active-zones #顯示當前使用的區域
[root@localhost ~]# firewall-cmd --get-default-zone #顯示默認使用的區域
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens32 #查看ens32網口的區域
[root@localhost ~]# firewall-cmd --zone=public --list-ports #顯示public區域所有開放的端口
常用配置相關:
[root@localhost ~]# firewall-cmd --panic-on #拒絕所有包
[root@localhost ~]# firewall-cmd --panic-off #取消拒絕狀態
[root@localhost ~]# firewall-cmd --query-panic #查看是否拒絕
查詢服務相關:
[root@localhost ~]# firewall-cmd --get-services #顯示服務列表
[root@localhost ~]# firewall-cmd --list-service #查詢當前放行服務
[root@localhost ~]# firewall-cmd --reload #重新加載防火牆
[root@localhost ~]# firewall-cmd --add-service=nfs #臨時允許nfs服務通過
[root@localhost ~]# firewall-cmd --add-service=nfs --permanent #永久允許nfs服務通過
端口管理相關:
[root@localhost ~]# firewall-cmd --add-port=443/tcp #臨時開啟443端口
[root@localhost ~]# firewall-cmd --add-port=3306/tcp --permanent #永久開啟3306端口
[root@localhost ~]# firewall-cmd --remove-port=443/tcp #刪除443端口
[root@localhost ~]# firewall-cmd --list-all #顯示所有端口列表
[root@localhost ~]# firewall-cmd --add-service=mysql #開放mysql端口
[root@localhost ~]# firewall-cmd --remove-service=http #阻止http端口
[root@localhost ~]# firewall-cmd --list-services #查看開放的服務
[root@localhost ~]# firewall-cmd --add-port=3306/tcp #開放通過tcp訪問3306
[root@localhost ~]# firewall-cmd --remove-port=80/tcp #阻止通過tcp訪問3306
[root@localhost ~]# firewall-cmd --add-port=233/udp #開放通過udp訪問233
[root@localhost ~]# firewall-cmd --list-ports #查看開放的端口
端口轉發:
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 #將80端口的流量轉發至8080
firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.1.1.1 #將80端口的流量轉發至192.168.1.1
firewall-cmd --add-forward-port=proto=80:proto=tcp:toaddr=192.168.1.1:toport=8080 #將80端口的流量轉發至192.168.1.1的8080
◆幾個小例子◆
區域查詢: 查詢firewall服務當前所使用的區域.
[root@localhost ~]# firewall-cmd --get-default-zone
public
特定區域查詢: 查看ens32網卡的所在區域信息.
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens32
public
修改默認區域: 修改ens32的public區域到external區域,並永久生效.
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens32
public
[root@localhost ~]# firewall-cmd --zone=external --change-interface=ens32
[root@localhost ~]# firewall-cmd --zone=external --change-interface=ens32 --permanent
success
[root@localhost ~]# firewall-cmd --get-zone-of-interface=ens32
external
設置默認區域: 把當前服務的默認區域設置為external.
[root@localhost ~]# firewall-cmd --get-default-zone
public
[root@localhost ~]# firewall-cmd --set-default-zone=external
success
[root@localhost ~]# firewall-cmd --get-default-zone
external
請求查詢: 查詢public區域是否允許請求SSH和HTTPS協議的流量.
[root@localhost ~]# firewall-cmd --zone=public --query-service=ssh
yes
[root@localhost ~]# firewall-cmd --zone=public --query-service=https
no
允許請求設置: 把public區域的https請求,永久允許通過.
[root@localhost ~]# firewall-cmd --zone=public --add-service=https
success
[root@localhost ~]# firewall-cmd --zone=public --add-service=https --permanent
success
拒絕請求設置: 把public區域的https請求,設置為永久拒絕.
[root@localhost ~]# firewall-cmd --zone=public --remove-service=https
success
[root@localhost ~]# firewall-cmd --zone=public --remove-service=https --permanent
success
放行端口: 臨時放行8080端口,和8081端口.
[root@localhost ~]# firewall-cmd --zone=public --add-port=8080-8081/tcp
success
[root@localhost ~]# firewall-cmd --zone=public --list-ports
8080-8081/tcp
端口轉發: 在192.168.1.0/24
網絡中的系統,訪問本地端口5423
將被轉發到本地的80
端口.
[root@localhost ~]# firewall-cmd --add-rich-rule 'rule family=ipv4 source address=192.168.1.0/24 forward-port port=5423 protocol=tcp to-port=80' --permanent
放行端口: 另一種放行方法放行本地的3260端口.
[root@localhost ~]# firewall-cmd --add-rich-rule 'rule family=ipv4 source address=192.168.1.0/24 port port=3260 protocol=tcp accept'
放行服務: 另一種方法,放行https服務數據包通過.
[root@localhost ~]# firewall-cmd --add-rich-rule 'rule family=ipv4 source address=192.168.1.0/24 service name=httpd accept'
[root@localhost ~]# firewall-cmd --list-rich-rule
rule family="ipv4" source address="192.168.1.0/24" service name="https" accept
參考文獻:Linux鳥哥私房菜,Linux運維之道