Mengkonfigurasi OpenBSD untuk Menggunakan Freeradius Auth dengan MySQL Server

· 2 min read

FreeRADIUS adalah server gratis yang luar biasa dan menyediakan layanan autentikasi dan otorisasi terpusat untuk perangkat termasuk switch, router, ga

Dalam arsitektur jaringan perusahaan modern, jaringan memiliki struktur yang kompleks dan rumit. Banyak perangkat yang terhubung satu sama lain secara bersamaan, sehingga memudahkan bagi pelanggar dan siapa pun yang berniat melanggar hukum. Untuk mengatasi masalah ini, mekanisme untuk merekam informasi subjek dalam jaringan dikembangkan. Server RADIUS yang dapat menyediakan 3 fungsi keamanan: autentikasi, otorisasi, dan akuntansi. Setiap langkah dalam sistem akan dicatat dan semua catatan dan titik masuk akan dipantau.

FreeRADIUS adalah server gratis yang luar biasa dan menyediakan layanan autentikasi dan otorisasi terpusat untuk perangkat termasuk switch, router, gateway VPN, dan titik akses Wi-Fi. Kemampuannya yang unik untuk mengelola akses pengguna ke sumber daya jaringan berdasarkan berbagai parameter seperti identitas, lokasi, karakteristik perangkat, dan waktu, menjadikannya solusi serbaguna untuk jaringan perusahaan, pendidikan, dan penyedia layanan.

Server mendukung beberapa metode autentikasi dan dapat diintegrasikan dengan basis data eksternal seperti SQL, LDAP, dan Kerberos untuk menyimpan dan mengambil informasi pengguna dan perangkat secara efisien. Dengan skalabilitas, fleksibilitas, dan keandalannya, FreeRADIUS tetap menjadi pilihan utama bagi organisasi yang membutuhkan solusi RADIUS yang andal dan dapat disesuaikan.


1. Instalasi dan Konfigurasi FreeRADIUS

a. Update Paket PKG OpenBSD

Sebelum menginstal perangkat lunak apa pun, kita perlu memperbarui indeks dan paket di OpenBSD.

Update PKG
ns3# pkg_add -uvi

b. Install Freeradius

Instal paket Freeradius dengan perintah pkg_add.

Install Freeradius
ns3# pkg_add freeradius debug-freeradius-mysql freeradius-mysql

c. Ubah/Edit file /etc/raddb/radiusd.conf

Berkas konfigurasi utama Freeradius adalah "radiusd.conf". Sebelum mengonfigurasi berkas lainnya, Anda harus mengedit radiusd.conf terlebih dahulu. Berikut ini adalah contoh skrip radiusd.conf yang lengkap.

Script /etc/raddb/radiusd.conf
prefix = /usr/local
exec_prefix = ${prefix}
sysconfdir = /etc
localstatedir = /var
sbindir = ${exec_prefix}/sbin
logdir = ${localstatedir}/log/radius
raddbdir = ${sysconfdir}/raddb
radacctdir = ${logdir}/radacct

name = radiusd
confdir = ${raddbdir}
modconfdir = ${confdir}/mods-config
certdir = ${confdir}/certs
cadir   = ${confdir}/certs
run_dir = ${localstatedir}/run/${name}
db_dir = ${raddbdir}

#libdir = /usr/local/lib/freeradius/freeradius
pidfile = ${run_dir}/${name}.pid
max_request_time = 30

cleanup_delay = 5
max_requests = 16384
hostname_lookups = no

log {
	destination = files
	colourise = yes
	file = ${logdir}/radius.log
	syslog_facility = daemon
	stripped_names = no
	auth = no
	auth_badpass = no
	auth_goodpass = no
	msg_denied = "You are already logged in - access denied"
}
checkrad = ${sbindir}/checkrad

ENV {
}

security {
###	chroot = /etc/raddb
	user = _freeradius
	group = _freeradius
	allow_core_dumps = no
	max_attributes = 200
	reject_delay = 1
	status_server = yes
	allow_vulnerable_openssl = no
}

proxy_requests  = yes
$INCLUDE proxy.conf

$INCLUDE clients.conf

thread pool {
	start_servers = 5
	max_servers = 32
	min_spare_servers = 3
	max_spare_servers = 10
	max_requests_per_server = 0
	auto_limit_acct = no
}

#$INCLUDE trigger.conf
modules {
#	$INCLUDE mods-enabled/sql
	$INCLUDE mods-enabled/
}

instantiate {
#	daily
}

policy {
	$INCLUDE policy.d/
}

$INCLUDE sites-enabled/

d. Buat Klient

