溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Linux firewall-cmd命令怎么使用

發(fā)布時間:2022-02-07 16:46:40 來源:億速云 閱讀:157 作者:iii 欄目:開發(fā)技術(shù)

今天小編給大家分享一下Linux firewall-cmd命令怎么使用的相關(guān)知識點,內(nèi)容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

Linux常用命令firewall-cmd是Linux上新用的防火墻軟件,跟iptables差不多的工具。

Linux firewall-cmd命令怎么使用

firewall-cmd

Linux上新用的防火墻軟件,跟iptables差不多的工具

補充說明

firewall-cmd 是 firewalld的字符界面管理工具,firewalld是centos7的一大特性,最大的好處有兩個:支持動態(tài)更新,不用重啟服務;第二個就是加入了防火墻的“zone”概念。

firewalld跟iptables比起來至少有兩大好處:

  1. firewalld可以動態(tài)修改單條規(guī)則,而不需要像iptables那樣,在修改了規(guī)則后必須得全部刷新才可以生效。

  2. firewalld在使用上要比iptables人性化很多,即使不明白“五張表五條鏈”而且對TCP/IP協(xié)議也不理解也可以實現(xiàn)大部分功能。

firewalld自身并不具備防火墻的功能,而是和iptables一樣需要通過內(nèi)核的netfilter來實現(xiàn),也就是說firewalld和 iptables一樣,他們的作用都是用于維護規(guī)則,而真正使用規(guī)則干活的是內(nèi)核的netfilter,只不過firewalld和iptables的結(jié) 構(gòu)以及使用方法不一樣罷了。

命令格式

 firewall-cmd [選項 ... ]

選項

通用選項

 -h, --help    # 顯示幫助信息;
 -V, --version # 顯示版本信息. (這個選項不能與其他選項組合);
 -q, --quiet   # 不打印狀態(tài)消息;

狀態(tài)選項

 --state                # 顯示firewalld的狀態(tài);
 --reload               # 不中斷服務的重新加載;
 --complete-reload      # 中斷所有連接的重新加載;
 --runtime-to-permanent # 將當前防火墻的規(guī)則永久保存;
 --check-config         # 檢查配置正確性;

日志選項

 --get-log-denied         # 獲取記錄被拒絕的日志;
 --set-log-denied= # 設(shè)置記錄被拒絕的日志,只能為 'all','unicast','broadcast','multicast','off' 其中的一個;

實例

 # 安裝firewalld
 yum install firewalld firewall-config
 
 systemctl start  firewalld # 啟動
 systemctl stop firewalld  # 停止
 systemctl enable firewalld # 啟用自動啟動
 systemctl disable firewalld # 禁用自動啟動
 systemctl status firewalld # 或者 firewall-cmd --state 查看狀態(tài)
 
 # 關(guān)閉服務的方法
 # 你也可以關(guān)閉目前還不熟悉的FirewallD防火墻,而使用iptables,命令如下:
 
 systemctl stop firewalld
 systemctl disable firewalld
 yum install iptables-services
 systemctl start iptables
 systemctl enable iptables

