Confidential Internal Document

Server Migration Proposal
Windows Server 2008 → Ubuntu Linux

Migration plan for the production fulfillment API server (VM 128 / aivweb-3.2) to a modern, secure, fully Linux-based infrastructure.

Prepared: April 8, 2026 System: aivweb-3.2 / 192.168.3.2 Priority: Critical
⚠ Security Alert: Windows Server 2008 reached End of Life on January 14, 2020. This server has received zero security patches for 6+ years and is actively running a production API with exposed RDP, FTP, and IIS services.

Executive Summary

OS Status
EOL 6yr
Windows Server 2008
No patches since Jan 2020
Exposed Ports
5 Open
RDP, FTP, HTTP, HTTPS, SMB
All unpatched
Backups
PBS Nightly
Proxmox Backup Server
Keep last 5, no app-level DB backup
API Endpoints
15 Ops
SOAP/ASMX — clients depend
on this contract
Data at Risk
135 GB
Used on 500GB data disk
MSSQL + app code
Migration Target
Ubuntu 24.04
FastAPI + PostgreSQL
100% Linux, same cluster

Current State Audit

ItemFindingRisk
Operating SystemWindows Server 2008 (EOL January 2020)Critical
Web StackIIS 7.0 + ASP.NET 4.0 (.NET Framework — Windows only)Critical
ApplicationSOAP Web Service — gateway.asmx — JM Field Fulfillment APIInfo
DatabaseMSSQL Server — local named pipes (TCP disabled)High
VM HostJMFPMX05 (Proxmox cluster R7), ZFS storageOK
OS Disk40 GB — 26.7 GB used (C: drive)OK
Data Disk500 GB — 135 GB used (app code + database)OK
Snapshots/BackupsProxmox Backup Server (DS001) — nightly 02:00, keeps last 5, snapshot modeOK
Port 21 (FTP)FileZilla Server 0.9.41 beta — exposed, unpatchedCritical
Port 3389 (RDP)Remote Desktop exposed — active sessions observedCritical
Port 445 (SMB)File sharing exposed — unpatched EternalBlue riskCritical
QEMU Guest AgentNot running — no visibility from ProxmoxMedium
Active UsersRDP sessions from 192.168.0.194 observedInfo

Security Risk Assessment

Critical

EternalBlue / SMB Exploit (MS17-010)

SMB port 445 is open on an unpatched Server 2008. EternalBlue — the vulnerability behind WannaCry — still works on unpatched Server 2008. A single network-accessible attacker can achieve full system compromise.

Critical

RDP BlueKeep / DejaBlue

CVE-2019-0708 (BlueKeep) and CVE-2019-1181 (DejaBlue) are wormable RDP vulnerabilities targeting Server 2008. Port 3389 is open. No patches have been applied since 2020.

High

No Application-Level DB Backup

Proxmox Backup Server runs nightly at 02:00 (keeps last 5). However, there is no application-level MSSQL backup — a VM-level restore requires full downtime. A dedicated DB backup would allow point-in-time recovery without restoring the entire VM.

High

FTP Cleartext Credentials

FileZilla Server (2009-era beta) is running on port 21. FTP transmits credentials in cleartext. Any network observer can capture login credentials, including database connection strings in config files.

High

IIS 7.0 Unpatched

IIS 7.0 has received no security updates since 2020. Multiple known vulnerabilities (path traversal, HTTP.sys, request smuggling) affect this version and remain unpatched.

High

Supply Chain — Client API Exposure

The fulfillment gateway is used by clients to create orders and check inventory. A compromise of this server could expose client data, allow fraudulent order injection, or be used to pivot to client systems.

Proposed Solution: 100% Linux Stack

Current Stack (Decommission)

  • Windows Server 2008 (EOL)
  • IIS 7.0 (unpatched)
  • ASP.NET 4.0 / .NET Framework (Windows-only)
  • MSSQL Server (proprietary license)
  • FileZilla FTP Server (cleartext)
  • SOAP/ASMX (legacy protocol)
  • No monitoring, no logging
  • ⚠️ Proxmox PBS backups (nightly, but no app-level DB backup)

Target Stack (Ubuntu 24.04)

  • Ubuntu 24.04 LTS (5yr support, free)
  • Nginx (reverse proxy + SSL/TLS)
  • Python FastAPI (async, typed, auto-docs)
  • PostgreSQL 16 (open source, performant)
  • SFTP only (no FTP cleartext)
  • REST + legacy SOAP wrapper (zero client changes)
  • Structured logging + systemd journald
  • Automated ZFS snapshots daily

API Endpoint Mapping (15 Operations)

All 15 SOAP operations will be replicated exactly. Existing clients require zero changes — same SOAP contract, same XML schema, same endpoint URL.

