伺服器防火牆設定一網打盡
防火牆是伺服器防護的第一道關卡,防火牆設定得好不會讓你飛起來,但是至少不會讓你跌的太慘,有太多的問題其實只要一個簡單的防火牆即可規避。當然傳統意義的防火牆只能控制埠的開啟和關閉,埠開啟以後上面服務的漏洞和更復雜的HTTP類似的更多的安全問題這些防火牆無法避免。
是否配置防火牆是一個最基本的安全意識,是是否有貫徹最小許可權原則的體現。管理一臺伺服器,首先要看防火牆開放情況,有些購買的裝置本身無法設定防火牆,就需要上一層交換機或者防火牆協助防護。防火牆設定是越靠近越好,規則越細越好,縱深防禦路上資料中心和網際網路邊界上的較寬的防火牆規則也有存在的必要。
## 防火牆配置的多個途徑
GUI:透過GUI介面編輯防火牆,好處是簡單,不需要懂太多的防火牆知識,有驗證,效果跟visudo一樣。缺點就是編輯速度慢,觀察的時候不是太直觀。
CLI:設定速度快,有一定的驗證,需要熟悉防火牆語法。
配置檔案:直接修改配置檔案是速度最快的方法,可以進入DevOps自動化部署流程,缺點是直接修改配置檔案沒有驗證。
對於以上幾種配置途徑,各有優缺點,GUI降低了管理員的能力要求,但是也會帶來一些麻煩,如果介面做得不好,對於切換規則和查錯速度沒有直接命令或者操作log來的快速。如果對防火牆規則不是太熟悉,GUI配置後生成的規則是學習最好的材料。如果可能,最後應當做成配置檔案或者bat、sh等命令列集合,保證冪等,可重複執行,會大大降低配置和切換的工作量。
## 失效的防火牆
防火牆配置很簡單,但是防火牆失效的原因也很多:
一條過寬的規則隱藏在幾十條粒度不同的防火牆規則內
防火牆被乙方或者其他人為了除錯等原因關閉而沒有再開啟
防火牆本身規則不瞭解,沒有設定預設DROP或者忽略了IPv6協議
配置檔案格式錯誤導致服務無法啟動或者應用了舊的規則
應用了錯誤的情景模式,比如Windows規則配置的“公用網路”,但是某次啟動後應用了“專用網路”。
多次根據不同重保規則切換防火牆導致規則錯亂,遺漏或多餘。
實時生效和永續性生效的區別,有些規則啟動後就消失了。
所以驗證防火牆是否正確不是去閱讀規則,而是應當檢視放行日誌,採用nmap或者其他埠掃描工具定期掃描,如果寫過程式就知道,這是類似TDD的做法,首先寫一堆防火牆檢測規則AssertTrue/AssertFalse,然後再配置防火牆,直到所有所有測試透過。
## 防火牆配置步驟
所以建議的設定防火牆步驟是
通讀防火牆文件,熟悉所有設定
reset防火牆配置,排除干擾
使用GUI或者CLI配置,並觀察生成的配置檔案,作為模板
精確識別伺服器需要開放的埠和開放的範圍
根據模板修改,合併到自動化部署流程內
定期使用nmap掃描確認
配合業務的查錯
防火牆涉及到出和入,一般出我們不會限制,入也會涉及到狀態,比如調整系統時間的NTPD,為了規避時間的跳躍修正同步系統時間,跟ntpdate不同的是,他需要雙向開放防火牆。還有對於允許單播對多播或廣播響應,一個通常的錯誤有時候在於應用(類似VMWare vSAN)選擇了錯誤的多播地址而導致資訊洩露。這裡其實我也不是太明白,等明白了以後再說。
## 突然接手一臺沒有防火牆配置的伺服器
如果你突然接手一臺沒有配置防火牆規則的伺服器,比較暴力的做法是直接全部幹掉,等業務運維人員折騰很久後跳起來來找你。或者考慮友好性,首先應當使用tcpdump收集幾天的現網流量通訊情況,再配置一個較大的規則,保證業務的正常執行,再慢慢根據業務的執行情況和阻斷日誌收縮到最終的細的規則。
## 應用申明埠協議規則
一個有修養的應用,應當有對需要的埠和協議進行宣告的文件,並且這些宣告可以直接複製進入防火牆的配置內,UFW有applications.d,firewalld也有services,最不濟也應當有死的說明文件。就類似Android開發程式的許可權申明,或者SELinux,SELinux也是跟防火牆的命運一樣,處於經常被乙方關閉的狀態,實際上去匹配SELinux規則沒有那麼複雜,他跟防火牆一樣,也有阻斷Log,一個應用應當主動向SELinux申請最小需要的資源,包括埠開放,檔案讀寫路徑等,對其他人快速瞭解應用結構也是一個非常好的途徑。沒有開啟SELinux的原因就是懶,對安全沒有敬畏之心。
## 防火牆配置例項
Windows客戶端的防火牆比較複雜,“允許應用透過 Windows Defender 防火牆進行通訊”的條目過多導致審查工作量太大。如果一個程式需要對外通訊,會彈出UAC類似的介面讓我們選擇是否允許,一般的選擇都是允許,但是這個允許動作實際上開放範圍比較大,比如我最近重灌系統就發現,Windows Subsystem for Linux的SSHD、syncthing、Mouse without Borders等應用以應用程式而不是埠建立規則的許可權開放過大,而且解除安裝一個應用後防火牆規則不一定會自動刪除,這些需要手動調整。所以這裡不談客戶端,只說伺服器,包括Windows、Ubuntu ufw、CentOS6 iptables/ip6tables、CentOS7 firewalld等。
在下面的例項裡,都假定管理員IP 192.168.1.100 需要訪問伺服器所有埠,某個其他伺服器IP 192.168.1.200 要訪問 1433/tcp 埠,伺服器對外開放 80/443 埠。
## Windows 2k3 GUI
Windows 2k3早已經過了EOL,理論上不應當使用它,但是現實裡還是有大量內網還在使用,Windows 2k3沒有防火牆,只有控制皮膚裡面帶的“本地安全策略”的“IP安全策略”可以達到同樣的效果。關於GUI如何配置這裡不再細說,可自行Google。
## Windows 2k3 CLI
參考我2005年寫過的,,將以下命令存成.bat,重複執行。
REM =================開始咯================
REM =================冪等的關鍵================
netsh ipsec static ^
delete policy name=Haishion
netsh ipsec static ^
add policy name=Haishion
REM 新增2個動作,禁止和允許
netsh ipsec static ^
add filteraction name=Perm action=permit
netsh ipsec static ^
add filteraction name=Block action=block
REM 首先幹掉所有訪問
netsh ipsec static ^
add filterlist name=AllAccess
netsh ipsec static ^
add filter filterlist=AllAccess srcaddr=Me dstaddr=Any
netsh ipsec static ^
add rule name=BlockAllAccess policy=Haishion filterlist=AllAccess filteraction=Block
REM 開放管理員192.168.1.100無限制訪問
netsh ipsec static ^
add filterlist name=UnLimitedIP
netsh ipsec static ^
add filter filterlist=UnLimitedIP srcaddr=192.168.1.100 dstaddr=Me
netsh ipsec static ^
add rule name=AllowUnLimitedIP policy=Haishion filterlist=UnLimitedIP filteraction=Permit
REM 開放192.168.1.200可以訪問1433埠
netsh ipsec static ^
add filterlist name=SomeIPSomePort
netsh ipsec static ^
add filter filterlist=SomeIPSomePort srcaddr=192.168.1.200 dstaddr=Me dstport=1433 protocol=TCP
netsh ipsec static ^
add rule name=AllowSomeIPSomePort policy=Haishion filterlist=SomeIPSomePort filteraction=Permit
REM 開放80,443埠
netsh ipsec static ^
add filterlist name=OpenSomePort
netsh ipsec static ^
add filter filterlist=OpenSomePort srcaddr=Any dstaddr=Me dstport=80 protocol=TCP
netsh ipsec static ^
add filter filterlist=OpenSomePort srcaddr=Any dstaddr=Me dstport=443 protocol=TCP
netsh ipsec static ^
add rule name=AllowOpenSomePort policy=Haishion filterlist=OpenSomePort filteraction=Permit
## Windows 2k8以上 GUI
首先建議“還原預設設定”
然後進入“允許程式或功能透過 Windows 防火牆”。對每個進行設定。
接著開啟“高階設定”,點選“入站規則”,然後“按配置檔案篩選”,“按狀態篩選”,進行調整。
## Windows 2k8以上 CLI
netsh advfirewall reset
netsh advfirewall firewall delete rule name=all
netsh advfirewall set allprofiles state on
netsh advfirewall set allprofiles firewallpolicy blockinbound,allowoutbound
netsh advfirewall firewall add rule name="Trust Admin" dir=in protocol=tcp remoteip=192.168.1.100 action=allow
netsh advfirewall firewall add rule name="Trust web to 1433" dir=in protocol=tcp remoteip=192.168.1.200 localport=1433 action=allow
netsh advfirewall firewall add rule name="Open Port" dir=in protocol=tcp localport=80,443 action=allow
## Ubuntu ufw CLI
ufw reset
ufw enable
ufw default deny
ufw allow from 192.168.1.100
ufw allow proto tcp to any port 1433 from 192.168.1.200
ufw allow 80/tcp
ufw allow 443/tcp
## Ubuntu ufw 配置檔案
/etc/ufw/user.rules
/etc/ufw/user6.rules
這裡面的規則建議根據以上CLI生成後儲存成模板進入自動化部署,由於內容較多,這裡不再列出。
## CentOS6 iptables/ip6tables GUI
system-config-firewall-tui
## CentOS6 iptables/ip6tables CLI
iptables -F
iptables -P INPUT DROP
具體規則可參考下面的配置檔案,前面加上iptables即可
iptables -L
service iptables save
繼續對ip6tables操作
## CentOS6 iptables/ip6tables 配置檔案
/etc/sysconfig/iptables
/etc/sysconfig/ip6tables
# 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
# custom begin
-A INPUT -m state --state NEW -m tcp -p tcp -s 192.168.1.100 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp -s 192.168.1.200 --dport 1433 -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 443 -j ACCEPT
# custom end
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
## CentOS7 firewalld CLI
firewall-cmd --state
firewall-cmd --get-default-zone
firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.1.100 accept'
firewall-cmd --permanent --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.1.200 port port=1433 protocol=tcp accept'
firewall-cmd --enable service=http
firewall-cmd --add-port=443/tcp
firewall-cmd --reload
firewall-cmd --list-all
## CentOS7 firewalld 配置檔案
/etc/firewalld/zones/public.xml
<?xml version="1.0" encoding="utf-8"?>
<zone>
<short>Public</short>
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
<rule family="ipv4">
<source address="192.168.1.100"/>
<accept/>
</rule>
<rule family="ipv4">
<source address="192.168.1.200"/>
<port protocol="tcp" port="1433"/>
<accept/>
</rule>
<port protocol="tcp" port="80"/>
<port protocol="tcp" port="443"/>
</zone>
## 最後
重啟,確認服務正常,配置正常,nmap定期掃描。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31558018/viewspace-2636947/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 雲伺服器需要防火牆嗎?防火牆如何啟用設定?伺服器防火牆
- win10 防火牆設定方法_win10怎麼設定網路防火牆Win10防火牆
- CentOS防火牆設定CentOS防火牆
- 伺服器做好安裝和設定防火牆伺服器防火牆
- windows10網路防火牆在哪裡設定 windows10自帶網路防火牆怎麼設定Windows防火牆
- Linux設定防火牆iptablesLinux防火牆
- CentOS 7 防火牆設定CentOS防火牆
- 伺服器如何設定Windows Server 2012防火牆管理伺服器WindowsServer防火牆
- 伺服器window如何設定防火牆開放埠伺服器防火牆
- win10防火牆在哪裡設定 win10防火牆設定的方法Win10防火牆
- w10防火牆在哪裡設定 windows10防火牆設定操作方法防火牆Windows
- 伺服器防火牆的作用是什麼?如何設定?伺服器防火牆
- Win2003伺服器設定防火牆圖文教程伺服器防火牆
- windows10防火牆設定在哪裡_win10如何設定防火牆Windows防火牆Win10
- Ubuntu 下使用 UFW 設定防火牆Ubuntu防火牆
- 伺服器安全設定Centos7 防火牆firewall與iptables伺服器CentOS防火牆
- win10電腦防火牆在哪裡設定 win10設定防火牆的步驟Win10防火牆
- 恆訊科技分析:什麼是vps防火牆?如何設定vps防火牆?防火牆
- 伺服器防火牆命令伺服器防火牆
- linux學習筆記三:防火牆設定Linux筆記防火牆
- 在Linux中,如何設定防火牆規則?Linux防火牆
- Windows 2008 R2防火牆設定方法Windows防火牆
- 29server:10001埠和設定防火牆Server防火牆
- win10怎麼設定防火牆許可權_win10電腦防火牆許可權如何設定Win10防火牆
- windows10防火牆打不開怎麼辦_win10為什麼打不開防火牆Windows防火牆Win10
- windows10防火牆通知一直打不開怎麼辦_win10防火牆通知打不開如何修復Windows防火牆Win10
- Linux開啟防火牆並設定策略指令碼Linux防火牆指令碼
- 一網打盡非同步神器CompletableFuture非同步
- Apache Hudi核心概念一網打盡Apache
- win10怎麼關閉防火牆 電腦防火牆在哪裡設定關閉win10Win10防火牆
- 防火牆 | 網路協議防火牆協議
- 深入SQLite,一網打盡“危險操作”SQLite
- Spring IOC知識點一網打盡!Spring
- Python-OpenCV —— 基本操作一網打盡PythonOpenCV
- 一網打盡列舉操作 .net core
- WAb防火牆與傳統防火牆防火牆
- 鳥哥的伺服器10 防火牆伺服器防火牆
- 防火牆防火牆