FTP Server บน IIS: ตั้ง FTPS ให้คู่ค้าส่งไฟล์อย่างปลอดภัย
ตั้ง FTP Server บน IIS ของ Windows Server แบบบังคับ FTPS แยกโฟลเดอร์คู่ค้าด้วย User Isolation กำหนด passive port เปิดไฟร์วอลล์ให้ถูก แล้วทดสอบด้วย FileZilla
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 แล้ว
ชื่อโดเมนสำหรับ FTP เช่น ftp.example.com ชี้มาที่ IP ของเครื่อง และใบรับรอง TLS ของชื่อนี้ใน store Local Computer > Personal ขอฟรีได้ตามคู่มือ win-acme
ไดรฟ์ข้อมูลแยกจากไดรฟ์ระบบ เช่น D: เพื่อไม่ให้ไฟล์ที่คู่ค้าส่งมาทำให้ไดรฟ์ C เต็ม
IP สาธารณะของคู่ค้าแต่ละราย สำหรับจำกัดการเข้าถึง
สิทธิ์แก้ Security Group ของเครื่องบน TDC Enterprise
เปิด PowerShell แบบ Run as administrator แล้วติดตั้ง role service FTP Server ของ IIS ถ้าใช้หน้าจอ ให้ไปที่ Server Manager > Add Roles and Features ขยาย Web Server (IIS) แล้วติ๊ก FTP Server และ FTP Service
ขั้นตอนที่ 3: สร้าง FTP site ที่บังคับ SSL บน FTP Server
เปิด Internet Information Services (IIS) Manager คลิกขวาที่ Sites > Add FTP Site... แล้วกรอกตามนี้
FTP site name เป็น Partner FTP และ Physical path เป็น D:\FTP
หน้า Binding and SSL Settings เลือก IP Address เป็น All Unassigned, Port 21 ติ๊ก Start FTP site automatically ในส่วน SSL เลือก Require SSL แล้วเลือกใบรับรองของ ftp.example.com ในช่อง SSL Certificate
หน้า Authentication and Authorization Information ติ๊กเฉพาะ Basic ที่ Allow access to เลือก Specified roles or user groups ใส่ FTP-Partners และติ๊ก Permissions ทั้ง Read และ Write แล้วกด Finish
ที่ 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 จำนวนพอร์ตในช่วงควรมากกว่าจำนวนการโอนไฟล์พร้อมกันสูงสุดที่คาดไว้
ช่วงพอร์ตนี้ต้องตรงกับกฎใน 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 ของคู่ค้า
จากนั้นที่ 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 แบบไม่เข้ารหัสส่งรหัสผ่านเป็นข้อความธรรมดา ต้องบังคับ 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 แปลว่าอะไร?