1. 程式人生 > >Linux防火牆配置與管理(16)

Linux防火牆配置與管理(16)

防火牆指的是一個由軟體和硬體裝置組合而成、在內部網和外部網之間、專用網與公共網之間的邊界上構造的保護屏障.是一種獲取安全性方法的形象說法,它是一種計算機硬體和軟體的結合,使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防火牆關閉,並設定開機禁止啟動

[[email protected] ~]# systemctl stop firewalld
[[email protected] ~]# systemctl disable firewalld
[[email protected] ~]# systemctl status firewalld

2.通過Yum倉庫安裝,Iptables防火牆管理工具

[[email protected] ~]# 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並設定成開機自啟動.

[[email protected] ~]# systemctl restart iptables
[[email protected] ~]# systemctl enable iptables
[[email protected] ~]# systemctl status iptables

◆配置防火牆例項◆

此處在配置規則的時候,要注意防火牆規則順序是按照,從上到下的規則匹配的,因此一定要把允許動作放在拒絕動作前面,否則所有流量就被拒絕掉了,從而導致任何主機都無法訪問我們的服務.

Iptable常用引數說明:

[[email protected] ~]# 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 引數檢視防火牆預設配置規則.

[[email protected] ~]# 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 引數暫時清空防火牆規則,需要注意的是暫時清空後下次登陸後依舊會恢復回來.

[[email protected] ~]# iptables -F
[[email protected] ~]# 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 鏈設定為預設拒絕,也就是拒絕所有連線請求.

[[email protected] ~]# iptables -P INPUT DROP
[[email protected] ~]# 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通.

[[email protected] ~]# iptables -I INPUT -p icmp -j ACCEPT
[[email protected] ~]# 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連線到本機.

[[email protected] ~]# iptables -I INPUT -p tcp --dport 22 -j ACCEPT
[[email protected] ~]# iptables -I OUTPUT -p tcp --sport 22 -j ACCEPT
[[email protected]host ~]# 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規則.

[[email protected] ~]# 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

[[email protected] ~]# iptables -D INPUT 2
[[email protected] ~]# 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號埠.

[[email protected] ~]# iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
[[email protected] ~]# iptables -I OUTPUT -s 192.168.1.0/24 -p tcp --sport 22 -j ACCEPT
[[email protected] ~]# 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號埠.

[[email protected] ~]# iptables -I INPUT -p tcp --dport 8888 -j REJECT
[[email protected] ~]# 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埠.

[[email protected] ~]# iptables -I INPUT -p tcp -s 192.168.1.20 --dport 80 -j REJECT
[[email protected] ~]# 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埠.

[[email protected] ~]# iptables -A INPUT -p tcp --dport 1000:2000 -j REJECT
[[email protected] ~]# iptables -A INPUT -p udp --dport 1000:2000 -j REJECT
[[email protected] ~]# 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

[[email protected] ~]# 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 

[[email protected] ~]# 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 拒絕流入流量,除非與流出的流量相關

◆常用命令說明◆

狀態顯示相關:

[[email protected] ~]# firewall-cmd --version                     #顯示版本
[[email protected] ~]# firewall-cmd --state                       #顯示執行狀態
[[email protected] ~]# firewall-cmd --get-zones                   #顯示所有zone區域
[[email protected] ~]# firewall-cmd --get-active-zones            #顯示當前使用的區域
[[email protected] ~]# firewall-cmd --get-default-zone            #顯示預設使用的區域
[[email protected] ~]# firewall-cmd --get-zone-of-interface=ens32 #檢視ens32網口的區域
[[email protected] ~]# firewall-cmd --zone=public --list-ports    #顯示public區域所有開放的埠

常用配置相關:

[[email protected] ~]# firewall-cmd --panic-on           #拒絕所有包
[[email protected] ~]# firewall-cmd --panic-off          #取消拒絕狀態
[[email protected] ~]# firewall-cmd --query-panic        #檢視是否拒絕

查詢服務相關:

