Trong hai bài viết trước, chúng ta đã tìm hiểu về giải pháp Safe Links và Safe Attachments trong Microsoft Defender for Office 365 (MDO) về các khía cạnh như lợi ích, giấy phép cần thiết cũng như cách cấu hình thông qua giao diện Microsoft 365 Defender portal. Ở bài viết này, chúng ta sẽ từng bước cấu hình hai chức năng Safe Links và Safe Attachments bằng cách sử dụng PowerShell.
Bài viết tập trung hướng dẫn kỹ thuật triển khai cho người mới bắt đầu, bao gồm việc chuẩn bị môi trường, cài đặt module PowerShell, kết nối đến Exchange Online, và thực hiện cấu hình Safe Links & Safe Attachments cho nhóm thử nghiệm (pilot) cũng như toàn bộ tổ chức (organization)
Chuẩn bị môi trường
Trước khi tiến hành triển khai Safe Links và Safe Attachments bằng PowerShell, hãy đảm bảo các điều kiện sau được đáp ứng:
- Bản quyền Microsoft 365 phù hợp: Tổ chức cần sở hữu giấy phép Microsoft Defender for Office 365 Plan 1 hoặc Plan 2 cho tất cả người dùng mà bạn dự định bảo vệ. Các tính năng Safe Links và Safe Attachments được tích hợp sẵn trong một số gói như Office 365 E5, Microsoft 365 Business Premium, Microsoft 365 E5 hoặc có thể mua rời dưới dạng add-on nếu bạn đang dùng các gói Microsoft 365 khác.
- Quyền quản trị: Tài khoản quản trị dùng để kết nối PowerShell cần có quyền Global Administrator hoặc Security Administrator trong Microsoft 365. Quyền này đảm bảo bạn có thể tạo và chỉnh sửa chính sách Safe Links/Safe Attachments.
- Môi trường PowerShell: Máy tính của bạn cần cài đặt Windows PowerShell 5.1 (hoặc PowerShell 7 trở lên) và đã cài .NET Framework 4.7.2 (nếu dùng Windows PowerShell 5.1). Ngoài ra, hãy đảm bảo có kết nối Internet để kết nối đến dịch vụ Microsoft 365.
- Module Exchange Online: Cần cài đặt Exchange Online PowerShell V2 module (ExchangeOnlineManagement), công cụ cho phép quản trị Exchange Online qua PowerShell.
Bước 1: Cài đặt và tải module Exchange Online Management
Mở Windows PowerShell dưới quyền Administrator (Quyền Quản trị) trên máy tính. Chạy lệnh sau để cài đặt module Exchange Online (nếu chưa cài đặt trước đó):
Install-Module -Name ExchangeOnlineManagement

Nếu được nhắc về NuGet hoặc PSGallery chưa được cài đặt hoặc không tin cậy, hãy chọn Y (Yes) hoặc A (Yes to All) để đồng ý cài đặt và tin cậy kho lưu trữ.
Nếu trên thiết bị đã có phiên bản cũ của module Exchange Online Management, bạn có thể dùng câu lệnh bên dưới để cập nhật phiên bản mới nhất.
Install-Module -Name ExchangeOnlineManagement – Force
Sau khi cài đặt, nạp module vào phiên làm việc hiện tại bằng lệnh:
Import-Module ExchangeOnlineManagement
Lệnh trên sẽ giúp chúng ta sử dụng các cmdlet như Connect-ExchangeOnline, New-SafeLinksPolicy, New-SafeAttachmentPolicy,…của module này.
Bước 2: Kết nối PowerShell tới Exchange Online
Sau khi đã cài module Exchange Online hoàn chỉnh, bạn tiến hành kết nối PowerShell tới Exchange Online. Chạy lệnh sau và nhập thông tin đăng nhập (tài khoản quản trị tổ chức của bạn):

