Firewall ( UFW ) Udah Disable Tapi Port Aplikasi Masih Gak Bisa Diakses

UFW sudah disable tapi port Docker tetap tidak bisa diakses? Ternyata penyebabnya nftables custom rules yang silently drop packet sebelum sampai ke container.

Firewall ( UFW ) Udah Disable Tapi Port Aplikasi Masih Gak Bisa Diakses
OSI Layer Untuk Debugging

Gw baru aja nemu kasus unik di local laptop gw yang dari dulu gw diemin dan sekarang gw benerin karena ada keperluan

Kasus nyata waktu deploy Seafile di Docker.

Gejala awal:

  • Port 80 sudah listen
  • curl localhost berhasil
  • curl 192.168.x.x dari host berhasil
  • Device lain tidak bisa akses
  • Ping dan SSH normal
  • UFW sudah disable

Awalnya keliatan kayak Docker atau aplikasi rusak.

Padahal ternyata bukan.


Gejala Awal

Cek port:

sudo ss -tnlp | grep 80

Output:

LISTEN 0 4096 0.0.0.0:80 0.0.0.0:* users:(("docker-proxy"))

Artinya:

  • Docker publish port dengan benar
  • Aplikasi expose ke semua interface

Validasi Aplikasi

Tes dari host:

curl localhost
curl 192.168.1.131 -I

Output:

HTTP/1.1 302 Found
Server: nginx

Berarti:

  • nginx hidup
  • container hidup
  • aplikasi normal

Kecurigaan Awal

Karena:

  • ping jalan
  • SSH jalan
  • HTTP gagal

Maka kemungkinan:

  • firewall
  • routing
  • Docker bridge
  • reverse proxy
  • bind address
  • AP isolation

Cek Container Internal

Masuk container:

docker exec -it seafile bash

Cek socket:

netstat -tnlp

Output:

tcp 0 0 0.0.0.0:80 LISTEN nginx

Artinya:

  • aplikasi internal container normal
  • bukan bind 127.0.0.1

Debug Layer Network

Jalankan packet capture:

sudo tcpdump -i any port 80

Lalu akses dari device lain.

Output:

Flags [S]
Flags [S]
Flags [S]

Yang penting:
TIDAK ADA:

Flags [S.]

Artinya:

  • SYN packet masuk ke server
  • tapi server tidak kirim SYN-ACK

Berarti packet didrop di host sebelum aplikasi reply.


UFW Sudah Disable Tapi Tetap Gagal

Cek:

sudo ufw disable

Masih gagal.

Artinya:

  • bukan UFW

Ternyata Masalahnya nftables

Cek ruleset:

sudo nft list ruleset

Ketemu:

table inet filter {
    chain input {
        type filter hook input priority filter;
        policy drop;

        tcp dport 22 accept
    }

    chain forward {
        type filter hook forward priority filter;
        policy drop;
    }
}

Masalahnya:

  • semua INPUT selain SSH didrop
  • semua FORWARD didrop
  • Docker tidak bisa forward packet ke bridge network

Makanya:

  • Python HTTP server host bisa setelah allow INPUT 80
  • Docker container tetap gagal karena FORWARD masih DROP

Kenapa Docker Tidak Otomatis Handle?

Karena custom nftables rules override Docker rules.

Docker memang inject chain sendiri:

  • NAT
  • FORWARD
  • bridge rules

Tapi packet sudah kena:

policy drop

sebelum Docker sempat proses.


Fix Sementara

Allow INPUT:

tcp dport 80 accept
tcp dport 443 accept

Allow FORWARD Docker:

chain forward {
    type filter hook forward priority filter;
    policy accept;
}

Atau:

iifname "docker0" accept
oifname "docker0" accept

Solusi Final Yang Dipilih

Karena setup homelab sederhana:

  • backup nftables
  • disable nftables
  • balik pakai UFW
sudo systemctl stop nftables
sudo systemctl disable nftables
sudo nft flush ruleset

Enable UFW:

sudo ufw enable
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

Restart Docker:

sudo systemctl restart docker

Pelajaran Penting

Linux firewall modern itu chaos karena ada:

  • nftables
  • iptables
  • iptables-nft
  • UFW
  • Docker chain
  • custom firewall rules

Dan semuanya bisa overlap.

Gejala seperti ini:

  • port LISTEN
  • local curl berhasil
  • ping berhasil
  • tcpdump lihat SYN
  • tapi tidak ada SYN-ACK

hampir selalu berarti:

  • packet didrop firewall/kernel path
  • bukan aplikasi rusak

Flow Debug Yang Kepake

Layer 7

Cek aplikasi:

curl localhost

Layer 4

Cek socket:

ss -tnlp

Layer 3

Cek packet:

tcpdump -i any port 80

Firewall

Cek:

iptables -L -n
nft list ruleset

Docker

Cek publish:

docker ps

Isolasi

Tes pakai Python native host:

python3 -m http.server 80

Kalau native host jalan tapi Docker tidak:

  • problem FORWARD / bridge
  • bukan aplikasi

Kesimpulan

Kalau:

  • UFW disable
  • port LISTEN
  • localhost bisa
  • tcpdump lihat SYN
  • tapi tidak ada SYN-ACK

Jangan langsung salahkan aplikasi.

Cek:

  • nftables
  • FORWARD policy
  • Docker bridge
  • chain priority
  • custom firewall rules