CentOS7 Firewall 防火牆配置教程

一、firewall介紹

CentOS 7中防火牆是一個非常的強大的功能,在CentOS 6.5中在iptables防火牆中進行了升級了。
Firewalld 提供了支持網絡/防火牆區域(zone)定義網絡鏈接以及接口安全等級的動態防火牆管理工具。它支持 IPv4, IPv6 防火牆設置以及以太網橋接,並且擁有運行時配置和永久配置選項。它也支持允許服務或者應用程序直接添加防火牆規則的接口。 以前的 system-config-firewall/lokkit 防火牆模型是靜態的,每次修改都要求防火牆完全重啓。這個過程包括內核 netfilter 防火牆模塊的卸載和新配置所需模塊的裝載等。而模塊的卸載將會破壞狀態防火牆和確立的連接。
相反,firewall daemon 動態管理防火牆,不需要重啓整個防火牆便可應用更改。因而也就沒有必要重載所有內核防火牆模塊了。不過,要使用 firewall daemon 就要求防火牆的所有變更都要通過該守護進程來實現,以確保守護進程中的狀態和內核裏的防火牆是一致的。另外,firewall daemon 無法解析由 ip*tables 和 ebtables 命令行工具添加的防火牆規則。

1、什麼是區域Zone:

網絡區域定義了網絡連接的可信等級。這是一個 一對多的關係,這意味着一次連接可以僅僅是一個區域的一部分,而一個區域可以用於很多連接。

2、哪個區域可用

由firewalld 提供的區域按照從不信任到信任的順序排序。

3、區域的分類

預定義的服務

服務是端口和/或協議入口的組合。備選內容包括 netfilter 助手模塊以及 IPv4、IPv6地址。

端口和協議

定義了 tcp 或 udp 端口,端口可以是一個端口或者端口範圍。

ICMP阻塞

可以選擇 Internet 控制報文協議的報文。這些報文可以是信息請求亦可是對信息請求或錯誤條件創建的響應。

僞裝
私有網絡地址可以被映射到公開的IP地址。這是一次正規的地址轉換。

端口轉發

端口可以映射到另一個端口以及/或者其他主機。

哪個區域可用?

由firewalld 提供的區域按照從不信任到信任的順序排序。

丟棄

任何流入網絡的包都被丟棄,不作出任何響應。只允許流出的網絡連接。

阻塞

任何進入的網絡連接都被拒絕,並返回 IPv4 的 icmp-host-prohibited 報文或者 IPv6 的 icmp6-adm-prohibited 報文。只允許由該系統初始化的網絡連接。

公開

用以可以公開的部分。你認爲網絡中其他的計算機不可信並且可能傷害你的計算機。只允許選中的連接接入。(You do not trust the other computers on networks to not harm your computer. Onlyselected incoming connections are accepted.)

外部

用在路由器等啓用僞裝的外部網絡。你認爲網絡中其他的計算機不可信並且可能傷害你的計算機。只允許選中的連接接入。

隔離區(dmz)

用以允許隔離區(dmz)中的電腦有限地被外界網絡訪問。只接受被選中的連接。

工作

用在工作網絡。你信任網絡中的大多數計算機不會影響你的計算機。只接受被選中的連接。

家庭

用在家庭網絡。你信任網絡中的大多數計算機不會影響你的計算機。只接受被選中的連接。

內部

用在內部網絡。你信任網絡中的大多數計算機不會影響你的計算機。只接受被選中的連接。

受信任的

允許所有網絡連接。

我應該選用哪個區域?

例如,公共的 WIFI 連接應該主要爲不受信任的,家庭的有線網絡應該是相當可信任的。根據與你使用的網絡最符合的區域進行選擇。

如何配置或者增加區域?

你可以使用任何一種 firewalld 配置工具來配置或者增加區域,以及修改配置。工具有例如 firewall-config 這樣的圖形界面工具, firewall-cmd 這樣的命令行工具,以及D-BUS接口。或者你也可以在配置文件目錄中創建或者拷貝區域文件。 @PREFIX@/lib/firewalld/zones 被用於默認和備用配置,/etc/firewalld/zones 被用於用戶創建和自定義配置文件。

