+ All Categories
Home > Documents > Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono...

Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono...

Date post: 16-Aug-2019
Category:
Upload: vothuy
View: 215 times
Download: 0 times
Share this document with a friend
44
Django-freeradius Fiorella De Luca - 22 Aprile 2018 @fiorella_deluca
Transcript
Page 1: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Django-freeradius

Fiorella De Luca - 22 Aprile 2018

@fiorella_deluca

Page 2: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

OpenWisp

Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone, mesh networks)

Page 3: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Argomenti trattati

● Che cos’è Freeradius?

● Installazione django-freeradius

● Installazione di freeradius

● Modelli e RESTful API

● Uso di django-freeradius

Page 4: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Che cos’è Freeradius?

● Protocollo AAA ○ Autenticazione○ Autorizzazione○ Accounting

● Server Radius open source più diffuso

Protocollo AAA Radius Freeradius

Page 5: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Radius (Remote Access Dial In User Service)

Nas (Radius Client)

Internet Radius Server

Shared Secret

Page 6: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Autenticazione & Autorizzazione

RADIUS Client

RADIUS: Access-Request

RADIUS: Access-AcceptOR

RADIUS: Access-Reject

RADIUS Server

Page 7: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Accounting

RADIUS Client

RADIUS Server

RADIUS: Accounting-Request

RADIUS: Accounting-Response

Start Accounting- Request acct_status_type Interim-Update Stop

[acct_status_type=start]

Page 8: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Django-freeradius

● Interfaccia web per gestire i database Freeradius basata su Django.

● RESTful API per gestire l’autorizzazione, la post autenticazione e

l’accounting di freeradius.

● È un’ app riutilizzabile ed estensibile.

Page 9: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Let’s start!

Page 10: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Django-freeradius - Installazione

Versione stabile da pypi:

● #create virtualenv mkvirtualenv radius

● pip install django-freeradius Versione di sviluppo:

● #create virtualenv mkvirtualenv radius

● pip install https://github.com/openwisp/django-freeradius/tarball/master

Aggiungo django_freeradius a INSTALLED_APPS:

● INSTALLED_APPS = [ # other apps 'django_freeradius',]

Aggiungo l’url in urls.py:

urlpatterns = [ # ... other urls in your project ... # django-freeradius urls # keep the namespace argument unchanged url(r'^', include('django_freeradius.urls', namespace='freeradius')),]

Integrazione in un’app django già esistente

Page 11: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Django-freeradius - Installazione

Installazione per lo sviluppo:

● git clone git://github.com/<your_username>/django-freeradius○ cd django-freeradius/

○ python setup.py develop

● pip install -r requirements-test.txt

● cd tests/○ ./manage.py migrate

○ ./manage.py createsuperuser

● ./manage.py runserver

○ (http://127.0.0.1:8000/admin/)

● ./runtests.py

Creare un database PostgreSQL:

● sudo apt-get install postgresql

● sudo -i -u postgres

● createuser -S nomeuser -P

● createdb nomedb -O nomeuser

Page 12: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Database PostgreSQL

Django-freeradius

#django-freeradius/tests/local_settings.py DATABASES = {

'default': {

'ENGINE':

'django.db.backends.postgresql_psycopg2',

'NAME': '<db_name>',

'USER': '<db_user>',

'PASSWORD': '<db_password>',

'HOST': '127.0.0.1',

'PORT': '5432'

},

}

Page 13: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Freeradius - Installazione

● sudo apt-add-repository ppa:freeradius/stable-3.0

● sudo apt-get update

● sudo apt-get install freeradius freeradius-postgresql freeradius-rest

ubuntu 16.04

Page 14: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Freeradius - Configurazione

Esempio di configurazione usando il database PostgreSQL

#/etc/freeradius/3.0/mods-available/sqldriver = "rlm_sql_postgresql"dialect = "postgresql"

# Connection info:server = "localhost"port = 5432login = "<user>"password = "<password>"radius_db = "radius"

Freeradius

Page 15: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Freeradius - Configurazione moduli REST

# /etc/freeradius/3.0/mods-enabled/rest

connect_uri = "<url>"

authorize { uri = "${..connect_uri}/api/authorize/" method = 'post' body = 'json' data = '{"username": "%{User-Name}", "password": "%{User-Password}"}' tls = ${..tls}}

Page 16: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Freeradius - Configurazione moduli REST

# /etc/freeradius/3.0/mods-enabled/rest# this section can be left emptyauthenticate {}

post-auth {

uri = "${..connect_uri}/api/postauth/"

method = 'post'

body = 'json'

data = '{"username": "%{User-Name}", "password": "%{User-Password}",

"reply":"%{reply:Packet-Type}", "called_station_id": "%{Called-Station-ID}",

"calling_station_id": "%{Calling-Station-ID}"}'

tls = ${..tls}

}

Page 17: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Freeradius - Configurazione moduli REST

# /etc/freeradius/3.0/mods-enabled/restaccounting {

uri = "${..connect_uri}/api/accounting/"

method = 'post'

body = 'json'

data = '{"status_type": "%{Acct-Status-Type}", "session_id": "%{Acct-Session-Id}", "unique_id":

"%{Acct-Unique-Session-Id}", "username": "%{User-Name}", "realm": "%{Realm}", "nas_ip_address":

"%{NAS-IP-Address}", "nas_port_id": "%{NAS-Port}", "nas_port_type": "%{NAS-Port-Type}",

"session_time": "%{Acct-Session-Time}", "authentication": "%{Acct-Authentic}", "input_octets":

"%{Acct-Input-Octets}", "output_octets": "%{Acct-Output-Octets}", "called_station_id":

"%{Called-Station-Id}", "calling_station_id": "%{Calling-Station-Id}", "terminate_cause":

"%{Acct-Terminate-Cause}", "service_type": "%{Service-Type}", "framed_protocol":

"%{Framed-Protocol}", "framed_ip_address": "%{Framed-IP-Address}"}'

