Topologi dan Alur Data HomeView
TEXT
+-----------------------+ RTSP (TCP 554) +-----------------------+
| Kamera IP IoT | --------------------------------------> | HomeView Bridge |
| (VLAN 30: 10.30.0.0) | | (Scrypted / go2rtc) |
+-----------------------+ +-----------------------+
| ^ |
[DROP WAN] | Return Traffic |
| | v
x +----------------------------------------------------+ HAP/SRTP (TCP/UDP)
| Linux Edge Gateway | |
| - nftables Egress Filter | v
| - eBPF Socket Filtering via sockops | +-----------------------+
+----------------------------------------------------+ | Apple Hub |
| | (VLAN 20: 10.20.0.50) |
Encrypted iCloud Egress +-----------------------+
| |
v |
+---------------------+ |
| Apple WAN Relay | <-------------------------+
+---------------------+ Egress TLS (TCP 443)Perilaku Port dan Pemetaan Vektor Risiko
| Protokol | Port & Transport | Arah Trafik | Perilaku & Risiko Keamanan |
|---|---|---|---|
| mDNS / Bonjour | 5353/UDP | Multicast (224.0.0.251) | Wajib untuk discovery HomeKit. Rawan disalahgunakan untuk pemetaan host internal jika bocor antar-VLAN. |
| RTSP Stream | 554/TCP | Kamera -> Bridge | Mengirim payload video mentah H.264/H.265. Rentan credential sniffing jika Basic Auth tidak di-tunnel. |
| HAP Pairing | 51827/TCP (Dinamis) | Bridge -> Apple Hub | Handshake Curve25519 dan kontrol stream. Wajib dikunci hanya ke IP Apple Hub. |
| SRTP Media | 49152-65535/UDP | Bridge <-> Apple Hub | Voice interkom dua arah dan relay video terenkripsi AES-128-GCM. Memerlukan penanganan conntrack presisi. |
| Vendor Telemetry | Beragam (TCP 80/443, UDP) | Kamera -> WAN Publik | Upaya phoning-home ke AWS/P2P cloud vendor. Ancaman kritis eksfiltrasi snapshot dan metadata. |
Implementasi nftables: Kebijakan Zero-Egress untuk VLAN Kamera
nftables pada Linux edge router. Konfigurasi ini memberlakukan isolasi ketat pada interface vlan30 (Kamera) dan membatasi vlan20 (IoT Hub & Apple TV).
BASH
# Simpan konfigurasi ini pada /etc/nftables.conf
flush ruleset
table inet security_defense {
# Set IP untuk perangkat terverifikasi
set apple_hubs {
type ipv4_addr
flags constant
elements = { 10.20.0.50, 10.20.0.51 }
}
set camera_ips {
type ipv4_addr
flags dynamic
elements = { 10.30.0.10, 10.30.0.11, 10.30.0.12 }
}
chain prerouting {
type filter hook prerouting priority mangle; policy accept;
# Cegah serangan IP spoofing dari interface VLAN Kamera
iifname 'vlan30' ip saddr != 10.30.0.0/24 drop
}
chain forward {
type filter hook forward priority filter; policy drop;
# Fast-path untuk koneksi yang sudah established atau related
ct state established,related accept
ct state invalid drop
# 1. BLOKIR MUTLAK: Kamera tidak boleh mengakses WAN interface (misal: eth0)
iifname 'vlan30' oifname 'eth0' drop
# 2. Hub Apple diizinkan menginisiasi stream RTSP ke Kamera
ip saddr @apple_hubs ip daddr @camera_ips tcp dport 554 ct state new accept
# 3. Izinkan port stream HomeKit Bridge (Scrypted/go2rtc) ke Apple Hub
ip saddr 10.20.0.10 ip daddr @apple_hubs tcp dport { 51826, 51827 } ct state new accept
ip saddr 10.20.0.10 ip daddr @apple_hubs udp dport 49152-65535 accept
# 4. Apple Hub diizinkan egress ke Internet untuk HKSV iCloud relay
ip saddr @apple_hubs oifname 'eth0' tcp dport { 80, 443 } ct state new accept
ip saddr @apple_hubs oifname 'eth0' udp dport { 123, 443 } ct state new accept
}
chain output {
type filter hook output priority filter; policy accept;
}
}BASH
nft -c -f /etc/nftables.conf && nft -f /etc/nftables.conf
nft list rulesetMengatasi Kebutuhan mDNS Discovery Tanpa Membocorkan Broadcast
_hap._tcp.local. dan mengisolasi interface input/output. Edit konfigurasi /etc/avahi/avahi-daemon.conf:
INI
[server]
use-ipv4=yes
use-ipv6=no
allow-interfaces=vlan20,vlan30
bind-address=10.20.0.1
enable-dbus=yes
[reflector]
enable-reflector=yes
reflect-filters=_hap._tcp.local.,_airplay._tcp.local.
[rlimits]
rlimit-core=0
rlimit-data=4194304
rlimit-fsize=0
rlimit-nofile=768
rlimit-stack=4194304
rlimit-nproc=3nftables agar flooding paket mDNS tidak memicu DoS pada daemon Avahi:
BASH
nft add rule inet security_defense forward ip daddr 224.0.0.251 udp dport 5353 limit rate over 10/second burst 20 packets dropEgress Socket Enforcement via eBPF pada Host Bridge
sockops dan cgroup/connect4) untuk mengunci API soket di kernel Linux, sehingga biner bridge hanya dapat memanggil syscall connect() ke subnet lokal terdaftar.
Berikut adalah program eBPF C sederhana (egress_lock.bpf.c) yang mengintersepsi syscall connect() pada soket IPv4:
C
#include <vmlinux.h>
#include <bpf/bpf_endian.h>
#include <bpf/bpf_helpers.h>
#define ALLOWED_NET 0x0A140000 // 10.20.0.0/16
#define NET_MASK 0xFFFF0000
SEC('cgroup/connect4')
int block_bridge_wan_connect(struct bpf_sock_addr *ctx) {
__u32 dst_ip = bpf_ntohl(ctx->user_ip4);
// Izinkan loopback 127.0.0.1
if ((dst_ip & 0xFF00