NAT, Firewall, Security Group #

Dalam merancang dan mengamankan jaringan virtual di cloud, kita tidak bisa hanya mengandalkan satu pintu gerbang saja. Keamanan jaringan cloud yang andal menerapkan model Defense in Depth (Pertahanan Berlapis) menggunakan kombinasi dari beberapa komponen keamanan yang bekerja di tingkat yang berbeda: NAT Gateway, Security Groups, dan Network Access Control Lists (NACL). Setiap komponen ini melayani tujuan yang berbeda — mulai dari menyediakan akses internet keluar secara aman untuk server privat, hingga menyaring paket data masuk di tingkat subnet dan tingkat instans virtual machine. Memahami perbedaan cara kerja stateful versus stateless filtering, serta cara mengonfigurasi komponen-komponen ini secara optimal, merupakan kunci utama untuk membangun benteng pertahanan jaringan yang kokoh dan fungsional di cloud.

NAT Gateway: Akses Internet Keluar Satu Arah #

Resource yang terisolasi di dalam private subnet tidak memiliki alamat IP publik, sehingga tidak dapat dijangkau oleh pihak mana pun dari internet publik. Namun, dalam operasional aplikasi sehari-hari, server-server privat tersebut sering kali membutuhkan akses keluar ke internet — misalnya untuk mengunduh pembaruan pustaka keamanan OS (security patching), menginstal dependensi pustaka kode program, atau memanggil endpoint API eksternal pihak ketiga (seperti payment gateway).

Di sinilah NAT (Network Address Translation) Gateway berperan. NAT Gateway dipasang di Public Subnet dan bertindak sebagai jembatan keluar satu arah:

flowchart TD
    App["App Server (Private Subnet - IP: 10.0.10.5)"]
    NAT["NAT Gateway (Public Subnet - IP Publik: 54.123.45.1)"]
    Internet["Internet Publik (Target: 8.8.8.8)"]
    
    App -->|"1. Kirim Request ke 8.8.8.8"| NAT
    NAT -->|"2. SNAT: Ganti IP Source 10.0.10.5 -> 54.123.45.1"| Internet
    Internet -->|"3. Kembalikan Jawaban ke 54.123.45.1"| NAT
    NAT -->|"4. Terjemahkan balik & teruskan ke 10.0.10.5"| App

Mekanisme Source NAT (SNAT): #

  1. Inisiasi Koneksi: App Server mengirimkan request HTTP keluar ke internet. Paket data ini memiliki alamat IP pengirim (Source IP) berupa IP privat instans (10.0.10.5).
  2. Penerjemahan Alamat (Translation): Paket data melewati NAT Gateway. NAT Gateway mencatat koneksi ini di tabel pemetaannya, mengganti Source IP privat tersebut menjadi alamat IP publik statis milik NAT Gateway sendiri (54.123.45.1), lalu mengirimkannya ke internet.
  3. Respon Balik: Internet mengirimkan paket respon balik ke IP publik NAT Gateway.
  4. Distribusi Kembali: NAT Gateway membaca tabel pemetaannya untuk mencocokkan port koneksi, menerjemahkan kembali alamat tujuan menjadi IP privat instans (10.0.10.5), dan meneruskannya secara aman ke App Server.

Dari kacamata internet publik, lalu lintas data seolah-olah hanya berasal dari IP publik tunggal milik NAT Gateway. Internet tidak pernah mengetahui keberadaan IP privat server kita di belakang layar, dan internet luar tidak bisa memulai (inisiasi) koneksi baru ke arah server privat kita.

NAT Gateway adalah managed service yang memiliki skalabilitas otomatis (auto-scaling). Layanan ini dirancang untuk menangani ribuan koneksi secara bersamaan dan secara otomatis menskalakan kapasitas bandwidth-nya hingga mencapai 45 Gbps (di AWS) tanpa memerlukan konfigurasi atau intervensi manual dari pihak kita.

Strategi Optimasi Biaya NAT Gateway: #

Meskipun sangat berguna, NAT Gateway adalah salah satu komponen dengan biaya operasional yang cukup tinggi di cloud. Kita dikenakan biaya sewa per jam per instans NAT Gateway, ditambah biaya pemrosesan data (Data Processing Fee) per GB yang melewatinya.

