Persyaratan untuk mem-build image kustom


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:

      • Jenis mesin N1 untuk tujuan umum
      • Jenis mesin A3, A2, atau G2 yang dioptimalkan untuk akselerator
    • 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.
  • CONFIG_DEVKMEM=n
    • Nonaktifkan dukungan untuk /dev/kmem.
    • Memblokir akses ke memori kernel.
  • 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.
  • 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.
  • 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 versi glibc yang cukup baru (2.3.3 atau yang lebih baru), untuk menghapus pemetaan VDSO yang dipetakan tinggi dan menggunakan VDSO acak secara eksklusif.
  • 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.