Sebagai contoh dasar, kita akan membuat klien yang dapat terhubung ke server Freeradius. Dalam contoh ini, kita akan membuat dua klien yang dapat terhubung langsung ke Freeradius:
localhost client (127.0.0.1)
pfsense client (192.168.5.3).

Berikut adalah contoh skrip /etc/raddb/clients.conf yang lengkap.

Script /etc/raddb/clients.conf
client localhost {
	ipaddr = 127.0.0.1
#	ipv6addr = ::	# any.  ::1 == localhost
	proto = *
	secret = testing123
	require_message_authenticator = no
#	shortname = localhost
	nas_type	 = other	# localhost isn't usually a NAS...
	limit {
		max_connections = 16
		lifetime = 0
		idle_timeout = 30
	}
}

client pfsense {
	ipaddr = 192.168.5.3
	secret = router123
	shortname = router
	limit {
		max_connections = 16
		lifetime = 0
		idle_timeout = 30
	}
}

e. Buat Users

Selanjutnya, buat pengguna dan kata sandi yang dapat menggunakan Freeradius. Berikut skrip lengkapnya /etc/raddb/mods-config/files/authorize.

Script /etc/raddb/mods-config/files/authorize
#bob	Cleartext-Password := "hello"
#	Reply-Message := "Hello, %{User-Name}"
#"John Doe"	Cleartext-Password := "hello"
#		Reply-Message = "Hello, %{User-Name}"

steve Cleartext-Password := "steve123"
"MaryRose" Cleartext-Password := "mary123"

f. Kepemilikan (Ownership)

Secara default sistem OpenBSD telah membuat pengguna dan grup _freeradius:_freeradius. Jalankan perintah di bawah ini untuk memberikan hak kepemilikan kepada Freeradius.

Create Ownership
ns3# chown -R _freeradius:_freeradius /etc/raddb/
ns3# chown -R _freeradius:_freeradius /var/log/radius/

g. Mengaktifkan Freeradius

Kemudian kita jalankan Freeradius agar dapat berjalan sebagai daemon di OpenBSD. Jalankan perintah berikut untuk mengaktifkan Freeradius.

Enable Freeradius
ns3# rcctl enable freeradius
ns3# rcctl restart freeradius

h. Mengetest Freeradius

Di bagian ini, kita akan memeriksa pengguna yang dapat terhubung ke server Freeradius. Lihat contoh di bawah ini untuk memeriksa setiap pengguna yang terhubung ke Freeradius.

Check User
ns3# radtest steve steve123 192.168.5.3 1812 router123
Sent Access-Request Id 29 from 0.0.0.0:482e to 192.168.5.3:1812 length 75
	User-Name = "steve"
	User-Password = "steve123"
	NAS-IP-Address = 192.168.5.3
	NAS-Port = 1812
	Message-Authenticator = 0x00
	Cleartext-Password = "steve123"
Received Access-Accept Id 29 from 192.168.5.3:714 to 192.168.5.3:18478 length 20
Check User
ns3# radtest steve steve123 127.0.0.1 1812 testing123
ns3# radtest steve steve123 localhost 1812 testing123
ns3# radtest MaryRose mary123 192.168.5.3 1812 router123


2. Buat user/pengguna Freeradius dengan server MySQL

Ketika FreeRadius digunakan bersama dengan Mariadb atau MySQL, Freeradius akan menggunakan database yang biasanya disebut 'radius' dan di dalam database tersebut terdapat tabel database yang disebut 'radcheck'. Tabel ini adalah tabel yang perlu kita gunakan untuk berinteraksi antara Mariadb dan Freeradius, karena tabel ini berisi semua akun pengguna yang dapat diautentikasi dengan FreeRadius.

Penting untuk diingat bahwa seperti banyak hal lainnya, Anda dapat memilih nama pengguna yang akan digunakan, nama database untuk sesuatu, dan Anda bahkan dapat memilih untuk menggunakan server MySQL jarak jauh! Namun untuk tutorial ini kita akan berasumsi bahwa MySQL dan FreeRadius berada di server yang sama, dan database tersebut disebut 'radius' dan akun pengguna yang akan kita gunakan dengan MySQL adalah root.

Untuk membuat database radius, pertama-tama login ke database Mariadb dengan akun root, setelah itu buat database radius, lihat contoh di bawah ini.

Create database radius, user and password
ns3# mysql -u root -p
MariaDB [(none)]> CREATE DATABASE radius;
MariaDB [(none)]> CREATE USER 'userradius'@'localhost' IDENTIFIED BY 'radius123';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON radius.* TO 'userradius'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> exit;

a. Membuat schema Freeradius

Untuk langkah pertama, kita perlu membuat file schema.sql, yang berisi tabel-tabel yang dibutuhkan Freeradius untuk berkomunikasi dengan Maridb. Anda dapat menemukan contoh file schema.sql di /etc/raddb/mods-config/sql/main/mysql/schema.sql.

