From: 011netservice@gmail.com Date: 2025-06-03 Subject: Firewall-防火牆.txt 歡迎來信交流, 訂購軟體需求. #### 查詢 **** 查詢規則 遠端桌面 Get-NetFirewallRule -DisplayGroup "遠端桌面" | ForEach-Object { $rule = $_ $filter = Get-NetFirewallAddressFilter -AssociatedNetFirewallRule $rule [PSCustomObject]@{ Name = $rule.Name DisplayName = $rule.DisplayName Enabled = $rule.Enabled Direction = $rule.Direction Action = $rule.Action Profile = $rule.Profile RemoteAddress = $filter.RemoteAddress } } - `Get-NetFirewallRule -DisplayGroup "遠端桌面"`:取得所有屬於「遠端桌面」群組的規則。 - `Get-NetFirewallAddressFilter`:取得與該規則相關的位址篩選條件。 - `RemoteAddress`:顯示該規則允許或封鎖的遠端 IP 位址(例如 `Any`、`192.168.1.0/24` 等)。 **** PowerShell 查詢遠端桌面 Get-NetFirewallRule -DisplayGroup "Remote Desktop" Get-NetFirewallRule -DisplayGroup "遠端桌面" **** netsh 查詢遠端桌面 netsh advfirewall firewall show rule name="Remote Desktop" netsh advfirewall firewall show rule name="遠端桌面" **** 檢查遠端桌面服務是否啟用 Get-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server" -Name fDenyTSConnections - 如果回傳值是 `0`,表示允許遠端桌面連線。 - 如果是 `1`,表示不允許。 **** 顯示所有啟用的防火牆規則(可過濾關鍵字) Get-NetFirewallRule | Where-Object { $_.Enabled -eq "True" -and $_.DisplayName -like "*Remote*" } **** 查詢 port netsh advfirewall firewall show rule name=all | findstr /i "3389" **** 查詢 port PowerShell Get-NetFirewallRule | Where-Object { $_.Direction -eq "Inbound" } | Where-Object { (Get-NetFirewallPortFilter -AssociatedNetFirewallRule $_).LocalPort -eq 3389 } **** 查詢 是否監聽 port netstat -an | findstr :3389 #### 檢查 Windows port 是否對外開放 ? 要檢查 Windows 上的某個埠(port)是否對外開放,可以使用以下幾種方法: --- ### ✅ 方法一:使用 PowerShell 測試遠端連線 ```powershell Test-NetConnection -ComputerName <你的 IP 或網域名稱> -Port <埠號> ``` 例如: ```powershell Test-NetConnection -ComputerName 8.8.8.8 -Port 53 ``` 這會顯示該埠是否可以從你的電腦連線到指定主機。 --- ### ✅ 方法二:使用 `netstat` 查看本機開放的埠 ```cmd netstat -an | find "LISTEN" ``` 這會列出所有正在監聽的埠。你可以檢查是否有你關心的埠在監聽中。 --- ### ✅ 方法三:使用防火牆檢查規則 ```powershell Get-NetFirewallRule | Where-Object { $_.Direction -eq "Inbound" -and $_.Action -eq "Allow" } ``` 這可以幫你確認是否有允許某個埠的防火牆規則。 --- ### ✅ 方法四:使用外部工具檢查(從外部網路) 你可以使用網站如: - https://www.yougetsignal.com/tools/open-ports/ - https://portchecker.co/ 輸入你的公網 IP 和埠號,檢查是否對外開放。 #### 開放或關閉 port 給 (指定的 IP 和 本機子網路) 使用 Windows 防火牆 如何以 指令方式 開放或關閉 port 3306 給 (指定的 IP 和 本機子網路) 使用 ? 你可以使用 **Windows PowerShell** 或 **命令提示字元(CMD)** 來透過 `netsh` 指令設定 Windows 防火牆規則,開放或封鎖特定的 port(例如 MySQL 使用的 3306),並限制只允許特定 IP 或本機子網路存取。 以下是具體的指令範例: --- ### ✅ 開放 port 3306 給指定 IP(例如:192.168.1.100) ```powershell netsh advfirewall firewall add rule name="Allow MySQL from 192.168.1.100" ` dir=in action=allow protocol=TCP localport=3306 remoteip=192.168.1.100 ``` --- ### ✅ 開放 port 3306 給本機子網路(例如:192.168.1.0/24) ```powershell netsh advfirewall firewall add rule name="Allow MySQL from Local Subnet" ` dir=in action=allow protocol=TCP localport=3306 remoteip=192.168.1.0/24 ``` --- ### ❌ 關閉 port 3306(封鎖所有來源) ```powershell netsh advfirewall firewall add rule name="Block MySQL Port 3306" ` dir=in action=block protocol=TCP localport=3306 ``` --- ### 🔄 刪除已建立的防火牆規則(如果需要) ```powershell netsh advfirewall firewall delete rule name="Allow MySQL from 192.168.1.100" netsh advfirewall firewall delete rule name="Allow MySQL from Local Subnet" netsh advfirewall firewall delete rule name="Block MySQL Port 3306" ``` 批次檔 firewall_rules.bat,以系統管理員身份執行內容包含: 1. **允許**來自指定 IP `192.168.1.100` 的 TCP 3306 存取。 2. **允許**來自本機子網路 `192.168.1.0/24` 的 TCP 3306 存取。 3. **封鎖**所有其他來源對 TCP 3306 的存取。 4. **附加註解**:可選擇性刪除這些規則。 @echo off REM Open port 3306 for specific IP netsh advfirewall firewall add rule name="Allow MySQL from 192.168.1.100" ^ dir=in action=allow protocol=TCP localport=3306 remoteip=192.168.1.100 REM Open port 3306 for local subnet netsh advfirewall firewall add rule name="Allow MySQL from Local Subnet" ^ dir=in action=allow protocol=TCP localport=3306 remoteip=192.168.1.0/24 REM Block port 3306 for all other access netsh advfirewall firewall add rule name="Block MySQL Port 3306" ^ dir=in action=block protocol=TCP localport=3306 REM Delete the rules if needed REM netsh advfirewall firewall delete rule name="Allow MySQL from 192.168.1.100" REM netsh advfirewall firewall delete rule name="Allow MySQL from Local Subnet" REM netsh advfirewall firewall delete rule name="Block MySQL Port 3306" 轉成 PowerShell 版本 firewall_rules.ps1: - ✅ 開放 TCP port **3306** 給: - 指定 IP:`192.168.1.100` - 本機子網路:`192.168.1.0/24` - ✅ 開放 TCP port **1433** 給: - 指定 IP:`192.168.1.101` - ❌ 封鎖所有其他來源對 port **3306** 的存取 - 🧹 附加註解:可選擇性刪除這些規則 # Allow TCP port 3306 from IP 192.168.1.100 netsh advfirewall firewall add rule name="Allow MySQL from 192.168.1.100" ` dir=in action=allow protocol=TCP localport=3306 remoteip=192.168.1.100 # Allow TCP port 3306 from subnet 192.168.1.0/24 netsh advfirewall firewall add rule name="Allow MySQL from Local Subnet" ` dir=in action=allow protocol=TCP localport=3306 remoteip=192.168.1.0/24 # Allow TCP port 1433 from IP 192.168.1.101 netsh advfirewall firewall add rule name="Allow SQL Server from 192.168.1.101" ` dir=in action=allow protocol=TCP localport=1433 remoteip=192.168.1.101 # Block all other access to port 3306 netsh advfirewall firewall add rule name="Block MySQL Port 3306" ` dir=in action=block protocol=TCP localport=3306 # Commands to remove these rules (if needed) # netsh advfirewall firewall delete rule name="Allow MySQL from 192.168.1.100" # netsh advfirewall firewall delete rule name="Allow MySQL from Local Subnet" # netsh advfirewall firewall delete rule name="Allow SQL Server from 192.168.1.101" # netsh advfirewall firewall delete rule name="Block MySQL Port 3306" #### 測試 Windows 檔案共用是否在內部網路中正常運作 你可以使用以下兩種方式來測試 Windows 檔案共用是否在內部網路中正常運作: --- ### 🧪 方法一:使用 `ping` 測試裝置是否可達 這個方法可以確認你的電腦是否能夠連線到另一台裝置(例如共用資料夾的電腦)。 #### 步驟: 1. 在共用資料夾的電腦上,打開命令提示字元(`cmd`),輸入: ``` ipconfig ``` 找到該電腦的 **IPv4 位址**(例如:192.168.1.10)。 2. 在另一台電腦上,打開命令提示字元,輸入: ``` ping 192.168.1.10 ``` 如果看到回應(如 `Reply from 192.168.1.10: bytes=32 time=...`),表示網路連線正常。 --- ### 🧪 方法二:使用 `net view` 查看共用裝置 這個方法可以列出區域網路中可見的裝置與共用資源。 #### 步驟: 1. 在命令提示字元輸入: ``` net view ``` 如果網路設定正確,會列出區域網路中其他可見的電腦名稱。 2. 若要查看某台電腦的共用資料夾,輸入: ``` net view \\電腦名稱 ``` 例如: ``` net view \\DESKTOP-1234 ``` --- ### 🧰 補充工具:使用 `\\IP位址` 直接存取共用資料夾 你也可以在檔案總管的地址列輸入: ``` \\192.168.1.10 ``` 這會直接嘗試連線到該電腦的共用資料夾。 --- 如果你想,我可以幫你寫一個簡單的批次檔或 PowerShell 腳本,自動檢查這些項目。你有特定的電腦名稱或 IP 想測試嗎? 這是一個簡單的 **Windows 批次檔(`.bat`)範例**,可以幫你: 1. 檢查是否能 `ping` 到指定的 IP。 2. 使用 `net view` 查看區網中的裝置。 3. 嘗試列出指定電腦的共用資料夾。 --- ### 📄 批次檔內容(你可以儲存為 `check_share.bat`) ```bat @echo off setlocal :: 設定目標電腦 IP 或名稱 set TARGET=192.168.1.10 echo. echo [1] 正在 ping %TARGET% ... ping -n 3 %TARGET% echo. echo [2] 查看區域網路中的裝置 ... net view echo. echo [3] 查看 %TARGET% 的共用資料夾 ... net view \\%TARGET% echo. pause ``` --- ### 🛠 使用方式 1. 開啟記事本,貼上上面的內容。 2. 儲存為 `check_share.bat`(副檔名請選「所有檔案」,不要是 `.txt`)。 3. 右鍵點選該檔案 → **以系統管理員身分執行**(有些網路命令需要權限)。 --- ### 🧩 進階建議 - 你可以把 `set TARGET=192.168.1.10` 改成你要測試的電腦名稱(例如 `DESKTOP-1234`)。 - 若要測試多台電腦,可以用 `for` 迴圈來批次處理。 --- 需要我幫你做一個可以輸入 IP 或電腦名稱的互動式版本嗎?或者你想要這個批次檔的下載檔案? 這是你要的 **互動式批次檔**,可以讓使用者輸入目標電腦的 IP 或名稱,然後: 1. 執行 `ping` 測試。 2. 顯示區域網路中的裝置。 3. 顯示該目標電腦的共用資料夾。 📄 下載檔案: 👉 [interactive_check_share.bat](blob:https://outlook.office.com/77724f97-222b-4315-a2f6-354c0b3ca93e) --- ### 🧰 使用方式: 1. 下載並儲存這個 `.bat` 檔案。 2. 右鍵點選 → **以系統管理員身分執行**。 3. 輸入你想測試的電腦 IP 或名稱(例如:`192.168.1.10` 或 `DESKTOP-1234`)。 --- 需要我幫你加上更多功能嗎?例如: - 自動記錄結果到文字檔? - 檢查是否開啟檔案共用服務(如 `LanmanServer`)? 隨時告訴我! interactive_check_share.bat: @echo off setlocal :input echo. set /p TARGET=請輸入目標電腦 IP 或名稱: if "%TARGET%"=="" goto input echo. echo [1] 正在 ping %TARGET% ... ping -n 3 %TARGET% echo. echo [2] 查看區域網路中的裝置 ... net view echo. echo [3] 查看 %TARGET% 的共用資料夾 ... net view \%TARGET% echo. pause