# ============================================================
# PRODUCTION FIREWALL RULES — web-prod-01 (192.168.1.10)
# Last updated: 2025-10-03 by jthompson
# Migrated from old server 2024-06-15
# ============================================================

*filter

# --- Default Policies ---
:INPUT ACCEPT
:FORWARD ACCEPT
:OUTPUT ACCEPT

# --- Loopback ---
-A INPUT -i lo -j ACCEPT

# --- Allow ALL established connections ---
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# --- Management Access ---
# temporary - remove after testing (added 2025-10-02 by jthompson)
-A INPUT -s 0.0.0.0/0 -p tcp --dport 22 -j ACCEPT

# Allow SSH from management VLAN
-A INPUT -s 10.0.1.0/24 -p tcp --dport 22 -j ACCEPT

# --- Web Traffic ---
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT

# Allow 8080 for legacy app — should we still need this?
-A INPUT -p tcp --dport 8080 -j ACCEPT

# --- Database Access ---
# Allow MySQL from app servers
-A INPUT -s 10.0.2.0/24 -p tcp --dport 3306 -j ACCEPT

# temporary - remove after testing (added 2025-09-28 by mrodriguez)
-A INPUT -s 0.0.0.0/0 -p tcp --dport 3306 -j ACCEPT

# Block MySQL from contractor subnet (SHOULD come before the above!)
-A INPUT -s 172.16.50.0/24 -p tcp --dport 3306 -j DROP

# --- Redis ---
-A INPUT -p tcp --dport 6379 -j ACCEPT

# --- Monitoring ---
# SNMP from monitoring server
-A INPUT -s 10.0.5.20 -p udp --dport 161 -j ACCEPT

# temporary - remove after testing (added 2025-09-15 by jthompson)
# opened all SNMP for debugging trap issues
-A INPUT -p udp --dport 161 -j ACCEPT
-A INPUT -p udp --dport 162 -j ACCEPT

# Node Exporter for Prometheus
-A INPUT -p tcp --dport 9100 -j ACCEPT

# --- NTP ---
-A INPUT -p udp --dport 123 -j ACCEPT

# --- DNS ---
-A INPUT -p udp --dport 53 -j ACCEPT
-A INPUT -p tcp --dport 53 -j ACCEPT

# --- ICMP ---
-A INPUT -p icmp -j ACCEPT

# --- Kubernetes API (moved to new cluster, but rule left here) ---
-A INPUT -p tcp --dport 6443 -j ACCEPT
-A INPUT -p tcp --dport 10250 -j ACCEPT

# --- Docker daemon (DANGER: exposed remotely) ---
# temporary - remove after testing (added 2025-08-20 by mrodriguez)
-A INPUT -p tcp --dport 2375 -j ACCEPT

# --- VNC for remote desktop troubleshooting ---
# temporary - remove after testing (added 2025-07-10 by admin)
-A INPUT -p tcp --dport 5900 -j ACCEPT
-A INPUT -p tcp --dport 5901 -j ACCEPT

# --- FTP (legacy uploads — migrate to SFTP?) ---
-A INPUT -p tcp --dport 21 -j ACCEPT
-A INPUT -p tcp --dport 20 -j ACCEPT

# --- Telnet (old network gear management) ---
# TODO: disable once new switches are deployed
-A INPUT -p tcp --dport 23 -j ACCEPT

# --- Allow all TCP from partner network (per John's request 2025-06) ---
-A INPUT -s 203.0.113.0/24 -p tcp -j ACCEPT

# Restrict partner to port 8443 only (SHADOWED by rule above)
-A INPUT -s 203.0.113.0/24 -p tcp --dport 8443 -j ACCEPT
-A INPUT -s 203.0.113.0/24 -p tcp -j DROP

# --- Application debugging ports ---
# temporary - remove after testing (added 2025-10-01 by jthompson)
-A INPUT -p tcp --dport 9229 -j ACCEPT
-A INPUT -p tcp --dport 5005 -j ACCEPT

# --- Catch-all (but default policy is ACCEPT, so this is useless) ---
-A INPUT -j DROP

# ============================================================
# FORWARD CHAIN — no restrictions (BAD!)
# ============================================================
# "We'll lock this down later" — 2025-06-15 migration notes

# --- OUTPUT CHAIN ---
# No egress filtering at all

COMMIT
