Autentificare cu PPPoE pentru retelele de cartier: Diferență între versiuni

De la Wiki.lug.ro
Salt la: navigare, căutare
m (Solutia PPPoE bazata pe Linux, Roaring Penguin PPPoE pppd, Freeradius mysql: cleanup a bit)
m (Ce este PPTP?)
 
(Nu s-au afișat 2 versiuni intermediare efectuate de același utilizator)
Linia 31: Linia 31:
 
Cei mai multi provideri doresc satisfacerea primului punct, autentificarea.
 
Cei mai multi provideri doresc satisfacerea primului punct, autentificarea.
  
== WISPs – Wireless Internet Service Providers ==
+
== WISPs - Wireless Internet Service Providers ==
  
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.
+
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.
  
 
== Solutii pentru securizarea hotspoturilor wireless si a retelelor ethernet "de cartier" ==
 
== Solutii pentru securizarea hotspoturilor wireless si a retelelor ethernet "de cartier" ==
Linia 172: Linia 172:
 
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.
 
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.
 
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.
 
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.
## '''PPPd''' - [http://www.samba.org/ppp ppp] - 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>
+
## '''PPPd''' - [http://www.samba.org/ppp ppp] - 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 <tt>apt-get install ppp</tt>
## [http://www.roaringpenguin.com/penguin/open_source_rp-pppoe.php  '''RP-PPPoE''' (Implementare linux a pppoe de catre [http://roaringpenguin.com/ Roaring Penguin])
+
## [http://www.roaringpenguin.com/penguin/open_source_rp-pppoe.php  '''RP-PPPoE''' (Implementare linux a pppoe de catre Roaring Penguin])
 
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.
 
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.
 
Pe debian se instaleaza folosind comanda <font size="2"><font face="Courier, monospace">“apt-get install pppoe”</font></font>
 
Pe debian se instaleaza folosind comanda <font size="2"><font face="Courier, monospace">“apt-get install pppoe”</font></font>
Linia 256: Linia 256:
 
=== Ce este PPTP? ===
 
=== Ce este PPTP? ===
  
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.
+
PPTP este acronimul de la "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.
  
 
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.
 
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.

Versiunea curentă din 21 septembrie 2010 13:12

Ce este un VPN

Un VPN (Virtual Private Network) este o retea virtuala de comunicatii privata folosita de obicei intr-o companie, sau de catre diferite companii sau organizatii, pentru a comunica intr-o retea publica. Traficul VPN poate fi transmis pe infrastructura publica (ex: pe Intenet), folosind protocoale standard (si deseori nesigure), sau peste reteaua unui provider de servicii de telecomunicatii care furnizeaza servicii VPN bine definite de SLA (Service Level Agreement) intre consumatorul VPN si furnizorul de servicii VPN.

Tipuri de VPN-uri

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.

Tehnologii pentru VPN-uri securizate pot fi folosite pentru imbunatatirea securitatii sau ca o "patura de securitate" peste infrastructuri de retea dedicate.

Printre protocoalele VPN securizate sunt urmatoarele:

  • Ipsec (Ip security), o parte integranta din Ipv6 (cu o implementare linux la http://www.openswan.org/)
  • 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)
  • 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
  • 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.
  • Tinc - o solutie vpn pentru UNIX care lucreaza in user-space, care poate sa transmita nu numai pachete Ipv4 sau Ipv6 prin tunelul securizat.
  • CIPE - Crypto IP Encapsulation - 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.
  • Htun - 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.
  • PPP over 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. "Problema" se numeste TCP over TCP si este cunoscuta [1] ; aceasta problema a dat nastere la proiectul CIPE, care rezolva aceasta problema folosind incapsularea UDP.

Cele 4 atribute cheie ale unui VPN

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:

  1. Autentificare (controlul accesului)
  2. Prezentare (criptare - confidentialitate)
  3. Transport (integritatea datelor)
  4. 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.

Cei mai multi provideri doresc satisfacerea primului punct, autentificarea.

WISPs - Wireless Internet Service Providers

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.

Solutii pentru securizarea hotspoturilor wireless si a retelelor ethernet "de cartier"

Pentru securizarea acestor linkuri exista cateva solutii generale, in ordinea complexitatii:

  1. Portaluri captive "catch and release", din care enumar doar doua, mai reprezentative:
    • Nocat auth - unul dintre primele portaluri captive
    • Chillispot - un portal mai avansat si configurabil, care suporta si autentificare RADIUS.

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. Cu SMAC este foarte usoara schimbarea Mac-ului in Windows.

  1. Solutii VPN: datorita suportului pe Windows, in general, se pot alege una din solutiile VPN: PPTP, PPPoE sau IPsec.
  2. 802.11x - standardul port security pentru Ethernet. Bazat pe EAP (Extensible Authentification Protocol)
  3. 802.11i - implementand complet 802.11x si folosind criptare AES, acesta pare sa fie "viitorul"