Impor skrip schema.sql ke dalam basis data radius yang baru dibuat.

Import schema.sql
ns3# mysql -uroot -prouter123 radius < /etc/raddb/mods-config/sql/main/mysql/schema.sql
root: Mariadb server user
router123: Mariadb server password

b. Buat db user and klien

Sekarang kita akan membuat pengguna baru yang akan disimpan dalam basis data radius. Jalankan perintah insert untuk menambahkan pengguna baru. Untuk contoh ini, pengguna yang akan kita tambahkan adalah Beyoncé, dan dia akan memiliki detail login berikut:

Username: testuser
Password: mariadb123

Create a new user in the radius database
ns3# mysql -u root -prouter123
MariaDB [(none)]> use radius;
MariaDB [radius]> INSERT INTO radcheck (id, username, attribute, op, value) VALUES (1001,'testuser','Cleartext-Password',':=','mariadb123');

Create client in the radius database
MariaDB [radius]> INSERT INTO nas (nasname, shortname, type, ports, secret) VALUES ('192.168.5.3', 'router', 'other', 1812,'router123');

c. Buat Module SQL Freeradius

Salah satu fungsi modul Radius adalah menghubungkan Freeradius dengan aplikasi lain seperti database Mariadb. Dalam contoh ini kita akan menghubungkan Freeradius dengan Mariadb. Untuk membuat koneksi ini, Anda mengubah file /etc/raddb/mods-available/sql. Anda dapat melihat contoh skrip lengkapnya di bawah ini.

Script /etc/raddb/mods-available/sql
sql {
	dialect = "mysql"
	driver = "rlm_sql_mysql"
	sqlite {
		filename = "/tmp/freeradius.db"
		busy_timeout = 200
		bootstrap = "${modconfdir}/${..:name}/main/sqlite/schema.sql"
	}

	mysql {
		warnings = auto
	}

	server = "localhost"
	port = 3306
	login = "userradius"
	password = "radius123"
	radius_db = "radius"
	acct_table1 = "radacct"
	acct_table2 = "radacct"
	postauth_table = "radpostauth"
	authcheck_table = "radcheck"
	groupcheck_table = "radgroupcheck"
	authreply_table = "radreply"
	groupreply_table = "radgroupreply"
	usergroup_table = "radusergroup"
	delete_stale_sessions = yes

	pool {
		start = ${thread[pool].start_servers}
		min = ${thread[pool].min_spare_servers}
		max = ${thread[pool].max_servers}
		spare = ${thread[pool].max_spare_servers}
		uses = 0
		retry_delay = 30
		lifetime = 0
		idle_timeout = 60
		max_retries = 5
	}
	read_clients = yes
	client_table = "nas"
	group_attribute = "SQL-Group"
	$INCLUDE ${modconfdir}/${.:name}/main/${dialect}/queries.conf
}
Lalu Anda melanjutkan dengan membuat tautan simbolik.

Create Symlink
ns3# ln -s /etc/raddb/mods-available/sql /etc/raddb/mods-enabled/

d. Mengaktifkan pilihan sql

Karena pada artikel ini kita akan menghubungkan Freeradius ke server database Mariadb, maka kita harus mengaktifkan opsi "sql" pada file "default" dan "inner-tunnel". File tersebut terletak pada direktori /etc/raddb/sites-available.

Pada skrip file "default" dan "inner-tunnel", Anda menghapus tanda “#” dan “-” (“#sql” dan “-sql”) sehingga skrip tersebut hanya menjadi skrip “sql”.

e. Test Module SQL Freeradius

Bagian ini merupakan langkah yang paling penting, karena kita akan menguji apakah server Freeradius terhubung ke server Mariadb. Kita akan mengujinya dengan user dan password yang telah kita buat dengan perintah SQL di atas. Jalankan perintah berikut untuk menguji server Freeradius.

Test Freeradius
ns3# radtest testuser mariadb123 192.168.5.3 1812 router123 
Kesimpulannya, Freeradius adalah alat yang kuat dan fleksibel untuk meningkatkan keamanan dan kinerja jaringan. Freeradius memungkinkan kredensial unik untuk setiap pengguna, karena tidak ada kata sandi terpadu yang digunakan bersama oleh sejumlah orang, hal ini dapat mencegah ancaman peretas yang menyusup ke jaringan Anda.
Subscribe on LinkedIn Mengkonfigurasi OpenBSD untuk Menggunakan Freeradius Auth dengan MySQL Server

Enclosures Link: Mengkonfigurasi OpenBSD untuk Menggunakan Freeradius Auth dengan MySQL Server

Silahkan Berkomentar, Kakak...! Bunda...!

Posting Komentar