- hosts: yourhost
become: true
become_user: youruser
roles:
- openwisp.openwisp2
vars:
openwisp2_extra_python_packages:
# monitoring
- django-cors-headers
openwisp2_extra_django_settings_instructions:
# monitoring settings
- |
# openwisp-radius, registration, CORS
INSTALLED_APPS += [
'corsheaders',
'django_filters',
'rest_framework.authtoken',
'rest_auth',
'rest_auth.registration',
'openwisp_radius',
]
OPENWISP_RADIUS_FREERADIUS_ALLOWED_HOSTS = ['ip/host here']
# CORS
MIDDLEWARE.insert(
MIDDLEWARE.index('django.middleware.common.CommonMiddleware'),
'corsheaders.middleware.CorsMiddleware'
)
CORS_ORIGIN_WHITELIST = ('whitelisteddomain1', 'whitelisteddomain2')
CORS_ALLOW_METHODS = ('POST',)
# SMS
REST_AUTH_SERIALIZERS = {
'PASSWORD_RESET_SERIALIZER': 'openwisp_radius.api.serializers.PasswordResetSerializer',
}
REST_AUTH_REGISTER_SERIALIZERS = {
'REGISTER_SERIALIZER': 'openwisp_radius.api.serializers.RegisterSerializer',
}
OPENWISP_RADIUS_SMS_TOKEN_MAX_IP_DAILY = 25
SENDSMS_BACKEND = 'path to sms backend here'
# REST API
INSTALLED_APPS += [
'drf_yasg',
]
OPENWISP_USERS_AUTH_API = True
openwisp2_extra_urls:
- "url(r'^', include('openwisp_radius.urls'))"
- "url(r'^api/v1/', include('openwisp_utils.api.urls'))"
- "url(r'^api/v1/', include('openwisp_users.api.urls'))"
freeradius_dir: /etc/freeradius/3.0
freeradius_mods_available_dir: "{{ freeradius_dir }}/mods-available"
freeradius_mods_enabled_dir: "{{ freeradius_dir }}/mods-enabled"
freeradius_sites_available_dir: "{{ freeradius_dir }}/sites-available"
freeradius_sites_enabled_dir: "{{ freeradius_dir }}/sites-enabled"
freeradius_certs_dir: "{{ freeradius_dir }}/certs"
freeradius_sql:
driver: rlm_sql_postgresql
dialect: postgresql
host: localhost
port: 5432
name: "****"
user: "****"
password: "****"
freeradius_rest:
pre_tasks:
# openwisp-radius
- name: Install cairo
apt:
name:
- libcairo2
- libpango-1.0-0
- libpangocairo-1.0-0
- libgdk-pixbuf2.0-0
- shared-mime-info
update_cache: yes
tags: [openwisp2, radius]
### Follows an exmple installation and configuration of freeradius, but my configuration uses postgres and is customized,
### so you need to be adapt it
- name: Freeradius system packages
apt:
name:
- freeradius
- freeradius-postgresql
- freeradius-rest
state: latest
notify: restart freeradius
- name: SQL Configuration
template:
src: freeradius/sql.j2
dest: "{{ freeradius_mods_available_dir }}/sql"
mode: 0640
owner: freerad
group: freerad
notify: restart freeradius
- name: Enable SQL module
file:
src: "{{ freeradius_mods_available_dir }}/sql"
dest: "{{ freeradius_mods_enabled_dir }}/sql"
state: link
mode: 0640
owner: freerad
group: freerad
- name: SQL Counter module
template:
src: freeradius/sqlcounter.j2
dest: "{{ freeradius_mods_available_dir }}/sqlcounter"
mode: 0640
owner: freerad
group: freerad
notify: restart freeradius
- name: Enable SQL Counter module
file:
src: "{{ freeradius_mods_available_dir }}/sqlcounter"
dest: "{{ freeradius_mods_enabled_dir }}/sqlcounter"
state: link
mode: 0640
owner: freerad
group: freerad
- name: Fix dailycounter.conf
copy:
src: freeradius/dailycounter.conf
dest: "{{ freeradius_dir }}/mods-config/sql/counter/postgresql/dailycounter.conf"
mode: 0640
owner: freerad
group: freerad
notify: restart freeradius
- name: REST Configuration
template:
src: freeradius/rest.j2
dest: "{{ freeradius_mods_available_dir }}/rest"
mode: 0640
owner: freerad
group: freerad
notify: restart freeradius
- name: Enable REST module
file:
src: "{{ freeradius_mods_available_dir }}/rest"
dest: "{{ freeradius_mods_enabled_dir }}/rest"
state: link
mode: 0640
owner: freerad
group: freerad
- name: Remove default site
file:
dest: "{{ freeradius_sites_enabled_dir }}/default"
state: absent
- name: Ensure inner-tunnel site is present
file:
src: "{{ freeradius_sites_available_dir }}/inner-tunnel"
dest: "{{ freeradius_sites_enabled_dir }}/inner-tunnel"
state: link
mode: 0640
owner: freerad
group: freerad
- name: Captive portal configuration
template:
src: freeradius/captiveportal.j2
dest: "{{ freeradius_sites_available_dir }}/captiveportal"
mode: 0640
owner: freerad
group: freerad
notify: restart freeradius
tags: [radius]
- file:
src: "{{ freeradius_sites_available_dir }}/captiveportal"
dest: "{{ freeradius_sites_enabled_dir }}/captiveportal"
state: link
mode: 0640
owner: freerad
group: freerad
tags: [radius]
# openwisp-radius cron jobs
- name: delete_old_radacct
cron:
name: delete_old_radacct
day: "*"
hour: 05
minute: 30
job: "/opt/openwisp2/env/bin/python /opt/openwisp2/manage.py delete_old_radacct 730"
tags: [openwisp2, radius]
- name: delete_old_postauth
cron:
name: delete_old_postauth
day: "*"
hour: 05
minute: 0
job: "/opt/openwisp2/env/bin/python /opt/openwisp2/manage.py delete_old_postauth 365"
tags: [openwisp2, radius]
- name: cleanup_stale_radacct
cron:
name: cleanup_stale_radacct
day: "*"
hour: 04
minute: 0
job: "/opt/openwisp2/env/bin/python /opt/openwisp2/manage.py cleanup_stale_radacct 1"
tags: [openwisp2, radius]
- name: deactivate_expired_users
cron:
name: deactivate_expired_users
day: "*"
hour: "*"
minute: "*/5"
job: "/opt/openwisp2/env/bin/python /opt/openwisp2/manage.py deactivate_expired_users"
tags: [openwisp2, radius]
- name: delete_old_users
cron:
name: delete_old_users
day: "*"
hour: "03"
minute: "30"
job: "/opt/openwisp2/env/bin/python /opt/openwisp2/manage.py delete_old_users"
tags: [openwisp2, radius]