[[email protected] ~]# firewall-cmd --get-services                 #顯示服務列表
[[email protected] ~]# firewall-cmd --list-service                 #查詢當前放行服務
[[email protected] ~]# firewall-cmd --reload                       #重新載入防火牆

[[email protected] ~]# firewall-cmd --add-service=nfs              #臨時允許nfs服務通過
[[email protected] ~]# firewall-cmd --add-service=nfs --permanent  #永久允許nfs服務通過

埠管理相關:

[[email protected] ~]# firewall-cmd --add-port=443/tcp                 #臨時開啟443埠
[[email protected] ~]# firewall-cmd --add-port=3306/tcp --permanent    #永久開啟3306埠
[[email protected] ~]# firewall-cmd --remove-port=443/tcp              #刪除443埠
[[email protected] ~]# firewall-cmd --list-all                         #顯示所有埠列表

[[email protected] ~]# firewall-cmd --add-service=mysql                #開放mysql埠
[[email protected] ~]# firewall-cmd --remove-service=http              #阻止http埠
[[email protected] ~]# firewall-cmd --list-services                    #檢視開放的服務
[[email protected] ~]# firewall-cmd --add-port=3306/tcp                #開放通過tcp訪問3306
[[email protected] ~]# firewall-cmd --remove-port=80/tcp               #阻止通過tcp訪問3306
[[email protected] ~]# firewall-cmd --add-port=233/udp                 #開放通過udp訪問233
[[email protected] ~]# 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服務當前所使用的區域.

[[email protected] ~]# firewall-cmd --get-default-zone
public

特定區域查詢: 檢視ens32網絡卡的所在區域資訊.

[[email protected] ~]# firewall-cmd --get-zone-of-interface=ens32
public

修改預設區域: 修改ens32的public區域到external區域,並永久生效.

[[email protected] ~]# firewall-cmd --get-zone-of-interface=ens32
public

[[email protected] ~]# firewall-cmd --zone=external --change-interface=ens32
[[email protected] ~]# firewall-cmd --zone=external --change-interface=ens32 --permanent
success

[[email protected] ~]# firewall-cmd --get-zone-of-interface=ens32
external

設定預設區域: 把當前服務的預設區域設定為external.

[[email protected] ~]# firewall-cmd --get-default-zone
public

[[email protected] ~]# firewall-cmd --set-default-zone=external
success

[[email protected] ~]# firewall-cmd --get-default-zone
external

請求查詢: 查詢public區域是否允許請求SSH和HTTPS協議的流量.

[[email protected] ~]# firewall-cmd --zone=public --query-service=ssh
yes
[[email protected] ~]# firewall-cmd --zone=public --query-service=https
no

允許請求設定: 把public區域的https請求,永久允許通過.

[[email protected] ~]# firewall-cmd --zone=public --add-service=https
success
[[email protected] ~]# firewall-cmd --zone=public --add-service=https --permanent
success

拒絕請求設定: 把public區域的https請求,設定為永久拒絕.

[[email protected] ~]# firewall-cmd --zone=public --remove-service=https
success
[[email protected] ~]# firewall-cmd --zone=public --remove-service=https --permanent
success

放行埠: 臨時放行8080埠,和8081埠.

[[email protected] ~]# firewall-cmd --zone=public --add-port=8080-8081/tcp
success
[[email protected] ~]# firewall-cmd --zone=public --list-ports
8080-8081/tcp

埠轉發:192.168.1.0/24網路中的系統,訪問本地埠5423將被轉發到本地的80埠.

[[email protected] ~]# 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埠.

[[email protected] ~]# firewall-cmd --add-rich-rule 'rule family=ipv4 source address=192.168.1.0/24 port port=3260 protocol=tcp accept'

放行服務: 另一種方法,放行https服務資料包通過.

[[email protected] ~]# firewall-cmd --add-rich-rule 'rule family=ipv4 source address=192.168.1.0/24 service name=httpd accept'

[[email protected] ~]# firewall-cmd --list-rich-rule
rule family="ipv4" source address="192.168.1.0/24" service name="https" accept