FTP Server บน IIS: ตั้ง FTPS ให้คู่ค้าส่งไฟล์อย่างปลอดภัย

ตั้ง FTP Server บน IIS ของ Windows Server แบบบังคับ FTPS แยกโฟลเดอร์คู่ค้าด้วย User Isolation กำหนด passive port เปิดไฟร์วอลล์ให้ถูก แล้วทดสอบด้วย FileZilla

โดย ทีมงาน THAI DATA CLOUD อ่าน 14 นาที

แชร์FacebookXLINELinkedIn
FTP Server — FTP Server บน IIS: ตั้ง FTPS ให้คู่ค้าส่งไฟล์อย่างปลอดภัย
FTP Server บน IIS: ตั้ง FTPS ให้คู่ค้าส่งไฟล์อย่างปลอดภัย

คำตอบสั้น ๆ: ตั้ง FTP Server บน IIS ของ Windows Server แบบบังคับ FTPS แยกโฟลเดอร์คู่ค้าด้วย User Isolation กำหนด passive port เปิดไฟร์วอลล์ให้ถูก แล้วทดสอบด้วย FileZilla

คู่มือนี้อธิบาย FTP Server ทีละขั้นตอน พร้อมคำสั่งที่ใช้ได้จริงและปัญหาที่พบบ่อย

FTP Server บน IIS คือบริการรับส่งไฟล์ที่มากับ Windows Server ยังเป็นช่องทางที่คู่ค้า ระบบ ERP รุ่นเก่า และเครื่องสแกนเอกสารจำนวนมากรองรับ ปัญหาคือ FTP แบบดั้งเดิมส่งชื่อผู้ใช้ รหัสผ่าน และไฟล์เป็นข้อความธรรมดา ใครดักจับเครือข่ายระหว่างทางได้ก็อ่านได้ทั้งหมด ทางแก้คือบังคับใช้ FTPS ซึ่งเข้ารหัสด้วย TLS ทั้งช่องคำสั่งและช่องข้อมูล

คู่มือนี้เหมาะกับผู้ดูแล Windows Server ที่ต้องเปิดให้คู่ค้าหลายรายส่งไฟล์เข้ามาโดยไม่เห็นไฟล์ของกันและกัน เมื่อทำครบ คุณจะมี FTP Server ที่บังคับ FTPS แยกโฟลเดอร์ตามบัญชีผู้ใช้ ตั้งพอร์ต passive ให้ผ่านไฟร์วอลล์ได้จริง จำกัด IP และการเดารหัสผ่าน และทดสอบด้วย FileZilla แล้ว

สิ่งที่ต้องเตรียม

  • Windows Server 2016, 2019, 2022 หรือ 2025 ที่ติดตั้ง IIS แล้ว ถ้ายังไม่มี ดูคู่มือติดตั้ง IIS Web Server
  • ชื่อโดเมนสำหรับ FTP เช่น ftp.example.com ชี้มาที่ IP ของเครื่อง และใบรับรอง TLS ของชื่อนี้ใน store Local Computer > Personal ขอฟรีได้ตามคู่มือ win-acme
  • ไดรฟ์ข้อมูลแยกจากไดรฟ์ระบบ เช่น D: เพื่อไม่ให้ไฟล์ที่คู่ค้าส่งมาทำให้ไดรฟ์ C เต็ม
  • IP สาธารณะของคู่ค้าแต่ละราย สำหรับจำกัดการเข้าถึง
  • สิทธิ์แก้ Security Group ของเครื่องบน TDC Enterprise
แผนภาพการเชื่อมต่อ FTPS จากคู่ค้าผ่าน Security Group และ Windows Firewall ไปยัง FTP Server บน IIS ที่แยกโฟลเดอร์ตามผู้ใช้
FTP ใช้สองช่องทาง ต้องเปิดทั้งพอร์ต 21 และช่วงพอร์ต passive ทุกชั้นของไฟร์วอลล์

ขั้นตอนที่ 1: ติดตั้งบทบาท FTP Server

เปิด PowerShell แบบ Run as administrator แล้วติดตั้ง role service FTP Server ของ IIS ถ้าใช้หน้าจอ ให้ไปที่ Server Manager > Add Roles and Features ขยาย Web Server (IIS) แล้วติ๊ก FTP Server และ FTP Service

Install-WindowsFeature Web-Ftp-Server -IncludeManagementTools
Get-Service ftpsvc
ผลคำสั่ง PowerShell ติดตั้ง FTP Server บน IIS ด้วย Install-WindowsFeature และตรวจว่าบริการ Microsoft FTP Service ทำงานอยู่
ติดตั้งเสร็จโดยไม่ต้องรีบูต และบริการ ftpsvc ต้องเป็น Running

