Skip to main content
  1. Posts/

Implementing Firewall for VMs with IPtables

·3 mins·
iptables linux iptables kvm libvirt
Table of Contents

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.

Related

IPtables Cheatsheet
·6 mins
iptables linux iptables
Using QEMU Guest Agent with libvirt
·1 min
libvirt kvm libvirt
How to Use QEMU to Emulate Storages Devices
·5 mins
libvirt kvm libvirt
Mengatasi Error Disk SCSI Tidak Terdeteksi di KVM Libvirt
·1 min
libvirt kvm libvirt
KVM guest with SSD and NVMe in Libvirt
·3 mins
libvirt kvm libvirt
QEMU-IMG Cheatsheet
·4 mins
libvirt kvm libvirt