Dalam beberapa situasi, aplikasi Anda mungkin mengharuskan Anda mem-build sistem operasi sendiri atau mengompilasi kernel kustom. Jika Anda mengompilasi kernel kustom atau membuat sistem operasi kustom untuk VM, pastikan kernel atau sistem operasi tersebut memenuhi persyaratan dalam dokumen ini.
Mem-build sistem operasi kustom adalah tugas lanjutan bagi pengguna dengan aplikasi yang secara khusus memerlukan kernel kustom. Sebagian besar pengguna dapat membuat VM dari salah satu image publik yang tersedia, menggunakan alat impor disk virtual otomatis untuk mengimpor disk ke Compute Engine dari lingkungan lain, atau mengimpor image kustom secara manual dari sistem dengan distribusi Linux stok umum.
Persyaratan dukungan hardware
Kernel Anda harus mendukung perangkat berikut:
- PCI Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 03)
- ISA bridge: Intel 82371AB/EB/MB PIIX4 ISA (rev 03)
Pengontrol Ethernet:
- Adaptor Ethernet Virtio-Net.
gVNIC diperlukan untuk Tau T2A generasi kedua, dan semua seri mesin generasi ketiga dan yang lebih baru.
Selain itu, gVNIC diperlukan atau direkomendasikan jika Anda menggunakan GPU pada salah satu hal berikut:
vendor = 0x1AF4 (Qumranet/Red Hat)
ID perangkat = 0x1000. ID Subsistem 0x1
Pengurangan beban checksum didukung
TSO v4 didukung
GRO v4 didukung
Pengontrol Penyimpanan SCSI:
- Pengontrol Penyimpanan Virtio-SCSI
- vendor = 0x1AF4 (Qumranet/Red Hat)
- ID perangkat = 0x1004. ID Subsistem 0x8.
- Perintah Utama SCSI 4 dan Perintah Blok SCSI 3 didukung
- Hanya satu antrean permintaan yang didukung
- Persistent disk melaporkan sektor fisik 4 KiB / sektor logis 512 byte
- Hanya perangkat blok (disk) yang didukung
- Bit fitur Hotplug / Peristiwa didukung
- Port Serial:
- Empat port 16550A
- ttyS0 di IRQ 4
- ttyS1 di IRQ 3
- ttyS2 di IRQ 6
- ttyS3 di IRQ 7
Opsi build kernel Linux yang diperlukan
Anda harus mem-build kernel sistem operasi dengan opsi berikut:
CONFIG_KVM_GUEST=y
- Mengaktifkan fungsi paravirtualisasi.
CONFIG_KVM_CLOCK=y
- Aktifkan jam paravirtual (jika berlaku untuk versi kernel Anda).
CONFIG_VIRTIO_PCI=y
- Mengaktifkan perangkat PCI paravirtual.
CONFIG_SCSI_VIRTIO=y
- Mengaktifkan akses ke disk paravirtual.
CONFIG_VIRTIO_NET=y
- Aktifkan akses ke jaringan.
CONFIG_PCI_MSI=y
- Mengaktifkan pengiriman interupsi berperforma tinggi, yang diperlukan untuk perangkat SSD lokal.
Opsi build kernel untuk keamanan
Gunakan setelan keamanan yang direkomendasikan di opsi build kernel Anda:
CONFIG_STRICT_DEVMEM=y
- Batasi
/dev/mem
untuk mengizinkan akses hanya ke ruang PCI, kode BIOS, dan region data.
- Batasi
CONFIG_DEVKMEM=n
- Nonaktifkan dukungan untuk
/dev/kmem
. - Memblokir akses ke memori kernel.
- Nonaktifkan dukungan untuk
CONFIG_DEFAULT_MMAP_MIN_ADDR=65536
- Menetapkan memori virtual rendah yang dilindungi dari alokasi ruang pengguna.
CONFIG_DEBUG_RODATA=y
- Menandai data hanya baca kernel sebagai dilindungi tulis di pagetable,
untuk menangkap operasi tulis yang tidak disengaja (dan salah) ke data
const
tersebut. Opsi ini dapat memiliki sedikit dampak pada performa karena sebagian kode kernel tidak akan lagi tercakup oleh TLB 2 MB.
- Menandai data hanya baca kernel sebagai dilindungi tulis di pagetable,
untuk menangkap operasi tulis yang tidak disengaja (dan salah) ke data
CONFIG_DEBUG_SET_MODULE_RONX=y
- Mendeteksi modifikasi yang tidak diinginkan pada teks modul kernel yang dapat dimuat dan data hanya baca. Opsi ini juga mencegah eksekusi data modul.
CONFIG_CC_STACKPROTECTOR=y
- Mengaktifkan fitur GCC
-fstack-protector
. Fitur ini menempatkan nilai canary di awal fungsi penting, di stack sebelum alamat return, dan memvalidasi nilai sebelum benar-benar ditampilkan. Hal ini juga menyebabkan overflow buffering berbasis stack (yang perlu menulis ulang alamat return ini) untuk menimpa canary, yang terdeteksi dan serangan kemudian dinetralisir menggunakan kernel panic.
- Mengaktifkan fitur GCC
CONFIG_COMPAT_VDSO=n
- Memastikan VDSO tidak berada di alamat yang dapat diprediksi untuk memperkuat ASLR. Jika
diaktifkan, fitur ini akan memetakan VDSO ke alamat gaya lama
yang dapat diprediksi, sehingga memberikan lokasi yang dapat diprediksi untuk kode eksploit.
Masukkan
N
di sini jika Anda menjalankan versiglibc
yang cukup baru (2.3.3 atau yang lebih baru), untuk menghapus pemetaan VDSO yang dipetakan tinggi dan menggunakan VDSO acak secara eksklusif.
- Memastikan VDSO tidak berada di alamat yang dapat diprediksi untuk memperkuat ASLR. Jika
diaktifkan, fitur ini akan memetakan VDSO ke alamat gaya lama
yang dapat diprediksi, sehingga memberikan lokasi yang dapat diprediksi untuk kode eksploit.
Masukkan
CONFIG_COMPAT_BRK=n
- Jangan nonaktifkan pengacakan heap.
CONFIG_X86_PAE=y
- Tetapkan opsi ini untuk kernel 32-bit karena PAE diperlukan untuk dukungan NX. Hal ini juga memungkinkan dukungan swapspace yang lebih besar untuk tujuan non-overcommit.
CONFIG_SYN_COOKIES=y
- Memberikan beberapa perlindungan terhadap SYN flood.
CONFIG_SECURITY_YAMA=y
- Tindakan ini akan memilih Yama, yang memperluas dukungan DAC dengan setelan keamanan sistem tambahan di luar kontrol akses diskresional Linux reguler. Saat ini, setelannya adalah pembatasan cakupan ptrace.
CONFIG_SECURITY_YAMA_STACKED=y
- Opsi ini memaksa Yama untuk ditumpuk dengan LSM utama yang dipilih saat Yama tersedia.
Setelan keamanan kernel
Anda juga dapat meningkatkan keamanan kernel melalui file setelan kernel. Edit file /etc/sysctl.conf
untuk menyertakan setelan keamanan
yang direkomendasikan berikut:
# Enable syn flood protection
net.ipv4.tcp_syncookies = 1
# Ignore source-routed packets
net.ipv4.conf.all.accept_source_route = 0
# Ignore source-routed packets
net.ipv4.conf.default.accept_source_route = 0
# Ignore ICMP redirects
net.ipv4.conf.all.accept_redirects = 0
# Ignore ICMP redirects
net.ipv4.conf.default.accept_redirects = 0
# Ignore ICMP redirects from non-GW hosts
net.ipv4.conf.all.secure_redirects = 1
# Ignore ICMP redirects from non-GW hosts
net.ipv4.conf.default.secure_redirects = 1
# Don't allow traffic between networks or act as a router
net.ipv4.ip_forward = 0
# Don't allow traffic between networks or act as a router
net.ipv4.conf.all.send_redirects = 0
# Don't allow traffic between networks or act as a router
net.ipv4.conf.default.send_redirects = 0
# Reverse path filtering—IP spoofing protection
net.ipv4.conf.all.rp_filter = 1
# Reverse path filtering—IP spoofing protection
net.ipv4.conf.default.rp_filter = 1
# Ignore ICMP broadcasts to avoid participating in Smurf attacks
net.ipv4.icmp_echo_ignore_broadcasts = 1
# Ignore bad ICMP errors
net.ipv4.icmp_ignore_bogus_error_responses = 1
# Log spoofed, source-routed, and redirect packets
net.ipv4.conf.all.log_martians = 1
# Log spoofed, source-routed, and redirect packets
net.ipv4.conf.default.log_martians = 1
# Randomize addresses of mmap base, heap, stack and VDSO page
kernel.randomize_va_space = 2
# Provide protection from ToCToU races
fs.protected_hardlinks=1
# Provide protection from ToCToU races
fs.protected_symlinks=1
# Make locating kernel addresses more difficult
kernel.kptr_restrict=1
# Set ptrace protections
kernel.yama.ptrace_scope=1
# Set perf only available to root
kernel.perf_event_paranoid=2
Langkah selanjutnya
- Instal sistem operasi ke disk booting dan impor image secara manual ke Compute Engine sebagai image kustom.
- Jika Anda telah mengimpor sistem operasi sebagai image kustom, konfigurasi setelan non-kernel pada image agar dapat berfungsi secara optimal dalam lingkungan Compute Engine.