Untuk menghemat biaya, kita dapat menerapkan strategi berikut:

  • Deploy VPC Endpoints: Gunakan VPC Gateway Endpoints gratis untuk mengakses layanan internal cloud provider (seperti AWS S3 atau DynamoDB) agar lalu lintas data tersebut tidak perlu keluar melewati NAT Gateway.
  • NAT Instance sebagai Alternatif: Untuk lingkungan non-produksi (Dev/Test), kita dapat mengganti NAT Gateway managed dengan NAT Instance (virtual machine EC2 kecil yang dikonfigurasi sebagai NAT router menggunakan skrip iptables Linux). Ini jauh lebih murah meskipun memerlukan pemeliharaan manual dan tidak memiliki fitur auto-scaling bawaan.

Security Group: Firewall Virtual di Tingkat Instans #

Security Group (SG) bertindak sebagai firewall virtual tingkat pertama yang mengontrol lalu lintas data masuk (inbound) dan keluar (outbound) untuk resource komputasi kita secara granular. SG dipasang langsung pada tingkat antarmuka jaringan virtual (Elastic Network Interface/ENI) milik Virtual Machine, database, atau Load Balancer.

Karakteristik Utama Security Group: #

  • Stateful: SG memelihara tabel status koneksi (connection state table). Jika kita mengizinkan suatu request masuk (inbound) pada port tertentu, respon balik dari request tersebut akan diizinkan keluar secara otomatis tanpa perlu kita daftarkan di aturan keluar (outbound). Hal ini meminimalkan kesalahan konfigurasi dan memudahkan administrasi.
  • Allow-Only: Kita hanya dapat menuliskan aturan yang bersifat mengizinkan (Allow). Tidak ada opsi untuk menuliskan aturan memblokir (Deny) secara eksplisit. Seluruh lalu lintas data yang tidak terdaftar di dalam aturan SG akan diblokir (drop) secara otomatis secara default.
  • Security Group Chaining: Kita dapat menetapkan Security Group lain sebagai sumber (Source) atau tujuan (Destination) di dalam aturan kita, menggantikan penulisan blok IP CIDR statis.
// ANTI-PATTERN: Menulis IP address statis untuk resource auto-scaling
  Inbound Rule: Izinkan TCP Port 8080 dari Source: 10.0.1.45/32 (IP Load Balancer)
  
  Masalah:
  ✗ IP Load Balancer bisa berubah sewaktu-waktu jika terjadi scaling.
  ✗ Setiap kali instance Load Balancer bertambah, kita harus mengedit aturan IP ini manual.

// BENAR: Gunakan Security Group Chaining (SG Reference)
  Inbound Rule: Izinkan TCP Port 8080 dari Source: sg-load-balancer-id
  
  Keuntungan:
  ✓ Semua VM baru hasil auto-scaling yang menggunakan SG Load Balancer otomatis diizinkan.
  ✓ Bebas dari pemeliharaan IP manual saat terjadi pergantian mesin.

Network ACL (NACL): Firewall di Tingkat Subnet #

Network Access Control List (NACL) adalah lapisan keamanan tambahan yang bertindak sebagai firewall pelindung di tingkat perbatasan subnet (subnet boundary). Seluruh paket data yang ingin masuk atau keluar dari suatu subnet wajib melewati pemeriksaan NACL terlebih dahulu sebelum dapat menyentuh tingkat Security Group.

Karakteristik Utama NACL: #

  • Stateless: NACL tidak mengingat status koneksi. Aturan masuk (inbound) dan aturan keluar (outbound) dievaluasi secara terpisah dan independen. Jika kita mengizinkan lalu lintas masuk pada port 80, kita wajib membuat aturan keluar untuk mengizinkan port ephemeral respon balik agar komunikasi tidak terputus.
  • Mendukung Aturan Allow & Deny: Berbeda dengan Security Group, NACL mendukung penulisan aturan blokir (Deny) secara eksplisit. Ini sangat berguna untuk memblokir rentang alamat IP tertentu yang terdeteksi melakukan serangan pemindaian port (port scanning) atau DDoS.
  • Evaluasi Berurutan (Numbered Rules): Aturan di dalam NACL dievaluasi secara berurutan berdasarkan nomor aturan terkecil hingga terbesar. Evaluasi akan langsung berhenti begitu menemukan aturan pertama yang cocok (first match).