FTP Server ที่ใช้บัญชี Windows ตามคู่มือนี้ไม่ต้องติ๊ก FTP Extensibility ตัวเลือกนั้นใช้เมื่อต้องการบัญชีแบบ IIS Manager users หรือ provider ที่เขียนเอง

ขั้นตอนที่ 2: สร้างบัญชีคู่ค้าและโครงสร้างโฟลเดอร์

สร้างบัญชีในเครื่องสำหรับ FTP Server แยกให้คู่ค้าแต่ละราย อย่าแชร์บัญชีเดียวให้หลายบริษัท และห้ามใช้บัญชี Administrator ล็อกอิน FTP เพราะรหัสผ่านจะถูกเก็บไว้ในโปรแกรมของคู่ค้า

New-LocalGroup -Name "FTP-Partners" -Description "Partners allowed on FTP"
$pw = Read-Host "Password for partner-a" -AsSecureString
New-LocalUser -Name "partner-a" -Password $pw -PasswordNeverExpires -UserMayNotChangePassword
Add-LocalGroupMember -Group "FTP-Partners" -Member "partner-a"

FTP Server ของ IIS แยกผู้ใช้ด้วยชื่อโฟลเดอร์ บัญชีในเครื่องต้องอยู่ใต้ LocalUser\ชื่อผู้ใช้ ส่วนบัญชีโดเมนต้องอยู่ใต้ ชื่อโดเมน\ชื่อผู้ใช้ สร้างโฟลเดอร์และให้สิทธิ์ NTFS เฉพาะเจ้าของโฟลเดอร์

New-Item -ItemType Directory -Path "D:\FTP\LocalUser\partner-a\inbox", "D:\FTP\LocalUser\partner-a\outbox"
icacls "D:\FTP\LocalUser\partner-a" /grant "partner-a:(OI)(CI)M"

สิทธิ์ M (Modify) ให้คู่ค้าอัปโหลด แก้ไข และลบไฟล์ในโฟลเดอร์ของตัวเองได้ ถ้าต้องการให้ outbox อ่านได้อย่างเดียว ให้ตั้งสิทธิ์ของโฟลเดอร์นั้นเป็น RX แทน

ขั้นตอนที่ 3: สร้าง FTP site ที่บังคับ SSL บน FTP Server

เปิด Internet Information Services (IIS) Manager คลิกขวาที่ Sites > Add FTP Site... แล้วกรอกตามนี้

  1. FTP site name เป็น Partner FTP และ Physical path เป็น D:\FTP
  2. หน้า Binding and SSL Settings เลือก IP Address เป็น All Unassigned, Port 21 ติ๊ก Start FTP site automatically ในส่วน SSL เลือก Require SSL แล้วเลือกใบรับรองของ ftp.example.com ในช่อง SSL Certificate
  3. หน้า Authentication and Authorization Information ติ๊กเฉพาะ Basic ที่ Allow access to เลือก Specified roles or user groups ใส่ FTP-Partners และติ๊ก Permissions ทั้ง Read และ Write แล้วกด Finish

Basic authentication ส่งรหัสผ่านแบบไม่เข้ารหัสในตัวเอง แต่เมื่อบังคับ Require SSL แล้ว รหัสผ่านจะวิ่งอยู่ในช่อง TLS ที่เข้ารหัส ตรวจซ้ำที่ site > FTP SSL Settings ว่า SSL Policy เป็น Require SSL connections ถ้าเลือก Allow SSL connections โปรแกรมของคู่ค้าที่ตั้งค่าผิดจะยังเชื่อมต่อแบบไม่เข้ารหัสได้

ขั้นตอนที่ 4: เปิด FTP User Isolation

ที่ site Partner FTP ดับเบิลคลิก FTP User Isolation เลือก User name directory (disable global virtual directories) แล้วคลิก Apply ที่แผง Actions เมื่อ partner-a ล็อกอิน FTP Server จะพาเข้า D:\FTP\LocalUser\partner-a และถือว่าเป็น root ของบัญชีนั้น ผู้ใช้จะย้อนขึ้นไปเห็นโฟลเดอร์ของคู่ค้ารายอื่นไม่ได้

ถ้ายังไม่ได้สร้างโฟลเดอร์ของผู้ใช้คนใด ผู้ใช้คนนั้นจะล็อกอินไม่ได้และได้ข้อความ 530 User cannot log in, home directory inaccessible ซึ่งเป็นพฤติกรรมที่ถูกต้อง ช่วยกันบัญชีที่ไม่ได้ตั้งใจเปิดให้ใช้งาน

ขั้นตอนที่ 5: กำหนดพอร์ต passive ของ FTP Server