如何爲網絡連接設置或者修改區域

區域設置以 ZONE= 選項 存儲在網絡連接的ifcfg文件中。如果這個選項缺失或者爲空,firewalld 將使用配置的默認區域。

如果這個連接受到 NetworkManager 控制,你也可以使用 nm-connection-editor 來修改區域。
由NetworkManager控制的網絡連接

防火牆不能夠通過 NetworkManager 顯示的名稱來配置網絡連接,只能配置網絡接口。因此在網絡連接之前 NetworkManager 將配置文件所述連接對應的網絡接口告訴 firewalld 。如果在配置文件中沒有配置區域,接口將配置到 firewalld 的默認區域。如果網絡連接使用了不止一個接口,所有的接口都會應用到 fiwewalld。接口名稱的改變也將由 NetworkManager 控制並應用到firewalld。

爲了簡化,自此,網絡連接將被用作與區域的關係。
如果一個接口斷開了,NetworkManager也將告訴firewalld從區域中刪除該接口。
當firewalld由systemd或者init腳本啓動或者重啓後,firewalld將通知NetworkManager把網絡連接增加到區域。
由腳本控制的網絡

對於由網絡腳本控制的連接有一條限制:沒有守護進程通知 firewalld 將連接增加到區域。這項工作僅在 ifcfg-post 腳本進行。因此,此後對網絡連接的重命名將不能被應用到firewalld。同樣,在連接活動時重啓 firewalld 將導致與其失去關聯。現在有意修復此情況。最簡單的是將全部未配置連接加入默認區域。

區域定義了本區域中防火牆的特性:
使用firewalld

你可以通過圖形界面工具 firewall-config 或者命令行客戶端 firewall-cmd 啓用或者關閉防火牆特性。

二、firewall配置

The configuration for firewalld is stored in various XML files in /usr/lib/firewalld/ and /etc/firewalld/.

This allows a great deal of flexibility as the files can be edited, written to, backed up, used as templates for other installations and so on.

注意:以下firewalld 的操作只有重啓之後纔有效:service firewalld restart 重啓

1、系統配置目錄

/usr/lib/firewalld/services
目錄中存放定義好的網絡服務和端口參數,系統參數,不要修改。

2、用戶配置目錄

/etc/firewalld/

3、如何自定義添加端口

用戶可以通過修改配置文件的方式添加端口,也可以通過命令的方式添加端口,注意,修改的內容會在/etc/firewalld/ 目錄下的配置文件中還體現。

 3.1、命令的方式添加端口

firewall-cmd --permanent --add-port=9527/tcp

參數介紹:

設置參數意義解釋
1、firwall-cmd:是Linux系統提供給用戶進行操作Firewall的一個工具;
2、–permanent:表示設置爲持久;
3、–add-port:標識將要添加的端口,用於增添Firewall 防火牆的開放端口

另外,firewall中有Zone的概念,可以將具體的端口制定到具體的zone配置文件中。

例如:添加8080端口

firewall-cmd --zone=public --add-port=8080/tcp --permanent
        --zone=public:指定的zone爲public;

如果–zone=dmz 這樣設置的話,會在dmz.xml文件中新增一條。

A. 實現一般訪問需要開放 80/tcp 端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
B. 實現SSH訪問需要開放 22/tcp 端口
firewall-cmd --zone=public --add-port=22/tcp --permanent
C. 實現SSL證書部署需要開放 443/tcp 端口
firewall-cmd --zone=public --add-port=443/tcp --permanent
D. 實現一般訪問遠程訪問MySQL需要開放 3306/tcp 端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
(此端口不使用時不建議開啓)

3.2、修改配置文件的方式添加端口

<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas.</description>
  <rule family="ipv4">
    <source address="192.168.10.70"/>
    <port protocol="udp" port="514"/>
    <accept/>
  </rule>
  <rule family="ipv4">
    <source address="192.168.10.70"/>
    <port protocol="tcp" port="10050-10051"/>
    <accept/>
  </rule>
 <rule family="ipv4">
    <source address="192.249.87.114"/> 放通指定ip,指定端口、協議
    <port protocol="tcp" port="80"/>
    <accept/>
  </rule>
