Traadita võrgu turvamine FreeRADIUS’ega

From ICO wiki
Revision as of 15:28, 1 April 2011 by Avein (talk | contribs)
Jump to navigationJump to search

FreeRADIUS

Teooria :

Mis on RADIUS? Radius on Remote Authentication Dial-In User Service, mida kaustatakse lõppkasutaja autoriseerimiseks ja autentimiseks. Täpsemalt lugemist saab http://www.ietf.org/rfc/rfc2865.txt . RADIUS võimaldab autoriseerida ja autentida kasutajaid, kes ühenduvad LAN võrku ning keelata ligipääs juhul, kui kasutaja ei läbi kontrolli. FreeRADIUS ( http://freeradius.org/ ) on RADIUSE vabavaraline realisatsioon.



1.Uus kasutaja ühendub AccessPoindiga (AP) ning küsib ligipääsu LAN'i. AP küsib lõppkasutajalt ta identiteeti. Ainuke lubatud ühendus enne identifitseerimist on Extensible Authentication Protocol ( EAP). 2.Peale identifitseerimist algab autentikeerimine. Kasutatakse EAP protokolli. AP kapseldab EAP paketid RADIUS formaati ja saadab nad edasi RADIUS serverile. Autentikeerimisprotsessi ajal AP vahendab pakette lõppkasutaja ja RADIUS serveri vahel. 3.Peale õnnestunud autentikeerimist lastakse lõppkasutaja LAN kohtvõrgule ligi.

Mis on EAP? Extensible Authentication Protocol on autentikeerimiseks optimiseeritud transpordiprotokoll. EAP toetab mitut erinevat autentikeerimimismeetodit. http://www.ietf.org/rfc/rfc3748.txt

Milliseid autentikeerimismehhanisme EAP toetab? Täieliku nimekirja võib leida siit http://www.iana.org/assignments/eap-numbers/eap-numbers.xml

Antud laboris kasutame me EAP-TLS realisatsiooni. EAP-TLS tekitab TLS sessiooni AP ja RADIUS serveri vahele. Nii server kui kliendid vajavad kehtivat sertifikaati. Täpsema standardi kirjelduse võib leida aadressilt http://www.ietf.org/rfc/rfc2716.txt .

Mis me teeme?

Labori eesmärgiks on läbi viia praktiline FreeRadiuse konfigureerimine ning vajalike sertifikaatide seadistamine. Kasutatakse EAP-TLS autentikeerimismehhanismi. Labori võib jagada neljaks osaks :

Kuidas paigaldada vajalikud tarkvarapaketid RADIUS serverile.

Kuidas tekitada vajalikud sertifikaadid.

Kuidas seadistada FreeRADIUS ja Wireless Access Poindid.

Kuidas ühenduda sertifikaatide abil Wireless Access Poindidga


Mis on sertifikaadid?

Krüptograafias on sertifikaat elektrooniline dokument, mis kasutab digitaalallkirja, et siduda avalik võti kellegi identiteediga.

Täpsem inglise keelne seletus on leitav siit :

http://en.wikipedia.org/wiki/Public_key_certificate

FreeRADIUS serveri installatsioon Paigaldamiseks Fedore Core all kirjutage pakettide nimekirja uuendamiseks käsureale :

$ yum upgrade

Peale antud operatsiooni sooritamist paigaldage FreeRadiuse server. Seda saab teha järgneva käsu vahendusel :

$ yum install freeradius

Antud käsk tekitab kataloogi nimega /etc/raddb kuhu paigutab FreeRADIUS'ega seotud failid, kaasa arvatud FreeRADIUS'e konfiguratsiooni.

Sertifikaatide tekitamine

Et sertifikaate teha peame esmalt installeerima open-ssl'i perli skriptid käsuga : $ yum install openssl-perl

Teeme kataloogi /home/serdid käsuga:

$ mkdir -p /home/serdid

siis lähme sinna kataloogi käsuga:

$ cd /home/serdid

Sertifikaadid teeme lihtsuse mõttes modifitseeritud scriptiga mille tegemise juhised on antud dokumendi viimases peatükis nimega „Sertifikaat“.

