Freeradius üzerinde PEAP kullanarak LDAP üzerindeki kullanıcılarla giriş yapılabilmesine yönelik düzenli bir içeriğin olmadığını fark ettim. Aslında geçmiş zamanlı Ubuntu üzerinde çeşitli yazılar olmasına rağmen özellikle CentOS ve RPM tabanlı sistemlerde hiç bulamadığımı söylemek isterim. Bu belge boyunca için CentOS 7 ve benzerleri üzerinde örnekler yapacağımı belirtmek isterim.
Belge süresince yapacaklarımızı anlatırsam, Öncelikle LDAP kaynağına (örneğin Aktif Dizin) kendimizi dahil ediyoruz. Sonrasında başka bir yazıda bahsettiğim sertifikaları hazırlıyoruz. Sonrasında freeradius üzerinde ayarları tamamlıyoruz.
Sunucumuzu domaine ekleyelim
Bu adım için önelikle freeradius paketinin yüklenmesi ile başlayabiliriz.
yum install freeradius freeradius-ldap
Daha sonrasında domaine eklenme konusunda domainin adresini /etc/resolv.conf dosyası içerisinde "nameserver IPADRES" olarak ekledikten sonra gerekli paketleri kurabiliriz.
yum install samba winbind krb5-workstation samba-winbind-clients
Paketler yüklendikten sonra samba ayarlarını yapmak gerekmektedir. /etc/samba/smb.conf dosyası içeriğini aşağıdaki gibi yapmanız gerekmektedir.
Bu dosya içinde sadece ACIKLAB yazan yerleri domain workgrup adı, ACIKLAB.LAB yazan yerleri de kendi domaininize göre düzenlemeniz gerekiyor. 4 yerde domain, 1 yerde workgrup bulunduğunu belirtmek isterim.
[global]
workgroup = ACIKLAB
security = ads
realm = ACIKLAB.LAB
domain master=no
local master=no
preferred master=no
load printers=no
printing=bsd
printcap name=/dev/null
disable spoolss=yes
idmap config * : backend = tdb
idmap config * : range = 300000-301000
idmap config ACIKLAB.LAB:backend = ad
idmap config ACIKLAB.LAB:schema_mode = rfc2307
idmap config ACIKLAB.LAB:range = 500-200000
winbind enum users=yes
winbind enum groups=yes
winbind use default domain=yes
winbind nested groups=yes
winbind refresh tickets=yes
winbind offline logon=yes
template shell=/bin/false
client use spnego=yes
client ntlmv2 auth=yes
encrypt passwords=yes
restrict anonymous=2
log file=/var/log/samba/samba.log
log level=2
dcerpc endpoint servers=remote
ntlm auth = mschapv2-and-ntlmv2-only
Bu ayarı yaptıktan sonra aşağıdaki komut ile servisleri yeniden başlatıp domainde bildiğiniz bir kullanıcının çekilip çekilemediğini kontrol etmeniz gerekmektedir.
systemctl restart smb
kinit administrator@ACIK.LAB
net ads join -k
systemctl restart winbind
wbinfo -i ali
Eğer bir sorun yoksa ilk ve en önemli aşamayı geçtiğimizi söyleyebilirim. AYrıca kerberos ile ilgili dosya hakkında bilginiz varsa o kısmı kendinize göre doldurmanızı da önermekteyim ama çok detaya girmemek için bu başlığa girmiyorum.
Kısaca bir test yapılması istenirse aşağıdaki komut ile operation completed successfully mesajını almak da arada güzel olabilir:
ntlm_auth --request-nt-key --domain=ACIKLAB.LAB --username=ali --password=Passw0rd
Unutulmaması gereken ve CentOS için çok kaynak bulamadığım en önemli adım da aşağıdaki komutların da uygulanması. Ubuntu'da farklı isimlerde oluşturulduğu için dokümanlarda bu kısım karışmaktadır.
usermod -a -G wbpriv radiusd
chown root:wbpriv /var/lib/samba/winbindd_privileged/
Sertifikaların hazırlanması
Bu kısım da oldukça önemli bir kısım olup ayrı bir dosyada bahsettim. Fakat bu kısımda var olan bir sertifika otoritesini kullanmaya yönelik başka bir yazı da hazırlayacağım.
https://dev.to/aciklab/freeradius-uzerinde-sertifika-olusturulmasi-nm
PEAP için modların ayarlanması
PEAP için en önemli kullanacağımız 3 mod bulunmakta. ldap, mschap ve eap modları.
LDAP modu
LDAP modu "/etc/raddb/mods-enabled/ldap" adresinde olup eğer oluşturulmamışsa siz oluşturabilirsiniz. İçeriği aşağıdaki gibi olmalıdır.
ldap {
server = 'ldaps://192.168.1.180'
identity = "cn=administrator,cn=Users,dc=aciklab,dc=lab"
password = "Passw0rd"
basedn = "cn=Users,dc=aciklab,dc=lab"
base_filter = "(objectclass=user)"
# filter = "(&(sAMAccountName=%{Stripped-User-Name:-%{User-Name}})(memberOf:1.2.840.113556.1.4.1941:=CN=wireless_corp,OU=Networks,DC=aciklab,DC=lab))"
ldap_connections_number = 5
timeout = 4
timelimit = 3
net_timeout = 1
dictionary_mapping = ${confdir}/ldap.attrmap
keepalive {
idle = 60
probes = 3
interval = 3
}
}
Bu dosyada en önemli kısım server adresini düzgünce yazmak, identity ve parolasını doğru şekilde yazmaktır. Ve tabi ki basedn ve base_filter da temel kullanım olarak düzenlenmelidir. Bu konuları bilmiyorsanız LDAP ile ilgili çeşitli yazılarımızı inceleyebilirsiniz.
MSCHAP modu
MSCHAP modu "/etc/raddb/mods-enabled/mschap" adresinde olup eğer oluşturulmamışsa siz oluşturabilirsiniz. İçeriği aşağıdaki gibi olmalıdır.
mschap {
use_mppe = yes
require_encryption = yes
require_strong = yes
with_ntdomain_hack = yes
ntlm_auth = "/usr/bin/ntlm_auth --allow-mschapv2 --request-nt-key --domain=ACIKLAB.LAB --username=%{%{Stripped-User-Name}:-%{%{User-Name}:-None}} --challenge=%{%{mschap:Challenge}:-00} --nt-response=%{%{mschap:NT-Response}:-00}"
}
Bu kısımdaki en önemli nokta da samba-winbind-clients paketi ile birlikte gelen ntlm_auth'in domain parametresindeki ACIKLAB.LAB'ı kendi domaininizle değiştirmenizdir.
EAP modu
EAP modu "/etc/raddb/mods-enabled/eap" adresinde olup eğer oluşturulmamışsa siz oluşturabilirsiniz. İçeriği aşağıdaki gibi olmalıdır.
EAP'ın PEAP algoritmasını kullanacağımız için süreç aşağıdaki gibi olmalıdır. "private_key_password" kısmı sertifikalarınızı oluştururken girdiğiniz parola olması gerekmektedir. Diğer kısımlar için sertifika adreslerinde bir oynama yapmadıysanız aynı kalmasında bir bahsur bulunmamaktadır.
eap {
default_eap_type = peap
timer_expire = 60
ignore_unknown_eap_types = no
cisco_accounting_username_bug = no
max_sessions = 4096
tls {
certdir = ${confdir}/certs
cadir = ${confdir}/certs
private_key_password = birbir
private_key_file = ${certdir}/server.pem
certificate_file = ${certdir}/server.pem
ca_file = ${cadir}/ca.pem
dh_file = ${certdir}/dh
random_file = /dev/urandom
ca_path = ${cadir}
cipher_list = "ECDH+AESGCM:DH+AESGCM:ECDH+AES256:ECDH+AES128:!aNULL:!MD5"
#make_cert_command = "${certdir}/bootstrap"
ecdh_curve = "prime256v1"
}
peap {
default_eap_type = mschapv2
copy_request_to_tunnel = no
use_tunneled_reply = no
virtual_server = "inner-tunnel"
}
mschapv2 {
}
}
Bazı durumlar için güvenlik nedeniyle aşağıdaki satırların da eklenmesi önerilmektedir:
tls_min_version = "1.0"
tls_max_version = "1.2"
Servis ayarlarının tamamlanması
Bu adım için "/etc/raddb/sites-enabled/" klasörü içerisinde bir dosyada, örneğin default isimli bir dosyada aşağıdaki gibi bir içerik tanımlanması gerekmektedir. Bu kısımda daha detaylı şeyler yapılabilir ama şimdilik detaya girmiyorum. Onun için "/etc/raddb/sites-enabled/default" dosyası içeriği için aşağıdaki gibi düzenleme yapılması gerekiyor:
listen {
type = auth
ipaddr = *
port = 1812
}
authorize {
preprocess
auth_log
suffix
eap {
ok = return
}
expiration
logintime
}
authenticate {
Auth-Type MS-CHAP {
mschap
}
eap
}
session {
radutmp
}
post-auth {
Post-Auth-Type REJECT {
attr_filter.access_reject
}
}
Ayrıca aynı yerde "/etc/raddb/sites-enabled/inner-tunnel" isimli dosyanın içeriği de aşağıdaki gibi yapılması gerekmektedir:
server inner-tunnel {
authorize {
mschap
suffix
update control {
Proxy-To-Realm := LOCAL
}
eap {
ok = return
}
ldap
expiration
logintime
}
authenticate {
Auth-Type MS-CHAP {
mschap
}
eap
}
session {
radutmp
}
post-auth {
Post-Auth-Type REJECT {
attr_filter.access_reject
}
}
}
Bu iki dosyanın düzenlenmesi sonrasında artık temel olarak servisimizin ayarları tamamlanmıştır.
Radius servisini kimler kullanacak?
Radius servisini kimlerin kullanacağını belirlemek için /etc/raddb/clients.conf dosyası içerisinde muhtemelen en son satırları aşağıdaki gibi subnet aralığı ve secret anahtarı girilebilir. Bu anahtar normal koşullarda router üzerine girilecektir.
client 192.168.1.0/24 {
secret = bir
shortname = istemci1
}
Radius servisinin çalıştırılması
Radius servisini debug yapmak için ayaküstü işlem(process) olarak çalıştırmak için aşağıdaki komutu kullanabilirsiniz. Denemeniz bittiğinde kapatabilirsiniz ama kapattığınızda servisin çalışmayacağını unutmayın:
radiusd -XXX
Bu şekilde başlattığınızda "Info: Ready to process requests" isimli bir logu görmezseniz yukarıda bir yerlerde hata logunu aratmanız gerekir. Bu mesajı görüyorsanız yapılandırmada bir hata bulunmamaktadır.
Ayrıca her şeyden eminseniz artık servis olarak da başlatabilirsiniz. Üstteki işlem ayakta ise sizi servis olarak başlatmayacağı için öncelikle işlemi durdurmanız gerekir. Sonrasında aşağıdaki komut ile servisi başlatabilirsiniz ve kontrol edebilirsiniz:
systemctl restart radiusd
systemctl status radiusd
EAP ayarlarının test edilmesi
EAP ayarlarının test edilmesi için ise aşağıdaki dokümanı inceleyebilirsiniz:
https://dev.to/aciklab/eap-ayarlarinin-kontrol-edilmesi-41lp