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.
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
80sudah listen curl localhostberhasilcurl 192.168.x.xdari 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