Connect-ExchangeOnline -UserPrincipalName <tài khoản quản trị>
Connect-ExchangeOnline -UserPrincipalName [email protected]
Lệnh Connect-ExchangeOnline sẽ mở cửa sổ đăng nhập. Đăng nhập tài khoản quản trị và mật khẩu, xác thực MFA (nếu được kích hoạt) để hoàn tất kết nối. Sau khi kết nối thành công, bạn đã có thể sử dụng các cmdlet Exchange Online để cấu hình chính sách.
Lưu ý: có thể bỏ qua tham số -UserPrincipalName để hệ thống tự yêu cầu nhập thông tin đăng nhập.
Bước 3: Kích hoạt chức năng Safe Attachments cho SharePoint, OneDrive, Teams
Mặc định, Safe Attachments chỉ quét file đính kèm trong email. Nếu bạn muốn bật bảo vệ tập tin trên các dịch vụ SharePoint, OneDrive, Teams, cần kích hoạt trong phần Global Settings của Safe Attachments. Có thể thực hiện nhanh bước này qua PowerShell bằng lệnh:
Set-AtpPolicyForO365 -EnableATPForSPOTeamsODB $true
Lệnh trên sẽ bật tính năng Safe Attachments cho SharePoint, OneDrive và Microsoft Teams (tương đương việc bật tùy chọn này trong trang Microsoft Defender). Sau khi bật, hệ thống sẽ giám sát và chặn các tập tin độc hại được chia sẻ qua các dịch vụ này.
Sau khi cấu hình xong, có thể kiểm tra lại thiết lập đã thành công hay chưa bằng cách gõ lệnh
Get-AtpPolicyForO365

Microsoft khuyến cáo bật tính năng bảo vệ file trên SharePoint/OneDrive/Teams để tránh người dùng vô tình tải hoặc chia sẻ file nhiễm mã độc trong nội bộ.
Ngoài ra để ngăn người dùng tải xuống các tệp độc hại đã bị Safe Attachments phát hiện trên SharePoint/OneDrive, bạn có thể sử dụng SharePoint Online PowerShell với lệnh:
Set-SPOTenant -DisallowInfectedFileDownload $true
Lệnh này chặn cả người dùng và quản trị viên tải xuống các tập tin đã bị đánh dấu là nhiễm mã độc. Yêu cầu quyền Global Admin hoặc SharePoint Admin để sử dụng được lệnh này.
Bước 4: Cấu hình Safe Links bằng PowerShell
Chức năng Safe Links giúp quét và ghi đè URL trong email, Teams, tài liệu Office để chặn các liên kết độc hại khi người dùng bấm vào. Trong phần này, chúng ta sẽ tạo mới chính sách Safe Links và quy tắc áp dụng (Safe Links rule) thông qua PowerShell, trước tiên cho một nhóm người dùng thử nghiệm (pilot), sau đó mở rộng phạm vi ra toàn bộ tổ chức (organization).
Tạo chính sách Safe Links cho nhóm thử nghiệm (Pilot)
Trước khi áp dụng rộng, bạn nên tạo một chính sách Safe Links cho một nhóm người dùng nhỏ (nhóm pilot) để kiểm thử. Giả sử tổ chức đã có sẵn một nhóm người dùng có tên là “IT-Group” chứa các người dùng thuộc nhóm thử nghiệm.
Chúng ta sẽ tạo Safe Links Policy mới với các thiết lập khuyến nghị như sau cho nhóm người này.
- Bật bảo vệ liên kết trong email và các ứng dụng: Kích hoạt tính năng Safe Links cho email (Exchange Online), và mở rộng bảo vệ cho Teams và ứng dụng Office (Word, Excel, PowerPoint) để bảo vệ các liên kết trong chat và trong tài liệu Office.
- Quét và ghi đè mọi URL: Bật ScanUrls = $true để quét tất cả URL trong email (đảm bảo các link đều được kiểm tra và chuyển thành dạng an toàn với tiền tố protection.outlook.com).
- Kiểm tra URL thời gian thực & chặn email cho đến khi quét xong: Bật DeliverMessageAfterScan = $true để yêu cầu hệ thống chỉ gửi email sau khi quá trình quét link hoàn tất. Tùy chọn này đảm bảo những email có link nghi ngờ sẽ tạm giữ lại cho đến khi kết quả quét an toàn.
- Bảo vệ liên kết nội bộ: Bật EnableForInternalSenders = $true để những email gửi trong nội bộ tổ chức cũng được áp dụng Safe Links (mặc định nếu $false thì chỉ email từ bên ngoài vào mới được quét link).
- Không cho phép bỏ qua cảnh báo: Đặt AllowClickThrough = $false để ngăn người dùng tự ý truy cập link gốc sau khi nhận cảnh báo. Khi đó, nếu link bị xác định là độc hại, người dùng sẽ không có tùy chọn “Continue anyway” mà link sẽ bị chặn hoàn toàn.
- Theo dõi lượt nhấp: Bật TrackClicks = $true (mặc định đã là $true nếu không chỉ định) để ghi lại nhật ký khi người dùng bấm vào các URL đã được Safe Links xử lý. Điều này hỗ trợ cho việc báo cáo và tra cứu về sau.
Dựa trên các yêu cầu trên, chúng ta dùng lệnh New-SafeLinksPolicy để tạo chính sách mới. Ví dụ lệnh dưới đây tạo một Safe Links policy tên là “Pilot Safe Links” với các thiết lập đã liệt kê:

New-SafeLinksPolicy -Name "Pilot Safe Links" `
-EnableSafeLinksForEmail $true `
-EnableSafeLinksForOffice $true `
-EnableSafeLinksForTeams $true
-EnableForInternalSenders $true `
-ScanUrls $true `
-DeliverMessageAfterScan $true `
-TrackClicks $true `
-AllowClickThrough $false
Sau khi chạy lệnh trên, một Safe Links policy mới tên “Pilot Safe Links” sẽ được tạo. Lưu ý rằng policy này chưa tự động áp dụng cho người dùng cho đến khi chúng ta tạo một rule đi kèm và gán policy cho rule đó.
Tạo Safe Links Rule áp dụng policy cho nhóm pilot
Để gán chính sách Pilot Safe Links cho nhóm người dùng IT-Pilot, chúng ta sử dụng cmdlet New-SafeLinksRule. Lệnh bên dưới sẽ tạo một rule tên “Pilot Safe Links Rule” và liên kết với policy vừa tạo:

New-SafeLinksRule -Name "Pilot Safe Links Rule" `
-SafeLinksPolicy "Pilot Safe Links" `
-SentToMemberOf "IT-Pilot" `
-Enabled $true
Giải thích các thông số
- SafeLinksPolicy chỉ định tên chính sách Safe Links được áp dụng, chính là “Pilot Safe Links” vừa tạo ở bước trên.
- Điều kiện áp dụng (recipient filters): Ở đây dùng tham số SentToMemberOf để áp dụng cho toàn bộ thành viên của nhóm “IT-Pilot”. Ngoài ra, có thể dùng -SentTo để chỉ định trực tiếp từng người dùng, hoặc -RecipientDomainIs để áp dụng cho mọi người dùng thuộc một (hoặc nhiều) tên miền cụ thể. Lưu ý: Mỗi rule phải có ít nhất một điều kiện (Users, Groups hoặc Domains); nếu để trống hoàn toàn thì rule sẽ không hợp lệ.
- Enabled = $true để kích hoạt rule ngay sau khi tạo (mặc định rule mới tạo đã ở trạng thái bật, nhưng ở đây chúng ta chỉ rõ để tránh nhầm lẫn).
Mẹo: Sử dụng tham số -ExceptIf… (như ExceptIfSentToMemberOf, ExceptIfRecipientDomainIs,…) để loại trừ các đối tượng không áp dụng chính sách nếu cần. Ví dụ: thêm -ExceptIfSentToMemberOf “BanLanhDao” để không áp dụng Safe Links cho nhóm BanLanhDao trong đợt pilot. Các điều kiện loại trừ (exception) của rule tuân theo logic OR giữa các giá trị cùng loại, và giữa các loại exception khác nhau cũng là OR.
Sau khi tạo rule, chính sách “Pilot Safe Links” đã có hiệu lực cho nhóm IT-Pilot. Bạn có thể kiểm tra lại cấu hình bằng các lệnh:
# Liệt kê tất cả các Safe Links policy cùng một số thiết lập chính
Get-SafeLinksPolicy | Format-Table Name, EnableSafeLinksForEmail, EnableSafeLinksForTeams, EnableForInternalSenders, TrackClicks, AllowClickThrough