Contoh Evaluasi Urutan Aturan NACL Inbound:
  Rule #100: Deny  TCP Port 22 dari Source: 198.51.100.45/32 (IP Penyerang)
  Rule #200: Allow TCP Port 22 dari Source: 0.0.0.0/0 (Seluruh internet)
  
  Hasil: Request SSH dari IP 198.51.100.45 akan dicocokkan ke Rule 100 dan diblokir (Deny).
  Request SSH dari IP lain akan melewati Rule 100 (tidak cocok), lanjut ke Rule 200, dan diizinkan (Allow).

Tantangan Ephemeral Ports pada Stateless NACL: #

Karena NACL bersifat stateless, kita harus memahami konsep Ephemeral Ports (Port Sementara). Saat server aplikasi kita (misal di private subnet) menginisiasi koneksi keluar ke database di port 5432, sistem operasi server aplikasi akan membuka port acak berdurasi pendek di rentang 1024 - 65535 (tergantung OS) untuk menerima respon balik dari database.

Jika kita tidak membuka rentang port 1024-65535 pada aturan masuk (inbound rules) NACL private subnet kita, paket jawaban dari database akan diblokir oleh NACL, menyebabkan koneksi timeout meskipun Security Group kita sudah dikonfigurasi dengan benar.


Ekstensi Keamanan Jaringan: Web Application Firewall (WAF) & IDS/IPS #

Meskipun Security Group dan NACL sudah cukup kuat untuk menyaring lalu lintas berdasarkan alamat IP dan port jaringan (Layer 3 dan Layer 4), keduanya tidak cukup cerdas untuk memeriksa isi konten dari paket data tersebut (Layer 7).

Untuk melindungi aplikasi web kita dari serangan siber tingkat lanjut, kita membutuhkan lapisan perlindungan tambahan:

1. Web Application Firewall (WAF) #

WAF bekerja di tingkat aplikasi (Layer 7) untuk memeriksa payload HTTP/HTTPS secara mendalam. WAF dipasang di depan Application Load Balancer (ALB) atau CDN (CloudFront/Cloudflare).

  • Fungsi: Mampu mendeteksi dan memblokir serangan aplikasi web seperti SQL Injection, Cross-Site Scripting (XSS), manipulasi parameter session, serta aktivitas bad bot. WAF menganalisis pola string di dalam request URL dan HTTP body.

2. Intrusion Detection & Prevention System (IDS/IPS) #

Untuk mendeteksi ancaman jaringan yang tidak terlihat oleh firewall biasa (seperti malware, ransomware, atau anomali traffic), perusahaan besar menggunakan IDS/IPS di dalam VPC.

  • VPC Traffic Mirroring: Fitur yang menduplikasi paket data dari antarmuka jaringan VM secara asinkron tanpa mengganggu performa throughput asli, lalu mengirimkan salinannya ke server IDS kustom untuk dianalisis pola serangannya.
flowchart TD
    Trafik["Internet Publik"] --> WAF["1. Web Application Firewall (Layer 7 - Payload Check)"]
    WAF --> ALB["2. Load Balancer (Routing)"]
    ALB --> NACL["3. Network ACL (Subnet Boundary - Stateless)"]
    NACL --> SG["4. Security Group (Instance Boundary - Stateful)"]
    SG --> VM["5. Virtual Machine Instance"]

Tabel di bawah ini membandingkan ketiga alat penyaring keamanan tersebut secara mendalam:

Kriteria Perbandingan Security Group Network ACL (NACL) Web Application Firewall (WAF)
Layer OSI Layer 3 & 4 (Network/Transport). Layer 3 & 4 (Network/Transport). Layer 7 (Application).
Dasar Penyaringan Alamat IP, Port Jaringan, Protokol. Alamat IP, Port Jaringan, Protokol. Konten HTTP Payload, Header, Cookie, Pattern.
Kemampuan Inspeksi Tidak bisa melihat isi data/payload. Tidak bisa melihat isi data/payload. Mampu mendekripsi SSL & memeriksa payload data.
Kecocokan Proteksi Pembatasan akses port SSH/Database. Pemblokiran subnet IP penyerang (DDoS). Pencegahan SQL Injection, XSS, Bad User Agent.

Contoh Kode: Implementasi NAT Gateway & Keamanan Berlapis via Terraform #