WIFI Security si VPN-urile

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.

Exista multe instrumente gata facute si pentru Linux si pentru Windows care pot obtine chei WEP in cateva ore:

Airsnort: http://airsnort.shmoo.com/

Kismac: http://kismac.binaervarianz.de/

Alte tooluri pentru WIFI wardriving: http://www.wardrive.net/wardriving/tools/

Point-to-Point Protocol over Ethernet (PPPoE)

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.

Nivelul aplicatie
FTP
SMTP
HTTP
…
DNS
…
Nivelul transport
TCP
UDP
Nivelul retea
IP
IPv6
Nivelul legatura de date
PPP
PPPoE
Ethernet / MAC

PPPoE si stiva TCP/IP

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.

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).

PPPoE a fost creat de UUNET, Redback Networks si RouterWare, si protocolul este specificat in RFC 2516: http://www.ietf.org/rfc/rfc2516.txt.

Fazele dial-ului PPPoE:

  1. PADI = PPPoE Active Discovery Initiation.

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. Analiza cu tcpdump: #tcpdump -ni eth0 -s 0 -XX -v -v not arp and not tcp and not udp 14:33:30.870230 PPPoE PADI [Service-Name] [Host-Uniq 0xEF760000] Mesajul hexa:

ffff ffff ffff 000f eaa0 a8fd 8863 1109

[ broadcast ]   [mac trimitator] [Version 1,Type 1,Code 09(PADI)]
0000 000c 0101 0000 0103 0004 ef76 0000
                              [host-uniq]

Codul trimis pentru PPPoE-Discovery poate fi:


0x00 - session data (in timpul sesiunii este mereu 0 codul)
0x07 - PADO (PPPoE Active Discovery Offer)
0x09 - PADI (PPPoE Active Discovery Initiation)
0x19 - PADR (PPPoE Active Discovery Request)
0x65 - PADS (PPPoE Active Discovery Session-confirmation)
0xa7 - PADT (PPPoE Active Discovery Termination)

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.

  1. PADO = PPPoE Active Discovery Offer

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:


14:46:24.029590 PPPoE PADO
[AC-Name "meseriasii"] [Service-Name "meseriasii"] [AC-Cookie
0xF0345DC1094CCBE6A019DA8A4622E76232530000] [Host-Uniq 0xC6040000]
0x0000: 000f eaa0 a8fd 0008 c709 6b56 8863 1107 ..........kV.c..
       [ MAC client ]   [ mac PoP ]       [0x07=PADO]
0x0010: 0000 003c 0102 000a 6d65 7365 7269 6173 ...<....meserias
0x0020: 6969 0101 000a 6d65 7365 7269 6173 6969 ii....meseriasii
0x0030: 0104 0014 f034 5dc1 094c cbe6 a019 da8a .....4]..L......
0x0040: 4622 e762 3253 0000 0103 0004 c604 0000 F".b2S..........

  1. PADR = PPPoE Active Discovery Request

Clientul a aflat deja adresa/adresele mac ale PoP-urilor. Computerul trimite pachetul PADR la PoP-ul la care vrea sa se conecteze.

  1. PADS = PPPoE Active Discovery Session-confirmation

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.

  1. PADT = PPPoE Active Discovery Termination

Acest pachet inchide conexiunea PPPoE. Poate fi trimis ori de client, ori de server.


Solutia PPPoE bazata pe Linux, Roaring Penguin PPPoE pppd, Freeradius mysql

  1. === Hardware ===

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

  1. === Software necesar; instalare ===

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

    1. PPPd - ppp - 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 apt-get install ppp
    2. RP-PPPoE (Implementare linux a pppoe de catre Roaring Penguin)

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, 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. Pe debian se instaleaza folosind comanda “apt-get install pppoe” 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 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: On this platform, the following targets will be built:
pppoe pppoe-server pppoe-sniff pppoe-relay rp-pppoe.so
Type 'make' to compile the software.

Apoi cu "dpkg-buildpackage" (pe Debian) sau cu clasicul "make; make install" slackware-ist, se instaleaza serverul PPPoE.

    1. Radiusclient - http://freshmeat.net/projects/radiusclient/

Biblioteca de sistem care permite mai multor aplicatii autentificarea la servere Radius. Pe debian se instaleaza folosind comanda "apt-get install radiusclient1"

    1. Freeradius - http://www.freeradius.org/ - este succesorul serverului open source 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.

apt-get install freeradius mysql-server freeradius-mysql > Cele mai importante rfc-uri care descriu protocolul RADIUS sunt

