Dialin Server with Freeradius + Mysql
Berikut ini akan saya informasikan mengenai langkah langkah / cara cara
konfigurasi "Dialin Server" + "FreeRadius" + "MySQL" dalam 1 mesin test
, dasarnya tujuan saya membuat server ini adalah sebagai bagian dari
proses konfigurasi server GPRS internet akses, dalam hal ini NAP tempat
saya bekerja memiliki kerja sama dengan sebuah GSM Operator. cara kerja
"GPRS Akses" mirip dengan "Dialin Akses" bedanya pada sisi tambahan
Radius, Tunnel layer 2, dan media komunikasi / Akses yang dipergunakan.
Gambaran sederhana :
CLIENT-modem–>–/ISDN/–>–modem–>/PPPD/PPTP/RADIUSCLIENT/RADIUSSERVER/–>–/CLOUD/
Pada akses GPRS :
RADIUSCLIENT dan RADIUSSERVER akan terhubung melalui tunnel, dan umumnya terletak
pada lokasi yang berbeda dan mesin yang berbeda di sisi Operator dan di sisi NAP / ISP.
Akses internet akan disediakan oleh NAP / ISP melalui sambungan yang mereka miliki.
InsyaAllah kita mulai …
System operasi yang saya pergunakan adalah : Fedora Core release 3 (Heidelberg)
dengan kernel : Linux shellcode 2.6.9-1.667.
*** Berikut ini apa saja yang kita perlukan / harus tersedia :
1. Akses root atau superuser
2. Packet pppd, check dengan rpm -qa | grep pppd
[root@shellcode /]# rpm -qa |grep ppp
rp-pppoe-3.5-22
ppp-2.4.2-6.4.FC3 -> Packet pppd yang kita perlukan
bila paket ini tidak tersedia maka lakukan installasi terlebih dahulu, untuk
Fedora dan Redhat jalankan perintah : rpm -ivh nama-packet-yang-di-install
contoh : rpm -ivh ppp-2.4.2-6.4.FC3.i386.rpm
3. Packet mgetty, check dengan rpm -qa | grep mgetty
[root@shellcode /]# rpm -qa |grep mgetty
mgetty-1.1.31-2 -> Packet mgetty yang kita perlukan
bila tidak tersedia lakukan installasi terlebih dahulu sebagaimana contoh
sebelumnya pada packet pppd.
Untuk installasi packet "pppd" maupun "mgetty" anda dapat juga menggunakan
packet dengan format "tar ball" / tar.gz / packet installasi yang lain yang
sesuai dengan system operasi anda, untuk packet "tar ball" / tar.gz , cara
installasi sebagai berikut : ( contoh packet ppp-2.4.2-6.4.tar.gz )
- Ekstrak packet installasi :
[root@shellcode /]# tar -xvzf ppp-2.4.2-6.4.tar.gz
- Masuk ke direktori hasil ekstraksi :
[root@shellcode /]# cd ppp-2.4.2-6.4
- Lakukan kompilasi :
[root@shellcode /]# ./configure
[root@shellcode /]# make
[root@shellcode /]# make install
4. Perangkat Modem ( Modulator Demodulator ), dalam contoh kali ini perangkat
yang saya pergunakan adalah "Modem Eksternal DLINK DFM-560EL" dengan port serial
terhubung melalui COM1 ( /dev/ttyS0 ). Perhatikan detail tabel berikut :
Physical Port Linux Port
COM 1 ttyS0
COM 2 ttyS1
COM 3 ttyS2
COM 4 ttyS3
untuk melakukan deteksi hardware modem jalankan aplikasi : kudzu , contoh sebagai
berikut :
[root@shellcode /]# kudzu -p -t 20
*** Konfigurasi Dialin Server :
1. Membuat group dan user untuk dialler :
[root@shellcode /]# groupadd -g 1001 gprs
[root@shellcode /]# useradd gprs -u 1001 -g 1001 -d /home/gprs -s /sbin/dial-in-start
kemudian check apakah user sudah dibuat sesuai kehendak kita
[root@shellcode /]# cat /etc/passwd |grep gprs
gprs:x:504:504::/home/gprs:/sbin/dial-in-start
2. Buat file /sbin/dial-in-start, dengan informasi didalamnya :
#!/bin/sh
#/etc/ppp/ppplogin
# PPP login script
mesg n
stty -echo
exec /usr/sbin/pppd -detach modem debug crtscts
3. Rubah attribut access dan kepemilikan file :
[root@shellcode /]# chmod 755 /sbin/dial-in-start
[root@shellcode /]# chown root:gprs /sbin/dial-in-start
5. Rubah attribut access /usr/sbin/pppd:
[root@shellcode /]# chmod 755 /usr/sbin/pppd
[root@shellcode /]# chmod u+s /usr/sbin/pppd
6. Rubah informasi pada /etc/inittab, dan tambahkan informasi berikut dengan
asumsi modem terkoneksi ke COM1 :
S0:2345:respawn:/sbin/mgetty ttyS0 -D /dev/ttyS0
Informasi isian diatas :
opsi -D berarti penggunaan koneksi hanya untuk Data saja.
8. Aktifkan PPP dial in service :
Secara default mgetty tidak akan menjalankan pppd sehingga kita harus melakukan
perubahan konfigurasi pada : /etc/mgetty+sendfax/login.config
[root@shellcode /]# vi /etc/mgetty+sendfax/login.config
cari informasi :
#/AutoPPP/ - a_ppp /usr/sbin/pppd auth -chap +pap login debug
rubah ke :
/AutoPPP/ - - /usr/sbin/pppd auth -chap +pap login debug
selanjutnya silahkan non aktifkan baris yang lain dengan menambahkan tanda #
9. Rubah konfigurasi ppp :
[root@shellcode /]# vi /etc/ppp/options
Isikan informasi berikut :
-detach
asyncmap 0
modem
crtscts
lock
proxyarp
require-pap
refuse-chap
ms-dns 192.168.2.72 #IP DNS Primary anda
ms-dns 10.35.2.72 #IP DNS Secondary anda
usepeerdns
10. Tambahkan konfigurasi sesuai port koneksi ke modem untuk komunikasi ppp:
[root@shellcode /]# vi /etc/ppp/options.ttyS0
Isikan informasi berikut :
192.168.2.72:192.168.2.99
netmask 255.255.255.0
debug
Informasi dari file diatas:
192.168.2.72 -> ip server
192.168.2.99 -> ip untuk client ppp
netmask 255.255.255.0 -> netmask yang dipergunakan, sama dengan /24
11. Lakukan konfigurasi untuk authentifikasi pada /etc/ppp/pap-secrets:
Tambahkan informasi berikut:
gprs * gprs *
Informasi isian diatas :
User : gprs
Password : gprs
12. Lakukan load ulang pembacaaan file konfigurasi /etc/inittab dan memerintahkan
aplikasi mgetty untuk listen ke modem.
[root@shellcode /]# telinit q
12. Selesai sudah proses konfigurasi kita, silahkan coba melakukan "Dial Up" Dari line
telphone yang terkoneksi ke modem pc yang lain / terletak di lokasi remote.
***
Authentikasi dengan FreeRadius + MySQL :
*** Kita mulai dengan apa saja yang kita perlukan / harus tersedia :
1. Akses root atau superuser
2. Mysql yang sudah terinstall, cara pengecheckkan :
[root@shellcode /]# rpm -qa | grep mysql
mysql-bench-3.23.58-13
mod_auth_mysql-20030510-5
php-mysql-4.3.9-3
mysql-server-3.23.58-13
libdbi-dbd-mysql-0.6.5-9
freeradius-mysql-1.0.1-1
mysql-3.23.58-13
mysql-devel-3.23.58-13
3. FreeRadius, check dengan perintah :
[root@shellcode /]# rpm -qa | grep freeradius
freeradius-1.0.1-1
freeradius-mysql-1.0.1-1
Bila pada system operasi belum terinstall Freeradius lakukan installasi dengan
menggunakan packet installasi yang sesuai, pada contoh kali ini saya menggunakan
FreeRadius versi 1.0.1-1 dengan format packet "tar ball", caranya sebagai berikut:
- Ekstrak file freeradius-1.0.1-1.tar.gz :
[root@shellcode /]# tar -xvzf freeradius-1.0.1-1.tar.gz
- Buat user untuk menjalankan freeradius :
[root@shellcode /]# groupadd radius
[root@shellcode /]# useradd -u radius -g radius -s /sbin/nologin -d /usr/local/radius
- Lakukan kompilasi :
[root@shellcode /]# cd freeradius-1.0.1-1
[root@shellcode /]# ./configure –prefix=/usr/local/radius –with-experimental-modules
[root@shellcode /]# make
[root@shellcode /]# make all
[root@shellcode /]# make install
[root@shellcode /]# chown -R radius:radius /usr/local/radius
[root@shellcode /]# ln -s /usr/local/radius/etc/raddb /etc/raddb
- Buat database freeradius di mysql :
[root@shellcode /]# mysql -u root -p <root-password>
mysql> create database radius;
mysql> use radius;
mysql> grant all on radius.* to radius@localhost identified by ‘password-radius’;
mysql> flush privileges;
mysql> exit
- Masukkan schema database freeradius ke mysql :
[root@shellcode /]# mysql -u root -p <root-password> radius < src/modules/rlm_sql/drivers/rlm_sql_mysql/db_mysql.sql
Umumnya schema mysql untuk radius : src/modules/rlm_sql/drivers/rlm_sql_mysql/db_mysql.sql
,atau /usr/local/share/doc/freeradius/examples/mysql.sql
- Konfigurasi yang perlu diperhatikan pada konfigurasi radius :
a. usr/local/radius/etc/raddb/clients.conf, pastikan berisi informasi NAS dan Secret yang sesuai, contoh :
client 127.0.0.1 {
secret = test
shortname = localhost
}
client 192.168.2.254 {
secret = 918
shortname = 918wifi2net
}
b. usr/local/radius/etc/raddb/radiusd.conf, pastikan informasi modul mysql aktif. contoh :
Modules {
mschap {
authtype = MS-CHAP
use_mppe = yes
#force 128bit:
require_strong = yes
}
}
authorize {
preprocess
suffix
sql
mschap
}
authenticate {
mschap
}
preacct {
preprocess
suffix
files
}
accounting {
acct_unique
detail
sql
# radutmp
}
session {
sql
# radutmp
}
sesuaikan modul yang di gunakan dengan kebutuhan anda.
c. usr/local/radius/etc/raddb/sql.conf , berikan informasi login ke mysql server :
server = "mysql_server"
login = "mysql_username"
password = "mysql_password"
radius_db = "radius"
Bila proses diatas selesai, jalankan radius dalam mode "debug" :
/usr/local/radius/sbin/radiusd -X
contoh informasi yang ditampilkan :
Starting - reading configuration files …
reread_config: reading radiusd.conf
Config: including file: /usr/local/radius/etc/raddb/proxy.conf
Config: including file: /usr/local/radius/etc/raddb/clients.conf
Config: including file: /usr/local/radius/etc/raddb/snmp.conf
Config: including file: /usr/local/radius/etc/raddb/eap.conf
Config: including file: /usr/local/radius/etc/raddb/sql.conf
main: prefix = "/usr/local/radius"
main: localstatedir = "/usr/local/radius/var"
main: logdir = "/usr/local/radius/var/log/radius"
main: libdir = "/usr/local/radius/lib"
main: radacctdir = "/usr/local/radius/var/log/radius/radacct"
main: hostname_lookups = no
main: max_request_time = 30
main: cleanup_delay = 5
main: max_requests = 1024
main: delete_blocked_requests = 0
main: port = 0
main: allow_core_dumps = no
main: log_stripped_names = no
main: log_file = "/usr/local/radius/var/log/radius/radius.log"
main: log_auth = no
main: log_auth_badpass = no
main: log_auth_goodpass = no
main: pidfile = "/usr/local/radius/var/run/radiusd/radiusd.pid"
main: user = "(null)"
main: group = "(null)"
main: usercollide = no
main: lower_user = "no"
main: lower_pass = "no"
main: nospace_user = "no"
main: nospace_pass = "no"
main: checkrad = "/usr/local/radius/sbin/checkrad"
main: proxy_requests = yes
proxy: retry_delay = 5
proxy: retry_count = 3
proxy: synchronous = no
proxy: default_fallback = yes
proxy: dead_time = 120
proxy: post_proxy_authorize = yes
proxy: wake_all_if_all_dead = no
security: max_attributes = 200
security: reject_delay = 1
security: status_server = no
main: debug_level = 0
read_config_files: reading dictionary
read_config_files: reading naslist
Using deprecated naslist file. Support for this will go away soon.
read_config_files: reading clients
read_config_files: reading realms
radiusd: entering modules setup
Module: Library search path is /usr/local/radius/lib
Module: Loaded exec
exec: wait = yes
exec: program = "(null)"
exec: input_pairs = "request"
exec: output_pairs = "(null)"
exec: packet_type = "(null)"
rlm_exec: Wait=yes but no output defined. Did you mean output=none?
Module: Instantiated exec (exec)
Module: Loaded expr
Module: Instantiated expr (expr)
Module: Loaded PAP
pap: encryption_scheme = "crypt"
Module: Instantiated pap (pap)
Module: Loaded CHAP
Module: Instantiated chap (chap)
Module: Loaded MS-CHAP
mschap: use_mppe = yes
mschap: require_encryption = yes
mschap: require_strong = yes
mschap: with_ntdomain_hack = no
mschap: passwd = "(null)"
mschap: authtype = "MS-CHAP"
mschap: ntlm_auth = "(null)"
Module: Instantiated mschap (mschap)
Module: Loaded System
unix: cache = no
unix: passwd = "(null)"
unix: shadow = "(null)"
unix: group = "(null)"
unix: radwtmp = "/usr/local/radius/var/log/radius/radwtmp"
unix: usegroup = no
unix: cache_reload = 600
Module: Instantiated unix (unix)
Module: Loaded eap
eap: default_eap_type = "peap"
eap: timer_expire = 60
eap: ignore_unknown_eap_types = no
eap: cisco_accounting_username_bug = no
rlm_eap: Loaded and initialized type md5
rlm_eap: Loaded and initialized type leap
gtc: challenge = "Password: "
gtc: auth_type = "PAP"
rlm_eap: Loaded and initialized type gtc
tls: rsa_key_exchange = no
tls: dh_key_exchange = yes
tls: rsa_key_length = 512
tls: dh_key_length = 512
tls: verify_depth = 0
tls: CA_path = "(null)"
tls: pem_file_type = yes
tls: private_key_file = "/usr/local/radius/etc/raddb/certs/cert-srv.pem"
tls: certificate_file = "/usr/local/radius/etc/raddb/certs/cert-srv.pem"
tls: CA_file = "/usr/local/radius/etc/raddb/certs/demoCA/cacert.pem"
tls: private_key_password = "whatever"
tls: dh_file = "/usr/local/radius/etc/raddb/certs/dh"
tls: random_file = "/usr/local/radius/etc/raddb/certs/random"
tls: fragment_size = 1024
tls: include_length = yes
tls: check_crl = no
tls: check_cert_cn = "(null)"
rlm_eap: Loaded and initialized type tls
peap: default_eap_type = "mschapv2"
peap: copy_request_to_tunnel = no
peap: use_tunneled_reply = no
peap: proxy_tunneled_request_as_eap = yes
rlm_eap: Loaded and initialized type peap
mschapv2: with_ntdomain_hack = no
rlm_eap: Loaded and initialized type mschapv2
Module: Instantiated eap (eap)
Module: Loaded preprocess
preprocess: huntgroups = "/usr/local/radius/etc/raddb/huntgroups"
preprocess: hints = "/usr/local/radius/etc/raddb/hints"
preprocess: with_ascend_hack = no
preprocess: ascend_channels_per_line = 23
preprocess: with_ntdomain_hack = no
preprocess: with_specialix_jetstream_hack = no
preprocess: with_cisco_vsa_hack = no
Module: Instantiated preprocess (preprocess)
Module: Loaded realm
realm: format = "suffix"
realm: delimiter = "@"
realm: ignore_default = no
realm: ignore_null = no
Module: Instantiated realm (suffix)
Module: Loaded SQL
sql: driver = "rlm_sql_mysql"
sql: server = "localhost"
sql: port = ""
sql: login = "root"
sql: password = "prohack"
sql: radius_db = "radius"
sql: acct_table = "radacct"
sql: acct_table2 = "radacct"
sql: authcheck_table = "radcheck"
sql: authreply_table = "radreply"
sql: groupcheck_table = "radgroupcheck"
sql: groupreply_table = "radgroupreply"
sql: usergroup_table = "usergroup"
sql: nas_table = "nas"
sql: dict_table = "dictionary"
sql: sqltrace = no
sql: sqltracefile = "/usr/local/radius/var/log/radius/sqltrace.sql"
sql: readclients = no
sql: deletestalesessions = yes
sql: num_sql_socks = 5
sql: sql_user_name = "%{User-Name}"
sql: default_user_profile = ""
sql: query_on_not_found = no
sql: authorize_check_query = "SELECT id,UserName,Attribute,Value,op FROM radcheck WHERE Username = ‘%{SQL-User-Name}’ ORDER BY id"
sql: authorize_reply_query = "SELECT id,UserName,Attribute,Value,op FROM radreply WHERE Username = ‘%{SQL-User-Name}’ ORDER BY id"
sql: authorize_group_check_query = "SELECT radgroupcheck.id,radgroupcheck.GroupName,radgroupcheck.Attribute,radgroupcheck.Value,radgroupcheck.op FROM radgroupcheck,usergroup WHERE usergroup.Username = ‘%{SQL-User-Name}’ AND usergroup.GroupName = radgroupcheck.GroupName ORDER BY radgroupcheck.id"
sql: authorize_group_reply_query = "SELECT radgroupreply.id,radgroupreply.GroupName,radgroupreply.Attribute,radgroupreply.Value,radgroupreply.op FROM radgroupreply,usergroup WHERE usergroup.Username = ‘%{SQL-User-Name}’ AND usergroup.GroupName = radgroupreply.GroupName ORDER BY radgroupreply.id"
sql: accounting_onoff_query = "UPDATE radacct SET AcctStopTime=’%S’, AcctSessionTime=unix_timestamp(’%S’) - unix_timestamp(AcctStartTime), AcctTerminateCause=’%{Acct-Terminate-Cause}’, AcctStopDelay = ‘%{Acct-Delay-Time}’ WHERE AcctSessionTime=0 AND AcctStopTime=0 AND NASIPAddress= ‘%{NAS-IP-Address}’ AND AcctStartTime <= ‘%S’"
sql: accounting_update_query = "UPDATE radacct ? SET FramedIPAddress = ‘%{Framed-IP-Address}’, ? AcctSessionTime = ‘%{Acct-Session-Time}’, ? AcctInputOctets = ‘%{Acct-Input-Octets}’, ? AcctOutputOctets = ‘%{Acct-Output-Octets}’ ? WHERE AcctSessionId = ‘%{Acct-Session-Id}’ ? AND UserName = ‘%{SQL-User-Name}’ ? AND NASIPAddress= ‘%{NAS-IP-Address}’"
sql: accounting_update_query_alt = "INSERT into radacct (AcctSessionId, AcctUniqueId, UserName, Realm, NASIPAddress, NASPortId, NASPortType, AcctStartTime, AcctSessionTime, AcctAuthentic, ConnectInfo_start, AcctInputOctets, AcctOutputOctets, CalledStationId, CallingStationId, ServiceType, FramedProtocol, FramedIPAddress, AcctStartDelay) values(’%{Acct-Session-Id}’, ‘%{Acct-Unique-Session-Id}’, ‘%{SQL-User-Name}’, ‘%{Realm}’, ‘%{NAS-IP-Address}’, ‘%{NAS-Port}’, ‘%{NAS-Port-Type}’, DATE_SUB(’%S’,INTERVAL (%{Acct-Session-Time:-0} + %{Acct-Delay-Time:-0}) SECOND), ‘%{Acct-Session-Time}’, ‘%{Acct-Authentic}’, ”, ‘%{Acct-Input-Octets}’, ‘%{Acct-Output-Octets}’, ‘%{Called-Station-Id}’, ‘%{Calling-Station-Id}’, ‘%{Service-Type}’, ‘%{Framed-Protocol}’, ‘%{Framed-IP-Address}’, ‘0′)"
sql: accounting_start_query = "INSERT into radacct (AcctSessionId, AcctUniqueId, UserName, Realm, NASIPAddress, NASPortId, NASPortType, AcctStartTime, AcctStopTime, AcctSessionTime, AcctAuthentic, ConnectInfo_start, ConnectInfo_stop, AcctInputOctets, AcctOutputOctets, CalledStationId, CallingStationId, AcctTerminateCause, ServiceType, FramedProtocol, FramedIPAddress, AcctStartDelay, AcctStopDelay) values(’%{Acct-Session-Id}’, ‘%{Acct-Unique-Session-Id}’, ‘%{SQL-User-Name}’, ‘%{Realm}’, ‘%{NAS-IP-Address}’, ‘%{NAS-Port}’, ‘%{NAS-Port-Type}’, ‘%S’, ‘0′, ‘0′, ‘%{Acct-Authentic}’, ‘%{Connect-Info}’, ”, ‘0′, ‘0′, ‘%{Called-Station-Id}’, ‘%{Calling-Station-Id}’, ”, ‘%{Service-Type}’, ‘%{Framed-Protocol}’, ‘%{Framed-IP-Address}’, ‘%{Acct-Delay-Time}’, ‘0′)"
sql: accounting_start_query_alt = "UPDATE radacct SET AcctStartTime = ‘%S’, AcctStartDelay = ‘%{Acct-Delay-Time}’, ConnectInfo_start = ‘%{Connect-Info}’ WHERE AcctSessionId = ‘%{Acct-Session-Id}’ AND UserName = ‘%{SQL-User-Name}’ AND NASIPAddress = ‘%{NAS-IP-Address}’"
sql: accounting_stop_query = "UPDATE radacct SET AcctStopTime = ‘%S’, AcctSessionTime = ‘%{Acct-Session-Time}’, AcctInputOctets = ‘%{Acct-Input-Octets}’, AcctOutputOctets = ‘%{Acct-Output-Octets}’, AcctTerminateCause = ‘%{Acct-Terminate-Cause}’, AcctStopDelay = ‘%{Acct-Delay-Time}’, ConnectInfo_stop = ‘%{Connect-Info}’ WHERE AcctSessionId = ‘%{Acct-Session-Id}’ AND UserName = ‘%{SQL-User-Name}’ AND NASIPAddress = ‘%{NAS-IP-Address}’"
sql: accounting_stop_query_alt = "INSERT into radacct (AcctSessionId, AcctUniqueId, UserName, Realm, NASIPAddress, NASPortId, NASPortType, AcctStartTime, AcctStopTime, AcctSessionTime, AcctAuthentic, ConnectInfo_start, ConnectInfo_stop, AcctInputOctets, AcctOutputOctets, CalledStationId, CallingStationId, AcctTerminateCause, ServiceType, FramedProtocol, FramedIPAddress, AcctStartDelay, AcctStopDelay) values(’%{Acct-Session-Id}’, ‘%{Acct-Unique-Session-Id}’, ‘%{SQL-User-Name}’, ‘%{Realm}’, ‘%{NAS-IP-Address}’, ‘%{NAS-Port}’, ‘%{NAS-Port-Type}’, DATE_SUB(’%S’, INTERVAL (%{Acct-Session-Time:-0} + %{Acct-Delay-Time:-0}) SECOND), ‘%S’, ‘%{Acct-Session-Time}’, ‘%{Acct-Authentic}’, ”, ‘%{Connect-Info}’, ‘%{Acct-Input-Octets}’, ‘%{Acct-Output-Octets}’, ‘%{Called-Station-Id}’, ‘%{Calling-Station-Id}’, ‘%{Acct-Terminate-Cause}’, ‘%{Service-Type}’, ‘%{Framed-Protocol}’, ‘%{Framed-IP-Address}’, ‘0′, ‘%{Acct-Delay-Time}’)"
sql: group_membership_query = "SELECT GroupName FROM usergroup WHERE UserName=’%{SQL-User-Name}’"
sql: connect_failure_retry_delay = 60
sql: simul_count_query = ""
sql: simul_verify_query = "SELECT RadAcctId, AcctSessionId, UserName, NASIPAddress, NASPortId, FramedIPAddress, CallingStationId, FramedProtocol FROM radacct WHERE UserName=’%{SQL-User-Name}’ AND AcctStopTime = 0"
sql: postauth_table = "radpostauth"
sql: postauth_query = "INSERT into radpostauth (id, user, pass, reply, date) values (”, ‘%{User-Name}’, ‘%{User-Password:-Chap-Password}’, ‘%{reply:Packet-Type}’, NOW())"
sql: safe-characters = "@abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.-_: /"
rlm_sql (sql): Driver rlm_sql_mysql (module rlm_sql_mysql) loaded and linked
rlm_sql (sql): Attempting to connect to root@localhost:/radius
rlm_sql (sql): starting 0
rlm_sql (sql): Attempting to connect rlm_sql_mysql #0
rlm_sql_mysql: Starting connect to MySQL server for #0
rlm_sql (sql): Connected new DB handle, #0
rlm_sql (sql): starting 1
rlm_sql (sql): Attempting to connect rlm_sql_mysql #1
rlm_sql_mysql: Starting connect to MySQL server for #1
rlm_sql (sql): Connected new DB handle, #1
rlm_sql (sql): starting 2
rlm_sql (sql): Attempting to connect rlm_sql_mysql #2
rlm_sql_mysql: Starting connect to MySQL server for #2
rlm_sql (sql): Connected new DB handle, #2
rlm_sql (sql): starting 3
rlm_sql (sql): Attempting to connect rlm_sql_mysql #3
rlm_sql_mysql: Starting connect to MySQL server for #3
rlm_sql (sql): Connected new DB handle, #3
rlm_sql (sql): starting 4
rlm_sql (sql): Attempting to connect rlm_sql_mysql #4
rlm_sql_mysql: Starting connect to MySQL server for #4
rlm_sql (sql): Connected new DB handle, #4
Module: Instantiated sql (sql)
Module: Loaded Acct-Unique-Session-Id
acct_unique: key = "User-Name, Acct-Session-Id, NAS-IP-Address, Client-IP-Address, NAS-Port"
Module: Instantiated acct_unique (acct_unique)
Module: Loaded detail
detail: detailfile = "/usr/local/radius/var/log/radius/radacct/%{Client-IP-Address}/detail-%Y%m%d"
detail: detailperm = 384
detail: dirperm = 493
detail: locking = no
Module: Instantiated detail (detail)
Module: Loaded radutmp
radutmp: filename = "/usr/local/radius/var/log/radius/radutmp"
radutmp: username = "%{User-Name}"
radutmp: case_sensitive = yes
radutmp: check_with_nas = yes
radutmp: perm = 384
radutmp: callerid = yes
Module: Instantiated radutmp (radutmp)
Module: Loaded IPPOOL
ippool: session-db = "/usr/local/radius/etc/raddb/db.ippool"
ippool: ip-index = "/usr/local/radius/etc/raddb/db.ipindex"
ippool: range-start = 192.168.2.100 IP address [192.168.2.100]
ippool: range-stop = 192.168.2.150 IP address [192.168.2.150]
ippool: netmask = 255.255.255.0 IP address [255.255.255.0]
ippool: cache-size = 800
ippool: override = no
ippool: maximum-timeout = 0
Module: Instantiated ippool (main_pool)
Listening on authentication *:1812
Listening on accounting *:1813
Listening on proxy *:1814
Ready to process requests.
Kita lakukan test dengan menggunakan perintah : radtest ,contoh :
[root@shellcode ~]# radtest test test 127.0.0.1 1812 test
Sending Access-Request of id 66 to 127.0.0.1 port 1812
User-Name = "test"
User-Password = "test"
NAS-IP-Address = 255.255.255.255
NAS-Port = 1812
rad_recv: Access-Accept packet from host 127.0.0.1:1812, id=66, length=56
Framed-IP-Address = 192.168.2.248
Framed-Protocol = PPP
Service-Type = Framed-User
Framed-Compression = Van-Jacobson-TCP-IP
Framed-MTU = 1500
Idle-Timeout = 60
Sampai disini installasi freeradius telah selesai, untuk memudahkan kinerja
lebih lanjut kita manfaatkan aplikasi dial up admin, berikut saya sampaikan
cara konfigurasi "dialup admin"
1. Masuk ke folder source installasi Freeradius
[root@shellcode /]# cd freeradius-1.0.1-1
2. Pindahkan direktori "dialup_admin" ke /usr/local :
[root@shellcode /]# mv dialup_admin /usr/local
3. Ubah direktori dialup_admin ke dialupadmin
[root@shellcode /]# cd /usr/local
[root@shellcode /]# mv dialup_admin dialupadmin
4. Lakukan perubahan pada configurasi dialup admin :
[root@shellcode /]# vi /usr/local/dialupadmin/conf/admin.conf
Sesuaikan parameter yang tersedia dengan konfigurasi radius yang ada, dan juga
isikan parameter yang sesuai untuk konfigurasi koneksi ke mysql.
***
Selanjutnya kita memerlukan aplikasi untuk menjadikan PC linux kita menjadi
NAS yang akan melakukan request authentikasi ke server radius.
Aplikasi yang dipergunakan :
1. Radiusclient, kali ini versi yang saya pergunakan : radiusclient-0.3.2.tar.gz
cara installasi :
a. Ekstrak packet installasi :
[root@shellcode /]# tar -xvzf radiusclient-0.3.2.tar.gz
b. lakukan kompilasi :
[root@shellcode /]# cd radiusclient-0.3.2
[root@shellcode /]# ./configure –prefix=/usr/local/radiusclient
[root@shellcode /]# make ; make all ; make install
[root@shellcode /]# ln -s /usr/local/radiusclient/etc/radiusclient /etc/radiusclient
c. lakukan konfigurasi radius client :
[root@shellcode /]# cd /etc/radiusclient
[root@shellcode /]# vi radiusclient.conf
perhatikan line berikut didalam file radiusclient.conf:
authserver localhost # ganti localhost dengan ip radius server
acctserver localhost #
pada contoh ini radius server dan client di kompilasi pada mesin yang sama.
[root@shellcode /]# vi servers
Perhatikan line berikut didalam file servers :
#Server Name or Client/Server pair Key
#—————- —————
localhost test
penjelasan : "localhost" adalah server radius "key" adalah secret pada
radius server, ubah informasi diatas sesuai konfigurasi anda.
Pada contoh kali ini aplikasi yang saya pergunakan untuk menjadikan
pc linux ini sebagai NAS adalah pptpd, berikut cara install dan konfigurasinya.
1. Ekstrak paket installasi : pptpd-1.3.4.tar.gz
[root@shellcode /]# tar -xvzf pptpd-1.3.4.tar.gz
[root@shellcode /]# cd pptpd-1.3.4
2. Lakukan kompilasi :
[root@shellcode /]# ./configure –prefix=/usr/local/pptpd
[root@shellcode /]# make ; make all; make install
3. Lakukan perubahan pada file konfigurasi pptpd :
[root@shellcode /]# cp samples/pptpd.conf /etc/
[root@shellcode /]# cp samples/options.pptpd /etc/
[root@shellcode /]# cp samples/options.pptpd /etc/ppp/
[root@shellcode /]# vi /etc/pptpd.conf
konfigurasi yang saya pergunakan pada /etc/pptpd.conf :
ppp /usr/sbin/pppd # lokasi pppd
option /etc/ppp/options.pptpd # opsi yang akan dipakai
logwtmp # log ke syslog
localip 192.168.2.72 # set ip interface yg kita pakai
remoteip 192.168.2.100-250 # set range ip untuk client
[root@shellcode /]# vi /etc/ppp/options.pptpd
konfigurasi yang saya pergunakan pada /etc/ppp/options.pptpd
#lock
debug # untuk testing
name pptpd
proxyarp
asyncmap 0
refuse chap
refuse mschap
require mschap-v2
require pap
lcp-echo-failure 30
lcp-echo-interval 5
ipcp-accept-local
ipcp-accept-remote
nodefaultroute
ms-dns 192.168.2.71 # ip dns untuk client
ms-dns 192.168.2.70 # ip dns untuk client
plugin radius.so # Meet the ghost
Jalankan radius, mysql, dan reload init, setelah itu coba lakukan dial
ke server dan gunakan informasi login yang tersedia, bila berjalan dengan
baik dan normal jangan lupa ucapkan Alhamdulillah.
OK … Selesai sudah keseluruhan aktifitas sharing kita untuk topik ini.
Saya hanya manusia biasa yang mencoba berkarya dan berbagi pengetahuan
dari apa yang saya miliki, Terlahir tak sempurna, mencoba belajar dengan
cara yang sempurna, walaupun pada akhirnya tiada satupun yang sempurna.
Terima kasih atas saran dan kritik.
Configured by :
Rizky .M Dinata
reachable at :
http://rizky-md.ath.cx
mail: rizky.md@indoit.net
rizky.md@gmail.com
spike_cursed@yahoo.com
reference :
- http://www.freeradius.org/rfc/
- James Cameron, 2005-11-16
- GNU Radius Reference Manual
- CAIA Technical Report 040220A, http://caia.swin.edu.au/life/