FTP ใช้สองการเชื่อมต่อ ช่อง control ที่พอร์ต 21 สำหรับคำสั่ง และช่อง data สำหรับรายการไฟล์และการโอนไฟล์ ในโหมด passive ฝั่ง FTP Server เป็นผู้เลือกพอร์ต data ถ้าไม่จำกัดช่วงพอร์ต จะเปิดไฟร์วอลล์ให้ถูกต้องไม่ได้

ใน IIS Manager คลิกชื่อเครื่องระดับบนสุด ดับเบิลคลิก FTP Firewall Support ใส่ Data Channel Port Range เป็น 50000-50100 แล้วคลิก Apply ช่วงที่ใช้ได้คือ 1024 ถึง 65535 จำนวนพอร์ตในช่วงควรมากกว่าจำนวนการโอนไฟล์พร้อมกันสูงสุดที่คาดไว้

หน้าจอจำลอง FTP Firewall Support ใน IIS Manager ที่ตั้ง Data Channel Port Range เป็น 50000-50100 สำหรับ FTP Server
ช่วงพอร์ตนี้ต้องตรงกับกฎใน Windows Firewall และ Security Group ทุกตัวเลข (ภาพจำลอง)

ถ้าเครื่องได้ IP ภายในแล้วออกอินเทอร์เน็ตผ่าน NAT ให้ไปที่ site Partner FTP > FTP Firewall Support แล้วใส่ IP สาธารณะในช่อง External IP Address of Firewall ไม่เช่นนั้น FTP Server จะบอก IP ภายในให้ไคลเอนต์ และการโอนไฟล์จะค้าง ถ้า IP สาธารณะผูกกับการ์ดเครือข่ายของเครื่องโดยตรง เว้นช่องนี้ว่างได้ หลังตั้งค่าให้รีสตาร์ตบริการ

Restart-Service ftpsvc

ขั้นตอนที่ 6: เปิดไฟร์วอลล์ของ FTP Server ทั้งในเครื่องและที่ Security Group

Windows Firewall มีตัวกรอง stateful FTP ที่ช่วยเปิดพอร์ต data ให้อัตโนมัติ แต่ใช้ไม่ได้กับ FTPS เพราะอ่านคำสั่งที่เข้ารหัสไม่ออก Microsoft จึงแนะนำให้ปิดตัวกรองนี้และเปิดช่วงพอร์ตตรง ๆ สร้างกฎที่จำกัด IP ของคู่ค้า

$partners = "198.51.100.20", "198.51.100.21"
New-NetFirewallRule -DisplayName "FTPS control 21" -Direction Inbound -Protocol TCP -LocalPort 21 -RemoteAddress $partners -Action Allow
New-NetFirewallRule -DisplayName "FTPS passive 50000-50100" -Direction Inbound -Protocol TCP -LocalPort 50000-50100 -RemoteAddress $partners -Action Allow
netsh advfirewall set global StatefulFtp disable

จากนั้นที่ TDC Enterprise เมนู Network > Firewall Security เพิ่มกฎ Inbound ใน Security Group ของเครื่อง ได้แก่ TCP พอร์ต 21 และ TCP แบบ Custom ช่วง 50000 ถึง 50100 โดยตั้ง Source เป็น IP ของคู่ค้าแบบ /32 ทีละราย ดูวิธีเพิ่มกฎในคู่มือ Security Group บน TDC Enterprise ช่วงพอร์ตต้องตรงกันทั้งสามที่ คือ FTP Server ใน IIS, Windows Firewall และ Security Group

ขั้นตอนที่ 7: ทดสอบ FTP Server ด้วย FileZilla และตรวจ log

บนเครื่องทดสอบภายนอก เปิด FileZilla ไปที่ File > Site Manager > New site ตั้งค่า

  • Protocol: FTP - File Transfer Protocol
  • Host: ftp.example.com และ Port: 21
  • Encryption: Require explicit FTP over TLS
  • Logon Type: Normal แล้วใส่ partner-a และรหัสผ่าน
  • แท็บ Transfer Settings เลือก Transfer mode เป็น Passive

ครั้งแรกที่เชื่อมต่อ FileZilla จะแสดงใบรับรองของ FTP Server ตรวจว่าชื่อเป็น ftp.example.com และวันหมดอายุถูกต้อง แล้วทดสอบสามอย่าง คือดูรายการไฟล์ อัปโหลดไฟล์เข้า inbox และดาวน์โหลดไฟล์จาก outbox ถ้าทั้งสามผ่าน แปลว่าช่อง control และ data ผ่านไฟร์วอลล์ครบแล้ว

