防火墻作為網(wǎng)絡(luò)安全的防護(hù)工具乙各,在保障數(shù)據(jù)和服務(wù)安全方面發(fā)揮著重大作用。
提到防火墻幢竹,接觸Linux較早的朋友首先想到的是iptables(centos 6版本)耳峦,centos 7推薦使用的是firewalld。然而焕毫,不管是iptalbes還是firewalld蹲坷,其本身并不是防火墻,而是防火墻配置管理工具邑飒。
本文介紹的是firewalld工具的使用方法循签,對(duì)于具體的原理這里不作深究,iptables相關(guān)的內(nèi)容也不在討論范圍內(nèi)幸乒。
1.firewalld安裝
使用yum安裝
sudo yum install -y firewalld
使用systemctl啟動(dòng)firewalld
# 啟動(dòng)
sudo systemctl start firewalld
# 開(kāi)機(jī)啟動(dòng)
sudo systemctl enable firewalld
如果要停止或禁用firewalld
# 停止
sudo systemctl stop firewalld
# 禁用
sudo systemctl enable firewalld
2.firewalld基本概念
2.1 Zones
區(qū)域:定義了網(wǎng)絡(luò)連接的信任級(jí)別懦底,firewalld提供了幾種預(yù)先定義好的區(qū)域,我們可以根據(jù)需要選擇合適的區(qū)域罕扎。
區(qū)域 | 默認(rèn)規(guī)則策略 |
---|---|
trusted | 允許所有的數(shù)據(jù)包 |
home | 拒絕流入的流量聚唐,除非與流出的流量相關(guān);而如果流量與ssh腔召、mdns杆查、ipp-client、amba-client與dhcpv6-client服務(wù)相關(guān)臀蛛,則允許流量 |
internal | 等同于home區(qū)域 |
work | 拒絕流入的流量亲桦,除非與流出的流量相關(guān);而如果流量與ssh浊仆、ipp-client與dhcpv6-client服務(wù)相關(guān)客峭,則允許流量 |
public | 拒絕流入的流量,除非與流出的流量相關(guān)抡柿;而如果流量與ssh舔琅、dhcpv6-client服務(wù)相關(guān),則允許流量 |
external | 拒絕流入的流量洲劣,除非與流出的流量相關(guān)备蚓;而如果流量與ssh服務(wù)相關(guān)课蔬,則允許流量 |
dmz | 拒絕流入的流量,除非與流出的流量相關(guān)郊尝;而如果流量與ssh服務(wù)相關(guān)二跋,則允許流量 |
block | 拒絕流入的流量,除非與流出的流量相關(guān) |
drop | 拒絕流入的流量流昏,除非與流出的流量相關(guān) |
2.2 Services
Service可以是一個(gè)local ports扎即、protocols、destinations列表横缔,使用預(yù)定義的服務(wù)使用戶更容易啟用和禁用對(duì)服務(wù)的訪問(wèn)铺遂。
2.3 ICMP types
Internet Control Message Protocol在IP協(xié)議中交換信息。ICMP types可以用來(lái)在firewalld中限制交換信息茎刚。
# 顯示預(yù)定義的ICMP types
firewall-cmd --get-icmptypes
2.4 Runtime configuration
運(yùn)行時(shí)配置:此配置在系統(tǒng)或服務(wù)重啟后會(huì)失效襟锐。
2.5 Permanent configuration
永久配置 :此配置永久生效,使用firewall-cmd
配置防火墻策略時(shí)需要添加--permanent
選項(xiàng)才會(huì)將配置永久保存到配置文件中膛锭,另外使用firewall-cmd --reload
可以將永久配置覆蓋到運(yùn)行配置并生效粮坞。
2.6 Direct interface
直接接口:此方式主要是為了適應(yīng)對(duì)iptables比較熟悉卻不適應(yīng)firewalld的用戶,使用--direct
選項(xiàng)可以傳遞原始的iptables命令來(lái)配置防火墻策略初狰。
3.firewalld命令行工具
firewall-cmd是firewalld的CLI版本管理工具莫杈,用來(lái)通過(guò)命令行配置防火墻策略。
完整的firewall-cmd使用手冊(cè)可以使用man firewall-cmd
或firewall-cmd -h
查看奢入,這里介紹部分常用操作選項(xiàng)筝闹。
3.1 Status Options
# 檢查firewalld狀態(tài)
firewall-cmd --state
# 重新加載防火墻規(guī)則,保持狀態(tài)信息
firewall-cmd --reload
# 重新加載防火墻規(guī)則腥光,包括netfilter內(nèi)核模塊(僅當(dāng)出現(xiàn)嚴(yán)重的防火墻問(wèn)題時(shí)使用关顷,會(huì)中斷活動(dòng)的網(wǎng)絡(luò)連接)
firewall-cmd --complete-reload
# 將運(yùn)行時(shí)配置永久保存到配置文件
firewall-cmd --runtime-to-permanent
3.2 Zone Options
# 顯示預(yù)定義的zones
firewall-cmd --get-zones
# 查看默認(rèn)區(qū)域
firewall-cmd --get-default-zone
# 修改默認(rèn)區(qū)域
firewall-cmd --set-default-zone=<zone>
# 查看網(wǎng)絡(luò)接口使用的區(qū)域
firewall-cmd --get-active-zones
# 查看所有區(qū)域的所有配置
sudo firewall-cmd --list-all-zones
# 創(chuàng)建一個(gè)新的區(qū)域
sudo firewall-cmd --new-zone=<zone> --permanent
# 移除一個(gè)已存在的區(qū)域
sudo firewall-cmd --delete-zone=<zone>
# 指定區(qū)域(如果未指定則為默認(rèn)區(qū)域)使用其它選項(xiàng)(見(jiàn)本文3.4章節(jié))
firewall-cmd --zone=<zone>
# 查看指定區(qū)域的所有配置
sudo firewall-cmd --zone=<zone> --list-all
3.3 Service Options
# 顯示預(yù)定義的services
sudo firewall-cmd --get-services
# 顯示指定service允許的端口和協(xié)議
sudo firewall-cmd --service=<service> --get-ports --permanent
# 為指定的service添加允許的端口和協(xié)議
sudo firewall-cmd --service=<service> --add-port=<portid>[-<portid>]/<protocol>
# 從指定的service移除允許的端口和協(xié)議
sudo firewall-cmd --service=<service> --remove-port=<portid>[-<portid>]/<protocol>
# 檢查端口號(hào)和協(xié)議在指定的service是否允許
sudo firewall-cmd --service=<service> --query-port=<portid>[-<portid>]/<protocol>
3.4 Options to Adapt and Query Zones
# 顯示指定zone的所有策略
sudo firewall-cmd --zone=<zone> --list-all
# 顯示指定zone的所有service
sudo firewall-cmd --zone=<zone> --list-services
# 向指定zone添加允許的service
sudo firewall-cmd --zone=<zone> --add-service=<service>
# 從指定zone移除允許的service
sudo firewall-cmd --zone=<zone> --remove-service=<service>
# 顯示指定zone的所有端口號(hào)和協(xié)議
sudo firewall-cmd --zone=<zone> --list-ports
# 向指定zone添加允許的端口和協(xié)議
sudo firewall-cmd --zone=<zone> --add-port=<portid>[-<portid>]/<protocol>
# 從指定zone移除允許的端口和協(xié)議
sudo firewall-cmd --zone=<zone> --remove-port=<portid>[-<portid>]/<protocol>
3.5 實(shí)例
3.5.1 放行8080-8100的所有入口流量
# 允許8080-8100端口的所有TCP流量,永久生效
sudo firewall-cmd --zone=public --add-port=8080-8100/tcp --permanent
# 立即生效
sudo firewall-cmd --reload
# 查看允許的端口號(hào)和協(xié)議
sudo firewall-cmd --zone=public --list-ports
3.5.2 放行8080-8081的所有http入口流量
# 從public區(qū)域上移除允許的8080-8100的TCP入口流量
# 如果沒(méi)有進(jìn)行3.5.1的操作武福,這一步可以忽略
sudo firewall-cmd --zone=public --remove-port=8080-8081/tcp --permanent
# 允許http服務(wù)上8080-8100端口的所有TCP流量议双,永久生效
sudo firewall-cmd --service=http --add-port=8080-8100/tcp --permanent
# 查看http服務(wù)上允許的端口號(hào)和協(xié)議
sudo firewall-cmd --service=http --get-ports --permanent
# 允許http服務(wù)的入口流量,永久生效
sudo firewall-cmd --zone=public --add-service=http --permanent
# 立即生效
sudo firewall-cmd --reload
3.5.3 僅允許本機(jī)通過(guò)TCP協(xié)議訪問(wèn)27017端口
sudo firewall-cmd --add-rich-rule="rule family="ipv4" source address="127.0.0.1" port protocol="tcp" port="27017" accept" --permanent
這里使用了--add-rich-rule
來(lái)設(shè)置防火墻策略捉片,關(guān)于詳細(xì)的介紹可以使用man firewalld.richlanguage
查看平痰。
4.firewalld圖形界面工具
firewall-config是firewalld的圖形界面管理工具,即使不熟悉Linux命令也可以妥善配置防火墻策略伍纫。不過(guò)宗雇,本文對(duì)圖形界面的操作就不一一贅述了,有需要的自行自行摸索或查閱相關(guān)資料莹规。