配置firewalld

 firewall-cmd --version  # 查看版本
 firewall-cmd --help     # 查看幫助
 
 # 查看設(shè)置:
 firewall-cmd --state  # 顯示狀態(tài)
 firewall-cmd --get-active-zones  # 查看區(qū)域信息
 firewall-cmd --get-zone-of-interface=eth0  # 查看指定接口所屬區(qū)域
 firewall-cmd --panic-on  # 拒絕所有包
 firewall-cmd --panic-off  # 取消拒絕狀態(tài)
 firewall-cmd --query-panic  # 查看是否拒絕
 
 firewall-cmd --reload # 更新防火墻規(guī)則
 firewall-cmd --complete-reload
 # 兩者的區(qū)別就是第一個無需斷開連接,就是firewalld特性之一動態(tài)添加規(guī)則,第二個需要斷開連接,類似重啟服務
 
 
 # 將接口添加到區(qū)域,默認接口都在public
 firewall-cmd --zone=public --add-interface=eth0
 # 永久生效再加上 --permanent 然后reload防火墻
 
 # 設(shè)置默認接口區(qū)域,立即生效無需重啟
 firewall-cmd --set-default-zone=public
 
 # 查看所有打開的端口:
 firewall-cmd --zone=dmz --list-ports
 
 # 加入一個端口到區(qū)域:
 firewall-cmd --zone=dmz --add-port=8080/tcp
 # 若要永久生效方法同上
 
 # 打開一個服務,類似于將端口可視化,服務需要在配置文件中添加,/etc/firewalld 目錄下有services文件夾,這個不詳細說了,詳情參考文檔
 firewall-cmd --zone=work --add-service=smtp
 
 # 移除服務
 firewall-cmd --zone=work --remove-service=smtp
 
 # 顯示支持的區(qū)域列表
 firewall-cmd --get-zones
 
 # 設(shè)置為家庭區(qū)域
 firewall-cmd --set-default-zone=home
 
 # 查看當前區(qū)域
 firewall-cmd --get-active-zones
 
 # 設(shè)置當前區(qū)域的接口
 firewall-cmd --get-zone-of-interface=enp03s
 
 # 顯示所有公共區(qū)域(public)
 firewall-cmd --zone=public --list-all
 
 # 臨時修改網(wǎng)絡接口(enp0s3)為內(nèi)部區(qū)域(internal)
 firewall-cmd --zone=internal --change-interface=enp03s
 
 # 永久修改網(wǎng)絡接口enp03s為內(nèi)部區(qū)域(internal)
 firewall-cmd --permanent --zone=internal --change-interface=enp03s

服務管理

 # 顯示服務列表  
 Amanda, FTP, Samba和TFTP等最重要的服務已經(jīng)被FirewallD提供相應的服務,可以使用如下命令查看:
 
 firewall-cmd --get-services
 
 # 允許SSH服務通過
 firewall-cmd --new-service=ssh
 
 # 禁止SSH服務通過
 firewall-cmd --delete-service=ssh
 
 # 打開TCP的8080端口
 firewall-cmd --enable ports=8080/tcp
 
 # 臨時允許Samba服務通過600秒
 firewall-cmd --enable service=samba --timeout=600
 
 # 顯示當前服務
 firewall-cmd --list-services
 
 # 添加HTTP服務到內(nèi)部區(qū)域(internal)
 firewall-cmd --permanent --zone=internal --add-service=http
 firewall-cmd --reload     # 在不改變狀態(tài)的條件下重新加載防火墻

端口管理

 # 打開443/TCP端口
 firewall-cmd --add-port=443/tcp
 
 # 永久打開3690/TCP端口
 firewall-cmd --permanent --add-port=3690/tcp
 
 # 永久打開端口好像需要reload一下,臨時打開好像不用,如果用了reload臨時打開的端口就失效了
 # 其它服務也可能是這樣的,這個沒有測試
 firewall-cmd --reload
 
 # 查看防火墻,添加的端口也可以看到
 firewall-cmd --list-all

直接模式

 # FirewallD包括一種直接模式,使用它可以完成一些工作,例如打開TCP協(xié)議的9999端口
 
 firewall-cmd --direct -add-rule ipv4 filter INPUT 0 -p tcp --dport 9000 -j ACCEPT
 firewall-cmd --reload

自定義服務管理

