https://wiki.lug.ro/api.php?action=feedcontributions&user=94.181.17.57&feedformat=atomWiki.lug.ro - Contribuții utilizator [ro]2024-03-29T05:53:55ZContribuții utilizatorMediaWiki 1.27.7https://wiki.lug.ro/index.php?title=Autentificare_cu_PPPoE_pentru_retelele_de_cartier&diff=4888Autentificare cu PPPoE pentru retelele de cartier2009-07-22T00:29:30Z<p>94.181.17.57: /* Ce este un VPN */</p>
<hr />
<div>most; http://laurastudios.com/ cialis; http://sistuhsonthemove.com from prednisone withdrawal; http://dreamteamcouch.com/ finpecia; http://mikotostar.com/ accutane ibs; http://covenantchildren.com/ accutane; http://iskconstudentassociation.com/ order propecia; http://concholionsclub.com/ levitra and grapefruit juice;<br />
<br />
== Tipuri de VPN-uri ==<br />
<br />
VPN-urile securizate folosesc tuneluri criptate pentru a avea '''confidentialitatea necesara''', '''autentificarea partilor''' si '''integritatea mesajelor'''. Atunci cand sunt corect alese, implementate si folosite, aceste tehnologii pot furniza comunicatii securizate peste retele nesigure.<br />
<br />
Tehnologii pentru VPN-uri securizate pot fi folosite pentru imbunatatirea securitatii sau ca un “patura de securitate†peste infrastructuri de retea dedicate.<br />
<br />
Printre protocoalele VPN securizate sunt urmatoarele:<br />
<br />
* Ipsec (Ip security), o parte integranta din Ipv6 (cu o implementare linux la http://www.openswan.org/)<br />
* SSL folosit pentru tunelarea intregii stive de retea, ca in OpenVPN, cu ajutorul driverelor TUN/TAP (TUN pentru simularea unei interfete Point-to-Point si TAP pentru simularea unei interfete Ethernet) – http://openvpn.net/<br />
* PPTP (point-to-point tunneling protocol), dezvoltat in colaborare de mai multe companii, printre care si Microsoft - http://www.microsoft.com/ntserver/ProductInfo/faqs/PPTPfaq.asp<br />
* PPPoE (point-to-point protocol over Ethernet) este un protocol folosit pentru incapsularea pacheteleor PPP in cadre Ethernet. Ofera functionalitati PPP standard cum ar fi autentificare, criptare si compresie.<br />
* Tinc http://www.tinc-vpn.org/ - o solutie vpn pentru UNIX care lucreaza in user-space, care poate sa transmita nu numai pachete Ipv4 sau Ipv6 prin tunelul securizat.<br />
* CIPE – Crypto IP Encapsulation - http://sites.inka.de/bigred/devel/cipe.html – solutie VPN pentru Unix care foloseste algoritmi Blowfish si IDEA cu chei de 128 de biti, foarte performant si pe sisteme cu procesor slab (486). Foloseste incapsulare UDP.<br />
* Htun - http://htun.runslinux.net/ - o solutie pentru Linux care permite crearea unui tunel VPN bidirectional peste un proxy HTTP sau doar peste portul 80, dand posibilitatea de a trece peste firewall-uri restrictive. HTun creeaza o retea IP point-to-point peste HTTP encapsuland traficul IP in cereri HTTP valide. Serverul HTun trebuie sa se afle pe o gazda cu o conexiune nerestrictionata la internet, asculta pe un port de webserver (80 sau 443) si accepta conexiunile clientilor HTun. Clientul HTun este rulat din reteaua cu restrictii, comunicand cu serverul HTun peste proxy-ul HTTP.<br />
* PPP over SSH - http://www.tldp.org/HOWTO/ppp-ssh/ - probabil cel mai simplu VPN de realizat. Cea mai mare problema a sa este se realizeaza peste un flux TCP, si atunci cand se incearca conexiuni TCP prin acel tunel pot aparea intarzieri, caderi. <br /> “Problema†se numeste TCP over TCP si este cunoscuta [http://sites.inka.de/~W1011/devel/tcp-tcp.html http://sites.inka.de/~W1011/devel/tcp-tcp.html] ; aceasta problema a dat nastere la proiectul CIPE, care rezolva aceasta problema folosind incapsularea UDP.<br />
<br />
<br />
== Cele 4 atribute cheie ale unui VPN ==<br />
<br />
Cea mai importanta parte a unei solutii VPN este securitatea. Faptul ca prin natura lor prin VPN-uri se transmit date private prin retele publice ridica dubii cu privire la securitatea acestor date si impactul pierderii datelor. O retea virtuala privata trebuie sa adreseze toate tipurile de amenintari la securitate furnizand servicii de securitate in zonele:<br />
<br />
# Autentificare (controlul accesului)<br />
# Prezentare (criptare - confidentialitate)<br />
# Transport (integritatea datelor)<br />
# Non-repudiere - acest serviciu ar oferi dovezi de nefalsificat precum ca o anumita actiune a avut loc. Non repudierea originii inseamna ca datele a fost trimise, si non repudierea primirii dovedeste ca datele au fost receptionate.<br />
<br />
Cei mai multi provideri doresc satisfacerea primului punct, autentificarea.<br />
<br />
== WISPs – Wireless Internet Service Providers ==<br />
<br />
Un provider wireless poate opera hotspoturi sau intregi infrastructuri wireless. Necesitatea securizarii buclei locale wireless (WLL – wireless local loop) este evidenta in acest caz, pentru a elimina furtul serviciului.<br />
<br />
== Solutii pentru securizarea hotspoturilor wireless si a retelelor ethernet "de cartier" ==<br />
<br />
Pentru securizarea acestor linkuri exista cateva solutii generale, in ordinea complexitatii:<br />
<br />
# '''Portaluri captive “catch and releaseâ€''', din care enumar doar doua, mai reprezentative:<br />
#* Nocat auth - http://nocat.net/downloads/NoCatAuth/ - unul dintre primele portaluri captive<br />
#* Chillispot: http://www.chillispot.org/ - un portal mai avansat si configurabil, care suporta si autentificare RADIUS.<br />
Principala problema a acestor scheme de autentificare este ca doar cer utilizatorilor sa treaca de o pagina de login (eventual criptata SSL), dupa care acelei perechi IP si MAC i se permita sa treaca prin gateway. Cu un simplu sniffer de pachete aceasta schema este exploatabila. Odata ce IP-ul si MAC-ul celorlalte calculatoare conectate sunt gasite, orice alt calculator isi poate falsifica MAC-ul si IP-ul cu cel al victimei autentificate, si poate sa treaca prin gateway. MAC-ul placii de retea (NIC – network interface card) poate fi schimbat in windows cel mai usor cu SMAC: http://www.klcconsulting.net/smac/<br />
[[Image:schimba-mac-smac.jpg|Cu SMAC este foarte usoara schimbarea Mac-ului in Windows]]<br clear="left" />''Imaginea 1: Cu SMAC este foarte usoara schimbarea MAC-ului in Windows''<br />
# '''Solutii VPN'''<nowiki>: datorita suportului pe Windows, in general, se pot alege una din solutiile VPN: PPTP, PPPoE sau IPsec.</nowiki><br />
# '''802.11x '''- http://www.ieee802.org/1/pages/802.1x.html – standardul port security pentru Ethernet. Bazat pe EAP (Extensible Authentification Protocol) - http://www.ietf.org/rfc/rfc3748.txt<br />
# '''802.11i '''– implementand complet 802.11x si folosind criptare AES, acesta pare sa fie “viitorulâ€<br />
<br />
== WIFI Security si VPN-urile ==<br />
<br />
Un alt domeniu inedit in care este folosita tehnologia VPN este securizarea retelelor wireless. Deoarece retelele wireless trimit mesajele folosind radio, sunt foarte susceptibile la ascultarea traficului. WEP a fost introdus pentru a furniza aceeasi securitate ca pe retelele traditionale cu fir (WEP = Wired Equivalent Privacy). Wep foloseste RC4 pentru confidentialitate si CRC-32 pentru integritate si foloseste in mod standard o cheie de 40 de biti, la care se concateneaza un vector de initializare (IV = Initialisation Vector) pentru a forma cheia RC4. Dar nu marimea cheii este marea limitare in WEP. Spargerea unei chei mai lungi necesita interceptarea mai multor pachete, dar sunt si atacuri active care pot stimula traficul necesar. Sunt vulnerabilitati in WEP, incluzand posibilitatea de coliziuni ale IV si pachete alterate, care nu sunt corectate de o cheie mai lunga.<br />
<br />
Exista multe instrumente gata facute si pentru Linux si pentru Windows care pot obtine chei WEP in cateva ore:<br />
<br />
Airsnort: http://airsnort.shmoo.com/<br />
<br />
Kismac: http://kismac.binaervarianz.de/<br />
<br />
Alte tooluri pentru WIFI wardriving: http://www.wardrive.net/wardriving/tools/<br />
<br />
== Point-to-Point Protocol over Ethernet (PPPoE) ==<br />
<br />
PPPoE (point-to-point protocol over Ethernet) este un protocol folosit pentru incapsularea pacheteleor PPP in cadre Ethernet. Ofera functionalitati PPP standard cum ar fi autentificare, criptare si compresie. Cu toate ca a fost introdus de catre providerii DSL, este adoptat din ce in ce mai mult de providerii WISP care vor sa-si securizeze hotspoturile si de catre retelele metropolitane bazate pe ethernet.<br />
<br />
<div style="text-align: center"><br />
<br />
{| style="margin-left: auto; margin-right: auto; page-break-inside: avoid" summary="PPPoE si stiva TCP/IP" width="339" border="1" cellpadding="2"<br />
| width="109" bgcolor="#ffeebb" |<br />
<center>''Nivelul aplicatie''</center><br />
| width="32" bgcolor="#eeeeff" |<br />
<center>FTP</center><br />
| width="46" bgcolor="#eeeeff" |<br />
<center>SMTP</center><br />
| width="44" bgcolor="#eeeeff" |<br />
<center>HTTP</center><br />
| width="20" bgcolor="#eeeeff" |<br />
<center>…</center><br />
| width="36" bgcolor="#eeeeff" |<br />
<center>DNS</center><br />
| width="23" bgcolor="#eeeeff" |<br />
<center>…</center><br />
|-<br />
| width="109" bgcolor="#ffeebb" |<br />
<center>''Nivelul transport''</center><br />
| colspan="4" width="154" bgcolor="#eeeeff" |<br />
<center>TCP</center><br />
| colspan="2" width="63" bgcolor="#eeeeff" |<br />
<center>UDP</center><br />
|-<br />
| width="109" bgcolor="#ffeebb" |<br />
<center>''Nivelul retea''</center><br />
| colspan="3" width="130" bgcolor="#eeeeff" |<br />
<center>IP</center><br />
| colspan="3" width="87" bgcolor="#eeeeff" |<br />
<center>IPv6</center><br />
|-<br />
| rowspan="3" width="109" bgcolor="#ffcc99" |<br />
<center>'''Nivelul legatura de date'''</center><br />
| colspan="6" width="222" bgcolor="#eeeeff" |<br />
<center>PPP</center><br />
|-<br />
| colspan="6" width="222" bgcolor="#9999ff" |<br />
<center>PPPoE</center><br />
|-<br />
| colspan="6" width="222" bgcolor="#eeeeee" |<br />
<center>Ethernet / MAC</center><br />
|}<br />
<br />
'''PPPoE si stiva TCP/IP'''<br />
<br />
</div><br />
<br />
PPPoE este un protocol de tunelare care creeaza un nivel IP peste o conexiune intre doua porturi Ethernet, dar cu caracteristicile unei legaturi PPP, deci este folosit pentru a “suna†la alt calculator aflat in aceeasi retea Ethernet si a face o conexiune punct la punct cu el, care este folosita pentru a transmite pachete IP.<br />
<br />
Softul clasic PPP foloseste o linie seriala, iar cu ajutorul PPPoE se poate folosi PPP pe o legatura orientata pe pachet cum este Ethernetul, pentru a pune la dispozitie o conexiune clasica cu login si parola pentru conexiunea la Internet. In plus, adresa IP la capatul celalalt al legaturii este asignata doar atunci cand conexiunea PPPoE este deschisa, permitand refolosirea dinamica a IP-urilor (o cerinta puternica a RIPE/ARIN).<br />
<br />
PPPoE a fost creat de UUNET, Redback Networks si RouterWare, si protocolul este specificat in RFC 2516: http://www.ietf.org/rfc/rfc2516.txt.<br />
<br />
=== Fazele dial-ului PPPoE: ===<br />
<br />
# '''PADI = PPPoE Active Discovery Initiation.'''<br />
Clientul trebuie sa afle adresa Ethernet (MAC) a terminatorului PPP, si trimite un pachet pe adresa Ethernet de broadcast (ff:ff:ff:ff:ff:ff). Acest pachet contine adresa MAC a calculatorului care a trimis pachetul.<br />
Analiza cu tcpdump:<br />
<font face="Courier, monospace"><font size="2"><nowiki>#tcpdump -ni eth0 -s 0 -XX -v -v not arp and not tcp and not udp </nowiki></font></font><br />
<font face="Courier, monospace"><font size="2">14:33:30.870230 PPPoE PADI [Service-Name] [Host-Uniq 0xEF760000]</font></font><br />
Mesajul hexa:<br />
<font color="#800000">ffff ffff ffff</font> <font color="#000080">000f eaa0 a8fd</font> 8863 <font color="#5c8526">1109</font><br />
<br />
<font color="#800000">[ broadcast ]</font> <font color="#000080">[mac trimitator]</font> <font color="#5c8526">[Version 1,Type 1,Code 09(PADI)]</font><br />
0000 000c 0101 0000 0103 0004 <font color="#663300">ef76 0000</font><br />
<font color="#663300">[host-uniq]</font><br />
Codul trimis pentru PPPoE-Discovery poate fi:<br />
<br />
<br />
0x00 - session data (in timpul sesiunii este mereu 0 codul)<br />
0x07 - PADO (PPPoE Active Discovery Offer)<br />
0x09 - PADI (PPPoE Active Discovery Initiation)<br />
0x19 - PADR (PPPoE Active Discovery Request)<br />
0x65 - PADS (PPPoE Active Discovery Session-confirmation)<br />
0xa7 - PADT (PPPoE Active Discovery Termination)<br />
Pachetul PADI poate fi primit de mai multe PoP-uri, ele raspunzand in functie de service-name si a access-concentrator name, daca se furnizeaza. Din acest punct de vedere este asemanator cu protocolul DHCP: este simplu sa se creeze servere rogue care sa fure parolele. Pentru a se elimina acest tip de atac trebuie activate autentificarea CHAP, care nu transmite parolele catre server, ci doar un hash bazat pe parola si un challenge aleator trimis de server. In felul acesta se evita si aflarea parolelor prin ascultarea liniei (sniffing) si se rezolva si problema serverelor rogue.<br />
# '''PADO = PPPoE Active Discovery Offer'''<br />
Odata ce clientul a trimis pachetul PADI, PoP-ul raspunde cu un pachet PADO, folosind adresa MAC primita in pachetul PADI. Pachetul PADO contine adresa MAC a PoP-ului, numele concentratorului, si numele serviciului. Daca raspund mai multe PoP-uri cu pachete PADO, clientul selecteaza PoP-ul cu ajutorul numelui sau serviciului. Pachetul capturat cu tcpdump arata astfel:<br />
<br />
<br />
14:46:24.029590 PPPoE PADO<br />
[AC-Name "meseriasii"] [Service-Name "meseriasii"] [AC-Cookie<br />
0xF0345DC1094CCBE6A019DA8A4622E76232530000] [Host-Uniq 0xC6040000]<br />
0x0000: <font color="#800000">000f eaa0 a8fd</font> <font color="#000080">0008 c709 6b56</font> 8863 <font color="#355e00">1107</font> ..........kV.c..<br />
<font color="#800000">[ MAC client ]</font> <font color="#000080">[ mac PoP ]</font> <font color="#355e00">[0x07=PADO]</font><br />
0x0010: 0000 003c 0102 000a 6d65 7365 7269 6173 ...&lt;....meserias<br />
0x0020: 6969 0101 000a 6d65 7365 7269 6173 6969 ii....meseriasii<br />
0x0030: 0104 0014 f034 5dc1 094c cbe6 a019 da8a .....4]..L......<br />
0x0040: 4622 e762 3253 0000 0103 0004 c604 0000 F".b2S..........<br />
<br />
# '''PADR = PPPoE Active Discovery Request'''<br />
Clientul a aflat deja adresa/adresele mac ale PoP-urilor. Computerul trimite pachetul PADR la PoP-ul la care vrea sa se conecteze.<br />
# '''PADS = PPPoE Active Discovery Session-confirmation'''<br />
Pachetul PADS este raspunsul trimis de PoP la pachetul PADR trimis de client, prin care ii trimite si un identificator de sesiune (SessionID). Conexiunea cu PoP-ul este stabilita.<br />
# '''PADT = PPPoE Active Discovery Termination'''<br />
Acest pachet inchide conexiunea PPPoE. Poate fi trimis ori de client, ori de server.<br />
<br />
<br />
<br />
== Solutia PPPoE bazata pe Linux, Roaring Penguin PPPoE pppd, Freeradius mysql ==<br />
<br />
# === Hardware ===<br />
Linux este un sistem scalabil si performant. Dar impachetarea PPPoE necesita putere procesor iar pe masura ce se deschid conexiuni simultan, daemonul pppd va consuma inevitabil memorie. Din experienta practica si benchmarkuri sintetice am observat ca exista o relatie liniara intre numarul de clienti conectati simultan pe de o parte, si pe de alta parte memoria si procesorul ocupate.<br />
Consensul pare sa fie ca fiecare client conectat va consuma aproximativ 2Mhz pe un Intel Pentium-III si 2Mbytes de memorie. Pe un sistem Pentium-II la 266 Mhz, se atinge maximul de incarcare cu 128 de clienti.<br />
Pentru testul de acum am folosit un Compaq Proliant Pentium II dual 400MHz, cu 512Mbytes RAM. Sistemele multiprocesor sunt mai utile pentru furnizarea acestui serviciu din cauza latentelor de sistem mai mici.<br />
# === Software necesar; instalare ===<br />
Orice distributie Linux poate fi folosita pentru a construi un server PPPoE. Este recomandat sa se foloseasca un kernel din generatia 2.6, cu o revizie cat mai recenta (peste 2.8.1). Distributiile mai vechi nu contin pachetul PPP care suporta autentificare si accounting prin RADIUS.<br />
Pentru testul nostru am folosit un sistem bazat pe debian unstable, kernel 2.6.11-1-686-smp. Acesta are suportul PPPoE compilat in kernel, deci nu trebuie recompilat kernelul, dar trebuie recompilat pachetul rp-pppoe pentru a putea folosi suportul in kernel.<br />
## '''PPPd''' - [http://www.samba.org/ppp <span>http://www.samba.org/ppp</span>] – Orice versiune mai noua de 2.4 are suport Radius. Pe site versiunea oficiala este 2.4.3, dar in debian unstable este impachetata o versiune beta, mai noua, dar complet functionala, versiunea 2.4.4b1-1. Se instaleaza folosind comanda <font size="2"><font face="Courier, monospace">“apt-get install pppâ€</font></font><br />
## [http://www.roaringpenguin.com/penguin/open_source_rp-pppoe.php '''RP-PPPoE''' (Implementare linux a pppoe de catre Roaring Penguin)] [roaringpenguin.com]<br />
Autorii sustin in documentatie ca serverul PPPoE din pachetul rp-pppoe este doar pentru testari si nu este gata pentru productie “''Note that pppoe-server is meant mainly for testing PPPoE clients. It is not a high-performance server meant for production use.â€, ''dar el este foarte solid si performant. Nu va asteptati la suport tehnic pentru aplicatia pppoe-server, pentru ca exista un server comercial bazat pe RP-PPPoE, [http://www.finepointnetworks.com/products/servpoet/index.html ServPoET BMS], care incepe de la preturi de $10.000, server care se poate crea si cu produse open-source si care poate fi mai customizabil decat solutia pre-packaged ServPoEt.<br />
Pe debian se instaleaza folosind comanda <font size="2"><font face="Courier, monospace">“apt-get install pppoeâ€</font></font><br />
Pachetul trebuie recompilat pentru a activa suportul de kernel-mode in PPPoE. Acest lucru aduce un plus de performanta de 20-30 de ori. Pentru aceasta, se aduce [http://www.roaringpenguin.com/penguin/open_source_rp-pppoe.php sursa cea mai noua de PPPoE], sau se ia pachetul deb-src si se recompileaza. Odata dezarhivata arhiva, se intra in directorul “src†si se executa comanda “./configure –enable-plugin=/usr/include/pppd/â€. La sfarsit trebuie sa afiseze:<br />
<font face="Courier, monospace"><font size="2"> On this platform, the following targets will be built:<br /> pppoe pppoe-server pppoe-sniff pppoe-relay '''rp-pppoe.so'''<br /> Type 'make' to compile the software.</font></font><br /><br />
Apoi cu “dpkg-buildpackage†sau cu clasicul “make; make install†slackware-ist, se instaleaza serverul PPPoE.<br />
## [ftp://ftp.cityline.net/pub/radiusclient/ Radiusclient] - http://freshmeat.net/projects/radiusclient/<br />
Biblioteca de sistem care permite mai multor aplicatii autentificarea la servere Radius. Pe debian se instaleaza folosind comanda <font size="2"><font face="Courier, monospace">“apt-get install radiusclient1â€</font></font><br />
## Freeradius - http://www.freeradius.org/ - este succesorul serverului open source [http://www.radius.cistron.nl/ Cistron Radius]. Exista multe servere Radius open source, si debian mai include pachete si pentru xtradius si yardradius. Freeradius este rapid, flexibil, configurabil si suporta multe protocoale de autentificare. Il instalam impreuna cu modulul de mysql.<br />
“apt-get install freeradius mysql-server freeradius-mysqlâ€&gt;<br />
Cele mai importante rfc-uri care descriu protocolul RADIUS sunt<br />
<div style="margin-left: 20pt">http://www.ietf.org/rfc/rfc2865.txt - Descrierea protocolului RADIUS - Remote Authentication Dial In User Service (RADIUS)<br />http://www.ietf.org/rfc/rfc2866.txt - RADIUS Accounting</div><br />
## Dialupadmin - http://www.freeradius.org/dialupadmin.html<br />
Interfata web pentru administrarea conturilor Radius. Are suport SQL sau LDAP. O sa folosim modulul SQL. Depedintele sunt: apache (este nevoie de un server web), mysql, php, php-mysql.<br />
“<font face="Courier, monospace"><font size="2">apt-get install freeradius-dialupadmin apache2 php-mysqlâ€</font></font><br />
# === Configurarea pachetelor: pppd, pppoe-server, radiusclient, freeradius ===<br />
## '''Configurare pppd'''<br />
### Pentru activarea modulul radius se aduga urmatoarele linii in “/etc/ppp/optionsâ€:<br />
plugin radius.so <br />plugin radattr.so<br />
### Restul fisierului /etc/ppp/options:<br />
ms-dns 192.162.16.21 <br /> asyncmap 0<br /> auth<br /> crtscts<br /> lock<br /> modem<br /> mru 1492<br /> mtu 1492<br /> proxyarp<br /> lcp-echo-interval 60<br /> lcp-echo-failure 5<br /><br />
### In fisierul “/etc/ppp/chap-secrets†trebuie sa fie o linie ca urmatoarea:<br />
<nowiki>* * "" *</nowiki><br />
## '''Configurare pppoe-server'''<br />
Fisierul “/etc/ppp/pppoe-server/options†trebuie sa arate asa:<br />
require-chap<br /> auth<br /> lcp-echo-interval 60<br /> lcp-echo-failure 5<br /> #aceasta optiune se activeaza pentru debugging<br /> #debug<br /><br />
pppoe-server il puteti porni din linia de comanda cu parametrii urmatori:<br />
pppoe-server -k -T 60 -I eth0 -L 192.168.0.1 -N 80 -C retea -S retea -R 192.168.0.100<br />
Aceasta comanda o puteti adauga in rc.local (pe sisteme bsd-like), pe debian trebuind sa va faceti un script in init.d dupa sablonul din skeleton. Solutia mea a fost sa-l pun in [etc_init_d_networking fisierul networking din init.d], dar sunteti liberi sa faceti dupa cum vi se pare mai elegant.<br />
Parametrul -k apare numai daca ati compilat pppoe-server cu suport de kernel-mode.<br />
## '''Configurare radiusclient'''<br />
Trebuie setat serverul si “secretul†necesar conectarii la freeradius. Serverul este localhost. Secretul trebuie sa fie aceelasi ca in si cel setat in freeradius, in fisierul /etc/freeradius/clients.conf.<br />
echo "localhost parolaradius" &gt;&gt; /etc/radiusclient/servers<br />
## '''Configurare Freeradius'''<br />
### Se creeaza baza de date mysql:<br />
mysqladmin -u root -p create radius<br /> mysql -u root -p<br />''GRANT ALL PRIVILEGES ON radius.* to 'dialup_admin@localhost' IDENTIFIED BY 'parola_db_radius';<br /> FLUSH PRIVILEGES;<br /> QUIT;<br />'' mysql -u radius -p &lt; usr/share/doc/freeradius/examples/db_mysql.sql<br /><br />
### Configurarea accesului la serverul freeradius:<br />
In fisierul /etc/freeradius/clients.conf, se editeaza atributul “secret = parolaradiusâ€. Este aceeasi parola care se introduce in fisierul de configurare al radiusclient.<br />
### Activarea verificarii sesiunilor simultane (Simultaneuous Use checking)<br />
In fisierul “/etc/freeradius/radiusd.conf†in blocul “session†se comenteaza linia “radutmp†si se decomenteaza linia “sqlâ€. Modulul de sesiune sql este mult mai rapid decat cel radutmp.<br />
Simultaneus use checking:<br /> # Session database, used for checking Simultaneous-Use.<br /> # Either the radutmp<br /> # or rlm_sql module can handle this.<br /> # The rlm_sql module is *much* faster<br /> session {<br /> #radutmp<br /><br /> #<br /> # See "Simultaneous Use Checking Querie" in sql.conf<br /> sql<br /> }<br /><br />
In fisierul “/etc/freeradius/sql.conf†se debifeaza linia "simul_count_query", ca mai jos:<br />
# Uncomment simul_count_query to enable<br /> # simultaneous use checking<br /> simul_count_query = " SELECT COUNT(*) FROM ${acct_table1} WHERE UserName='%{SQL-User-Name}' AND AcctStopTime = 0"<br /><br />
### /etc/freeradius/naslist<br />
localhost local portslave<br />
### Activarea SQL in radiusd.conf:<br />
<div class="cod"> authorize { <div style="margin-left: 20pt"> preprocess<br /> chap<br /> mschap<br /> eap<br /> sql<br /> #files (dezactivat)<br /></div> }<br /> accounting { <div style="margin-left: 20pt"> detail<br /> sql<br /> #radutmp - dezactivat<br /></div> } <br /> session { <div style="margin-left: 20pt"> sql<br /> #radutmp </div> } <br /> post-auth { <div style="margin-left: 20pt"> sql </div> } </div><br />
In plus, trebuie setat userul si parola MySQL in sql.conf, conform celei setate la punctul a).<br />
## '''Configurare freeradius-dialupadmin'''<br />
### Crearea bazei de date dialupadmin<br />
In directorul /usr/share/freeradius-dialupadmin/sql/ trebuie editate fisierele userinfo.sql si badusers.sql, pentru ca au sintaxa SQL nesuportata de versiunile mai noi de MySQL, care a devenit mai “ascultator†de standarde in ultimele versiuni. Trebuie stersa valoarea “DEFAULT '0'†din aceste fisiere, pentru ca intra conflict cu “auto_incrementâ€.<br />
mysql -u radius -p &lt; /usr/share/freeradius-dialupadmin/*.sql<br />
### Pentru a fi compatibil au auth-chap din pppd, trebuie setat ca dialupadmin sa scrie in clar parolele in baza de date, asa ca in fisierul /usr/share/freeradius-dialupadmin/conf/admin.conf, se pune atributul “general_encryption_method: clearâ€.<br />
### Naslist.conf – nu avem Network Access Servers, pentru ca daca am avea Cisco, nu am mai citi acest tutorial, deci in fisierul “/usr/share/freeradius-dialupadmin/conf/naslist.conf†punem:<br />
nas1_name: locahost<br /> nas1_model: freeradius portslave<br /> nas1_ip: 127.0.0.1<br /> nas1_finger: database <br /><br />
### Simultaneous-use pentru dialupadmin:<br />
In fisierul /usr/share/freeradius-dialupadmin/conf/user_edit.attrs se decomenteaza linia “Simultaneous-Useâ€. In acest fel o sa apara la crearea grupurilor si a utilizatorilor optiunea "Simultaneous-Use"<br />
### Setata userul si parola bazei de date in admin.conf conform celei create de la punctul 3.4.a)<br />
### Creat virtual-hostul in apache2 (/etc/apache2/conf/sites-enabled/) &amp;&amp; invoke-rc.d apache2 reload<br />
## '''Testarea configuratiei ''' [ http://localhost/dialupadmin/ ]. Daca totul a decurs ok, trebuie sa va intalniti cu urmatoarea pagina la crearea utilizatorilor:<br />
### Adaugarea de utilizatori:<br />
[[Image:dialupadmin-adauga-utilizator.png|Screenshot Dialupadmin - Adauga utilizatori]]<br clear="left" />''Imaginea 2: Dialupadmin - Adauga utilizator''<br />
### <div style="margin-bottom: 0cm; page-break-before: always"> Vizualizarea utilizatorilor online:</div><br />
[[Image:freeradius-online-users.png|Freeradius Dialupadmin - online users]]<br clear="left" />''Imaginea 3: Dialupadmin - Online Users''<br />
### Vizualizarea statisticilor<br />
[[Image:freeradius-access-statistics.png|Freeradius Dialupadmin : access statistics]]<br clear="left" />''Imaginea 4: Dialupadmin - Access statistics''<br />
### Analiza accesului unui anumit utilizator<br />
[[Image:freeradius-user-analysis.png|Freeradius dialupadmin - user analysis]]<br clear="left" />''Imaginea 5: Dialupadmin - User Analysis''<br />
<br />
== Suportul in Windows al PPPoE ==<br />
<br />
Este o cerinta de baza a unui serviciu de autentificare a utilizatorilor sa aiba suport in sistemul lor de operare, si cu atat mai bine cu daca este daca suportul este built-in. In cazul PPPoE, Windows XP il suporta nativ si are chiar si un wizard foarte bine pus la punct pentru conectarea pe PPPoE. Pentru celelalte variante de Windows, exista mai multe solutii:<br />
<br />
# [http://www.microsoft.com/windowsxp/using/networking/learnmore/ppoe.mspx Clientul standard din Windows XP]. Pentru versiunile anterioare se poate folosi versiunea gratuita de raspppoe.<br />
# Raspppoe: http://www.raspppoe.com/<br />
# WinPoET de la FinePoint Networks: http://www.finepointnetworks.com/products/winpoet/<br />
<br />
Si pentru Raspppoe, si pentru WinPoET exista SDK-uri contra cost, cu care se poate customiza si branda clientul PPPoE.<br />
<br />
== Alternativa: PPTP, Freeradius si Mysql ==<br />
<br />
=== Ce este PPTP? ===<br />
<br />
PPTP este acronimul a “Point to Point Tuneling Protocolâ€. A fost dezvoltat de un consortiu de companii, printre care si Microsoft si este folosit pentru a stabilit tunele VPN peste Internet. Acesta permite utilizatorilor sa-si acceseze de la distanta, in siguranta, reteaua firmei, de oriunde de pe Internet.<br />
<br />
PPTP foloseste modelul client-server pentru a stabili conexiunile VPN. Sistemele de operare Windows vin cu un client PPTP incepand de la versiunea Windows 98, ceea ce pune solutia PPTP un pic in fata fata de PPPoE, care are suport nativ doar in Windows XP.<br />
<br />
PPTP poate fi folosit pentru a tunela protocoalele IP, IPX si NetBEUI. Tunelul este o versiune modificata a GRE, iar mai multe sesiuni pot fi multiplexate intr-un singur tunel. In paralel se opereaza si o conexiune TCP, pentru stabilirea, controlul, si oprirea sesiunilor si a tunelului.<br />
<br />
Bruce Shneier a scris un articol care demoleaza arhitectura de securitate a implementarii PPTP-ului, si poate fi gasit la http://www.schneier.com/pptp-faq.html. Cu toate acestea, acest protocol este folosit in continuare din cauza suportului in sistemele Windows client si a relativei usurinte a setarii serverului.<br />
<br />
=== PPTP pe Linux ===<br />
<br />
Exista o solutie foarte matura pentru PPTP pentru Linux, care ruleaza impreuna cu pppd in userspace http://www.poptop.org/ , si se integreaza foarte usor cu solutia FREERADIUS propusa mai sus, in mod analog cu PPPoE.<br />
<br />
Nu exista optiunea de a rula in kernel-mode si de aceea, incarcarea pe sistemul de test a fost de 30% din procesor pentru o singura conexiune, la trafic de 15Mbps, chiar cu criptarea dezactivata pe cand pppoe in kernel-mode a reusit sa “duca†in masina de test 20 conexiuni simultane la incarcare a procesorului de 1-2%.<br />
<br />
== Limitarea bandei in conexiunile ppp ==<br />
<br />
O intrebare des intalnita este: '''Cum limitez banda conexiunilor ppp in linux?''' Problema vine de la faptul ca atunci cand utilizatorul se conecteza, se ridica o interfata ppp de genul:<br />
<br />
$ ip address show<br /> 3708: ppp12: &lt;POINTOPOINT,MULTICAST,NOARP,UP&gt; mtu 1480 qdisc htb qlen 3<br />    link/ppp    inet 192.168.0.1 peer 192.168.0.115 scope global ppp12<br />
<br />
La deconectare, interfata ppp se sterge din sistem. Utilitarul tc, spre deosebire de iptables, nu poate "opera" asupra unor deviceuri inexistente, si sa "astepte" ca acele device-uri sa apara in sistem. Solutiile acceptate pana acum sunt:<br />
<br />
# [http://www.linuximq.net/ IMQ] - Intermediate Queueing Device - este o solutie destul de flexibila, pentru ca permite sharing (imprumut de banda) intre utilizatori. Traficul se directioneaza in felul urmator de la interfata ppp* la interfata imq, unde se poate face egress shaping:<br />
modprobe ipt_IMQ<br /> modprobe imq<br /> /sbin/ip link set imq1 up <br /> /usr/sbin/iptables -t mangle -A POSTROUTING -o ppp0 -j IMQ --todev 1<br /> /usr/sbin/iptables -t mangle -A POSTROUTING -o ppp1 -j IMQ --todev 1<br /><br />
Problema este ca pentru a avea suport imq trebuie recompilat kernelul si iptables, ceea ce in unele medii, ori nu se poate, ori nu merita efortul.<br />
# Optiunea "no-hassle" este crearea de discipline separate pentru fiecare interfata ppp. Folosim scripturile /etc/ppp/ip-up si /etc/ppp/ip-down. Aceste scripturi sunt apelate de pppd la stabilirea conexiunii si la oprirea ei. Variabilele de care avem nevoie sunt:<br />
$PPP_IFACE = Numele interfetei - exemplu: ppp12<br /> $PPP_LOCAL = Adresa locala (a concentratorului pppoe) - exemplu: 192.168.0.1<br /> $PPP_REMOTE = Adresa peer-ului (a utilizatorului) - exemplu: 192.168.0.115<br /><br />
Configuratia cea mai simpla pentru exemplul nostru este:<br />
In fisierul ip-up se introduc urmatoarele linii, la sfarsit:<br /> TC="/sbin/tc"<br /> IT="/sbin/iptables"<br /> INET_IP="1.2.3.4" #(ip-ul routabil, spre internet)<br /> INET_IFACE="eth0"<br /> DOWNLOAD_EXTERN=128<br /> # root qdisc htb<br /> $TC qdisc add dev $PPP_IFACE root handle 1: htb<br /> echo "Download extern: $DOWNLOAD_EXTERN"<br /> $TC class add dev $PPP_IFACE parent 1: classid 1:2 htb rate ${DOWNLOAD_EXTERN}kbit<br /> # daca am marcat cu 1 in iptables traficul "extern"<br /> #$TC filter add dev $PPP_IFACE protocol ip parent 1: prio 4 handle 1 fw flowid 1:2<br /> echo "Creez regulile iptables pentru $PPP_REMOTE" <br /> $IT -t nat -A POSTROUTING -o $INET_IFACE -s $PPP_REMOTE -j SNAT --to-source $INET_IP<br /> $IT -A FORWARD -i $PPP_IFACE -s $PPP_REMOTE -j ACCEPT<br /> $IT -A FORWARD -o $PPP_IFACE -d $PPP_REMOTE -j ACCEPT<br /><br />
In mod similar, trebuie sa stergem regulile iptables in ip-down. Clasele htb nu trebuie sterse, pentru ca dispar automat odata cu interfata.<br />
TC="/sbin/tc"<br /> IT="/sbin/iptables"<br /> INET_IP="1.2.3.4" #(ip-ul routabil, spre internet)<br /> INET_IFACE="eth0"<br /> echo "Sterg regulile iptables pentru $PPP_REMOTE"<br /> $IT -t nat -D POSTROUTING -o $INET_IFACE -s $PPP_REMOTE -j SNAT --to-source $INET_IP<br /> $IT -D FORWARD -i $PPP_IFACE -s $PPP_REMOTE -j ACCEPT<br /> $IT -D FORWARD -o $PPP_IFACE -d $PPP_REMOTE -j ACCEPT<br /><br />
<br />
Pentru debugging-ul regulilor din iptables creati fisierul ppp-ipupdown.log, unde va fi redirectat standard output-ul si stderr al scripturilor (comenzile cu echo si erorile).<br />
<br />
# touch /var/log/ppp-ipupdown.log<br />
<br />
=== Referinte: ===<br />
<br />
# [http://www.freeantennas.com/PPPoE-Server-HOWTO.html Howto PPPoE Server], de Michael J. Erskin, un howto foarte recent, orientat mai mult pe Opensuse 10, dar cu informatii foarte utile.<br />
# [http://wiki.freeradius.org/index.php/Rlm_sql Documentatia Rlm_sql pentru Freeradius] - Daca va intrebati ce inseamna =,:=,&lt;=,=~ si alte semne de-ale lui Dumnezeu, aveti aici lista operatorilor si semnificatia lor. Atentie: la Simultaneous-Use trebuie sa folositi semnul ":=".<br />
# [http://www.frontios.com/freeradius.html Un tutorial Freeradius si Mysql], denumit si "SB's very rough notes to FreeRadius and MySQL".<br />
# [http://poptop.sourceforge.net/dox/radius_mysql.html Tutorial PPTP MPPE RADIUS MySQL] [poptop.sourceforge.net] - de interes pentru noi ar fi ca Ubuntu 5.10 contine suport MPPE in kernel, dar debian inca nu. Deci pe debian pregatiti-va sa recompilati kernelul pentru suport mppe.<br />
# [http://www.freeradius.org/radiusd/dialup_admin/doc/HOWTO Documentatia online Dialupadmin] - pare outdated, dar este foarte utila, daca nu vreti sa cititi sursele php.<br />
# [http://www.freeradius.org/faq/ Freeradius faq] - in caz ca aveti probleme cu freeradius, este posibil ca raspunsul sa se afle aici. Cel putin pe mine m-a ajutat la rezolvarea problemei cu ''Simultaneous-Use''.<br />
# [http://www.dmasoftlab.com/radman Radman] - O aplicatie pentru administrarea utilizatorilor pentru Freeradius, suspect de asemanatoare cu freeradius-dialupadmin. $59 licenta.<br />
# [http://www.mikrotik.com/ Mikrotik.com] - Solutie facuta de oameni mult mai destepti ca mine si ca voi, daca vreti totul de-a gata (mai putin serverul radius), la preturi acceptabile (fata de ServPOeET BMS, fata de care totusi Mikrotik sunt in cu totul alt segment de piata).<br />
# [http://linux.climb.ro/pptp-mystatus/index.php PPTP-mystatus] - Daca nu reusiti sa integrati poptop cu radius, si ramaneti la editarea fisierului chap-secrets, o sa va ajute acest script care va arata userii online. Realizat de [mailto:lucian(at)climb.ro Lucian Gutu].<br />
<br />
----<br />
<br />
=== Contact &amp; feedback ===<br />
<br />
Constantin Gavrilescu - [mailto:costin@gmx.net costin@gmx.net]</div>94.181.17.57