Keda huvitab sertifikaatidega seotud teooria võib leida inglise keelse kirjelduse aadressilt http://en.wikipedia.org/wiki/Public_key_certificate

Vastavalt sektsioonis „Sertifikaat“ olevatele juhenditele tehke fail nimega cert.sh ja kopeerige see kataloogi /home/serdid Siia paneks lingi hoopis? $ cp cert.sh /home/serdid

Sertifikaatidi failide kirjeldus : cacert.pem, the root CA sertifikaat cakey.pem, the root CA private key fail, pass phrase on “whatever” cacert.der, the root CA sertifikaat binaaris Windowsi jaoks client_cert.pem, kliendi sertifikaat client_key.pem, kliendi privataatvõti, salasõna (pass phrase) Teie valikul server_cert.pem, serveri sertifikaat server_key.pem, serveri privaatvõti salasõna (pass phrase) on “whatever” client_cert.p12 PKCS#12 versioon kliendi sertifikaadist

Algatuseks teeme selfsigned CA sertifikaadi. Selleks jooksutame antud scripti järgmise võtmega :

$ ./cert.sh ca

Common name võib panna näiteks Cacert. Antud käsk tekitab meile cakey.pem, cacert.pem ja cacert.der failid.

Järgnevaks tekitame serveri sertifikaadi, selleks sisestame käsu :

$ ./cert.sh server cakey.pem cacert.pem

Common name võib näiteks servercert panna, kuigi soovitav on sinna enda versioon sisetada ning see ka meelde jätta. Ülejäänud küsimuste peale on soovitatav ise mitte midagi sisestada, eriti Challenge passwordi korral. Antud tegevuse tagajärjel saame failid server_key.pem ja server_cert.pem

Siis teeme kliendi sertifikaadi käsuga :

$ ./cert.sh client cakey.pem cacert.pem

Common name'iks pange sert_laptop (selle sertifikaadi common name on teie hilisem username FreeRADIUS'e serveris, nii et kui sinna midagi muud panete, siis tasub see meelde jätta ja vastavalt ka users faili kirja panna) . Export password jätke meelde, kuna teil läheb seda tulevikus vaja. Challenge password on esialgu soovitatav tühjaks jätta. Kindlasti peab antud sertifikaadile alla kirjutama (Sign the certificate? [y/n]:y) .

Teeme 1024-bitise Diffie-Hellman parameetri järgmise käsuga :

$ openssl dhparam -out dh 1024

ja random faili järgneva käsuga

$ dd if=/dev/urandom of=random count=2

Artikkel mille alusel antud juhend koostati : http://www.freesoftwaremagazine.com/community_posts/generating_self_signed_test_certificates_using_one_single_shell_script



FreeRADIUS'e konfigureerimine

Kuna Fedora Core 12 algses tulemüüris (iptables) on kõik pordid peale ssh oma suletud, tuleb esmalt port 1812 avada. Lihtsaimaks võimaluseks on kaotada kõik keelavad reeglid tulemüürist. Seda saab teha käsuga:

$ iptables -F

NB: Tasub aga meeles pidada et peale igat restarti taastatakse algsätted!


FreeRadiuse konfiguratsiooni failid mida modifitseerime on :


clients.conf – siin on FreeRADIUSe serverit kasutavate klientide informatsioon .

FreeRadiuse juures tasub meeles pidada, et on olemas keskne server millel on kliendid. Klientideks on Access Poindid (AP), mitte arvutid mis ühenduvad AP külge!

eap.conf – siin on FreeRADIUSe EAP autoriseerimise konfiguratsioon

users -siin on kasutajanimed ja autoriseerimismeetodite alane informatsioon

FreeRADIUS'e konfiguratsiooni failid asuvad kataloogis /etc/raddb

clients.conf

Avage tekstiredaktoriga fail clients.conf ja lisage sinna enda WIFI ruuteri aaddress. Oletame et meie wifi-ruuteri aadress on 192.168.1.14 . Selleks et lisada antud aaddress lubatud klientide nimekirja tuleb faili clients.conf lisada järgnev kirje :


client 192.168.1.14 {

       secret          =       password
       shortname       =       talvekool1
       nastype         =       other

} secret on nn shared-secret ruuteri ja FreeRADIUS serveri vahel. Sama secreti peate panema hiljem ka enda wifi ruuteri konfiguratsiooni. Shortname on lihtsalt nimi, millega antud seadet radiuse logides hakatakse mainima.