tls = ${..tls}

}

Page 18: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Abilitazione dei moduli configurati

● ln -s /etc/freeradius/3.0/mods-available/sql /etc/freeradius/3.0/mods-enabled/sql

● ln -s /etc/freeradius/3.0/mods-available/rest/etc/freeradius/3.0/mods-enabled/rest

Restart freeradius to load the new configuration: service freeradius restart

# dobbiamo prima fermare il processo principale di freeradius

service freeradius stop

#lanciamo freeradius in modalità debug freeradius -X

Page 19: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Django-freeradius - Modelli

● RadiusGroup

● RadiusGroupUsers

● RadiusReply

● RadiusCheck

● RadiusAccounting

● Nas

● RadiusUserGroup

● RadiusGroupReply

● RadiusGroupCheck

● RadiusPostAuth

Page 20: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Modelli Astratti

#django_freeradius/base/models.pyfrom model_utils.fields import AutoCreatedField, AutoLastModifiedField

class TimeStampedEditableModel(models.Model): """ An abstract base class model that provides self-updating ``created`` and ``modified`` fields. """ created = AutoCreatedField(_('created'), editable=True) modified = AutoLastModifiedField(_('modified'), editable=True) class Meta: abstract = True

#django_freeradius/base/models.pyclass AbstractRadiusGroup(TimeStampedEditableModel):

id = models.UUIDField(primary_key=True, db_column='id')

group_name = models.CharField( verbose_name=_('groupname'),

max_length=255, unique=True,

db_column='groupname',

db_index=True)

priority = models.IntegerField(verbose_name=_('priority'), default=1)

creation_date = models.DateField(verbose_name=_('creation date'),

null=True, db_column='created_at')

modification_date = models.DateField(verbose_name=_('modification

date'),null=True,

db_column='updated_at')

notes = models.CharField(verbose_name=_('notes'), max_length=64,

blank=True, null=True)

class Meta:

db_table = 'radiusgroup'

verbose_name = _('radiusgroup')

verbose_name_plural = _('radiusgroups')

abstract = True

def __str__(self):

return self.group_name

Page 21: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Modelli Astratti

#django_freeradius/base/admin.py

from django.contrib.admin import ModelAdmin

class TimeStampedEditableAdmin(ModelAdmin): """ ModelAdmin for TimeStampedEditableModel """

def get_readonly_fields(self, request, obj=None): readonly_fields = super(TimeStampedEditableAdmin, self).get_readonly_fields(request, obj) return readonly_fields + ('created', 'modified')

class AbstractRadiusGroupAdmin(TimeStampedEditableAdmin): pass

Page 22: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Come creare un’app riutilizzabile

Installiamo swapper

pip install swapper

#django_freeradius/models.pyimport swapper

class RadiusGroup(AbstractRadiusGroup):

class Meta(AbstractRadiusGroup.Meta):

abstract = False

swappable = swapper.swappable_setting('django_freeradius',

'RadiusGroup')

Page 23: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Migrazioni

Utilizziamo Swapper negli script di migrazione:

● L’ordinamento delle dipendenze

● I riferimenti alle chiavi esterne

Page 24: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Esempio(sample_radius)

Page 25: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Aggiornamento di settings.py

Page 26: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

RESTful API ( Autorizzazione, PostAuth, Accounting)

● Attivo il runserver della mia applicazione:○ cd django-freeradius

○ workon radius

○ cd tests/

○ ./manage.py runserver

● Attivo freeradius in modalità debug:○ freeradius -X

Page 27: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Django-freeradius - Autorizzazione

Page 28: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Django-freeradius - Autorizzazione

Page 29: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Django-freeradius - Autorizzazione

Access-Accept

Page 30: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Django-freeradius - Autorizzazione

Access-Reject

Page 31: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Django-freeradius - PostAuth

Page 32: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Django-freeradius - PostAuth

Page 33: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Django-freeradius - PostAuth

Page 34: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Django-freeradius - PostAuth

Page 35: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Django-freeradius - PostAuth

Page 36: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Django-freeradius - Accounting

Page 37: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Django-freeradius - Accounting

Page 38: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Django-freeradius - Accounting

● Creiamo un file in /tmp/accounting.txt

● Salviamo il file

● Apriamo il prompt dei comandi

● radclient -f /tmp/accounting.txt -x

127.0.0.1 acct testing123

Page 39: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Django-freeradius - Accounting

Page 40: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Django-freeradius - Accounting

Page 41: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Django-freeradius - Accounting

Page 42: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Utilizzo di Django-freeradius

Django-freeradius potrà essere utilizzato dagli utenti per:

● auto-registrarsi● gestire il proprio account● consultare le statistiche

Le operazoni effettuate sull’interfaccia agiscono sulle tabelle di un DBMS relazionale, create e mantenute dal framework Django. Tali relazioni sono rese disponibili anche a un server RADIUS mediante opportune viste. Quest’ultimo servizio, interagendo con un Network Access Server (NAS) quale captive portal, implementerà l’autenticazione, l’autorizzazione e l’accounting (AAA) per il servizio WiFi.

,

Page 43: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Risorse utili

Organization Github Page: https://github.com/openwisp

Organization Website: http://openwisp.org/

Project Repository: https://github.com/openwisp/django-freeradius

Documentation: http://django-freeradius.readthedocs.io/en/latest/

Page 44: Django-freeradius - pycon.it · OpenWisp Openwisp è un insieme di moduli software che possono essere utilizzati per distribuire e gestire reti wireless. (wifi pubblico, backbone,

Grazie!


Recommended