Jika Anda sudah familiar dengan penggunaan security group saat membuat atau menambahkan VM, Anda mungkin penasaran bagaimana Firewall tersebut dibuat.
Pada panduan ini akan membahas cara menerapkan firewall menggunakan IPtables untuk Virtual Machine (VM).
Prequites #
Katakanlah Anda memiliki sebuah VM dengan interface seperti berikut.
# virsh domiflist vm1
Interface Type Source Model MAC
-----------------------------------------------------------
vnet1 bridge net0 virtio 52:54:00:9c:52:a4
Selanjutnya pastikan Host server sudah terinstall iptables
.
Buat Chain #
Buat chain baru dengan nama seperti berikut.
iptables -N input-vnet1
iptables -N output-vnet1
iptables -N sg-chain
iptables -N sg-fallback
iptables -N stateful-vnet1
Kemudian tambahkan rule untuk mengarahkan lalu lintas jaringan dari VM interface ke sg-chain
iptables -A FORWARD -m physdev --physdev-in vnet1 --physdev-is-bridged -m comment --comment "Direct traffic from the VM interface to sg-chain." -j sg-chain
iptables -A FORWARD -m physdev --physdev-out vnet1 --physdev-is-bridged -m comment --comment "Direct traffic from the VM interface to sg-chain." -j sg-chain
iptables -A INPUT -m physdev --physdev-in vnet1 --physdev-is-bridged -m comment --comment "Direct incoming traffic from VM to output-vnet1." -j output-vnet1
Rule sg-chain #
Buat rule di sg-chain
untuk mengarahkan ke chain input dan output.
iptables -A sg-chain -m physdev --physdev-in vnet1 --physdev-is-bridged -m comment --comment "Jump to the VM specific chain." -j output-vnet1
iptables -A sg-chain -m physdev --physdev-out vnet1 --physdev-is-bridged -m comment --comment "Jump to the VM specific chain." -j input-vnet1
iptables -A sg-chain -j ACCEPT
Lalu tambahkan rule pada chain sg-fallback
untuk memblokir lalu lintas yang tidak sesuai.
iptables -A sg-fallback -m comment --comment "Default drop rule for unmatched traffic." -j DROP
Rule input-vnet1 #
Tambahkan rule berikut pada chain input-vnet1
.
iptables -A input-vnet1 -p tcp -m tcp --dport 22 -m comment --comment "Allow SSH." -j RETURN
iptables -A input-vnet1 -d 192.168.100.30/32 -p udp -m udp --sport 67 --dport 68 -j RETURN
iptables -A input-vnet1 -d 255.255.255.255/32 -p udp -m udp --sport 67 --dport 68 -j RETURN
iptables -A input-vnet1 -m conntrack --ctstate RELATED,ESTABLISHED -j RETURN
iptables -A input-vnet1 -m conntrack --ctstate INVALID -j DROP
iptables -A input-vnet1 -m comment --comment "Send unmatched traffic to sg-fallback." -j sg-fallback
Pada rule nomor 2, ubah IP sesuai dengan yang akan dipasang ke dalam VM.
Untuk menambahkan rule lain, gunakan perintah berikut agar rule firewall tetap terurut dan berfungsi dengan baik.
iptables -I input-vnet1 [RULE]
Rule output-vnet1 #
Tambahkan rule berikut pada chain output-vnet1
.
iptables -A output-vnet1 -p icmp -m comment --comment "Allow outgoing ICMP." -j RETURN
iptables -A output-vnet1 -p tcp -m comment --comment "Allow outgoing All TCP." -j RETURN
iptables -A output-vnet1 -p udp -m comment --comment "Allow outgoing All UDP." -j RETURN
iptables -A output-vnet1 -s 0.0.0.0/32 -d 255.255.255.255/32 -p udp -m udp --sport 68 --dport 67 -m comment --comment "Allow DHCP client traffic." -j RETURN
iptables -A output-vnet1 -j stateful-vnet1
iptables -A output-vnet1 -p udp -m udp --sport 68 --dport 67 -m comment --comment "Allow DHCP client traffic." -j RETURN
iptables -A output-vnet1 -p udp -m udp --sport 67 --dport 68 -m comment --comment "Prevent DHCP Spoofing by VM." -j DROP
iptables -A output-vnet1 -m conntrack --ctstate RELATED,ESTABLISHED -j RETURN
iptables -A output-vnet1 -m conntrack --ctstate INVALID -j DROP
iptables -A output-vnet1 -m comment --comment "Send unmatched traffic to the fallback chain." -j sg-fallback
Untuk menambahkan rule lain, gunakan perintah berikut agar rule firewall tetap terurut dan berfungsi dengan baik.
iptables -I output-vnet1 [RULE]
Rule stateful-vnet1 #
Tambahkan rule berikut pada chain stateful-vnet1
.
iptables -A stateful-vnet1 -s 192.168.100.30/32 -m mac --mac-source 52:54:00:9c:52:a4 -m comment --comment "Allow traffic from defined IP/MAC pairs." -j RETURN
iptables -A stateful-vnet1 -m comment --comment "Drop traffic without an IP/MAC allow rule." -j DROP
Pada rule nomor 1, ubah IP dan MAC sesuai dengan yang akan dipasang ke dalam VM.
Rule ini akan memastikan paket atau lalu lintas sesuai dengan IP dan MAC yang telah ditentukan. Jika tidak sesuai maka paket akan di DROP.