Users Järgnevaks lisame faili users järgnevad read :

sert_laptop Auth-type := EAP

DEFAULT Auth-type := Reject

               Reply-Message := "Kõtt!"

Nii saavutame selle, et kasutajanime sert_laptop (meie klient sertifikaadi common name) puhul kasutatakse autoriseerimisel EAP protokolli. DEFAULT kirjes aga keelame kõik teised ühendused.

eap.conf Avame faili eap.conf tekstiredaktoriga ning muudame rea default_eap_type = järgnevaks :

default_eap_type = tls

siis lähme sektsiooni tls{ } juurde kuhu teeme järgnevad muudatused:


   tls {
      private_key_password = whatever
      private_key_file = /home/serdid/server_key.pem
      #  If Private key & Certificate are located in
      #  the same file, then private_key_file &
      #  certificate_file must contain the same file
      #  name.
      certificate_file = /home/serdid/server_cert.pem
      #  Trusted Root CA list
      CA_file = /home/serdid/cacert.pem


      #
      #  For DH cipher suites to work, you have to
      #  run OpenSSL to create the DH file first:
      #
      #       openssl dhparam -out certs/dh 1024
      #
      dh_file = /home/serdid/dh
      random_file = /home/serdid/random

Peale seda jääb meil veel üle FreeRADIUS server käivitada, seda saame me teha käsuga „freeradius“, kuid soovitatav oleks käivitada server debugmodis, seda saab teha käsurealt järgneva käsuga :

$ radiusd -X Ruuteri konfigureerimine Tomato Version 1.27 Basic ->Network-> lehekülg lõpuni kerida. Sealt valida Security „none“ asemel „WPA2 Enterprise“ ning sisestada „Shared Key“ (shared key on clients.conf failis , antud juhul oleks selleks : “password“ ). Serveri aadressiks panna selle masina aadress kus FreeRADIUS server asetseb ja pordiks jätta 1812 (default port) Peale seda vajutada nupul „Save“










Windows XP klientmasina konfigureerimine Windows klientmasin vajab cacerts.der ja client_cert.p12 faile autoriseerimiseks. Cacert.der tuleb lisada Trusted Root Certificates alla ja client_cert.p12 lihtsalt sertifikaadiks. Antud sertifikaatide tegemine oli kirjeldatud peatükis „Sertifikaatide tekitamine“.

Kopeerige mälupuga või mõne muu meediumi abil cacert.der ja client_cert.p12 windowsi klientmasinasse. Siis lisame cacert.der sertifikaadi Trusted juursertifikaatide hulka. Selle jaoks klikkame ta peal kaks korda ja avanenud aknas valime „Install Certificate“






Järmisest aknast valime „Place all certificates in following store“ -> Browse-> Trusted Root Certification Authorities ja siis „OK“.








Järgnevates akendes vajutada OK või nextile kasutades isiklikku intelligentsi. Järgmiseks tuleb lisada kliendisertifikaat client_cert.p12. Selleks klikkame client_cert.p12 faili peal kaks korda ja avanenud aknas vajutame „NEXT“.
















Järgmiseks konfigureerime Cisco Aironet utility. Avame Cisco Aironet utiliidi ja vajutame nupul „Scan“. Sealt valime enda ruuteri SSID.



Siis valime Modify, paneme enda ühendusele nime ja lähme edasi Security tabi ning valime WPA/WPA2/CCKM ning rippmenüüst alamtüübi EAP-TLS






Siis vajutame Configure nupul ja valime rippmenüüdest enda sertifikaadid :




Lõpuks vajutame nupul „OK“ ning teeme antud ühenduse aktiivseks. kui kõik on õigesti seadistatud näeme järgnevat pilti:





Windows 7 klientmasina konfigureerimine


Windows klientmasin vajab cacerts.der ja client_cert.p12 faile autoriseerimiseks. Cacert.der tuleb lisada Trusted Root Certificates alla ja client_cert.p12 lihtsalt sertifikaadiks. Antud sertifikaatide tegemine oli kirjeldatud peatükis „Sertifikaadid“.


Kopeerige mälupulga või mõne muu meediumi abil cacert.der ja client_cert.p12 windowsi klientmasinasse. Siis lisame cacert.der sertifikaadi Trusted juursertifikaatide hulka. Selle jaoks klikkame ta peal kaks korda ja avanenud aknas valime „Install Certificate“












Avanenud aknast valime „Place all certificates in following store“ -> Browse-> Trusted Root Certification Authorities ja siis „OK“ ja järgmises aknas „Finish“





























Järgmiseks tuleb lisada kliendisertifikaat client_cert.p12. Selleks klikkame client_cert.p12 faili peal kaks korda ja avanenud aknas vajutame „NEXT“.























Sertifikaadid: Konsoolis teha järgneva käsuga tekstifail : $ touch cert.sh

Siis selle faili kõigi poolt käivitatavaks : $ chmod a+x cert.sh

Ning siis lisame järgneva teksti sinna enda lemmik tekstiredaktoriga :

  1. !/bin/sh
  2. A script generates self-signed root CA cert/key and client/server certs with
  3. xp-extensions, using openssl.
  4. certs generated are for testing purposes only!
  5. Author: Gong Cheng, chengg11@yahoo.com, Aug. 2008
  6. You are free to use this script in anyway but absolutely no warranty!

usage () {

   echo "Usage:"
   echo "  certgen ca [<ca key> <ca cert>]"
   echo "  certgen client <ca key> <ca cert> [ <client key>  <client cert> ]"
   echo "  certgen server <ca key> <ca cert> [ <server key>  <server cert> ]"

}

gen_config () {

   echo "Generating ca_config.cnf"
   cat > ca_config.cnf <<EOT

HOME = . RANDFILE = $ENV::HOME/.rnd [ ca ] default_ca = CA_default [ CA_default ] certs = . crl_dir = . database = index.txt new_certs_dir = . certificate = $2 serial = serial private_key = $1 RANDFILE = .rand x509_extensions = usr_cert name_opt = ca_default cert_opt = ca_default default_days = 365 default_crl_days= 30 default_md = sha1 preserve = no policy = policy_match [ policy_match ] countryName = match stateOrProvinceName = match organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = optional [ policy_anything ] countryName = optional stateOrProvinceName = optional localityName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional [ req ] default_bits = 1024 default_md = sha1 default_keyfile = privkey.pem distinguished_name = req_distinguished_name attributes = req_attributes x509_extensions = v3_ca string_mask = MASK:0x2002 [ req_distinguished_name ] countryName = Country Name (2 letter code) countryName_default = EE countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name (full name) stateOrProvinceName_default = Harju localityName = Locality Name (eg, city) localityName_default = Tallinn 0.organizationName = Organization Name (eg, company) 0.organizationName_default = Cisco lab organizationalUnitName = Organizational Unit Name (eg, section) commonName = Common Name (eg, your name or your server's hostname) commonName_max = 64 emailAddress = Email Address emailAddress_max = 64 [ req_attributes ] challengePassword = A challenge password challengePassword_min = 4 challengePassword_max = 20 unstructuredName = An optional company name [ usr_cert ] basicConstraints=CA:FALSE nsComment = "OpenSSL Generated Certificate" subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer [ v3_req ] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment [ v3_ca ] subjectKeyIdentifier=hash authorityKeyIdentifier=keyid:always,issuer:always basicConstraints = CA:true [xpclient_ext] extendedKeyUsage = 1.3.6.1.5.5.7.3.2 [xpserver_ext] extendedKeyUsage = 1.3.6.1.5.5.7.3.1 EOT }

gen_ca () {

   echo "generating CA cert:$1, $2", cacert.der;
   openssl req -config ca_config.cnf -new -x509 -extensions v3_ca -days 3650 -passin pass:whatever -passout pass:whatever -keyout $1 -out $2
   openssl x509 -inform PEM -outform DER -in cacert.pem -out cacert.der

}

gen_client_cert () {

   echo "generating client cert:$1, $2";
   openssl req -config ca_config.cnf -new -nodes -keyout $1 -out temp.csr -days 3650
   openssl ca -config ca_config.cnf -policy policy_anything -out $2 -days 3650 -key whatever -extensions xpclient_ext -infiles temp.csr
   openssl pkcs12 -export -clcerts -in client_cert.pem -inkey client_key.pem -out client_cert.p12
   rm temp.csr

}

gen_server_cert () {

   echo "generating server cert:$1, $2";
   openssl req -config ca_config.cnf -new -nodes -keyout $1 -out temp.csr -days 3650
   openssl ca -config ca_config.cnf -policy policy_anything -out $2 -days 3650 -key whatever -extensions xpserver_ext -infiles temp.csr
   rm temp.csr

}

  1. at least one argument

if [ $# -lt 1 ] then

   usage
   exit 1

fi


  1. default file names if not specified in command line

ca_key_file=cakey.pem ca_cert_file=cacert.pem client_key_file=client_key.pem client_cert_file=client_cert.pem server_key_file=server_key.pem server_cert_file=server_cert.pem

case $1 in ca)

   if [ x$2 != x ]
   then
       ca_key_file=$2
       ca_cert_file=$3
   fi
   gen_config $ca_key_file $ca_cert_file
   gen_ca $ca_key_file $ca_cert_file
   if [ -f $ca_key_file -a -f $ca_cert_file ]
   then
       echo "Generated files: key: $ca_key_file , cert: $ca_cert_file"
   else
       echo "Failed to generated all files"
   fi
   ;;

client)

   if [ $# -ne 3 -a $# -ne 5 ]
   then
       usage
       exit 1
   fi
   ca_key_file=$2
   ca_cert_file=$3
   gen_config $ca_key_file $ca_cert_file
   if [ x$4 != x ]
   then
       client_key_file=$4
       client_cert_file=$5
   fi
   if [ ! -f index.txt ]
   then
       touch index.txt
   fi
   if [ ! -f serial ]
   then
       echo 01 > serial
   fi
   gen_client_cert $client_key_file $client_cert_file
   if [ -f $client_key_file -a -f $client_cert_file ]
   then
       echo "Generated files: key: $client_key_file , cert: $client_cert_file"
   else
       echo "Failed to generated all files"
   fi
   if [ $client_cert_file != `cat serial.old`.pem ]
   then
       rm `cat serial.old`.pem
   fi
   ;;

server)

   if [ $# -ne 3 -a $# -ne 5 ]
   then
       usage
       exit 1
   fi
   ca_key_file=$2
   ca_cert_file=$3
   gen_config $ca_key_file $ca_cert_file
   if [ x$4 != x ]
   then
       server_key_file=$4
       server_cert_file=$5
   fi
   if [ ! -f index.txt ]
   then
       touch index.txt
   fi
   if [ ! -f serial ]
   then
       echo 01 > serial
   fi
   gen_server_cert $server_key_file $server_cert_file
   if [ -f $server_key_file -a -f $server_cert_file ]
   then
       echo "Generated files: key: $server_key_file , cert: $server_cert_file"
   else
       echo "Failed to generated all files"
   fi
   if [ $server_cert_file != `cat serial.old`.pem ]
   then
       rm `cat serial.old`.pem
   fi
   ;;
  • ) usage; exit 1;;

esac


  1. cleanups

rm ca_config.cnf


Korduma Kippuvad Küsimused:


Miks mu sertifikaat ei tööta? Sertifikaat ei ole klientmasinas aktiivne – võrrelge kellaegu masinas kus te tekitasite sertifikaadi ja masinas kuhu te selle paigaldasite. Juhul kui seal on erinevad kellajad, on tõenäoline, et sertifikaadi kehtivusaeg pole veel alanud. Kõige lihtsam meetod selle probleemi lahendamiseks on muuta arvutis kellaaega.

Alljärgneval joonisel võib näha ekraanitõmmist mittekehtivast sertifikaadist. Pöörake tähelepanu veateatele ja „ Valid from“ vahemikule.












Vaadake üle enda sertifikaatide failis, juhul kui mõne faili suurus on 0kb, olete teinud kusagil vea. Kuna võimalusi on mitmeid siis on soovitatav vanad sertifikaadid ära kustutada ja sertifikaadi tekitamise protsess lihtsalt uuesti läbi teha, olles seekord tähelepanelikum.

FreeRADIUS Labor