CentOS7服務器的第一道屏障防火牆firewall的使用

防火牆是系統的第一道防線,其作用是防止非法用戶的進入,是內部網和外部網(Internet)之間的保護屏障。在我們構建服務器應用的時候首先應該想到的是安全,不能讓用戶隨意的獲取服務器的資源甚至系統的用戶數據。這種安全事件頻頻發生我們更應該注重安全,安全也是未來互聯網行業必須重視的重中之重。

防火牆應用的現狀

如果大家直接購買阿里雲的ECS或者騰訊雲的雲服務器可能很少關注防火牆,DDoS攻擊等問題。因爲服務器提供商同時爲我們提供了這項業務,對於服務器允許的網絡請求類型,接口等我們都可以通過服務器提供商提供的可視化的界面進行配置。這種嚴格的配置在生產環境中比較多見,對於部分用戶爲了方便會設置路由規則爲0.0.0.0/0這樣就會存在潛在的風險,表示你的任何端口都可以被外部的任何設備訪問,這其實是很危險的一件事。可能大家會說自己在服務器上搭建的mysql服務器是有密碼的,其實mysql的密碼校驗真的不安全。還有大部分人爲了操作方便給數據庫授權了所有ip的訪問權限,這就更危險了。就等於你暴漏了一個保險櫃在大街上人人都可以去試一下。

安全案例(自己搭建redis)

有這樣一個案例。自己在雲服務器上搭建redis服務的情況。默認情況下redis的配置中有

bind 127.0.0.1

這樣的內部迴環,所以外部服務器是訪問不了的。但是如果爲了外部網絡可以訪問註釋bind後redis就完全是個暴露的在任何地方都可以隨便存取的服務。關於redis安全會在下一篇文章中專門來說。

開啓firewall

開啓firewall的命令是

systemctl start firewalld.service

如果提醒服務被mask則需要執行下邊的命令

systemctl unmask firewalld.service

然後start就沒有問題了

配置防火牆

如果你之前沒有使用firewall在上邊步驟中剛開啓你會發現你的80端口等都不可訪問了,這時候就需要配置防火牆來開放相應的端口。

有firewall情況下的網絡請求

如果服務器有網絡接口 eth0和lo那麼網絡請求的基本流向是
在這裏插入圖片描述
數據包從eth0或者lo進入其中的一個zone然後進入內核處理。

什麼是zone

zone其實最簡單的理解是定製的過濾規則的劃分。根據我們對請求的不同信任度來使用不同的zone(規則集合)。例如上圖中eth0網卡的請求需要進過第二個zone。而且每一個網卡interface所對應的zone只能有一個,這需要我們設置。我們來看看firewall默認有哪些zone:

 firewall-cmd --get-zones
work drop internal external trusted home dmz public block

默認情況是有這些zone

查看zone的特徵

如果要查看zone的特徵,主要是一些過濾規則,可以使用以下的命令

firewall-cmd --list-all-zones

這樣會返回所有的zone的特徵,我們拿一個來看

public
  target: default
  icmp-block-inversion: no
  interfaces:
  sources:
  services: dhcpv6-client ssh
  ports: 3306/tcp 80/tcp 6626/tcp
  protocols:
  masquerade: no
  forward-ports:
  sourceports:
  icmp-blocks:
  rich rules:

target

可用於接受(accept)、拒絕(reject)或丟棄(drop)與任何規則(rule)(端口(port)、服務(etc)等)不匹配的每個包。在可信區域中使用ACCEPT target接收不匹配任何規則的每個包。在block zone中使用%%REJECT%%目標來拒絕(使用默認的firewalld拒絕類型)不匹配任何規則的每個包。DROP target用於drop zone中刪除不匹配任何規則的每個包。如果沒有指定目標,則將拒絕不匹配任何規則的每個包。

icmp-block-inversion

是一個可選標記,在區域配置中只能使用一次。此標誌反轉icmp塊處理。區域中只接受啓用的ICMP類型,而拒絕所有其他類型。

interfaces

是一個可選的標記,可以多次使用。它可用於將接口綁定到zone。對於NetworkManager管理的接口,您不需要這樣做,因爲NetworkManager自動將接口綁定到區域。

sources

是一個可選的標記,可以多次使用。它可用於將源地址、地址範圍、MAC地址或ipset綁定到一個區域。源條目具有以下格式之一:

address="address[/mask]"
mac="MAC"
ipset="ipset"

services

是一個可選的標記,可以多次使用,以啓用多個服務條目。服務條目格式如下:

name="string"

如果不知道有哪些services可用可以使用以下命令

 firewall-cmd --get-services
 
RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client ceph ceph-mon dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync freeipa-ldap freeipa-ldaps freeipa-replication ftp high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mosh mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster radius rpc-bind rsyncd samba samba-client sane smtp smtps snmp snmptrap squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server

ports

是一個可選標記,可多次用於具有多個端口條目。端口條目的所有屬性都是強制性的:

port="portid[-portid]"     #定義端口或者端口範圍
protocol="tcp|udp|sctp|dccp"    #定義協議類型

配置端口可訪問

firewall-cmd --zone==public --add-port=80/tcp --permanent                                                                                                                                                            

這裏是在public zone下配置添加port特性爲運行80端口的tcp請求。參數–permanent是爲了在重啓的情況下該規則任然生效,也就是持久化配置

爲什麼配置到public zone下呢?因爲默認的zone就是public,可以使用以下命令查看

firewall-cmd --get-default-zone

在設置完路由規則後需要重新加載

firewall-cmd --reload

更多的選項和使用方法大家可以查看firewall-cmd的help

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