Berikut adalah contoh deklarasi Terraform untuk mendeploy NAT Gateway dengan Elastic IP di Public Subnet, serta mengonfigurasi Network ACL kustom untuk private subnet yang memblokir IP penyerang secara eksplisit:

# ✓ BENAR: Gunakan Terraform untuk mendeploy NAT Gateway dan mengonfigurasi NACL kustom secara aman

# 1. Alokasikan Elastic IP untuk NAT Gateway
resource "aws_eip" "nat_eip" {
  domain = "vpc"
  tags = {
    Name = "production-nat-eip"
  }
}

# 2. Deploy NAT Gateway di Public Subnet 1
resource "aws_nat_gateway" "nat_gw" {
  allocation_id = aws_eip.nat_eip.id
  subnet_id     = aws_subnet.public_az1.id # Wajib ditaruh di public subnet

  tags = {
    Name = "production-nat-gateway"
  }
}

# 3. Custom Network ACL untuk Private Subnet (Application Subnet)
resource "aws_network_acl" "private_nacl" {
  vpc_id     = aws_vpc.main.id
  subnet_ids = [aws_subnet.private_az1.id, aws_subnet.private_az2.id]

  # --- ATURAN MASUK (INBOUND RULES) ---

  # ✓ BENAR: Blokir IP penyerang spesifik di nomor aturan terkecil (Deny Rule)
  ingress {
    protocol   = "tcp"
    rule_no    = 50
    action     = "deny"
    cidr_block = "198.51.100.45/32" # IP Penyerang yang diblokir
    from_port  = 0
    to_port    = 65535
  }

  # Izinkan trafik masuk dari internal VPC
  ingress {
    protocol   = "-1"
    rule_no    = 100
    action     = "allow"
    cidr_block = "10.0.0.0/16"
    from_port  = 0
    to_port    = 0
  }

  # ✓ BENAR: Buka Ephemeral Ports masuk untuk menerima respon balik dari internet (outbound call response)
  ingress {
    protocol   = "tcp"
    rule_no    = 110
    action     = "allow"
    cidr_block = "0.0.0.0/0"
    from_port  = 1024
    to_port    = 65535
  }

  # --- ATURAN KELUAR (OUTBOUND RULES) ---

  # Izinkan trafik keluar ke VPC lokal
  egress {
    protocol   = "-1"
    rule_no    = 100
    action     = "allow"
    cidr_block = "10.0.0.0/16"
    from_port  = 0
    to_port    = 0
  }

  # Izinkan trafik keluar ke internet (via NAT Gateway untuk patch OS)
  egress {
    protocol   = "tcp"
    rule_no    = 110
    action     = "allow"
    cidr_block = "0.0.0.0/0"
    from_port  = 80
    to_port    = 80
  }

  egress {
    protocol   = "tcp"
    rule_no    = 120
    action     = "allow"
    cidr_block = "0.0.0.0/0"
    from_port  = 443
    to_port    = 443
  }

  tags = {
    Name = "private-subnet-nacl"
  }
}

Ringkasan #

  • NAT Gateway menjamin akses internet keluar satu arah bagi private subnet — server privat bisa memanggil internet luar tetapi internet luar diblokir total dari memulai koneksi masuk.
  • Optimalkan biaya NAT Gateway dengan memanfaatkan layanan VPC Endpoints gratis untuk lalu lintas internal seperti S3/DynamoDB.
  • Security Group adalah stateful firewall tingkat instans — response dari koneksi yang diizinkan otomatis lewat tanpa konfigurasi aturan keluar terpisah.
  • Gunakan Security Group Chaining untuk mereferensikan SG lain sebagai sumber koneksi demi mendukung fleksibilitas auto-scaling instan.
  • Network ACL (NACL) adalah stateless firewall tingkat subnet — mewajibkan kita mengatur aturan keluar dan masuk secara terpisah, termasuk membuka port ephemeral 1024-65535.
  • Gunakan WAF (Web Application Firewall) di Layer 7 untuk melindungi web app dari SQL injection dan eksploitasi payload HTTP.
  • Gunakan nomor aturan terkecil di NACL untuk menetapkan aturan Deny eksplisit guna memblokir alamat IP penyerang sebelum paket menyentuh server aplikasi.

← Sebelumnya: Public vs Private Network   Berikutnya: Load Balancing →

About | Author | Content Scope | Editorial Policy | Privacy Policy | Disclaimer | Contact