log ของ FTP Server อยู่ที่ C:\inetpub\logs\LogFiles\FTPSVC2 โดยเลขท้ายคือ ID ของ site ดูได้ในคอลัมน์ ID ของหน้า Sites ใน log จะเห็นคำสั่ง USER, PASS, STOR และ RETR พร้อมรหัสตอบกลับ เช่น 226 แปลว่าโอนไฟล์สำเร็จ และ 530 แปลว่าล็อกอินไม่ผ่าน

รายการตรวจความปลอดภัยของ FTP Server ก่อนเปิดให้คู่ค้าใช้ ทั้ง Require SSL การแยกโฟลเดอร์ การจำกัด IP และการจำกัดการล็อกอินผิด
FTP แบบไม่เข้ารหัสส่งรหัสผ่านเป็นข้อความธรรมดา ต้องบังคับ SSL ทั้งช่อง control และ data

เพิ่มความปลอดภัยให้ FTP Server

ที่ระดับเครื่องใน IIS Manager เปิด FTP Logon Attempt Restrictions เลือกให้ปฏิเสธ IP ที่ล็อกอินผิดเกินจำนวนครั้งในช่วงเวลาที่กำหนด ช่วยลดการเดารหัสผ่านจากบอต และถ้ารายชื่อคู่ค้าคงที่ ให้ใช้ FTP IP Address and Domain Restrictions เพิ่ม Allow Entry ของ IP คู่ค้า แล้วตั้ง Edit Feature Settings ให้ Access for unspecified clients เป็น Deny เป็นชั้นป้องกันซ้อนกับ Security Group รายละเอียดการตั้งไฟร์วอลล์ของ FTP อ่านเพิ่มได้จากเอกสาร Configuring FTP Firewall Settings ของ Microsoft

ปัญหาที่พบบ่อยเกี่ยวกับ FTP Server

ล็อกอินได้แต่ขึ้น Failed to retrieve directory listing ต้องแก้อะไร?

ช่อง control ผ่านแล้วแต่ช่อง data ไม่ผ่าน ตรวจว่าช่วงพอร์ต passive ตรงกันทั้งใน IIS, Windows Firewall และ Security Group ตรวจว่ารีสตาร์ต ftpsvc หลังตั้งค่าแล้ว และถ้าเครื่องอยู่หลัง NAT ต้องใส่ External IP Address of Firewall ใน log ของ FileZilla ถ้าเห็นเซิร์ฟเวอร์ตอบ IP ภายใน เช่น 10.0.0.x แปลว่ายังไม่ได้ตั้งค่าข้อนี้

ขึ้น 530 User cannot log in, home directory inaccessible แปลว่าอะไร?

FTP Server หาโฟลเดอร์ของผู้ใช้ไม่เจอ หรือผู้ใช้ไม่มีสิทธิ์ NTFS บนโฟลเดอร์นั้น ตรวจว่าโฟลเดอร์ชื่อตรงกับชื่อผู้ใช้ทุกตัวอักษรใต้ D:\FTP\LocalUser และรัน icacls ตามขั้นตอนที่ 2 แล้ว

คู่ค้าเชื่อมต่อแล้วได้ข้อความ 534 Policy requires SSL ต้องทำอย่างไร?

แปลว่า FTP Server บังคับ SSL ตามที่ตั้งไว้ แต่โปรแกรมของคู่ค้าเชื่อมต่อแบบไม่เข้ารหัส ให้คู่ค้าเปลี่ยนการตั้งค่าเป็น explicit FTP over TLS หรือ FTPES ไม่ควรแก้ด้วยการลดนโยบายฝั่งเซิร์ฟเวอร์เป็น Allow SSL connections

ควรใช้ FTPS หรือ SFTP ดีกว่ากัน?

ทั้งสองเข้ารหัสเหมือนกัน SFTP ทำงานผ่าน SSH ใช้พอร์ตเดียว เปิดไฟร์วอลล์ง่ายกว่า ถ้าคู่ค้ารองรับ SFTP ให้พิจารณาOpenSSH Server บน Windows Server แต่ถ้าระบบของคู่ค้ารองรับแค่ FTP ตระกูลเดิม FTPS คือทางเลือกที่เข้ากันได้มากที่สุด

ถ้าต้องการให้ช่วยตั้ง FTP Server ให้คู่ค้าหลายราย หรือย้ายงานรับส่งไฟล์ไปบนระบบที่ดูแลง่ายกว่า ติดต่อทีมงาน THAI DATA CLOUD ได้ ดูเครื่องสำหรับงานนี้ได้ที่ Cloud Windows Server

อ่านเพิ่มเติมเกี่ยวกับ FTP Server

แชร์FacebookXLINELinkedIn

มีคำถามเรื่องบริการ? ติดต่อทีมงาน