SOAP OperationCategoryFastAPI RouteNotes
CreateOrderOrdersPOST /api/ordersCore fulfillment operation
CreateOrderExtendedOrdersPOST /api/orders/extendedExtended attributes variant
CreateOrderv2OrdersPOST /api/v2/ordersv2 schema variant
CancelOrderOrdersDELETE /api/orders/{id}Cancellation flow
GetOrdersOrdersGET /api/ordersList/filter orders
GetOrderDetailsOrdersGET /api/orders/{id}Single order detail
GetOrderDetailsv2OrdersGET /api/v2/orders/{id}v2 schema response
CreateRMAOrderReturnsPOST /api/rmaReturn merchandise authorization
GetRMAOrderStatusReturnsGET /api/rma/{id}RMA status check
GetInventoryInventoryGET /api/inventoryInventory levels
GetInventoryExtendedInventoryGET /api/inventory/extendedExtended inventory data
GetShippedOrdersShippingGET /api/orders/shippedShipped order list
GetShippedOrders_ExtendedShippingGET /api/orders/shipped/extendedExtended shipping data
GetShippingQuoteShippingPOST /api/shipping/quoteRate calculation
Help / showApiServerMetaGET /docs (auto)FastAPI auto-generates OpenAPI docs

Migration Phases

1
Emergency Stabilization Day 1 — 2 hours Immediate

Protect the server while migration is prepared. No code changes.

  • Create ZFS snapshots for both disks (instant, zero downtime)
  • Restrict RDP access to admin IPs only via Proxmox firewall
  • Disable FTP port 21 at network level
  • Document current client IP addresses accessing the API
2
New Ubuntu VM Setup Day 2 — 4 hours

Provision a new Ubuntu 24.04 LTS VM on the same Proxmox cluster.

  • Create VM (4 cores, 16GB RAM, 100GB ZFS) on JMFPMX05 or JMFPMX02
  • Install Ubuntu 24.04 Server, SSH hardening, unattended-upgrades
  • Install: Python 3.12, FastAPI, uvicorn, Nginx, PostgreSQL 16
  • Configure SSL via Let's Encrypt (internal CA or self-signed for LAN)
3
Source Code Extraction Days 3–4 — 1 day

Extract all application code and database schema from the Windows server.

  • Connect via RDP to 192.168.3.2, pull all .cs / .asmx / web.config files
  • Document MSSQL schema: all tables, stored procedures, indexes
  • Capture web.config connection strings and app settings
  • Export full MSSQL database to .bak backup file
4
FastAPI Rewrite Weeks 2–3 — ~2 weeks

Port all 15 SOAP operations to Python FastAPI. Maintain same XML/SOAP contract for clients.

  • Port business logic from C# to Python (FastAPI + SQLAlchemy)
  • Use spyne library to expose SOAP/WSDL endpoint for backward compatibility
  • Add REST endpoints alongside SOAP (modern clients can use JSON)
  • Migrate MSSQL stored procedures to PostgreSQL functions
5
Database Migration Week 3 — 3 days

Migrate MSSQL database to PostgreSQL with full data integrity verification.

  • Convert schema using pgloader (automated MSSQL → PostgreSQL migration)
  • Migrate all data rows with checksums for verification
  • Test all 15 API endpoints against migrated database
  • Set up daily automated PostgreSQL backups to ZFS snapshot
6
Parallel Run & Validation Week 4–5 — 1 week

Both servers live simultaneously. All API calls tested for identical responses.

  • Send test API calls to both servers, compare XML responses 1:1
  • Validate all 15 operations with real fulfillment data
  • Performance test: FastAPI target 10x throughput improvement over IIS
  • Client notification: announce new server IP/URL (no contract changes)
7
Cutover & Decommission Week 6 — 1 day Final

Switch all traffic to Ubuntu server. Windows VM decommissioned permanently.

  • Update DNS / internal routing to point to new Ubuntu server IP
  • Monitor for 48 hours — zero client disruptions target
  • Shutdown Windows VM (keep stopped, not deleted, for 30 days)
  • After 30 days: delete VM 128, reclaim 540GB ZFS storage

6-Week Timeline

Week 1
Emergency + Ubuntu VM
Week 1–2
Source Extraction + DB Schema
Week 2–3
FastAPI Rewrite (15 endpoints)
Week 3–4
DB Migration (MSSQL → PostgreSQL)
Week 5
Parallel Run + Validation
Week 6
Cutover + Decommission

Immediate Next Steps

Actions to Take This Week

1
Create ZFS snapshots on JMFPMX05 for both VM 128 disks. This takes 30 seconds and creates an instant recovery point before any migration work begins.
2
Restrict RDP and FTP at the Proxmox firewall level — allow only admin workstation IPs (192.168.0.194). Block all other external access to ports 21 and 3389.
3
Get FTP/RDP credentials for 192.168.3.2 so source code and database can be extracted without disk mounting.
4
Notify API clients that a migration is planned — give 30-day advance notice so they can plan for the new endpoint URL.
5
Approve this proposal and assign development resources for the 2-week FastAPI rewrite phase.