http://www.ietf.org/rfc/rfc2865.txt - Descrierea protocolului RADIUS - Remote Authentication Dial In User Service (RADIUS)
http://www.ietf.org/rfc/rfc2866.txt - RADIUS Accounting
    1. Dialupadmin - http://www.freeradius.org/dialupadmin.html

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. “apt-get install freeradius-dialupadmin apache2 php-mysql”

  1. === Configurarea pachetelor: pppd, pppoe-server, radiusclient, freeradius ===
    1. Configurare pppd
      1. Pentru activarea modulul radius se aduga urmatoarele linii in “/etc/ppp/options”:

plugin radius.so
plugin radattr.so

      1. Restul fisierului /etc/ppp/options:

ms-dns 192.162.16.21
asyncmap 0
auth
crtscts
lock
modem
mru 1492
mtu 1492
proxyarp
lcp-echo-interval 60
lcp-echo-failure 5

      1. In fisierul “/etc/ppp/chap-secrets” trebuie sa fie o linie ca urmatoarea:

* * "" *

    1. Configurare pppoe-server

Fisierul “/etc/ppp/pppoe-server/options” trebuie sa arate asa: require-chap
auth
lcp-echo-interval 60
lcp-echo-failure 5
#aceasta optiune se activeaza pentru debugging
#debug
pppoe-server il puteti porni din linia de comanda cu parametrii urmatori: pppoe-server -k -T 60 -I eth0 -L 192.168.0.1 -N 80 -C retea -S retea -R 192.168.0.100 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. Parametrul -k apare numai daca ati compilat pppoe-server cu suport de kernel-mode.

    1. Configurare radiusclient

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. echo "localhost parolaradius" >> /etc/radiusclient/servers

    1. Configurare Freeradius
      1. Se creeaza baza de date mysql:

mysqladmin -u root -p create radius
mysql -u root -p
GRANT ALL PRIVILEGES ON radius.* to 'dialup_admin@localhost' IDENTIFIED BY 'parola_db_radius';
FLUSH PRIVILEGES;
QUIT;
mysql -u radius -p < usr/share/doc/freeradius/examples/db_mysql.sql

      1. Configurarea accesului la serverul freeradius:

In fisierul /etc/freeradius/clients.conf, se editeaza atributul “secret = parolaradius”. Este aceeasi parola care se introduce in fisierul de configurare al radiusclient.

      1. Activarea verificarii sesiunilor simultane (Simultaneuous Use checking)

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. Simultaneus use checking:
# Session database, used for checking Simultaneous-Use.
# Either the radutmp
# or rlm_sql module can handle this.
# The rlm_sql module is *much* faster
session {
#radutmp

#
# See "Simultaneous Use Checking Querie" in sql.conf
sql
}
In fisierul “/etc/freeradius/sql.conf” se debifeaza linia "simul_count_query", ca mai jos:

  1. Uncomment simul_count_query to enable
    # simultaneous use checking
    simul_count_query = " SELECT COUNT(*) FROM ${acct_table1} WHERE UserName='%{SQL-User-Name}' AND AcctStopTime = 0"
      1. /etc/freeradius/naslist

localhost local portslave

      1. Activarea SQL in radiusd.conf:
authorize {
preprocess
chap
mschap
eap
sql
#files (dezactivat)
}
accounting {
detail
sql
#radutmp - dezactivat
}
session {
sql
#radutmp
}
post-auth {
sql
}

