iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 19
1
Software Development

如何使用 Linux 從土裡到冒出頭來系列 第 19

Day 19 防火牆

Day 19 防火牆

CentOS 7 常見的防火牆套件,有 firewalliptables 兩種,但 CentOS 7的預設防火牆是以 firewall 為主,而 iptables 有安裝檔,但尚未安裝到系統上。

firewalliptables 的核心是以 netfilter 去實現,當這兩種套件拿掉 netfilter 的核心,就什麼都不是了。但這兩種的存在是制定一套屬於自己的規則,他們外在結構不一樣,使用方法也不一樣,但核心都是一樣的。

※ CentOS 7 存在 firewalldiptablesebtablesd 等三種防火牆套件。

firewall

firewall 支援動態的更新技術,並以「區域(zone)」的概念來管理防火牆,簡單來說,網路劃分成不同的區域,而每個區域可以進行不同的設定或規則。

每個區域都有屬於它的設定,這些設定是以 XML 檔 來定義,也可以直接使用 firewall-cmd 指令來控制。

區域管理

firewalld 提供了九個初始化區域配置

  • 信任區域(trueted):可接受所有的網路連線。
  • 公共區域(public):接受ssh、dhcpv6-client服務,為firewalld的預設區域。
  • 工作區域(work):接受ssh、ipp-client、dhcpv6-client服務連線。
  • 家庭區域(home):僅接受ssh、mdns、ipp-client、samba-client或dhcpv6-client服務連線。
  • 內部區域(internal):接受ssh、ipp-client、mdns、samba-client或dhcpv6-client服務連線。
  • 外部區域(external):出去的ipv4的網路連線經過此區域的偽裝和轉發,只支援ssh服務。
  • 隔離區域(DMZ):也稱為非軍事區域,內外網路之間增加的一層網路,起到緩衝作用。僅接受ssh服務。
  • 阻塞區域(block):任何傳入的網路資料包都將被阻止,拒絕門外。
  • 丟棄區域(drop):任何訪問的連線或傳送的封包,都會被丟棄,沒有任何回應。

firewalld 的預設區域是 公共區域(public)
firewalld 使用 XML 進行配置,除非有其區域配置或其他需求,才會直接使用。否則只要直接使用 firewall-cmd 做操作即可。

firewalld配置

  1. firewall-config 圖形化工具操作。
  2. XML 直接編輯修改。
  3. firewall-cmd 指令來控制。

1、但由於系統使用 CentOS 7 ,firewall-config 方式則不使用。

2、XML 的設定,都在 /usr/lib/firewalld/zones 的資料夾內。

[root@localhost zones]# ll
總計 36
-rw-r--r--. 1 root root 299  4月  7 22:37 block.xml
-rw-r--r--. 1 root root 293  4月  7 22:37 dmz.xml
-rw-r--r--. 1 root root 291  4月  7 22:37 drop.xml
-rw-r--r--. 1 root root 304  4月  7 22:37 external.xml
-rw-r--r--. 1 root root 369  4月  7 22:37 home.xml
-rw-r--r--. 1 root root 384  4月  7 22:37 internal.xml
-rw-r--r--. 1 root root 315  4月  7 22:37 public.xml
-rw-r--r--. 1 root root 162  4月  7 22:37 trusted.xml
-rw-r--r--. 1 root root 311  4月  7 22:37 work.xml

3、 firewall-cmd 另外做介紹。

確認 iptables

iptables 是 Linux 上常用的防火牆套件,iptables 用來過濾網路封包。

確認 iptables 的套件是否存在

※ 以下兩種查詢均可查詢這個套件是否存在。

[root@localhost ~]# yum list installed | grep iptables
iptables.x86_64                       1.4.21-34.el7                    @anaconda

// or

[root@localhost ~]# rpm -qa | grep iptables
iptables-1.4.21-34.el7.x86_64

確認 iptables 檔案是否存在,不存在的話暫時不理會。
※ 不存在代表iptables 尚未安裝。

[root@localhost /]# ll /etc/init.d/

-rw-r--r--. 1 root root 18281  8月 19  2019 functions
-rwxr-xr-x. 1 root root  4569  8月 19  2019 netconsole
-rwxr-xr-x. 1 root root  7928  8月 19  2019 network
-rw-r--r--. 1 root root  1160  8月  7 01:30 README

指令

參數

  • --permanent 表示設定為持續(永久)。
  • --add-port 標示新增的埠。
  • –add-forward-port A埠號 轉 B埠號

查看防火牆運作狀態

[root@localhost ~]# firewall-cmd --state

running

啟動與停止、重新啟動

// 啟動
[root@localhost ~]# systemctl start firewalld.service

// 停止
[root@localhost ~]# systemctl stop firewalld.service

// 重新啟動
[root@localhost ~]# systemctl restart firewalld.service

查詢預設區域

[root@localhost ~]# firewall-cmd --get-default-zone
public

查詢運行中的區域

[root@localhost ~]# firewall-cmd --get-active-zones

查詢已使用的 Port

[root@localhost ~]# firewall-cmd --list-ports

查詢已提供服務的 Port

[root@localhost ~]# firewall-cmd --list-services

新增 Port

※ Port 號可自行修改設定。

暫時開啟,重新啟動OS就會失效。

[root@localhost ~]# firewall-cmd --zone=public --add-port=80/tcp

永久生效,重新啟動OS也是有效。

[root@localhost ~]# firewall-cmd --zone=public --add-port=80/tcp --permanent

開啟 80 到 100 的 Port號。

[root@localhost ~]# firewall-cmd --zone=public --add-port=80-100/tcp

查詢已開啟 Port

[root@localhost ~]# firewall-cmd --zone=public --query-port=80/tcp

刪除 Port

暫時刪除 某 Port 號

[root@localhost ~]# firewall-cmd --zone=public --remove-port=80/tcp

永久刪除 某 Port 號。

[root@localhost ~]# firewall-cmd --zone=public --remove-port=80/tcp --permanent

新增服務

[root@localhost ~]# firewall-cmd --zone=public --add-service=mailserver --permanent

移除服務

[root@localhost ~]# firewall-cmd --zone=public --remove-service=mailserver --permanent

Port 轉換

[root@localhost ~]# firewall-cmd --zone=public --add-forward-port=port=80:proto=tcp:toport=443

上一篇
Day 18 設定本機SSH
下一篇
Day 20 檔案工具
系列文
如何使用 Linux 從土裡到冒出頭來30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言