Mengamankan SSH Server Linux Menggunakan Tailscale
Mengamankan SSH Server Linux Menggunakan Tailscale

Mengamankan SSH Server Linux Menggunakan Tailscale

Secure Shell (SSH) merupakan salah satu metode yang paling banyak digunakan untuk melakukan administrasi server Linux dari jarak jauh. Namun, membuka port SSH secara langsung ke internet, terutama port 22, dapat meningkatkan risiko serangan seperti brute-force, port scanning, dan percobaan akses tidak sah.

Salah satu pendekatan yang dapat digunakan untuk mengurangi risiko tersebut adalah memanfaatkan Tailscale sebagai jaringan privat untuk mengakses server.

Tailscale merupakan layanan mesh VPN yang menggunakan protokol WireGuard untuk menghubungkan berbagai perangkat dalam sebuah jaringan privat atau tailnet.

Dengan konfigurasi ini, akses SSH tidak harus dilakukan melalui alamat IP publik server. Administrator dapat mengakses server melalui alamat IP Tailscale, sementara akses SSH dari internet publik dapat dibatasi menggunakan firewall.

Risiko Membuka SSH ke Internet

SSH yang dapat diakses secara langsung dari internet akan terus menerima berbagai permintaan koneksi dari alamat IP yang tidak dikenal.

Server yang menggunakan autentikasi password juga dapat menjadi sasaran percobaan brute-force secara otomatis.

Selain itu, port scanning dapat digunakan untuk menemukan server yang membuka port SSH. Setelah port ditemukan, penyerang dapat mencoba berbagai metode untuk mendapatkan akses.

Penggunaan port SSH yang berbeda atau aplikasi seperti Fail2ban memang dapat membantu mengurangi percobaan serangan. Namun, port SSH masih tetap terlihat dari internet.

Pendekatan Tailscale berbeda karena akses SSH dapat ditempatkan di dalam jaringan privat dan akses dari jaringan publik dapat ditutup menggunakan firewall.

Tailscale sebagai Jaringan Privat

Tailscale membangun koneksi antarperangkat menggunakan WireGuard. Perangkat yang telah bergabung dalam tailnet dapat berkomunikasi melalui jaringan privat tanpa harus membuka port tertentu pada router atau firewall publik.

Koneksi ant perangkat biasanya dapat dilakukan secara langsung. Jika koneksi peer-to-peer tidak memungkinkan karena NAT atau pembatasan jaringan, Tailscale dapat menggunakan mekanisme relay DERP.

Untuk menggunakan metode ini, Tailscale perlu dipasang pada server Linux dan perangkat yang digunakan administrator untuk melakukan koneksi SSH.

Kedua perangkat kemudian harus masuk menggunakan akun Tailscale yang sama atau berada dalam tailnet yang sama.

Persiapan

Sebelum melakukan konfigurasi, beberapa hal yang perlu disiapkan adalah:

  1. Server Linux dengan akses sudo atau root.
  2. Komputer atau perangkat klien yang akan digunakan untuk SSH.
  3. Akun Tailscale yang aktif.
  4. Akses internet pada server dan perangkat klien.

Instalasi Tailscale pada Klien

Pada perangkat Linux, Tailscale dapat dipasang menggunakan script instalasi resminya:

curl -fsSL https://tailscale.com/install.sh | sh

Setelah proses instalasi selesai, hubungkan perangkat ke tailnet:

sudo tailscale up

Terminal akan menampilkan alamat autentikasi. Buka alamat tersebut melalui browser dan masuk menggunakan akun Tailscale.

Untuk Windows, macOS, iOS, dan Android, instalasi dapat dilakukan melalui aplikasi Tailscale sesuai sistem operasi yang digunakan.

Setelah berhasil login, perangkat akan terlihat pada daftar perangkat di admin console Tailscale.

Instalasi Tailscale pada Server

Langkah instalasi pada server Linux pada dasarnya sama. Jalankan:

curl -fsSL https://tailscale.com/install.sh | sh

Setelah Tailscale terpasang, hubungkan server ke jaringan:

sudo tailscale up

Kemudian buka URL autentikasi yang muncul dan masuk menggunakan akun Tailscale.

Jika proses berhasil, server akan bergabung ke dalam tailnet dan dapat berkomunikasi dengan perangkat klien yang telah terdaftar.

Mengetahui Alamat IP Tailscale

Setiap perangkat yang terhubung ke Tailscale akan mendapatkan alamat IP privat. Untuk mengetahui alamat IPv4 Tailscale pada server, gunakan:

tailscale ip -4

Contohnya, server dapat memperoleh alamat seperti:

100.107.99.29

Alamat tersebut dapat digunakan oleh perangkat klien untuk melakukan koneksi SSH melalui jaringan Tailscale.

Menguji Koneksi SSH

Dari komputer klien yang telah terhubung ke tailnet, lakukan koneksi menggunakan alamat IP Tailscale server:

ssh [email protected]

Jika koneksi berhasil, berarti server sudah dapat diakses melalui jaringan privat Tailscale.

Penggunaan alamat Tailscale membuat koneksi SSH tidak perlu diarahkan langsung ke IP publik server.

Menggunakan Tailscale SSH

Selain menggunakan SSH biasa melalui IP Tailscale, Tailscale juga menyediakan fitur Tailscale SSH. Fitur ini memungkinkan proses autentikasi dan pengaturan akses SSH dikelola melalui Tailscale.

Untuk mengaktifkannya pada server, jalankan:

sudo tailscale set --ssh

