Иди на текст

Uputstvo za instalaciju i konfiguraciju FreeRADIUS softvera za potrebe Davaoca Identiteta

  • Verzija FreeRadius softvera: 3.2.5
  • Operativni sistem: Debian 12

FreeRADIUS (www.freeradius.org) predstavlja softversku platformu za RADIUS server. Aktuelne verzije možete da pogledate na starnici http://freeradius.org/download.html. U ovom uputstvu prikazana je instalacija FreeRADIUS servera za potrebe institucije (Davaoca Identiteta) u okviru AMRES eduroam servisa.

Pre same instalacije FreeRADIUS softvera potrebno je instalirati određene softverske pakete i biblioteke, koje su neophodne za pravilno funkcionisanje servera. U nastavku su, po sekcijama, predstavljeni ovi paketi i komande za instalaciju.

Priprema pred instalaciju

Podesiti hosta

U okviru čitavog uputstva smatraće se da je domen VM radius.institucija.ac.rs, tako da na svim mestima umesto ovog naziva domena potrebno je da unesete naziv po vašem izboru.

Veoma je važno da FQDN (Fully Qualified Domain Name) i pun hostname (# hostname -f) ove VM, npr. radius.institucija.ac.rs, koji se podešava u okviru ove sekcije bude isti kao i domen koji je adekvatno podešen na DNS serveru, a taj domen će se takođe kasnije koristiti za kreiranje sertifikata.

Podešavanje host podataka

Dat je primer postavljanja radius.institucija.ac.rs kao FQDN podatka, koji je potrebno zameniti FQDN podatkom Vašeg Davaoca Identiteta, kao i postavljanja HOSTNAME podatka: radius, koji je potrebno zameniti HOSTNAME podatkom Vašeg Davaoca Identiteta.

vim /etc/hosts

Na kraju fajla se unosi linija u formi: IP ADRESA FQDN HOSTNAME:

xxx.xxx.xxx.xxx radius.institucija.ac.rs radius
Postaviti hostname

Koristi se komanda sledeće forme: hostnamectl set-hostname HOSTNAME

hostnamectl set-hostname radius

Sačuvati izmene:

reboot

Podesiti IPTABLES

Najpre je potrebno instalirati iptables softverski paket i izvršiti početna podešavanja ukoliko već niste.

apt-get remove --auto-remove nftables
apt-get purge nftables
apt-get install iptables
apt-get install iptables-persistent

Otvoriti portove 1812, 1813 i 1814 prema FTLR serverima i monitorima.

To se može uraditi na sledeći način:
nano /etc/iptables/rules.v4   

Otvoriti navedene portove dodavanjem sledećih linija u fajl:

#147.91.4.204 (ftlr1.ac.rs)
-A INPUT -m state -s 147.91.4.204/32 --state NEW -m udp -p udp --dport 1812 -j ACCEPT
-A INPUT -m state -s 147.91.4.204/32 --state NEW -m udp -p udp --dport 1813 -j ACCEPT
-A INPUT -m state -s 147.91.4.204/32 --state NEW -m udp -p udp --dport 1814 -j ACCEPT

#147.91.1.101(ftlr2.ac.rs)
-A INPUT -m state -s 147.91.1.101/32 --state NEW -m udp -p udp --dport 1812 -j ACCEPT
-A INPUT -m state -s 147.91.1.101/32 --state NEW -m udp -p udp --dport 1813 -j ACCEPT
-A INPUT -m state -s 147.91.1.101/32 --state NEW -m udp -p udp --dport 1814 -j ACCEPT

#147.91.3.12 (monitor.eduroam.ac.rs)
-A INPUT -m state -s 147.91.3.12/32 --state NEW -m udp -p udp --dport 1812 -j ACCEPT
-A INPUT -m state -s 147.91.3.12/32 --state NEW -m udp -p udp --dport 1813 -j ACCEPT
-A INPUT -m state -s 147.91.3.12/32 --state NEW -m udp -p udp --dport 1814 -j ACCEPT

#147.91.56.177 (monitor2.eduroam.ac.rs)
-A INPUT -m state -s 147.91.56.177/32 --state NEW -m udp -p udp --dport 1812 -j ACCEPT
-A INPUT -m state -s 147.91.56.177/32 --state NEW -m udp -p udp --dport 1813 -j ACCEPT
-A INPUT -m state -s 147.91.56.177/32 --state NEW -m udp -p udp --dport 1814 -j ACCEPT

Napomena: Navedene linije je potrebno uneti bavezno iznad linije: -A INPUT -j REJECT --reject-with icmp-host-prohibited

iptables-restore < /etc/iptables/rules.v4
systemctl restart iptables
iptables -L

Instalacija neophodnih softverskih paketa i biblioteka

Ažurirati instalirane pakete:

apt update && apt-get upgrade -y --no-install-recommends

Instalirati paket build-essential u svrhu dobijanja svih potrebnih alata za kompilaciju C/C++ programa, uključujući gcc, g++ i make:

apt-get install -y build-essential

Biblioteke libtalloc-dev definišu skup funkcija koje pojednostavljuju alokaciju/dealokaciju podataka, pre svega komplesnih struktura koje sadrže mnogo dinamički alociranih elemenata kao što su stringovi ili nizovi:

apt-get install -y libtalloc-dev

Softverski paket libssl-dev služi da obezbedi sigurnu komunikaciju (npr. EAP-TLS) u RADIUS serveru i obavezan je za ostvarivanje sigurne veze u RADIUS-u (SSL/TLS):

apt-get install -y libssl-dev

Softverski paket libldap2-dev obezbeđuje korišćenje LDAP baze za autentifikaciju korisnika:

apt-get install -y libldap2-dev

mariadb-server, mariadb-client, libmariadb-dev-compat, libmariadb-dev i php-mysql biblioteke se mogu koristiti za čuvanje RADIUS accounting podataka. Ovo je bitno za institucije koje žele da dobiju status Davaoca Resursa (ovde to nije slučaj, ali mi smo za svaki slučaj preuzeli)

apt-get install -y mariadb-server mariadb-client libmariadb-dev-compat libmariadb-dev php-mysql

Softverski paket psmisc omogućava korišćenje killall komande:

apt-get install -y psmisc

Source instalacija FreeRADIUS softvera

Preuzeti najnoviju verziju FreeRADIUS softvera (3.2.5.)

wget https://github.com/FreeRADIUS/freeradius-server/releases/download/release_3_2_5/freeradius-server-3.2.5.tar.gz -O /opt/freeradius-server-3.2.5.tar.gz

Otpakovati preuzeti paket:

tar -xzvf /opt/freeradius-server-3.2.5.tar.gz -C /opt/

Zatim se pređe u freeradius-server-3.2.0 direktorijum:

cd /opt/freeradius-server-3.2.5

Napomena: Preporuka je da izveštaj naredne tri komande iskopirate i sačuvate.

./configure --with-openssl --with-ldap
make
make install

Konfiguracioni fajlovi se nalaze na putanji: /usr/local/etc/raddb

U verziji 3 FreeRADIUS servera, direktorijum /usr/local/etc/raddb/modules/ , koji je korišćen u ranijim verzijama, nije više u upotrebi!

  • U FreeRADIUS 3.2.x verzijama, svi moduli su premešteni u poddirektorijum /usr/local/etc/raddb/mods-available.
  • Moduli koji mogu biti od interesa su ldap,ntlm_auth, cui, eap, sql itd...
  • Aktiviranje željenih modula se postiže tako što se pravi soft link za taj modul u okviru poddirektorijuma /usr/local/etc/raddb/mods-enabled/

Konfiguracija FreeRADIUS servera i integracija sa OpenLDAP bazom podataka

Kada kopirate delove konfiguracije u konfiguracione fajlove u nastavku uputstva možete da koristite nano editor, jer vim editor prepoznaje oznaku za komentar u nekom delu konfiguracije i ponavlja tu oznaku u svim narednim redovima kopirane konfiguracije!

Komercijalni SSL sertifikat

Kreiranje komercijalnog SSL sertifikata i ključa:

Komercijalni sertifikat i ključ treba da budu vrste GÉANT OV SSL koje kreirate po uputstvu:

  • HTTPS Server Certificate (Public Key) - (institucija.ac.rs.crt) u /usr/local/etc/raddb/certs
  • HTTPS Server Key (Private Key) - (institucija.ac.rs.key) u /usr/local/etc/raddb/certs

To se može uraditi na sledeći način:

Preuzme se fajl SCSreq.cnf na lokaciju /usr/local/etc/raddb/certs/SCSreq.cnf

wget https://docs.amres.ac.rs/download/shibboleth/SCSreq.cnf -O /usr/local/etc/raddb/certs/SCSreq.cnf

Generisati privatni ključ (.key) i zahtev (.csr):

openssl req -new -sha256 -config /usr/local/etc/raddb/certs/SCSreq.cnf -utf8 -keyout /usr/local/etc/raddb/certs/$(hostname -f).key -out /usr/local/etc/raddb/certs/$(hostname -f).csr

Primer postupka kreiranja privatnog ključa i zahteva (koristitli biste drugačiji naziv sertifikata i uneli biste odgovarajuće podatke):

openssl req -new -sha256 -config /usr/local/etc/raddb/certs/SCSreq.cnf -utf8 -keyout /usr/local/etc/raddb/certs/$(hostname -f).key -out /usr/local/etc/raddb/certs/$(hostname -f).csr
Generating a 2048 bit RSA private key
....................+++
....................+++
writing new private key to '/usr/local/etc/raddb/certs/institucija.ac.rs.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Oznaka zemlje (2 znaka) [RS]: Klik Enter
Pun naziv drzave []: Klik Enter
Lokacija (mesto) []: Naziv grada
Postanski broj []: 11000
Ulica i broj []: Adresa institucije
Zvanični naziv institucije []: Naziv institucije
FQDN adresa servera []: radius.institucija.ac.rs

Zatim generisani zahtev iskoristiti za kreiranje sertifikata (javnog ključa) na SCM portalu, koji treba da bude tipa GÉANT OV SSL:

cat /usr/local/etc/raddb/certs/$(hostname -f).csr

Na kraju, kreiran komercijalni sertifikat se unosi na lokaciju /usr/local/etc/raddb/certs.

Preuzimanje CA Cert (GEANT_OV_RSA_CA_4.crt) sertifikata:

wget https://docs.amres.ac.rs/download/shibboleth/GEANT_OV_RSA_CA_4.crt -O /usr/local/etc/raddb/certs/GEANT_OV_RSA_CA_4.crt

eduroam virtuelni tunel

Virtuelni tuneli omogućavaju konfiguraciju većeg broja nezavnisnih servisa na FreeRADIUS platformi. Za potrebe eduroam sevisa, kreira se novi virtuelni tunel koji će obrađivati autentifikacione zahteve:

  • Preći u poddirektorijum /usr/local/etc/raddb/sites-available/
cd /usr/local/etc/raddb/sites-available/
  • Kreirati eduroam virtuelni tunel kopiranjem default virtuelnog tunela u novi fajl
cp default eduroam
  • Izmeniti kreirani fajl.
vim eduroam

Sledi detaljan prikaz svih izmena fajla eduroam po koracima.

U sledećoj liniji potrebno je izmeniti naziv servera tako da umesto default bude eduroam

server default {
server eduroam {

Sledeći koraci se odnose na authorize sekciju.

  • Prvo je potrebno otkomentarisati liniju #auth_log
  • Zatim treba zakomentarisati linije chap, mschap i digest
  • Nakon toga treba zakomentarisati liniju -sql ukoliko se SQL baza ne koristi. To nije neophodno, ali je dobra praksa.
  • Zatim treba zakomentarisati linije -ldap i pap
  • Na kraju zakomentarisati linije:
        Autz-Type New-TLS-Connection {
              ok
        }

Pre izmena sekcija authorize izgleda ovako:

authorize {
        filter_username
        preprocess
#       auth_log
        chap
        mschap
        digest
        suffix
        eap {
                ok = return
        }
        files
        -sql
        -ldap
        expiration
        logintime
        pap
}

        Autz-Type New-TLS-Connection {
              ok
        }
authorize {
        filter_username
        preprocess
        auth_log
#       chap
#       mschap
#       digest
        suffix
        eap {
                ok = return
        }
        files
#       -sql
#       -ldap
        expiration
        logintime
#       pap
}

#       Autz-Type New-TLS-Connection {
#             ok
#       }

Sledeći koraci se odnose na accounting sekciju.

  • Otkomentarisati liniju radutmp
  • Zakomentarisati liniju -sql ukoliko se SQL baza ne koristi.
1
2
3
4
5
6
7
8
9
accounting {
        detail
        unix
#       radutmp
        -sql
        exec
        attr_filter.accounting_response

}
1
2
3
4
5
6
7
8
9
accounting {
        detail
        unix
        radutmp
#       -sql
        exec
        attr_filter.accounting_response

}

Sledeći koraci se odnose na session sekciju.

  • Otkomentarisati liniju # radutmp
1
2
3
4
session {
#       radutmp

}
1
2
3
4
session {
        radutmp

}

Sledeći koraci se odnose na post-auth sekciju.

Pre izmena sekcija post-auth izgleda ovako:

post-auth {
        if (session-state:User-Name && reply:User-Name && request:User-Name && (reply:User-Name == request:User-Name)) {
                update reply {
                        &User-Name !* ANY
                }
        }
        update {
                &reply: += &session-state:
        }

        -sql
        exec
        remove_reply_message_if_eap


        Post-Auth-Type REJECT {
                -sql
                attr_filter.access_reject
                eap
                remove_reply_message_if_eap
        }

        Post-Auth-Type Challenge {
        }
        Post-Auth-Type Client-Lost {
        }
        if (EAP-Key-Name && &reply:EAP-Session-Id) {
                update reply {
                        &EAP-Key-Name := &reply:EAP-Session-Id
                }
        }
}

Potrebno je:

  • Zakomentarisati liniju -sql ukoliko se SQL baza ne koristi.
  • Dodati sledeće linije nakon linije remove_reply_message_if_eap, a pre podsekcije Post-Auth-Type REJECT:
        if (Client-IP-Address != 147.91.3.12) {
        reply_log
        }
        if (Client-IP-Address != 147.91.56.177) {
        reply_log
        }
  • Zakomentarisati liniju -sql ukoliko se SQL baza ne koristi u okviru Post-Auth-Type REJECT podsekcije
post-auth {
        if (session-state:User-Name && reply:User-Name && request:User-Name && (reply:User-Name == request:User-Name)) {
                update reply {
                        &User-Name !* ANY
                }
        }
        update {
                &reply: += &session-state:
        }

#       -sql
        exec
        remove_reply_message_if_eap

        if (Client-IP-Address != 147.91.3.12) {
        reply_log
        }
        if (Client-IP-Address != 147.91.56.177) {
        reply_log
        }
        Post-Auth-Type REJECT {
#               -sql
                attr_filter.access_reject
                eap
                remove_reply_message_if_eap
        }

        Post-Auth-Type Challenge {
        }
        Post-Auth-Type Client-Lost {
        }
        if (EAP-Key-Name && &reply:EAP-Session-Id) {
                update reply {
                        &EAP-Key-Name := &reply:EAP-Session-Id
                }
        }
}

Prikaz fajla eduroam sa svim potrebnim izmenama:

server eduroam {
listen {
        type = auth
        ipaddr = *
        port = 0
        limit {
              max_connections = 16
              lifetime = 0
              idle_timeout = 30
        }
}

listen {
        ipaddr = *
        port = 0
        type = acct
        limit {

        }
}

listen {
        type = auth
        ipv6addr = ::   # any.  ::1 == localhost
        port = 0
        limit {
              max_connections = 16
              lifetime = 0
              idle_timeout = 30
        }
}

listen {
        ipv6addr = ::
        port = 0
        type = acct
        limit {
        }
}

authorize {
        filter_username
        preprocess
        auth_log
#       chap
#       mschap
#       digest
        suffix
        eap {
                ok = return
        }
        files
#       -sql
#       -ldap
        expiration
        logintime
#       pap
}

#       Autz-Type New-TLS-Connection {
#             ok
#       }


authenticate {
        Auth-Type PAP {
                pap
        }

        Auth-Type CHAP {
                chap
        }

        Auth-Type MS-CHAP {
                mschap
        }
        mschap
        digest
        eap

}


preacct {
        preprocess
        acct_unique
        suffix
        files
}

accounting {
        detail
        unix
        radutmp
#       -sql
        exec
        attr_filter.accounting_response

}


session {
        radutmp

}


post-auth {
        if (session-state:User-Name && reply:User-Name && request:User-Name && (reply:User-Name == request:User-Name)) {
                update reply {
                        &User-Name !* ANY
                }
        }
        update {
                &reply: += &session-state:
        }

#       -sql
        exec
        remove_reply_message_if_eap

        if (Client-IP-Address != 147.91.3.12) {
        reply_log
        }
        if (Client-IP-Address != 147.91.56.177) {
        reply_log
        }

        Post-Auth-Type REJECT {
#               -sql
                attr_filter.access_reject
                eap
                remove_reply_message_if_eap
        }

        Post-Auth-Type Challenge {
        }
        Post-Auth-Type Client-Lost {
        }
        if (EAP-Key-Name && &reply:EAP-Session-Id) {
                update reply {
                        &EAP-Key-Name := &reply:EAP-Session-Id
                }
        }
}

pre-proxy {
}

post-proxy {
        eap
        }
}

Zatim, potrebno je preći u poddirektorijum /usr/local/etc/raddb/sites-enabled i napraviti soft link ka eduroam virtuelnom tunelu iz poddirektorijuma /usr/local/etc/raddb/sites-available:

cd ../sites-enabled/
ln -s ../sites-available/eduroam
unlink default

eduroam-inner virtuelni tunel

Potrebno je formirati eduroam-inner-tunnel virtuelni server, koji u svojoj konfiguraciji poziva određene module koji su odgovorni za komunikaciju sa LDAP bazom :

  • Preći u poddirektorijum /usr/local/etc/raddb/sites-available/
cd /usr/local/etc/raddb/sites-available/
  • Napraviti kopiju fajla inner-tunnel virtuelnog tunela, čije će ime biti eduroam-inner-tunnel
cp inner-tunnel eduroam-inner-tunnel
  • Izmeniti kreirani fajl.
vim eduroam-inner-tunnel

Sledi detaljan prikaz svih izmena fajla eduroam-inner-tunnel po koracima.

U sledećoj liniji potrebno je izmeniti naziv servera tako da umesto naziva inner-tunnel bude eduroam-inner-tunnel

server inner-tunnel {
server eduroam-inner-tunnel {

Sledeći koraci se odnose na authorize sekciju.

Pre izmena sekcija authorize izgleda ovako:

authorize {
        filter_username
        chap
        mschap
        suffix

        update control {
                &Proxy-To-Realm := LOCAL
        }

        eap {
                ok = return
        }

        files
        -sql
        -ldap

        }
        expiration
        logintime
        pap
}

Potrebno je:

  • Zakomentarisati linije filter_username, chap i mschap
  • Zakomentarisati liniju -sql ukoliko se SQL baza ne koristi.
  • Zakomentarisati liniju -ldap
  • Omogućiti logovanje autentifikacionih zahteva za sve klijete osim za monitore:
        if (Client-IP-Address != 147.91.3.12) {
        auth_log
        }
        if (Client-IP-Address != 147.91.56.177) {
        auth_log
        }
    

Sledi postupak dodele domena na radiusu konektoru/konektorima LDAP baze podataka

  • Napomena: Parametar konektor je LDAP konektor konfigurisan u fajlu /usr/local/etc/raddb/mods-available/ldap.
  • Postupak konfiguracije fajla ldap će biti prikazan u nastavku uputstva.
  • U zavisnosti od toga da li posedujete jednostavan ili složeniji oblik LDAP baze potrebno je da se opredelite da li se koristi jedan ili više konektora, a samim tim u ovom fajlu je potrebno svakom konektoru dodeliti adekvatan domen.

Za jednostavan oblik LDAP baze, gde se svi korisnički nalozi nalaze u jednoj organizacionoj jedinici koristi se jedan LDAP konektor.

Napomena: Deo test\.institucija\.ac\.rs treba zameniti domenom na radiusu koji se vezuje za tu grupu korisnika (npr. rgf\.bg\.ac\.rs).

  • Voditi računa o formatu domena.

  • Dodati sledeće linije nakon linije (# -ldap) a pre linije (expiration).

        if (request:User-Name =~ /^((.)+)@test\.institucija\.ac\.rs$/) {
        konektor
        }

Ukoliko LDAP baza ima nekoliko organizacionih jedinica ili grana u kojima su korisnički nalozi razdvojeni po grupama

  • Ukoliko vaša LDAP baza ima korisničke naloge u nekoliko organizacionih jedinica ili grana, tako da se razdvoje npr. nalozi zaposlenih i studenata, potrebno je svaku od tih grana ili organizacionih jedinica definisati u pojedninačnom LDAP konektoru, a svakom od tih LDAP konektora treba dodeliti adekvatan domen na radiusu.
  • Parametri konektor1 i konektor2 su LDAP konektori konfigurisani u fajlu /usr/local/etc/raddb/mods-available/ldap, kao primer definisanja više LDAP konektora.
  • Postupak konfiguracije fajla ldap će biti prikazan u nastavku uputstva.

Napomena: Deo test1\.institucija\.ac\.rs i deo test2\.institucija\.ac\.rs treba zameniti domenima na radiusu koji se vezuju za korisnike (npr. rgf\.bg\.ac\.rs i student\.rgf\.bg\.ac\.rs).

  • Voditi računa o formatu domena.

  • Dodati sledeće linije nakon linije (# -ldap) a pre linije (expiration).

        if (request:User-Name =~ /^((.)+)@test1\.institucija\.ac\.rs$/) {
        konektor1
        }
        if (request:User-Name =~ /^((.)+)@test2\.institucija\.ac\.rs$/) {
        konektor2
        }
  • Zakomentarisati linije expiration i logintime
authorize {
#       filter_username
#       chap
#       mschap
        suffix

        update control {
                &Proxy-To-Realm := LOCAL
        }

        eap {
                ok = return
        }

        files
#       -sql
#       -ldap

        if (Client-IP-Address != 147.91.3.12) {
        auth_log
        }
        if (Client-IP-Address != 147.91.56.177) {
        auth_log
        }

        if (request:User-Name =~ /^((.)+)@test\.institucija\.ac\.rs$/) {
        konektor
        }
#       expiration
#       logintime
        pap
}

Sledeći koraci se odnose na post-auth sekciju.

Pre izmena sekcija post-auth izgleda ovako:

post-auth {
#       cui-inner

        reply_log

        -sql
        if (0) {
                update reply {
                        User-Name !* ANY
                        Message-Authenticator !* ANY
                        EAP-Message !* ANY
                        Proxy-State !* ANY
                        MS-MPPE-Encryption-Types !* ANY
                        MS-MPPE-Encryption-Policy !* ANY
                        MS-MPPE-Send-Key !* ANY
                        MS-MPPE-Recv-Key !* ANY
                }

                update {
                        &outer.session-state: += &reply:
                }
        }

        Post-Auth-Type REJECT {
                -sql
                attr_filter.access_reject

                update outer.session-state {
                        &Module-Failure-Message := &request:Module-Failure-Message
                }
        }
}

Potrebno je:

  • Otkomentarisati liniju cui-inner i ispod nje dodati liniju:
        cui_inner_log
  • Zakomentarisati liniju reply_log
  • Dodati sledeće linije odmah nakon linije reply_log:
        update reply {
        Class !* ANY
        AMRES-Attribute-mail !* ANY
        AMRES-Attribute-cn !* ANY
        AMRES-Attribute-uid !* ANY
        AMRES-Attribute-gn !* ANY
        AMRES-Attribute-sn !* ANY
        AMRES-Attribute-o !* ANY
        AMRES-Attribute-entitlement !* ANY
        AMRES-Attribute-displayName !* ANY
        AMRES-Attribute-StaffCategory !* ANY
        AMRES-Attribute-LocalNumber !* ANY
        AMRES-Attribute-UniqueCode !* ANY
        }

        if (Client-IP-Address != 147.91.3.12) {
        reply_log
        }
        if (Client-IP-Address != 147.91.56.177) {
        reply_log
        }

Napomena: update reply sekcija se dodaje ukoliko se radius server konfiguriše za AMRES VPN uslugu i iAMRES Federaciju Identiteta.

  • Zakomentarisati liniju -sql ukoliko se SQL baza ne koristi.
  • Zakomentarisati liniju if (0) { i odmah nakon nje dodati liniju :
        if (1) {
post-auth {
        cui-inner
        cui_inner_log

#       reply_log
        update reply {
        Class !* ANY
        AMRES-Attribute-mail !* ANY
        AMRES-Attribute-cn !* ANY
        AMRES-Attribute-uid !* ANY
        AMRES-Attribute-gn !* ANY
        AMRES-Attribute-sn !* ANY
        AMRES-Attribute-o !* ANY
        AMRES-Attribute-entitlement !* ANY
        AMRES-Attribute-displayName !* ANY
        AMRES-Attribute-StaffCategory !* ANY
        AMRES-Attribute-LocalNumber !* ANY
        AMRES-Attribute-UniqueCode !* ANY
        }

        if (Client-IP-Address != 147.91.3.12) {
        reply_log
        }
        if (Client-IP-Address != 147.91.56.177) {
        reply_log
        }
#       -sql
#       if (0) {
        if (1) {
                update reply {
                        User-Name !* ANY
                        Message-Authenticator !* ANY
                        EAP-Message !* ANY
                        Proxy-State !* ANY
                        MS-MPPE-Encryption-Types !* ANY
                        MS-MPPE-Encryption-Policy !* ANY
                        MS-MPPE-Send-Key !* ANY
                        MS-MPPE-Recv-Key !* ANY
                }

                update {
                        &outer.session-state: += &reply:
                }
        }

        Post-Auth-Type REJECT {
                -sql
                attr_filter.access_reject

                update outer.session-state {
                        &Module-Failure-Message := &request:Module-Failure-Message
                }
        }
}

Prikaz fajla eduroam-inner-tunnel sa svim potrebnim izmenama:

server eduroam-inner-tunnel {

listen {
       ipaddr = 127.0.0.1
       port = 18120
       type = auth
}


authorize {
#       filter_username
#       chap
#       mschap
        suffix

        update control {
                &Proxy-To-Realm := LOCAL
        }

        eap {
                ok = return
        }

        files
#       -sql
#       -ldap

        if (Client-IP-Address != 147.91.3.12) {
        auth_log
        }
        if (Client-IP-Address != 147.91.56.177) {
        auth_log
        }

        if (request:User-Name =~ /^((.)+)@test\.institucija\.ac\.rs$/) {
        konektor
        }
#       expiration
#       logintime
        pap
}

authenticate {
        Auth-Type PAP {
                pap
        }

        Auth-Type CHAP {
                chap
        }

        Auth-Type MS-CHAP {
                mschap
        }

        mschap
        eap
}


session {
        radutmp     
}


post-auth {
        cui-inner
        cui_inner_log

#       reply_log
        update reply {
        Class !* ANY
        AMRES-Attribute-mail !* ANY
        AMRES-Attribute-cn !* ANY
        AMRES-Attribute-uid !* ANY
        AMRES-Attribute-gn !* ANY
        AMRES-Attribute-sn !* ANY
        AMRES-Attribute-o !* ANY
        AMRES-Attribute-entitlement !* ANY
        AMRES-Attribute-displayName !* ANY
        AMRES-Attribute-StaffCategory !* ANY
        AMRES-Attribute-LocalNumber !* ANY
        AMRES-Attribute-UniqueCode !* ANY
        }

        if (Client-IP-Address != 147.91.3.12) {
        reply_log
        }
        if (Client-IP-Address != 147.91.56.177) {
        reply_log
        }
#       -sql
#       if (0) {
        if (1) {
                update reply {
                        User-Name !* ANY
                        Message-Authenticator !* ANY
                        EAP-Message !* ANY
                        Proxy-State !* ANY
                        MS-MPPE-Encryption-Types !* ANY
                        MS-MPPE-Encryption-Policy !* ANY
                        MS-MPPE-Send-Key !* ANY
                        MS-MPPE-Recv-Key !* ANY
                }

                update {
                        &outer.session-state: += &reply:
                }
        }

        Post-Auth-Type REJECT {
                -sql
                attr_filter.access_reject

                update outer.session-state {
                        &Module-Failure-Message := &request:Module-Failure-Message
                }
        }
}

pre-proxy {

}

post-proxy {
        eap
}

Zatim, potrebno je preći u /usr/local/etc/raddb/sites-enabled poddirektorijum i napraviti soft link ka eduroam-inner-tunnel virtuelnom tunelu iz /usr/local/etc/raddb/sites-available poddirektorijuma:

cd ../sites-enabled/
ln -s ../sites-available/eduroam-inner-tunnel
unlink inner-tunnel

eap modul

U verziji 3 FreeRADIUS servera, direktorijum /usr/local/etc/raddb/modules/ , koji je korišćen u ranijim verzijama, nije više u upotrebi!

U FreeRADIUS 3.0.x verzijama, svi moduli su premešteni u poddirektorijum /usr/local/etc/raddb/mods-available. Moduli koji mogu biti od interesa su ldap, ntlm_auth, cui, eap, sql, itd. Aktiviranje željenih modula se postiže tako što se pravi soft link za taj modul u okviru poddirektorijuma /usr/local/etc/raddb/mods-enabled/

  • Preći u poddirektorijum /usr/local/etc/raddb/mods-available/:
cd /usr/local/etc/raddb/mods-available/
  • Napraviti rezervnu kopiju fajla eap.
cp eap eap_default
  • Izmeniti fajl eap.
vim eap

Modul eap je potrebno izmeniti da bude isti kao u nastavku.

Željeni metod autentifikacije se podešava na samom početku eap modula (default_eap_type).

U ovom uputstvu dat je primer za EAP-TTLS autentifikaciju. Nakon što se u prvoj liniji definiše metod autentifikacije, potrebno je u odgovarajućoj sekciji (ttls ili peap) promeniti parametar virtual_server tako da njegova vrednost bude jednaka eduroam-inner-tunnel. Ukoliko želite da kao sekundarni metod autentifikacije omogućite i PEAP, tada je potrebno u peap sekciji eap modula, takođe promeniti vrednost parametra virtual_server na eduroam-inner-tunnel.

Najpre je potrebno izmeniti metod autentifikacije.

  • Potrebno je izmeniti metod autentifikacije tako što se zakomentariše linija default_eap_type = md5 i ispod nje se doda linija:
        default_eap_type = ttls
eap {
#        default_eap_type = md5
        default_eap_type = ttls

Sledeći koraci se odnose na tls-config tls-common sekciju.

  • Sledi specifikacija sertifikata koji su kreirani na početku:

  • Zakomentarisati liniju private_key_file = ${certdir}/server.pem i ispod nje dobiti liniju:

                private_key_file = ${certdir}/institucija.ac.rs.key
  • Zakomentarisati liniju certificate_file = ${certdir}/server.pem i ispod nje dobiti liniju:
                certificate_file = ${certdir}/institucija.ac.rs.crt
  • Zakomentarisati liniju ca_file = ${cadir}/ca.pem i ispod nje dobiti liniju:
                ca_file = ${cadir}/GEANT_OV_RSA_CA_4.crt
  • Izmeniti minimalnu verziju TLS mehanizma tako što se zakomentariše linija tls_min_version = "1.2" i ispod nje dobiti liniju:
                tls_min_version = "1.0"

Napomena: TLS 1.0 je verzija koja prestaje da se koristi za većinu korisničkih uređaja i polako se prelazi na minimalnu vreziju 1.2. Ukoliko želite možete da odmah postavite da minimalna verzija bude TLS 1.2.

  • U ttls podsekciji potrebno je zakomentarisati liniju virtual_server = "inner-tunnel" i ispod nje dobiti liniju:
                virtual_server = "eduroam-inner-tunnel"
        tls-config tls-common {
                private_key_password = whatever
#               private_key_file = ${certdir}/server.pem
                private_key_file = ${certdir}/institucija.ac.rs.key
#               certificate_file = ${certdir}/server.pem
                certificate_file = ${certdir}/institucija.ac.rs.crt
#               ca_file = ${cadir}/ca.pem
                ca_file = ${cadir}/GEANT_OV_RSA_CA_4.crt
                dh_file = ${certdir}/dh
                ca_path = ${cadir}
                cipher_list = "DEFAULT"
                cipher_server_preference = no
#               tls_min_version = "1.2"
                tls_min_version = "1.0"
                tls_max_version = "1.2"
                ecdh_curve = "prime256v1"

                cache {
                        enable = no
#                       lifetime = 24 # hours
                        store {
                                Tunnel-Private-Group-Id
                        }
                }
                verify {
                }
                ocsp {
                        enable = no
                        override_cert_url = yes
                        url = "http://127.0.0.1/ocsp/"
                }
        }
        tls {
                tls = tls-common
        }
        ttls {
                tls = tls-common
                default_eap_type = md5
                copy_request_to_tunnel = no
                use_tunneled_reply = no
#               virtual_server = "inner-tunnel"
                virtual_server = "eduroam-inner-tunnel"
        }

        peap {
                tls = tls-common
                default_eap_type = mschapv2
                copy_request_to_tunnel = no
                use_tunneled_reply = no
                virtual_server = "inner-tunnel"
        }

        mschapv2 {
                }
}

Prikaz fajla eap sa svim potrebnim izmenama:

eap {
#        default_eap_type = md5
        default_eap_type = ttls
        timer_expire = 60
        ignore_unknown_eap_types = no
        cisco_accounting_username_bug = no
        max_sessions = ${max_requests}
        md5 {
        }
        gtc {
                auth_type = PAP
        }
        tls-config tls-common {
                private_key_password = whatever
#               private_key_file = ${certdir}/server.pem
                private_key_file = ${certdir}/institucija.ac.rs.key
#               certificate_file = ${certdir}/server.pem
                certificate_file = ${certdir}/institucija.ac.rs.crt
#               ca_file = ${cadir}/ca.pem
                ca_file = ${cadir}/GEANT_OV_RSA_CA_4.crt
                dh_file = ${certdir}/dh
                ca_path = ${cadir}
                cipher_list = "DEFAULT"
                cipher_server_preference = no
#               tls_min_version = "1.2"
                tls_min_version = "1.0"
                tls_max_version = "1.2"
                ecdh_curve = "prime256v1"

                cache {
                        enable = no
#                       lifetime = 24 # hours
                        store {
                                Tunnel-Private-Group-Id
                        }
                }
                verify {
                }
                ocsp {
                        enable = no
                        override_cert_url = yes
                        url = "http://127.0.0.1/ocsp/"
                }
        }
        tls {
                tls = tls-common
        }
        ttls {
                tls = tls-common
                default_eap_type = md5
                copy_request_to_tunnel = no
                use_tunneled_reply = no
#               virtual_server = "inner-tunnel"
                virtual_server = "eduroam-inner-tunnel"
        }

        peap {
                tls = tls-common
                default_eap_type = mschapv2
                copy_request_to_tunnel = no
                use_tunneled_reply = no
                virtual_server = "inner-tunnel"
        }

        mschapv2 {
                }
}

Kada je završena konfiguracija eap modula, potrebno je preći u poddirektorijum /usr/local/etc/raddb/mods-enabled i napraviti soft link ka eap modulu iz poddirektorijuma /usr/local/etc/raddb/mods-available:

cd ../mods-enabled/
ln -s ../mods-available/eap

Fajl radiusd.conf

Potrebno je da vaš Davalac Identiteta čuva log fajlove, a autentifikacioni zahtevi se beleže u radius.log fajlu. Ovaj fajl se nalazi u /usr/local/var/log/radius direktorijumu. Za svakog korisnika (ukoliko se koristi EAP-TTLS) se upisuju dve linije:

Kako bi se omogućilo upisivanje log poruka, prelazi se u direktorijum /usr/local/etc/raddb i treba izmeniti fajl radiusd.conf .

cd /usr/local/etc/raddb
vim radiusd.conf

Potrebno je zakomentarisati liniju auth = no i ispod nje dodati liniju:

        auth = yes

Izgled fajla radiusd.conf nakon izmena:

prefix = /usr/local
exec_prefix = ${prefix}
sysconfdir = ${prefix}/etc
localstatedir = ${prefix}/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 = ${exec_prefix}/lib
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 = yes

        auth_badpass = no
        auth_goodpass = no
        msg_denied = "You are already logged in - access denied"

}

checkrad = ${sbindir}/checkrad

ENV {
}

security {
        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
}


modules {
        $INCLUDE mods-enabled/
}

instantiate {
}

policy {
        $INCLUDE policy.d/
}

$INCLUDE sites-enabled/

ldap modul

Kada kopirate konfiguraciju u ldap modul preporuka je da taj fajl otvorite nano editorom, jer vim editor prepoznaje oznaku za komentar u nekom delu konfiguracije i ponavlja tu oznaku u svim narednim redovima kopirane konfiguracije!

Sledeći korak podrazumeva konfigurisanje FreeRADIUS servera da autentifikuje korisnike preko ldap modula.

  • Preći u poddirektorijum /usr/local/etc/raddb/mods-available:
cd /usr/local/etc/raddb/mods-available
  • Napraviti rezervnu kopiju fajla ldap.
cp ldap ldap_default
  • Izmeniti fajl ldap.
nano ldap

Sledi prikaz postupka konfiguracije ldap modula sa jednim konektorom. Ukoliko je potrebno konfigurisati više konektora, pratiti uputstvo za konfiguraciju jednog i zatim nastaviti po narednim koracima.

Potrebno je:

  • Zakomentarisati liniju ldap { i ispod nje dodati liniju ldap konektor{ gde je umesto reči konektor potrebno navesti naziv LDAP konektora:
ldap konektor{
  • Specificirati LDAP server, ukoliko se LDAP baza nalazi na istoj ovoj VM ostaje linija server = 'localhost', a ukoliko se LDAP baza nalazi na drugom serveru (ldap.institucija.ac.rs) potrebno je zakomentarisati liniju server = 'localhost' i ispod nje dodati liniju koja specificira ili domen udaljene mašine ili IP adresu:
        server = 'ldap.institucija.ac.rs'
  • Navesti DN naloga putem koga se vrši integracija sa LDAP bazom podataka, možete koristiti u tu svrhu admin nalog LDAP baze npr. cn=admin,dc=institucija,dc=ac,dc=rs ili cn=admin,dc=institucija,dc=local. Ispod linije #identity = 'cn=admin,dc=example,dc=org' dodati liniju:
        identity = 'cn=admin,dc=institucija,dc=ac,dc=rs'
  • Navesti lozinku naloga putem koga se vrši integracija sa LDAP bazom podataka (npr. mojaLozinka123). Ispod linije #password = mypass dodati liniju:
        password = mojaLozinka123
  • Navesti deo LDAP baze u kom se nalaze nalozi koji se autentifikuju (npr. ou=people,dc=institucija,dc=ac,dc=rs ili ou=people,dc=institucija,dc=local). Zakomentarisati liniju base_dn = 'dc=example,dc=org' i zatim ispod nje dodati liniju:
        base_dn = 'ou=people,dc=institucija,dc=ac,dc=rs'
  • U okviru update podsekcije potrebno je uneti sledeće izmene:

Ispod linije control:Password-With-Header += 'userPassword', a iznad linije control: += 'radiusControlAttribute' dodati navedene linije:

                control:Stripped-User-Name      := 'uid'

                reply:AMRES-Attribute-sn        := 'sn'
                reply:AMRES-Attribute-gn        := 'givenName'
                reply:AMRES-Attribute-uid       := 'uid'
                reply:AMRES-Attribute-cn        := 'cn'
                reply:AMRES-Attribute-mail      += 'mail'
                reply:AMRES-Attribute-o         := 'o'
                reply:AMRES-Attribute-entitlement   += 'eduPersonEntitlement'
                reply:AMRES-Attribute-displayName   := 'displayName'
                reply:AMRES-Attribute-Affiliation   := 'rsEduPersonAffiliation'
                reply:AMRES-Attribute-StaffCategory   := 'rsEduPersonStaffCategory'
                reply:Class                     := 'rsEduPersonPrimaryAffiliation'

Napomena: Atributi (tipovi podataka) sn, givenName, cn, mail, o, eduPersonEntitlement, displayName, rsEduPersonAffiliation, rsEduPersonStaffCategory i rsEduPersonPrimaryAffiliation se koriste za potrebe AMRES VPN usluge i iAMRES Federacije.

Prikaz fajla ldap sa svim potrebnim izmenama:

#ldap {
ldap konektor{
        server = 'localhost'
#       identity = 'cn=admin,dc=example,dc=org'
        identity = 'cn=admin,dc=institucija,dc=ac,dc=rs'
#       password = mypass
        password = mojaLozinka123
        base_dn = 'ou=People,dc=test1,dc=institucija,dc=local'
        sasl {

        }
        update {
                control:Password-With-Header    += 'userPassword'
                control:Stripped-User-Name      := 'uid'

                reply:AMRES-Attribute-sn        := 'sn'
                reply:AMRES-Attribute-gn        := 'givenName'
                reply:AMRES-Attribute-uid       := 'uid'
                reply:AMRES-Attribute-cn        := 'cn'
                reply:AMRES-Attribute-mail      += 'mail'
                reply:AMRES-Attribute-o         := 'o'
                reply:AMRES-Attribute-entitlement   += 'eduPersonEntitlement'
                reply:AMRES-Attribute-displayName   := 'displayName'
                reply:AMRES-Attribute-Affiliation   := 'rsEduPersonAffiliation'
                reply:AMRES-Attribute-StaffCategory   := 'rsEduPersonStaffCategory'
                reply:Class                     := 'rsEduPersonPrimaryAffiliation'

                control:                        += 'radiusControlAttribute'
                request:                        += 'radiusRequestAttribute'
                reply:                          += 'radiusReplyAttribute'
        }
        user_dn = "LDAP-UserDn"

        user {
                base_dn = "${..base_dn}"
                filter = "(uid=%{%{Stripped-User-Name}:-%{User-Name}})"
                sasl {
                }

        }

        group {
                base_dn = "${..base_dn}"
                filter = '(objectClass=posixGroup)'
                membership_attribute = 'memberOf'
        }

        profile {
        }

        client {
                base_dn = "${..base_dn}"
                filter = '(objectClass=radiusClient)'


                template {

                }

                attribute {
                        ipaddr                          = 'radiusClientIdentifier'
                        secret                          = 'radiusClientSecret'
                }
        }


        accounting {
                reference = "%{tolower:type.%{Acct-Status-Type}}"

                type {
                        start {
                                update {
                                        description := "Online at %S"
                                }
                        }

                        interim-update {
                                update {
                                        description := "Last seen at %S"
                                }
                        }

                        stop {
                                update {
                                        description := "Offline at %S"
                                }
                        }
                }
        }

        post-auth {
                update {
                        description := "Authenticated at %S"
                }
        }

        options {

                chase_referrals = yes
                rebind = yes
                res_timeout = 10
                srv_timelimit = 3
                net_timeout = 1
                idle = 60
                probes = 3
                interval = 3
                ldap_debug = 0x0028
        }

        tls {

        }


        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
        }
}

Ukoliko je potrebno definisati više LDAP konektora, prekopirati čitav sadržaj fajla koji je dat iznad, ispod već konfigurisanog prvog ldap konektora i izmeniti sve potrebne parametre označene bojom.

nano ldap
Sledi prikaz fajla ldap sa konfigurisana dva LDAP konektora ( konektor1 i konektor2):

#ldap {
ldap konektor1{
        server = 'localhost'
#       identity = 'cn=admin,dc=example,dc=org'
        identity = 'cn=admin,dc=institucija,dc=ac,dc=rs'
#       password = mypass
        password = mojaLozinka123
        base_dn = 'ou=people,dc=institucija,dc=ac,dc=rs'
        sasl {

        }
        update {
                control:Password-With-Header    += 'userPassword'
                control:Stripped-User-Name      := 'uid'

                reply:AMRES-Attribute-sn        := 'sn'
                reply:AMRES-Attribute-gn        := 'givenName'
                reply:AMRES-Attribute-uid       := 'uid'
                reply:AMRES-Attribute-cn        := 'cn'
                reply:AMRES-Attribute-mail      += 'mail'
                reply:AMRES-Attribute-o         := 'o'
                reply:AMRES-Attribute-entitlement   += 'eduPersonEntitlement'
                reply:AMRES-Attribute-displayName   := 'displayName'
                reply:AMRES-Attribute-Affiliation   := 'rsEduPersonAffiliation'
                reply:AMRES-Attribute-StaffCategory   := 'rsEduPersonStaffCategory'
                reply:Class                     := 'rsEduPersonPrimaryAffiliation'

                control:                        += 'radiusControlAttribute'
                request:                        += 'radiusRequestAttribute'
                reply:                          += 'radiusReplyAttribute'
        }
        user_dn = "LDAP-UserDn"

        user {
                base_dn = "${..base_dn}"
                filter = "(uid=%{%{Stripped-User-Name}:-%{User-Name}})"
                sasl {
                }

        }

        group {
                base_dn = "${..base_dn}"
                filter = '(objectClass=posixGroup)'
                membership_attribute = 'memberOf'
        }

        profile {
        }

        client {
                base_dn = "${..base_dn}"
                filter = '(objectClass=radiusClient)'


                template {

                }

                attribute {
                        ipaddr                          = 'radiusClientIdentifier'
                        secret                          = 'radiusClientSecret'
                }
        }


        accounting {
                reference = "%{tolower:type.%{Acct-Status-Type}}"

                type {
                        start {
                                update {
                                        description := "Online at %S"
                                }
                        }

                        interim-update {
                                update {
                                        description := "Last seen at %S"
                                }
                        }

                        stop {
                                update {
                                        description := "Offline at %S"
                                }
                        }
                }
        }

        post-auth {
                update {
                        description := "Authenticated at %S"
                }
        }

        options {

                chase_referrals = yes
                rebind = yes
                res_timeout = 10
                srv_timelimit = 3
                net_timeout = 1
                idle = 60
                probes = 3
                interval = 3
                ldap_debug = 0x0028
        }

        tls {

        }


        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
        }
}

ldap konektor2{
        server = 'localhost'
#       identity = 'cn=admin,dc=example,dc=org'
        identity = 'cn=admin,dc=institucija,dc=ac,dc=rs'
#       password = mypass
        password = mojaLozinka123
        base_dn = 'ou=students,dc=institucija,dc=ac,dc=rs'
        sasl {

        }
        update {
                control:Password-With-Header    += 'userPassword'
                control:Stripped-User-Name      := 'uid'

                reply:AMRES-Attribute-sn        := 'sn'
                reply:AMRES-Attribute-gn        := 'givenName'
                reply:AMRES-Attribute-uid       := 'uid'
                reply:AMRES-Attribute-cn        := 'cn'
                reply:AMRES-Attribute-mail      += 'mail'
                reply:AMRES-Attribute-o         := 'o'
                reply:AMRES-Attribute-entitlement   += 'eduPersonEntitlement'
                reply:AMRES-Attribute-displayName   := 'displayName'
                reply:AMRES-Attribute-Affiliation   := 'rsEduPersonAffiliation'
                reply:AMRES-Attribute-StaffCategory   := 'rsEduPersonStaffCategory'
                reply:Class                     := 'rsEduPersonPrimaryAffiliation'

                control:                        += 'radiusControlAttribute'
                request:                        += 'radiusRequestAttribute'
                reply:                          += 'radiusReplyAttribute'
        }
        user_dn = "LDAP-UserDn"

        user {
                base_dn = "${..base_dn}"
                filter = "(uid=%{%{Stripped-User-Name}:-%{User-Name}})"
                sasl {
                }

        }

        group {
                base_dn = "${..base_dn}"
                filter = '(objectClass=posixGroup)'
                membership_attribute = 'memberOf'
        }

        profile {
        }

        client {
                base_dn = "${..base_dn}"
                filter = '(objectClass=radiusClient)'


                template {

                }

                attribute {
                        ipaddr                          = 'radiusClientIdentifier'
                        secret                          = 'radiusClientSecret'
                }
        }


        accounting {
                reference = "%{tolower:type.%{Acct-Status-Type}}"

                type {
                        start {
                                update {
                                        description := "Online at %S"
                                }
                        }

                        interim-update {
                                update {
                                        description := "Last seen at %S"
                                }
                        }

                        stop {
                                update {
                                        description := "Offline at %S"
                                }
                        }
                }
        }

        post-auth {
                update {
                        description := "Authenticated at %S"
                }
        }

        options {

                chase_referrals = yes
                rebind = yes
                res_timeout = 10
                srv_timelimit = 3
                net_timeout = 1
                idle = 60
                probes = 3
                interval = 3
                ldap_debug = 0x0028
        }

        tls {

        }


        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
        }
}

Kada je završena konfiguracija ldap modula, potrebno je preći u poddirektorijum /usr/local/etc/raddb/mods-enabled i napraviti soft link ka ldap modulu iz poddirektorijuma /usr/local/etc/raddb/mods-available:

cd /usr/local/etc/raddb/mods-enabled
ln -s ../mods-available/ldap

Fajl dictionary

Sledi postupak konfiguracije fajla dictionary.

  • Preći u poddirektorijum /usr/local/etc/raddb/
cd /usr/local/etc/raddb/
  • Izmeniti fajl dictionary.
vim dictionary

Na kraj fajla dodati sledeće linije:

VENDOR          AMRES           11067

BEGIN-VENDOR AMRES

ATTRIBUTE       AMRES-Attribute-sn           1       string
ATTRIBUTE       AMRES-Attribute-gn           2       string
ATTRIBUTE       AMRES-Attribute-uid          3       string
ATTRIBUTE       AMRES-Attribute-cn           4       string
ATTRIBUTE       AMRES-Attribute-mail         5       string
ATTRIBUTE       AMRES-Attribute-eduid        6       string
ATTRIBUTE       AMRES-Attribute-o            6       string
ATTRIBUTE       AMRES-Attribute-entitlement  7       string
ATTRIBUTE       AMRES-Attribute-displayName  8       string
ATTRIBUTE       AMRES-Attribute-Affiliation  9       string
ATTRIBUTE       AMRES-Attribute-StaffCategory   10      string
ATTRIBUTE       AMRES-Attribute-UniqueCode   11      string
ATTRIBUTE       AMRES-Attribute-LocalNumber  12      string

END-VENDOR AMRES

Sačuvati izmene fajla dictionary.

Fajl clients.conf

  • Fajl clients.conf se nalazi u direktorijumu /usr/local/etc/raddb i predstavlja modul u kome se definišu RADIUS klijenti - uređaji u mreži od kojih se prihvataju zahtevi. Ovi uređaji mogu biti drugi RADIUS serveri ili NAS (Network Access Server) tačke.

  • U okviru clients.conf fajla je potrebno definisati 2 AMRES FTLR (Federation Top Level Radius Server) servera i još jedan server koji se koristi za nadgledanje operativnosti RADIUS servera eduroam hijerarhije.

  • Konfiguracija koja je data u nastavku može se iskopirati i dodati direktno na kraj clients.conf fajla.

  • Šifra potrebna za komunikaciju sa klijentima se definiše u secret parametru. Ovaj parametar se dobija lično ili telefonskim putem od AMRES-a i njega je potrebno zameniti u konfiguraciji.

vim /usr/local/etc/raddb/clients.conf
  • Na kraj fajla dodati sledeće linije:
client ftlr1.ac.rs {
 ipaddr           = 147.91.4.204
 secret           = pass # - lozinka se dobija od AMRES-a
 shortname        = ftlr1
 nas_type         = other
 virtual_server   = eduroam
}

client monitor.eduroam.ac.rs {
 ipaddr           = 147.91.3.12
 secret           = pass # - lozinka se dobija od AMRES-a
 shortname        = netiis
 nas_type         = other
 virtual_server   = eduroam
}

client ftlr2.ac.rs {
 ipaddr           = 147.91.1.101
 secret           = pass # - lozinka se dobija od AMRES-a
 shortname        = ftlr2
 nas_type         = other
 virtual_server   = eduroam
}

client monitor2.eduroam.ac.rs {
 ipaddr           = 147.91.56.177
 secret           = pass # - lozinka se dobija od AMRES-a
 shortname        = netiis2
 nas_type         = other
 virtual_server   = eduroam
 }

Fajl proxy.conf

Fajl proxy.conf se nalazi u /usr/local/etc/raddb direktorijumu. Ovaj konfiguracioni fajl omogućava serveru da zna na koji način će obrađivati pristigle RADIUS zahteve.

Zahtevi se mogu obrađivati lokalno ili se mogu prosleđivati (proksirati) nekom drugom serveru. Kako je ovo uputstvo namenjeno za Davaoca Identiteta, smatra se da se zahtevi obrađuju lokalno. Ovo znači da je potrebno definisati samo lokalni domen (realm) i u njemu označiti da se korisnici autentifikuju lokalno.

Linije koje su označene se dodaju u fajl.

cd /usr/local/etc/raddb
vim proxy.conf

Ukoliko ste u okviru fajla eduroam-inner-tunnel definisali jedan domen i LDAP konektor, izmene fajla proxy.conf su sledeće:

  • Na dnu fajla dodati sledeće linije:
realm test.institucija.ac.rs {
    authhost        = LOCAL
    accthost        = LOCAL
    User-Name       = "%{Stripped-User-Name}"
}

Umesto domena test.institucija.ac.rs potrebno je staviti domen Vaše institucije, koji koristite u okviru AMRES-a (npr. rgf.bg.ac.rs).

Prikaz fajla proxy.conf sa svim potrebnim izmenama:

proxy server {
        default_fallback = no
}

home_server localhost {
        type = auth
        ipaddr = 127.0.0.1
        port = 1812
        secret = testing123
        response_window = 20
        zombie_period = 40
        revive_interval = 120
        status_check = status-server
        check_interval = 30
        check_timeout = 4
        num_answers_to_alive = 3
        max_outstanding = 65536

        coa {
                irt = 2
                mrt = 16
                mrc = 5
                mrd = 30
        }

        limit {
              max_connections = 16
              max_requests = 0
              lifetime = 0
              idle_timeout = 0
        }
}

home_server_pool my_auth_failover {
        type = fail-over
        home_server = localhost
}

realm example.com {
        auth_pool = my_auth_failover

}
realm test.institucija.ac.rs {
    authhost        = LOCAL
    accthost        = LOCAL
    User-Name       = "%{Stripped-User-Name}"
}

realm LOCAL {
}

Ukoliko ste u okviru fajla eduroam-inner-tunnel definisali više domena i LDAP konektora, izmene fajla proxy.conf su sledeće:

  • Na dnu fajla dodati sledeće linije:
realm test1.institucija.ac.rs {
    authhost        = LOCAL
    accthost        = LOCAL
    User-Name       = "%{Stripped-User-Name}"
}

realm test2.institucija.ac.rs {
    authhost        = LOCAL
    accthost        = LOCAL
    User-Name       = "%{Stripped-User-Name}"
}

Prikaz fajla proxy.conf sa svim potrebnim izmenama:

proxy server {
        default_fallback = no
}

home_server localhost {
        type = auth
        ipaddr = 127.0.0.1
        port = 1812
        secret = testing123
        response_window = 20
        zombie_period = 40
        revive_interval = 120
        status_check = status-server
        check_interval = 30
        check_timeout = 4
        num_answers_to_alive = 3
        max_outstanding = 65536

        coa {
                irt = 2
                mrt = 16
                mrc = 5
                mrd = 30
        }

        limit {
              max_connections = 16
              max_requests = 0
              lifetime = 0
              idle_timeout = 0
        }
}

home_server_pool my_auth_failover {
        type = fail-over
        home_server = localhost
}

realm example.com {
        auth_pool = my_auth_failover

}
realm test1.institucija.ac.rs {
    authhost        = LOCAL
    accthost        = LOCAL
    User-Name       = "%{Stripped-User-Name}"
}

realm test2.institucija.ac.rs {
    authhost        = LOCAL
    accthost        = LOCAL
    User-Name       = "%{Stripped-User-Name}"
}

realm LOCAL {
}

Konfiguracija CUI atributa

Ako dođe do sigurnosnog incidenta u eduroam servisu, u najvećem broju slučajeva Davalac Resursa u svojim logovima može da pronađe samo anonimni identitet korisnika (anonymous@idp.ac.rs). U tom slučaju, dok se dotični korisnik ne identifikuje u bazi Davaoca Identiteta, Davalac Resursa jedino može da blokira ceo domen problematičnog korisnika. Rešenje ovog problema se postiže korišćenjem CUI atributa.

CUI (Chargeable User Identity) predstavlja jednistveni identifikator svakog eduroam korisnika, formira ga Davalac Identiteta i šalje Davaocu Resursa.

Ako je autentifikacija uspešna, Davalac Identiteta formira CUI atribut formiranjem MD5 hash-a koristeći UID korisnika, Operator-Name atribut iz zahteva i opciono ključa (u ovom primeru cui_hash_key). Ova vrednost se u Access-Accept poruci vraća Davaocu Resursa. Bitno je napomenuti da će vrednosti CUI atributa biti različita za istog korisnika, koji koristi eduroam resurse kod različitih Davaoca Resursa.

Izmena fajla cui

  • Preći u poddirektorijum /usr/local/etc/raddb/policy.d
cd /usr/local/etc/raddb/policy.d
  • Izmeniti fajl cui.

vim cui
* 1: U liniji cui_hash_key = "changeme" umesto dela changeme dodati proizvoljnu lozinku.

Sledi prikaz fajla cui sa izvršenomm izmenom:

cui_hash_key = "Lozink@123"

cui_require_operator_name = "no"

cui.authorize {
        if ("%{client:add_cui}" == 'yes') {
                update request {
                        &Chargeable-User-Identity := 0x00
                }
        }
}

cui.pre-proxy {
        if (("%{request:Packet-Type}" == 'Access-Request') && ("%{client:add_cui}" == 'yes')) {
                update proxy-request {
                        &Chargeable-User-Identity = 0x00
                }
        }
}

cui.post-auth {
        if (!&control:Proxy-To-Realm && &Chargeable-User-Identity && !&reply:Chargeable-User-Identity && \
            (&Operator-Name || ('${policy.cui_require_operator_name}' != 'yes')) ) {
                update reply {
                        &Chargeable-User-Identity = "%{sha1:${policy.cui_hash_key}%{tolower:%{User-Name}%{%{Operator-Name}:-}}}"
                }
        }

        if (&reply:Chargeable-User-Identity) {
                update {
                        &reply:User-Name := &request:User-Name
                }
                cuisql
        }
}

cui-inner.post-auth {
        if (&outer.request:Chargeable-User-Identity && \
            (&outer.request:Operator-Name || ('${policy.cui_require_operator_name}' != 'yes'))) {
                update reply {
                        &Chargeable-User-Identity := "%{sha1:${policy.cui_hash_key}%{tolower:%{User-Name}%{%{outer.request:Operator-Name}:-}}}"
                }
        }
}

cui.accounting {
        if (!&Chargeable-User-Identity) {
                update request {
                        &Chargeable-User-Identity := "%{cuisql:\
                                SELECT cui FROM cui \
                                WHERE clientipaddress = '%{%{Packet-Src-IPv6-Address}:-%{Packet-Src-IP-Address}}' \
                                AND callingstationid = '%{Calling-Station-Id}' \
                                AND username = '%{User-Name}'}"
                }
        }

        if (&Chargeable-User-Identity && (&Chargeable-User-Identity != '')) {
                cuisql
        }
}

Kreiranje fajla eduroam_cui_log

vim /usr/local/etc/raddb/mods-available/eduroam_cui_log

Prekopirati u fajl sledeći sadržaj:

linelog cui_inner_log {
        filename = ${logdir}/cui_inner_log
        format = ""
        reference = "%{%{reply:Packet-Type}:-format}"
        Access-Accept ="Access-Accept: %t USER=%{User-Name} IdP=%{tolower:%{Realm}} MAC=%{outer.request:Calling-Station-Id} AP=%{outer.request:Called-Station-Id} RP=%{outer.request:Operator-Name}#CUI=%{%{%{reply:Chargeable-User-Identity}:-%{outer.reply:Chargeable-User-Identity}}:-Local User}#RESULT=OK#"
        Access-Reject ="Access-Reject: %t USER=%{User-Name} IdP=%{tolower:%{Realm}} MAC=%{outer.request:Calling-Station-Id} AP=%{outer.request:Called-Station-Id} RP=%{outer.request:Operator-Name}#CUI=%{%{%{reply:Chargeable-User-Identity}:-%{outer.reply:Chargeable-User-Identity}}:-Local User}#RESULT=FAIL#"
}       

Kada je kreiran modul eduroam_cui_log, potrebno je preći u poddirektorijum /usr/local/etc/raddb/mods-enabled i napraviti soft link ka ldap modulu iz poddirektorijuma /usr/local/etc/raddb/mods-available:

cd /usr/local/etc/raddb/mods-enabled
ln -s ../mods-available/eduroam_cui_log

Ovim su završena osnovna podešavanja neophodna za funkcionisanje RADIUS servera.

Konfiguracija dynamic-vlan servisa

U okviru post-auth sekcije u eduroam-inner-tunnel fajlu se po potrebi može definisati i VLAN u koji se smeštaju zahtevi na mreži. U okviru sekcije potrebno je otkomentaisati ili dodati parametar:

dynamic-vlan
Ovaj parametar poziva policy koji se definise u /usr/local/etc/raddb/policy.d/ folderu, a preporuka je da se doda u cui fajl:

dynamic-vlan.post-auth {

    if (request:User-Name =~ /^((.)+)@institucija\.ac\.rs$/ && reply:rsEduPersonStaffCategory != 'administrativno osoblje') {
        if (reply:Class == 'zaposleni' && (outer.request:Calling-Station-Id =~ /^10-xx-xx.+$/ || outer.request:Calling-Station-Id =~ /^60-xx-xx.+$/) || outer.request:Calling-Station-Id =~ /^88-xx-xx.+$/ || outer.request:Calling-Station-Id =~ /^a0-xx-xx.+$/) {
            # U poslednji "if" je dodato outer.request. Ovaj atribut se ne kopira u zahtev iz unutrasnjeg tunela.
            #  Drugo resenje bi bilo da se stavi u eap fajlu "copy_request_to_tunnel = yes" u ttls sekciji
            if (outer.request:NAS-IP-Address == 147.91.x.x || outer.request:NAS-IP-Address == 147.91.x.x || outer.request:NAS-IP-Address == 147.91.x.x) {
                update outer.reply {
                    Tunnel-Type:1 := "VLAN",
                    Tunnel-Medium-Type:1 := "IEEE-802",
                    Tunnel-Private-Group-ID:1 := "255"
                }
            }
        }
    }

}

Ukoliko je potrebno podesiti i druge pojedinačne slučajeve to se može uraditi i na neki od sledećih načina u okviru post-auth sekcije u eduroam-inner-tunnel fajlu, iznad parametara cui_inner i cui_inner_log. Primeri su dati u nastavku:

if (request:User-Name == 'user@institucija.ac.rs' && reply:rsEduPersonStaffCategory != 'administrativno osoblje') {
    update outer.reply {
        Tunnel-Type:1 := "VLAN",
        Tunnel-Medium-Type:1 := "IEEE-802",
        Tunnel-Private-Group-ID:1 := "252"
    }
}


if (request:User-Name =~ /^((.)+)@institucija\.ac\.rs$/) {
    if (reply:Class == 'gost' && (outer.request:NAS-IP-Address == 147.91.x.x || outer.request:NAS-IP-Address == 147.91.x.x || outer.request:NAS-IP-Address == 147.91.x.x)) {
        update outer.reply {
            Tunnel-Type:1 := "VLAN",
            Tunnel-Medium-Type:1 := "IEEE-802",
            Tunnel-Private-Group-ID:1 := "252"
        }
    }
}


if (request:User-Name == 'user@institucija.ac.rs' && outer.request:Calling-Station-Id == 'xx-xx-xx-xx-xx-xx') {
    update outer.reply {
        Tunnel-Type:1 := "VLAN",
        Tunnel-Medium-Type:1 := "IEEE-802",
        Tunnel-Private-Group-ID:1 := "255"
    }
}

Provera konfiguracije RADIUS servera

Za proveru konfiguracije preporuka je da se RADIUS proces pokrene prvo u debug modu, komandom radiusd -X

Preporuka je da se debug mod koristi samo u slučaju kada se prave izmene u konfiguraciji ili u slučaju kada neko od korisnika ima problem sa povezivanjem na eduroam, jer se u debug modu lozike prikazuju u clear-text formatu.

radiusd -X

Ukoliko je konfiguracija bez grešaka, na ekranu se ispisuje sledeće:

.
.
.
Listening on auth address * port 1812 bound to server eduroam
Listening on acct address * port 1813 bound to server eduroam
Listening on auth address :: port 1812 bound to server eduroam
Listening on acct address :: port 1813 bound to server eduroam
Listening on auth address 127.0.0.1 port 18120 bound to server eduroam-inner-tunnel
Listening on proxy address * port xxxxx
Listening on proxy address :: port xxxxx
Ready to process requests

Prekid rada RADIUS procesa u debug modu, se izvršava sa CTRL+C

RADIUS proces u standardnom modu se pokreće komandom radiusd

radiusd

RADIUS proces se po potrebi zaustavlja se komandom killall radiusd, ukoliko je potrebno izmeniti konfiguraciju ili ukoliko postoji problem u povezivanju na eduroam servis i gde je potrebno istražiti problem

killall radiusd

Spisak linkovanih modula

cd /usr/local/etc/raddb/mods-enabled/; ll
lrwxrwxrwx 1 root root 24 Sep 27 16:07 always -> ../mods-available/always
lrwxrwxrwx 1 root root 29 Sep 27 16:07 attr_filter -> ../mods-available/attr_filter
lrwxrwxrwx 1 root root 22 Sep 27 16:07 chap -> ../mods-available/chap
lrwxrwxrwx 1 root root 22 Sep 27 16:07 date -> ../mods-available/date
lrwxrwxrwx 1 root root 24 Sep 27 16:07 detail -> ../mods-available/detail
lrwxrwxrwx 1 root root 28 Sep 27 16:07 detail.log -> ../mods-available/detail.log
lrwxrwxrwx 1 root root 24 Sep 27 16:07 digest -> ../mods-available/digest
lrwxrwxrwx 1 root root 33 Sep 27 16:07 dynamic_clients -> ../mods-available/dynamic_clients
lrwxrwxrwx 1 root root 21 Sep 27 16:07 eap -> ../mods-available/eap
lrwxrwxrwx 1 root root 22 Sep 27 16:07 echo -> ../mods-available/echo
lrwxrwxrwx 1 root root 33 Sep 29 14:48 eduroam_cui_log -> ../mods-available/eduroam_cui_log
lrwxrwxrwx 1 root root 22 Sep 27 16:07 exec -> ../mods-available/exec
lrwxrwxrwx 1 root root 28 Sep 27 16:07 expiration -> ../mods-available/expiration
lrwxrwxrwx 1 root root 22 Sep 27 16:07 expr -> ../mods-available/expr
lrwxrwxrwx 1 root root 23 Sep 27 16:07 files -> ../mods-available/files
lrwxrwxrwx 1 root root 22 Sep 29 14:33 ldap -> ../mods-available/ldap
lrwxrwxrwx 1 root root 25 Sep 27 16:07 linelog -> ../mods-available/linelog
lrwxrwxrwx 1 root root 27 Sep 27 16:07 logintime -> ../mods-available/logintime
lrwxrwxrwx 1 root root 24 Sep 27 16:07 mschap -> ../mods-available/mschap
lrwxrwxrwx 1 root root 27 Sep 27 16:07 ntlm_auth -> ../mods-available/ntlm_auth
lrwxrwxrwx 1 root root 21 Sep 27 16:07 pap -> ../mods-available/pap
lrwxrwxrwx 1 root root 24 Sep 27 16:07 passwd -> ../mods-available/passwd
lrwxrwxrwx 1 root root 28 Sep 27 16:07 preprocess -> ../mods-available/preprocess
lrwxrwxrwx 1 root root 25 Sep 27 16:07 radutmp -> ../mods-available/radutmp
lrwxrwxrwx 1 root root 23 Sep 27 16:07 realm -> ../mods-available/realm
lrwxrwxrwx 1 root root 27 Sep 27 16:07 replicate -> ../mods-available/replicate
lrwxrwxrwx 1 root root 21 Sep 27 16:07 soh -> ../mods-available/soh
lrwxrwxrwx 1 root root 26 Sep 27 16:07 sradutmp -> ../mods-available/sradutmp
lrwxrwxrwx 1 root root 22 Sep 27 16:07 totp -> ../mods-available/totp
lrwxrwxrwx 1 root root 22 Sep 27 16:07 unix -> ../mods-available/unix
lrwxrwxrwx 1 root root 24 Sep 27 16:07 unpack -> ../mods-available/unpack
lrwxrwxrwx 1 root root 22 Sep 27 16:07 utf8 -> ../mods-available/utf8

Podešavanje logrotate funkcije

Sva podešavanja logrotate funkcije se obavljaju u logrotate.conf fajlu. Ovaj fajl se nalazi u /etc direktorijumu.

vim /etc/logrotate.conf

Izgled fajla pre izmena je dat u nastavku:

# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
dateext

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
        minsize 1M
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

# system-specific logs may be also be configured here.

Za pregled i opis svih logrotate funkcionalnosti može se primeniti komanda:

man logrotate

Direktorijume i log fajlove koje želite da rotirate potrebno je dodati na kraj ovog konfiguracionog fajla. U zavisnosti od potreba, može se koristiti širok spektar različitih kombinacija komandi. Neke od najzačajnih su date u nastavku, uz odgovarajuće objašnjenje:

  • compress – omogućava da se fajlovi kompresuju, default vrednost je gunzip.

  • extension – ne označava tip ekstenzije, već ekstenziju koja se dodaje posle imena fajla. Ovo može biti korisno prilikom reimenovanja rotiranih log fajlova. Ukoliko se koristi i compress opcija, tada će pre .gz ekstenzije biti navedena ekstenzija koju je definisao korisnik. Npr. kada je potrebno preimenovati fajl radius.log u radius.log.pera, dodaje se celo ime posle extension naredbe. Kada je navedena i opcija compress, tada će ime rotiranog fajla biti radius.log.pera.gz.

  • mail – pre nego što se log fajl izbriše, može se poslati mejl na adresu koja je navedena, npr. mail pera.peric@idp.ac.rs.

  • postrotate/endscript i pretrotate/endscript – kôd između ove dve komande se izvršava nakon, odnosno pre nego što se log fajl rotira, respektivno.

  • rotate – sintaksa je rotate . Fajlovi se rotiraju tačno puta, pre nego što se obrišu. Ako je count jednak nuli, stare verzije se brišu umesto da se rotiraju. Kada se dođe do poslednje vrednosti, počinje se od početka. Na ovaj način briše se fajl koji je bio rotiran prvi i novi ga zamenjuje.

  • size – log fajlovi se rotiraju kada pređu veličinu koja je navedena. Ako se posle broja koji označava veličinu ne navede ništa, smatra se da se radi o veličini fajla u KB. Može se definisati i veličina u MB, tako što se posle broja navede slovo M.

  • start – broj od koga počinje numeracija log fajlova koji se rotiraju (ako se navede 1, sledeći log fajl će imati broj 2 i tako redom). Ova opcija nije zavisna od rotate opcije, što znači da će fajlovi i dalje biti rotirani onoliko puta koliko je navedeno rotate opcijom.

Pored ovih opcija, moguće je definisati u kom vremenskom intervalu će se logovi rotirati, komandama: daily, monthly i weekly. Ukoliko je potrebno čuvati logove za celu godinu, to je moguće korišćenjem komande monthly u kombinaciji sa rotate funkcijom. Ukoliko se rotira jedan fajl, potrebno je navesti punu putanju do njega, (npr. /usr/local/var/log/radius/radius.log)

Na kraju fajla potrebno je dodati sledeće:

/usr/local/var/log/radius/radius.log {
     monthly
     rotate 12
     start 1
     compress
     dateext
}

/usr/local/var/log/radius/cui_inner_log {
     monthly
     rotate 12
     start 1
     compress
     dateext
}

/usr/local/var/log/radius/radwtmp {
     daily
     start 1
     compress
     dateext
}

Primenom ovog koda postiže se :

  • Rotiranje radius.log i cui_inner_log fajla na mesečnom nivou
  • Kompresija je tipa .gzip
  • Rotiran fajl će imati ekstenziju sa datumom rotacije (npr. radius.log-GGGGMMDD.gz)

Prikaz sadržaja fajla /etc/logrotate.conf:

# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
dateext

# uncomment this if you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
        minsize 1M
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

# system-specific logs may be also be configured here.

/usr/local/var/log/radius/radius.log {
     monthly
     rotate 12
     start 1
     compress
     dateext
}

/usr/local/var/log/radius/cui_inner_log {
     monthly
     rotate 12
     start 1
     compress
     dateext
}

/usr/local/var/log/radius/radwtmp {
     daily
     start 1
     compress
     dateext
}

Kreiranje alijasa (opciono)

U cilju lakšeg održavanja RADIUS servera od pomoći bi bilo kreirati "prečice" ka bitnim direktorijumima:

  • prečica r za prelazak u direktorijum /usr/local/etc/raddb/

  • prečica rl za prelazak u direktorijum /usr/local/var/log/radius/

Otvoriti i editovati sledeći fajl:

vim ~/.bashrc

Nakon navođenja poslednjeg alijasa dodati sledeće linije:

alias r='cd /usr/local/etc/raddb/'
alias rl='cd /usr/local/var/log/radius/'

Fajl na kraju izgleda ovako:

# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

alias r='cd /usr/local/etc/raddb/'
alias rl='cd /usr/local/var/log/radius/'

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi
source ~/.bashrc

Procedura kod izmene konfiguracije RADIUS servera

Pregled aktivnosti RADIUS procesa

ps aux | grep radiusd

Pre bilo kakve izmene u konfiguraciji RADIUS servera ili ukoliko se detektuje problem u njegovom funkcionisanju potrebno je najpre zaustaviti RADIUS proces ukoliko je aktivan

killall radiusd

Zatim možete da izvršite promene u konfiguraciji i istražite eventualni problem u funkcionisanju RADIUS servera

Za proveru konfiguracije preporuka je da se RADIUS proces pokrene prvo u debug modu, komandom radiusd -X

Preporuka je da se debug mod koristi samo u slučaju kada se prave izmene u konfiguraciji ili u slučaju kada neko od korisnika ima problem sa povezivanjem na eduroam, jer se u debug modu lozike prikazuju u clear-text formatu.

radiusd -X

Ukoliko je konfiguracija bez grešaka, na ekranu se ispisuje sledeće:

.
.
.
Listening on auth address * port 1812 bound to server eduroam
Listening on acct address * port 1813 bound to server eduroam
Listening on auth address :: port 1812 bound to server eduroam
Listening on acct address :: port 1813 bound to server eduroam
Listening on auth address 127.0.0.1 port 18120 bound to server eduroam-inner-tunnel
Listening on proxy address * port xxxxx
Listening on proxy address :: port xxxxx
Ready to process requests

Prekid rada RADIUS procesa u debug modu, se izvršava sa CTRL+C

RADIUS proces u standardnom modu se pokreće komandom radiusd

radiusd

Ukoliko se pojavi navedeno upozorenje prilikom startovanja radiusd procesa treba izmeniti fajl na LDAP serveru:

TLSMC: MozNSS compatibility interception begins.
tlsmc_convert: INFO: cannot open the NSS DB, expecting PEM configuration is present.
tlsmc_intercept_initialization: INFO: successfully intercepted TLS initialization. Continuing with OpenSSL only.
TLSMC: MozNSS compatibility interception ends.

Otići na putanju /etc/openldap/ i editovati fajl ldap.conf:

vim /etc/openldap/ldap.conf

Da bi se izbeglo upozorenje o grešci prilikom startovanja radiusd procesa treba dodati sledeću liniju na kraj fajla ldap.conf:

TLS_MOZNSS_COMPATIBILITY off

Restartovati slapd proces:

systemctl restart slapd

Pridruživanje AMRES eduroam servisu

Na stranici http://www.eduroam.amres.ac.rs/rs/institucije-prikljucivanje.html možete da pročitate o tome šta je šta je potrebno kako bi se Vaša institucija pridružila AMRES eduroam servisu.

Podešavanje FreeRADIUS3 servera za AMRES VPN

Nakon što ste uspešno instalirali i konfigurisali FreeRADIUS server za potrebe Davaoca Identiteta možete preći na podešavanje istog FreeRADIUS servera za AMRES VPN uslugu, ukoliko vam je to potrebno.

Uputstvo za podešavanje FreeRADIUS3 servera za AMRES VPN

Pregled logova

cd /usr/local/var/log/radius/
tail -f radius.log

Provera verzije FreeRADIUS paketa

radiusd -v