====== Runbook: Firewall pravila ====== **Trajanje:** ~10 minuta \\ **Uloga:** Network-Admin, Security-Admin \\ **Preduvjet:** Root/Admin prava Kontrola pristupa za Data Gateway na mreznoj razini. ---- ===== Tijek rada ===== flowchart TD A[Start] --> B[Portove identificirati] B --> C{Platforma?} C -->|Windows| D[Windows Firewall] C -->|Linux| E[iptables/firewalld] C -->|Cloud| F[Security Groups] D --> G[Pravilo kreirati] E --> G F --> G G --> H[Testirati] H --> I{Pristup OK?} I -->|Da| J[Dokumentirati] I -->|Ne| K[Pravilo prilagoditi] style J fill:#e8f5e9 style K fill:#ffebee ---- ===== Potrebni portovi ===== | Port | Protokol | Smjer | Opis | |------|-----------|----------|--------------| | 443 | TCP | Ulazni | HTTPS (Produkcija) | | 5000 | TCP | Ulazni | HTTP (samo Razvoj) | | 9090 | TCP | Izlazni | Prometheus (opcionalno) | | 1433 | TCP | Izlazni | SQL Server | | 5432 | TCP | Izlazni | PostgreSQL | | 3306 | TCP | Izlazni | MySQL | ---- ===== 1. Windows Firewall ===== **PowerShell (kao Admin):** # Ulazni: HTTPS dozvoliti New-NetFirewallRule -DisplayName "Data Gateway HTTPS" ` -Direction Inbound -Action Allow -Protocol TCP -LocalPort 443 # Ulazni: Samo od odredenih IP-ova New-NetFirewallRule -DisplayName "Data Gateway HTTPS Restricted" ` -Direction Inbound -Action Allow -Protocol TCP -LocalPort 443 ` -RemoteAddress "10.0.0.0/8","192.168.0.0/16" # Izlazni: SQL Server dozvoliti New-NetFirewallRule -DisplayName "Data Gateway to SQL Server" ` -Direction Outbound -Action Allow -Protocol TCP -RemotePort 1433 # Pravila ispisati Get-NetFirewallRule -DisplayName "Data Gateway*" | Format-Table Name, Enabled, Direction, Action # Pravilo ukloniti Remove-NetFirewallRule -DisplayName "Data Gateway HTTPS" ---- ===== 2. Linux: firewalld (RHEL/CentOS) ===== # HTTPS port otvoriti sudo firewall-cmd --permanent --add-port=443/tcp # Samo iz odredene mreze sudo firewall-cmd --permanent --add-rich-rule=' rule family="ipv4" source address="10.0.0.0/8" port protocol="tcp" port="443" accept' # Promjene primijeniti sudo firewall-cmd --reload # Pravila prikazati sudo firewall-cmd --list-all # Pravilo ukloniti sudo firewall-cmd --permanent --remove-port=443/tcp sudo firewall-cmd --reload ---- ===== 3. Linux: ufw (Ubuntu/Debian) ===== # HTTPS dozvoliti sudo ufw allow 443/tcp # Iz odredene mreze sudo ufw allow from 10.0.0.0/8 to any port 443 proto tcp # Status prikazati sudo ufw status verbose # Pravilo ukloniti sudo ufw delete allow 443/tcp ---- ===== 4. Linux: iptables (rucno) ===== # HTTPS dozvoliti sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT # Samo iz odredene mreze sudo iptables -A INPUT -p tcp --dport 443 -s 10.0.0.0/8 -j ACCEPT sudo iptables -A INPUT -p tcp --dport 443 -j DROP # Pravila spremiti sudo iptables-save > /etc/iptables/rules.v4 # Pravila prikazati sudo iptables -L -n --line-numbers # Pravilo ukloniti (po broju) sudo iptables -D INPUT 3 ---- ===== 5. Cloud: AWS Security Group ===== # Security Group kreirati aws ec2 create-security-group \ --group-name gateway-sg \ --description "Data Gateway Security Group" \ --vpc-id vpc-12345678 # HTTPS od svuda aws ec2 authorize-security-group-ingress \ --group-id sg-12345678 \ --protocol tcp \ --port 443 \ --cidr 0.0.0.0/0 # HTTPS samo iz VPN-a aws ec2 authorize-security-group-ingress \ --group-id sg-12345678 \ --protocol tcp \ --port 443 \ --cidr 10.0.0.0/8 ---- ===== 6. Cloud: Azure NSG ===== # NSG kreirati az network nsg create \ --resource-group rg-gateway \ --name gateway-nsg # HTTPS pravilo az network nsg rule create \ --resource-group rg-gateway \ --nsg-name gateway-nsg \ --name AllowHTTPS \ --priority 100 \ --direction Inbound \ --access Allow \ --protocol Tcp \ --destination-port-ranges 443 \ --source-address-prefixes '10.0.0.0/8' ---- ===== 7. IP-Whitelist u Gatewayu ===== Alternativa Firewallu: Filtriranje u aplikaciji. **appsettings.json:** { "Security": { "AllowedIPs": [ "10.0.0.0/8", "192.168.0.0/16", "172.16.0.0/12" ] } } ---- ===== 8. Testiranje ===== # Lokalno curl https://localhost/health # Iz dozvoljene mreze curl https://gateway.example.com/health # Izvana (treba biti blokirano) curl --connect-timeout 5 https://gateway.example.com/health # Ocekivanje: Connection refused ili Timeout ---- ===== 9. Kontrolna lista ===== | # | Provjera | Da/Ne | |---|-----------|---| | 1 | Port 443 ulazni dozvoljen | - | | 2 | Port 5000 (HTTP) blokiran | - | | 3 | Samo potrebni IP-ovi dozvoljeni | - | | 4 | Izlazni do DB-a dozvoljen | - | | 5 | Izvana testirano | - | | 6 | Pravila dokumentirana | - | ---- ===== Rjesavanje problema ===== | Problem | Uzrok | Rjesenje | |---------|---------|--------| | ''Connection refused'' | Port nije otvoren | Firewall pravilo dodati | | ''Connection timeout'' | Firewall blokira | Pravilo/Source-IP provjeriti | | Pristup od svuda | Nema ogranicenja | Source-IP limitirati | | DB konekcija neuspjesna | Izlazni blokiran | Outbound pravilo dodati | ---- ===== Najbolje prakse ===== **Princip najmanjih privilegija:** * Samo potrebne portove otvoriti * Samo potrebne IP-ove dozvoliti * HTTP (5000) u produkciji blokirati * Redovito pravila auditirati ---- ===== Povezani runbookovi ===== * [[.:tls-einrichten|TLS postavljanje]] - HTTPS aktivirati * [[..:automatisierung:kubernetes|Kubernetes]] - NetworkPolicies * [[..:monitoring:alerting|Alerting]] - Monitoring konekcija ---- << [[.:zertifikat-erneuern|<- Certifikat obnoviti]] | [[..:start|-> Operator pregled]] >> ---- //Wolfgang van der Stille @ EMSR DATA d.o.o. - Data Gateway Professional// {{tag>operator runbook firewall sicherheit netzwerk}}