Setelah aktif, administrator tetap dapat menggunakan perintah SSH biasa:

ssh [email protected]

Tailscale akan memeriksa identitas perangkat dan pengguna berdasarkan konfigurasi akses pada tailnet. Dengan demikian, pengelolaan akses tidak harus dilakukan dengan mendistribusikan SSH key secara manual ke setiap server.

Pengaturan siapa yang dapat mengakses server dapat dilakukan melalui kebijakan Access Controls atau ACL.

Contoh konfigurasi akses:

"ssh": [
  {
    "action": "accept",
    "src": ["autogroup:member"],
    "dst": ["tag:prod"],
    "users": ["autogroup:nonroot", "root"]
  }
]

Konfigurasi tersebut menentukan sumber pengguna, perangkat tujuan, serta akun yang diperbolehkan untuk digunakan ketika melakukan koneksi SSH.

Jika fitur Tailscale SSH ingin dinonaktifkan, gunakan:

sudo tailscale set --ssh=false

Sebelum menonaktifkannya, pastikan masih tersedia metode lain untuk masuk ke server agar administrator tidak kehilangan akses.

Membatasi SSH Menggunakan Firewall

Menghubungkan server ke Tailscale saja belum otomatis menutup akses SSH dari internet. Oleh karena itu, firewall tetap perlu dikonfigurasi agar port SSH hanya menerima koneksi melalui interface tailscale0.

Iptables

Jika menggunakan iptables, izinkan koneksi melalui interface Tailscale:

sudo iptables -A INPUT -i tailscale0 -j ACCEPT

Kemudian blokir koneksi SSH yang berasal dari interface selain Tailscale:

sudo iptables -A INPUT -p tcp --dport 22 ! -i tailscale0 -j DROP

Simpan aturan firewall agar tetap tersedia setelah server melakukan reboot:

sudo iptables-save > /etc/iptables/rules.v4

Periksa aturan yang sedang aktif dengan:

sudo iptables -L INPUT -v -n

UFW

Jika server menggunakan UFW, terlebih dahulu atur kebijakan koneksi masuk:

sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw enable

Izinkan koneksi dari interface Tailscale:

sudo ufw allow in on tailscale0

Jika sebelumnya terdapat aturan yang membuka port SSH secara publik, hapus aturan tersebut:

sudo ufw delete allow 22/tcp

Kemudian terapkan kembali konfigurasi:

sudo ufw reload

Dengan konfigurasi tersebut, SSH tidak lagi dibuka secara umum pada interface jaringan publik.

Firewalld

Pada server yang menggunakan firewalld, interface tailscale0 dapat dimasukkan ke dalam zone trusted:

sudo firewall-cmd --zone=trusted --change-interface=tailscale0 --permanent

Selanjutnya, hapus layanan SSH dari zone publik:

sudo firewall-cmd --zone=public --remove-service=ssh --permanent

Jika menggunakan port SSH khusus, misalnya 2222, aturan tersebut dapat dihapus dengan:

sudo firewall-cmd --zone=public --remove-port=2222/tcp --permanent

Terapkan perubahan dengan:

sudo firewall-cmd --reload

Sebelum mengubah konfigurasi firewall pada server produksi, sebaiknya tersedia akses alternatif seperti console dari penyedia cloud. Kesalahan konfigurasi firewall dapat menyebabkan administrator kehilangan akses ke server.

Pengujian Konfigurasi

Setelah semua konfigurasi selesai, lakukan beberapa pengujian untuk memastikan sistem berjalan dengan benar.

Pertama, periksa status Tailscale:

tailscale status

Pastikan server dan perangkat klien berada dalam kondisi online.

Selanjutnya, lakukan SSH menggunakan alamat IP Tailscale:

ssh username@IP-TAILSCALE

Koneksi seharusnya berhasil apabila perangkat klien memiliki izin akses.

Kemudian, lakukan pengujian menggunakan akun yang tidak diberikan izin melalui ACL. Koneksi tersebut seharusnya ditolak.

Terakhir, coba melakukan SSH menggunakan IP publik server. Jika firewall telah dikonfigurasi dengan benar, koneksi SSH dari IP publik seharusnya tidak dapat dilakukan.

Pengujian dari IP publik penting dilakukan karena keberadaan Tailscale saja tidak berarti port SSH publik otomatis tertutup. Firewall tetap harus dikonfigurasi secara eksplisit.

Kesimpulan

Tailscale dapat digunakan untuk membuat akses SSH server Linux menjadi lebih terkontrol dengan menempatkan koneksi SSH di dalam jaringan privat berbasis WireGuard.

Administrator dapat mengakses server menggunakan alamat IP Tailscale tanpa harus mengekspos layanan SSH secara langsung ke internet.

Penggunaan Tailscale SSH juga memungkinkan pengelolaan autentikasi dan hak akses melalui kebijakan ACL sehingga pengaturan akses dapat dilakukan secara terpusat.

Namun, konfigurasi Tailscale sebaiknya tetap dikombinasikan dengan firewall yang membatasi port SSH hanya melalui interface tailscale0.

Setelah konfigurasi selesai, administrator perlu melakukan pengujian dari jaringan Tailscale dan jaringan publik untuk memastikan akses yang diizinkan dapat berjalan serta koneksi SSH dari internet telah diblokir.

Pemantauan perangkat yang tergabung dalam tailnet, pencabutan akses perangkat yang sudah tidak digunakan, dan pembaruan sistem secara berkala juga diperlukan untuk menjaga keamanan server.