<rule family="ipv4"> 放通任意ip訪問服務器的9527端口
    <port protocol="tcp" port="9527"/>
    <accept/>
  </rule>
</zone>

上述的一個配置文件可以很好的看出:

1、添加需要的規則,開放通源ip爲192.168.10.70,端口514,協議tcp;
2、開放通源ip爲192.168.10.70,端口10050-10051,協議tcp;/3、開放通源ip爲任意,端口9527,協議tcp;

每次修改完成後都要執行下面語句:
重新載入Firewall 使配置立即生效:
firewall-cmd --reload

三、firewall常用命令

1、重啓、關閉、開啓firewalld.service服務

service firewalld restart 重啓
service firewalld start 開啓
service firewalld stop 關閉

systemctl enable firewalld (允許Firewall開機啓動,輸入兩次以確定。)

2、查看firewall服務狀態

systemctl status firewall 

3、查看firewall的狀態

firewall-cmd --state

4、查看防火牆規則
查看Firewall 防火牆所有列表規則:
firewall-cmd --list-all
檢查Firewall 防火牆的80/tcp 22/tcp 443/tcp端口是否開放
firewall-cmd --query-port=80/tcp
firewall-cmd --query-port=22/tcp
firewall-cmd --query-port=443/tcp

5、其它常用命令
設置開放Firewall 防火牆的特定端口,比如80/tcp
firewall-cmd --permanent --add-port=80/tcp
設置移除Firewall 防火牆已經開放的端口,比如80/tcp
firewall-cmd --permanent --remove-port=80/tcp
設置Firewall 防火牆爲開機自啓動
systemctl enable firewalld
設置Firewall 防火牆爲開機禁用
systemctl disable firewalld
檢查Firewall 防火牆服務是否已經被爲開機自啓動
systemctl is-enabled firewalld (.service 細分到子服務)
檢查Firewall 防火牆已經設置爲開機自啓動的服務
systemctl list-unit-files|grep enabled
查看啓動失敗的服務
Systemctl --failed
查看Firewall 防火牆的版本
firewall-cmd --version
查看Firewall 防火牆的幫助
firewall-cmd --help
更新Firewall 防火牆的規則=>重載Firewall
firewall-cmd --reload
查看Firewall 防火牆的區域信息:
firewall-cmd --get-active-zones
查看指定接口所屬區域
firewall-cmd --get-zone-of-interface=eth0
啓動拒絕狀態,拒絕所有包
firewall-cmd --panic-on
關閉拒絕狀態
firewall-cmd --panic-off
查看是否啓動拒絕
firewall-cmd --query-panic
永久開放80/tcp端口
firewall-cmd --zone=public --add-port=80/tcp --permanent
(–permanent永久生效,沒有此參數重啓後失效)
查看80/tcp端口的狀態
firewall-cmd --zone=public --query-port=80/tcp
永久刪除80/tcp端口
firewall-cmd --zone=public --remove-port=80/tcp –permanent
設置開放端口區間段
firewall-cmd --permanent --zone=public --add-port=8080-9999/tcp
(永久開放設置)
重新載入Firewall 使配置立即生效: firewall-cmd --reload
 

四、CentOS切換爲iptables防火牆

切換到iptables首先應該關掉默認的firewalld,然後安裝iptables服務。

1、關閉firewall:

service firewalld stop
systemctl disable firewalld.service #禁止firewall開機啓動

2、安裝iptables防火牆

yum install iptables-services #安裝

3、編輯iptables防火牆配置

vi /etc/sysconfig/iptables #編輯防火牆配置文件

下邊是一個完整的配置文件

Firewall configuration written by system-config-firewall

Manual customization of this file is not recommended.

*filter

:INPUT ACCEPT [0:0]

:FORWARD ACCEPT [0:0]

:OUTPUT ACCEPT [0:0]

-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

-A INPUT -p icmp -j ACCEPT

-A INPUT -i lo -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT

-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

-A INPUT -j REJECT --reject-with icmp-host-prohibited

-A FORWARD -j REJECT --reject-with icmp-host-prohibited

COMMIT

啓動防火牆服務

service iptables start #開啓
systemctl enable iptables.service #設置防火牆開機啓動

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章