In plus, trebuie setat userul si parola MySQL in sql.conf, conform celei setate la punctul a).

    1. Configurare freeradius-dialupadmin
      1. Crearea bazei de date dialupadmin

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”. mysql -u radius -p < /usr/share/freeradius-dialupadmin/*.sql

      1. 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”.
      2. 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:

nas1_name: locahost
nas1_model: freeradius portslave
nas1_ip: 127.0.0.1
nas1_finger: database

      1. Simultaneous-use pentru dialupadmin:

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"

      1. Setata userul si parola bazei de date in admin.conf conform celei create de la punctul 3.4.a)
      2. Creat virtual-hostul in apache2 (/etc/apache2/conf/sites-enabled/) && invoke-rc.d apache2 reload
    1. Testarea configuratiei [ http://localhost/dialupadmin/ ]. Daca totul a decurs ok, trebuie sa va intalniti cu urmatoarea pagina la crearea utilizatorilor:
      1. Adaugarea de utilizatori:

Screenshot Dialupadmin - Adauga utilizatori
Imaginea 2: Dialupadmin - Adauga utilizator

      1. Vizualizarea utilizatorilor online:

Freeradius Dialupadmin - online users
Imaginea 3: Dialupadmin - Online Users

      1. Vizualizarea statisticilor

Freeradius Dialupadmin : access statistics
Imaginea 4: Dialupadmin - Access statistics

      1. Analiza accesului unui anumit utilizator

Freeradius dialupadmin - user analysis
Imaginea 5: Dialupadmin - User Analysis

Suportul in Windows al PPPoE

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:

  1. Clientul standard din Windows XP. Pentru versiunile anterioare se poate folosi versiunea gratuita de raspppoe.
  2. Raspppoe
  3. WinPoET de la FinePoint Networks

Si pentru Raspppoe, si pentru WinPoET exista SDK-uri contra cost, cu care se poate customiza si branda clientul PPPoE.

Alternativa: PPTP, Freeradius si Mysql

Ce este PPTP?

PPTP este acronimul de la "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.

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.

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.

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.

PPTP pe Linux

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.

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%.

Limitarea bandei in conexiunile ppp

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:

$ ip address show
3708: ppp12: <POINTOPOINT,MULTICAST,NOARP,UP> mtu 1480 qdisc htb qlen 3
   link/ppp    inet 192.168.0.1 peer 192.168.0.115 scope global ppp12

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:

  1. 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:

modprobe ipt_IMQ
modprobe imq
/sbin/ip link set imq1 up
/usr/sbin/iptables -t mangle -A POSTROUTING -o ppp0 -j IMQ --todev 1
/usr/sbin/iptables -t mangle -A POSTROUTING -o ppp1 -j IMQ --todev 1
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.

  1. 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:

$PPP_IFACE = Numele interfetei - exemplu: ppp12
$PPP_LOCAL = Adresa locala (a concentratorului pppoe) - exemplu: 192.168.0.1
$PPP_REMOTE = Adresa peer-ului (a utilizatorului) - exemplu: 192.168.0.115
Configuratia cea mai simpla pentru exemplul nostru este: In fisierul ip-up se introduc urmatoarele linii, la sfarsit:
TC="/sbin/tc"
IT="/sbin/iptables"
INET_IP="1.2.3.4" #(ip-ul routabil, spre internet)
INET_IFACE="eth0"
DOWNLOAD_EXTERN=128
# root qdisc htb
$TC qdisc add dev $PPP_IFACE root handle 1: htb
echo "Download extern: $DOWNLOAD_EXTERN"
$TC class add dev $PPP_IFACE parent 1: classid 1:2 htb rate ${DOWNLOAD_EXTERN}kbit
# daca am marcat cu 1 in iptables traficul "extern"
#$TC filter add dev $PPP_IFACE protocol ip parent 1: prio 4 handle 1 fw flowid 1:2
echo "Creez regulile iptables pentru $PPP_REMOTE"
$IT -t nat -A POSTROUTING -o $INET_IFACE -s $PPP_REMOTE -j SNAT --to-source $INET_IP
$IT -A FORWARD -i $PPP_IFACE -s $PPP_REMOTE -j ACCEPT
$IT -A FORWARD -o $PPP_IFACE -d $PPP_REMOTE -j ACCEPT
In mod similar, trebuie sa stergem regulile iptables in ip-down. Clasele htb nu trebuie sterse, pentru ca dispar automat odata cu interfata. TC="/sbin/tc"
IT="/sbin/iptables"
INET_IP="1.2.3.4" #(ip-ul routabil, spre internet)
INET_IFACE="eth0"
echo "Sterg regulile iptables pentru $PPP_REMOTE"
$IT -t nat -D POSTROUTING -o $INET_IFACE -s $PPP_REMOTE -j SNAT --to-source $INET_IP
$IT -D FORWARD -i $PPP_IFACE -s $PPP_REMOTE -j ACCEPT
$IT -D FORWARD -o $PPP_IFACE -d $PPP_REMOTE -j ACCEPT

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).

  1. touch /var/log/ppp-ipupdown.log

Referinte:

  1. Howto PPPoE Server, de Michael J. Erskin, un howto foarte recent, orientat mai mult pe Opensuse 10, dar cu informatii foarte utile.
  2. Documentatia Rlm_sql pentru Freeradius - Daca va intrebati ce inseamna =,:=,<=,=~ si alte semne de-ale lui Dumnezeu, aveti aici lista operatorilor si semnificatia lor. Atentie: la Simultaneous-Use trebuie sa folositi semnul ":=".
  3. Un tutorial Freeradius si Mysql, denumit si "SB's very rough notes to FreeRadius and MySQL".
  4. 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.
  5. Documentatia online Dialupadmin - pare outdated, dar este foarte utila, daca nu vreti sa cititi sursele php.
  6. 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.
  7. Radman - O aplicatie pentru administrarea utilizatorilor pentru Freeradius, suspect de asemanatoare cu freeradius-dialupadmin. $59 licenta.
  8. 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).
  9. 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 Lucian Gutu.

Contact & feedback

Constantin Gavrilescu - costin@gmx.net

(restaurat de pe http://web.archive.org/web/20061018045738/http://linux.usr.ro/pppoe/ si wikizat)