選項

 (末尾帶有 [P only] 的話表示該選項除了與(--permanent)之外,不能與其他選項一同使用?。?
 --new-service= 新建一個自定義服務 [P only]
 --new-service-from-file= [--name=]
                       從文件中讀取配置用以新建一個自定義服務 [P only]
 --delete-service=
                       刪除一個已存在的服務 [P only]
 --load-service-defaults=
                       Load icmptype default settings [P only]
 --info-service=
                       顯示該服務的相關(guān)信息
 --path-service=
                       顯示該服務的文件的相關(guān)路徑 [P only]
 --service= --set-description=
                       給該服務設(shè)置描述信息 [P only]
 --service= --get-description
                       顯示該服務的描述信息 [P only]
 --service= --set-short=
                       給該服務設(shè)置一個簡短的描述 [P only]
 --service= --get-short
                       顯示該服務的簡短描述 [P only]
                       
 --service= --add-port=[-]/                       給該服務添加一個新的端口(端口段) [P only]
                       
 --service= --remove-port=[-]/                       從該服務上移除一個端口(端口段) [P only]
                       
 --service= --query-port=[-]/                       查詢該服務是否添加了某個端口(端口段) [P only]
                       
 --service= --get-ports
                       顯示該服務添加的所有端口 [P only]
                       
 --service= --add-protocol=                       為該服務添加一個協(xié)議 [P only]
                       
 --service= --remove-protocol=                       從該服務上移除一個協(xié)議 [P only]
                       
 --service= --query-protocol=                       查詢該服務是否添加了某個協(xié)議 [P only]
                       
 --service= --get-protocols
                       顯示該服務添加的所有協(xié)議 [P only]
                       
 --service= --add-source-port=[-]/                       添加新的源端口(端口段)到該服務 [P only]
                       
 --service= --remove-source-port=[-]/                       從該服務中刪除源端口(端口段) [P only]
                       
 --service= --query-source-port=[-]/                       查詢該服務是否添加了某個源端口(端口段) [P only]
                       
 --service= --get-source-ports
                       顯示該服務所有源端口 [P only]
                       
 --service= --add-module=                       為該服務添加一個模塊 [P only]
 --service= --remove-module=                       為該服務移除一個模塊 [P only]
 --service= --query-module=                       查詢該服務是否添加了某個模塊 [P only]
 --service= --get-modules
                       顯示該服務添加的所有模塊 [P only]
 --service= --set-destination=:[/]
                       Set destination for ipv to address in service [P only]
 --service= --remove-destination=                       Disable destination for ipv i service [P only]
 --service= --query-destination=:[/]
                       Return whether destination ipv is set for service [P only]
 --service= --get-destinations
                       List destinations in service [P only]

控制端口 / 服務

可以通過兩種方式控制端口的開放,一種是指定端口號另一種是指定服務名。雖然開放 http 服務就是開放了 80 端口,但是還是不能通過端口號來關(guān)閉,也就是說通過指定服務名開放的就要通過指定服務名關(guān)閉;通過指定端口號開放的就要通過指定端口號關(guān)閉。還有一個要注意的就是指定端口的時候一定要指定是什么協(xié)議,tcp 還是 udp。知道這個之后以后就不用每次先關(guān)防火墻了,可以讓防火墻真正的生效。

 firewall-cmd --add-service=mysql        # 開放mysql端口
 firewall-cmd --remove-service=http      # 阻止http端口
 firewall-cmd --list-services            # 查看開放的服務
 firewall-cmd --add-port=3306/tcp        # 開放通過tcp訪問3306
 firewall-cmd --remove-port=80tcp        # 阻止通過tcp訪問3306
 firewall-cmd --add-port=233/udp         # 開放通過udp訪問233
 firewall-cmd --list-ports               # 查看開放的端口

偽裝 IP

 firewall-cmd --query-masquerade # 檢查是否允許偽裝IP
 firewall-cmd --add-masquerade   # 允許防火墻偽裝IP
 firewall-cmd --remove-masquerade# 禁止防火墻偽裝IP

端口轉(zhuǎn)發(fā)

端口轉(zhuǎn)發(fā)可以將指定地址訪問指定的端口時,將流量轉(zhuǎn)發(fā)至指定地址的指定端口。轉(zhuǎn)發(fā)的目的如果不指定 ip 的話就默認為本機,如果指定了 ip 卻沒指定端口,則默認使用來源端口。 如果配置好端口轉(zhuǎn)發(fā)之后不能用,可以檢查下面兩個問題:

  1. 比如我將 80 端口轉(zhuǎn)發(fā)至 8080 端口,首先檢查本地的 80 端口和目標的 8080 端口是否開放監(jiān)聽了

  2. 其次檢查是否允許偽裝 IP,沒允許的話要開啟偽裝 IP

 firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080   # 將80端口的流量轉(zhuǎn)發(fā)至8080
 firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.1 # 將80端口的流量轉(zhuǎn)發(fā)至192.168.0.1
 firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.1:toport=8080 # 將80端口的流量轉(zhuǎn)發(fā)至192.168.0.1的8080端口
  1. 當我們想把某個端口隱藏起來的時候,就可以在防火墻上阻止那個端口訪問,然后再開一個不規(guī)則的端口,之后配置防火墻的端口轉(zhuǎn)發(fā),將流量轉(zhuǎn)發(fā)過去。

  2. 端口轉(zhuǎn)發(fā)還可以做流量分發(fā),一個防火墻拖著好多臺運行著不同服務的機器,然后用防火墻將不同端口的流量轉(zhuǎn)發(fā)至不同機器。

以上就是“Linux firewall-cmd命令怎么使用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI