今天來到第二十三天了,距離完賽只剩一周了,到這裡我們也學了不少東西了,恭喜各位! 今天我們要來學的主題是防火牆,學會防火牆可以幫助我們保護主機跟網路防止惡意流量進入,以及控制資料流跟阻止內網外洩,更重要的是,很多標準(PCI-DSS、ISO27001)都會要求要有防火牆。
我們可以將防火牆想像成一種「流量的過濾器」,位於主機或網路的邊界,會依照規則來決定封包的處置方式
,有允許、拒絕跟丟棄三種方式,而我們常見的防火牆類型有幾種類型,這邊介紹其中三種,第一種是裝在單一主機的(例如我們電腦上的Windows防火牆),叫Host-based Firewall,第二種是Network Firewall,這是一種放在網路邊界的專用設備(例如Cisco ASA),第三種則是更進階的Next-Gen Firewall (NGFW),這是更進階的防火牆,能夠檢查應用層的流量。
首先我們要來介紹無狀態(Stateless)與有狀態(Stateful)的差別
接著要來講一些在這方面會比較常看到的關鍵詞
還有兩個關於Linux的小內容,一個是Netfilter另一個則是conntrack
ntfables:現代Linux的預設,替代iptables。在語法上更現代,效能也更好,統一IPv4/IPv6
iptables:傳統但仍廣泛使用的工具有iptables(IPv4)/ip6tables(IPv6)/arptables/ebtables
ufw與firewalld:ufw(Ubuntu)與firewalld(CentOS)包裝底層工具,適合快速部署
這部分可以說是最重要也最核心的地方之一,因為沒有正確理解封包流向的話可能會將規則寫錯,把自己給擋了
最小權限/白名單原則
1.預設拒絕incoming(deny by default),只允許必要port(SSH/HTTPS/HTTP)
2.出站預設允許,但對內網敏感環境可反向設為deny(只允許必要外連)
分層設計
1.外部邊界firewall:只允許到DMZ的HTTP/HTTPS/SSH(其他丟棄)
2.DMZ firewall:允許來自外部的Web流量,但限制到內網管理介面
3.Host-based firewall:在伺服器上再收緊(只允許管理IP連SSH)
Logging與Alerting
1.開啟日誌(但要注意log volume),把拒絕事件送到集中化系統(ELK/Graylog/Splunk)
2.設定log rate-limiting(避免 DOS log flooding)
這邊選用ufw是因為Ubuntu常用並且是iptables的簡化版,對於我們這種初學比較容易上手
使用指令:
sudo apt update
sudo apt install ufw -y
sudo ufw enable
sudo ufw status verbose
使用指令:
sudo ufw default deny incoming
sudo ufw default allow outgoing
這樣設定會預設阻擋所有外部進來的連線,並允許主機對外連線
使用指令:
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
allow ssh允許我們遠端管理伺服器
allow http/https允許Web server對外提供服務
使用指令:
sudo ufw status numbered
這樣會列出目前所有規則
接著使用指令:
sudo python3 -m http.server 22
最後在使用指令:
nc -vz 127.0.0.1 22
來測試是否能連線,根據我們的設定結果,防火牆應該要會是允許,如圖所示:
以上就是我們今天的實作內容,最後如果有需要刪除規則,可以使用指令:
sudo ufw delete <編號>
今天我們學習了防火牆相關的知識與概念,並學習如何建立簡單的防火牆