# Liệt kê tất cả các Safe Links rule và điều kiện áp dụng
Get-SafeLinksRule | Format-Table Name, SafeLinksPolicy, SentTo, SentToMemberOf, RecipientDomainIs, Enabled, Priority
Kết quả dự kiến sẽ liệt kê chính sách Pilot Safe Links và rule Pilot Safe Links Rule. Trường Priority thể hiện thứ tự áp dụng của rule (0 là cao nhất). Thông thường rule tạo sau sẽ có Priority cao hơn (số lớn hơn) rule tạo trước – bạn có thể thay đổi thứ tự này bằng cách dùng Set-SafeLinksRule -Priority nếu cần.
Thời gian áp dụng: Các thay đổi hoặc chính sách Safe Links mới có thể mất đến 6 giờ để có hiệu lực trên toàn hệ thống. Hãy kiên nhẫn chờ đợi hoặc triển khai trong thời gian thích hợp để giảm thiểu ảnh hưởng đến người dùng
Mở rộng triển khai Safe Links cho toàn tổ chức
Sau khi thử nghiệm hiệu quả trên nhóm nhỏ, bạn có thể tiến hành áp dụng Safe Links cho toàn bộ người dùng trong tổ chức. Có hai cách:
Cách 1: Sửa rule hiện có
Thay đổi điều kiện của Pilot Safe Links Rule từ nhóm IT-Pilot thành toàn bộ tổ chức. Giả sử tất cả email trong công ty dùng miền “cloudsec.expert”, bạn có thể cập nhật bằng lệnh:
# Áp dụng Safe Links cho toàn bộ hộp thư thuộc miền cloudsec.expert
Set-SafeLinksRule -Identity "Pilot Safe Links Rule" `
-RecipientDomainIs "cloudsec.expert" `
-SentToMemberOf $null -SentTo $null
Lệnh trên gán lại điều kiện áp dụng của rule thành mọi người dùng có địa chỉ trong domain cloudsec.expert, đồng thời loại bỏ điều kiện theo nhóm (bằng cách đặt -SentToMemberOf $null). Nếu công ty có nhiều miền email, liệt kê tất cả trong một mảng, ví dụ: -RecipientDomainIs ” cloudsec.expert “,”ccp.guru”.
Cách 2: Tạo chính sách và rule mới cho toàn tổ chức
Giữ lại chính sách/rule pilot (phòng khi cần tham chiếu hoặc so sánh), đồng thời tạo Safe Links policy mới cho cả công ty, kèm một Safe Links rule áp dụng policy đó cho mọi người dùng:
Câu lệnh PowerShell tương ứng
# Tạo Safe Links Policy cho toàn tổ chức với cấu hình tương tự policy pilot
New-SafeLinksPolicy -Name "Organization Safe Links" `
-EnableSafeLinksForEmail $true `
-EnableSafeLinksForOffice $true `
-EnableSafeLinksForTeams $true `
-EnableForInternalSenders $true `
-ScanUrls $true -DeliverMessageAfterScan $true `
-TrackClicks $true -AllowClickThrough $false
# Tạo Safe Links Rule áp dụng policy trên cho mọi người dùng trong domain công ty
New-SafeLinksRule -Name "Org Safe Links Rule" `
-SafeLinksPolicy "Organization Safe Links" `
-RecipientDomainIs "cloudsec.expert" -Enabled $true
Sau khi thực hiện, dùng lệnh Get-SafeLinksPolicy/Rule để kiểm tra danh sách và xác nhận chính sách mới đã Enabled.
Nếu có nhiều rule, hãy chú ý cột Priority (ưu tiên) của chúng. Rule nào có Priority (số thứ tự) nhỏ hơn sẽ được áp dụng trước. Lưu ý rằng các chính sách “preset” (Standard/Strict/Built-in) luôn được áp dụng trước các chính sách tùy chỉnh của bạn, do đó hãy điều chỉnh Priority của các custom rule sao cho không xung đột với các preset policy