Показаны различия между двумя версиями страницы.
wifiadmin [2012/02/22 18:50] metallic [Реализация] |
wifiadmin [2022/03/25 17:00] |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
- | ====== Гостевой доступ в интернет через wifi с авторизацией ====== | ||
- | ===== Введение ===== | ||
- | В данной статье я хотел бы рассказать об одном из способов раздачи wifi-интернета вашим гостям в офисе, кафе, дома и вообще где угодно. Особенность данного способа в том, что он требует минимум оборудования и простой в настройке. Сама по себе идея не оригинальна и схема не нова, я узнал о таком способе из книги «The book of PF» и я тут же занялся своей реализацией данной идеи. Сама идея заключается в следующем: | ||
- | |||
- | ===== Требования ===== | ||
- | |||
- | Веб-интерфейс авторизации, | ||
- | Я не вижу никаких препятствий, | ||
- | |||
- | ===== Реализация ===== | ||
- | |||
- | Начнем с настройки сети. В целях безопасности нам необходимо сделать так, чтобы точка доступа имела доступ только к шлюзу. Реализовать это можно несколькими способами: | ||
- | |||
- | {{ : | ||
- | |||
- | Теперь, | ||
- | Далее нужно установить весь сопутствующий софт: nginx, uwsgi, pip (/ | ||
- | |||
- | < | ||
- | < | ||
- | # pip install django | ||
- | ... | ||
- | |||
- | # python | ||
- | Python 2.6.7 (r267: | ||
- | [GCC 4.2.1 20070719 | ||
- | Type " | ||
- | >>> | ||
- | >>> | ||
- | (1, 3, 1, ' | ||
- | >>> | ||
- | </ | ||
- | </ | ||
- | |||
- | На этом установка всех необходимых программ завершена, | ||
- | Сперва настроим dhcp-server. Допустим наша wifi-сеть 192.168.40.0/ | ||
- | |||
- | default-lease-time 43200; | ||
- | max-lease-time 43200; | ||
- | ddns-update-style none; | ||
- | authoritative; | ||
- | log-facility local7; | ||
- | option routers 192.168.40.1; | ||
- | option domain-name-servers 8.8.8.8, 8.8.4.4; | ||
- | | ||
- | subnet 192.168.40.0 netmask 255.255.255.0 { | ||
- | range 192.168.40.2 192.168.40.253; | ||
- | } | ||
- | |||
- | 43200 – 12 часов в секундах, | ||
- | dhcpd_enable=" | ||
- | dhcpd_ifaces=" | ||
- | Таким образом dhcp-сервер будет работать только на wifi-интерфейсе. | ||
- | Nginx у нас будет работать по двум протоколам: | ||
- | Итак, конфиг nginx.conf будет выглядеть примерно так: | ||
- | |||
- | error_log | ||
- | #pid logs/ | ||
- | | ||
- | events { | ||
- | worker_connections | ||
- | } | ||
- | | ||
- | http { | ||
- | include | ||
- | default_type | ||
- | sendfile | ||
- | keepalive_timeout | ||
- | | ||
- | server { | ||
- | | ||
- | | ||
- | | ||
- | } | ||
- | | ||
- | server { | ||
- | listen | ||
- | server_name | ||
- | ssl on; | ||
- | ssl_certificate | ||
- | ssl_certificate_key | ||
- | ssl_session_timeout | ||
- | ssl_protocols | ||
- | ssl_ciphers | ||
- | ssl_prefer_server_ciphers | ||
- | | ||
- | location / { | ||
- | uwsgi_pass unix:/// | ||
- | include uwsgi_params; | ||
- | } | ||
- | | ||
- | location /static/ { | ||
- | root / | ||
- | } | ||
- | } | ||
- | |||
- | Протокол http прослушивается на 444 порту (у меня 80-ый порт занят апачем) и все запросы перенаправляются на < | ||
- | |||
- | Теперь нужно сгенерить ssl-сертификаты cert.pem и cert.key для nginx. Выполняем следующие команды, | ||
- | < | ||
- | < | ||
- | # mkdir / | ||
- | # cd / | ||
- | # openssl req -new -x509 -days 9999 -nodes -out cert.pem -keyout cert.key | ||
- | Generating a 1024 bit RSA private key | ||
- | ....++++++ | ||
- | ......++++++ | ||
- | writing new private key to ' | ||
- | ----- | ||
- | You are about to be asked to enter information that will be incorporated | ||
- | into your certificate request. | ||
- | What you are about to enter is what is called a Distinguished Name or a DN. | ||
- | There are quite a few fields but you can leave some blank | ||
- | For some fields there will be a default value, | ||
- | If you enter ' | ||
- | ----- | ||
- | Country Name (2 letter code) [AU]:RU | ||
- | State or Province Name (full name) [Some-State]: | ||
- | Locality Name (eg, city) []:Voronezh | ||
- | Organization Name (eg, company) [Internet Widgits Pty Ltd]:Roga & ko | ||
- | Organizational Unit Name (eg, section) []:unit | ||
- | Common Name (eg, YOUR name) []:Andrey | ||
- | Email Address []: | ||
- | </ | ||
- | </ | ||
- | |||
- | Переходим к самому сервису авторизации. Скачиваем архив {{: | ||
- | < | ||
- | < | ||
- | # ls -Rl1 /www/ | ||
- | wifiadmin | ||
- | |||
- | / | ||
- | uwsgi.xml | ||
- | webapp.py | ||
- | wifiadmin | ||
- | wificmd | ||
- | wificmd.c | ||
- | |||
- | / | ||
- | __init__.py | ||
- | cron.py | ||
- | main | ||
- | manage.py | ||
- | settings.py | ||
- | static | ||
- | templates | ||
- | urls.py | ||
- | |||
- | / | ||
- | __init__.py | ||
- | admin.py | ||
- | forms.py | ||
- | models.py | ||
- | static | ||
- | tests.py | ||
- | utils.py | ||
- | views.py | ||
- | |||
- | / | ||
- | wifiadmin | ||
- | |||
- | / | ||
- | css | ||
- | images | ||
- | js | ||
- | |||
- | / | ||
- | style.css | ||
- | |||
- | / | ||
- | info.png | ||
- | |||
- | / | ||
- | utils.js | ||
- | |||
- | / | ||
- | |||
- | / | ||
- | 500.html | ||
- | base.html | ||
- | home.html | ||
- | info.html | ||
- | pass.html | ||
- | </ | ||
- | </ | ||
- | |||
- | Редактируем файл / | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | </ | ||
- | |||
- | Теперь можно проверить uwsgi: | ||
- | < | ||
- | < | ||
- | # uwsgi -x / | ||
- | [uWSGI] parsing config file / | ||
- | *** Starting uWSGI 1.0 (64bit) on [Wed Feb 22 11:19:39 2012] *** | ||
- | compiled with version: 4.2.1 20070719 | ||
- | current working directory: / | ||
- | writing pidfile to / | ||
- | detected binary path: / | ||
- | uWSGI running as root, you can use --uid/ | ||
- | setgid() to 80 | ||
- | setuid() to 80 | ||
- | your memory page size is 4096 bytes | ||
- | uwsgi socket 0 bound to UNIX address / | ||
- | Python version: 2.6.7 (r267: | ||
- | Python main interpreter initialized at 0x801849240 | ||
- | threads support enabled | ||
- | your server socket listen backlog is limited to 100 connections | ||
- | *** Operational MODE: single process *** | ||
- | added / | ||
- | WSGI application 0 (mountpoint='' | ||
- | *** uWSGI is running in multiple interpreter mode *** | ||
- | spawned uWSGI master process (pid: 41081) | ||
- | spawned uWSGI worker 1 (pid: 41082, cores: 1) | ||
- | </ | ||
- | </ | ||
- | |||
- | Если он запустился без ошибок, | ||
- | uwsgi_enable=" | ||
- | uwsgi_flags=" | ||
- | |||
- | и запускаем | ||
- | # / | ||
- | | ||
- | Теперь надо скомпилировать небольшую программку(wificmd), | ||
- | Итак, выполняем команду: | ||
- | # gcc / | ||
- | |||
- | Второй вариант с sudo более красивый, | ||
- | www ALL=NOPASSWD: | ||
- | | ||
- | Теперь приступим к настройке wifiadmin, редактируем файл settings.py, | ||
- | DATABASES = { | ||
- | ' | ||
- | ' | ||
- | ' | ||
- | ' | ||
- | ' | ||
- | ' | ||
- | ' | ||
- | } | ||
- | } | ||
- | | ||
- | WIFI_NETWORK = ' | ||
- | |||
- | Здесь мы задаем настройки подключения к БД, в моем случае это MySQL и последний параметр - wifi-сеть. | ||
- | |||
- | <note important> | ||
- | |||
- | Теперь нам надо собрать статические файлы django и синхронизировать БД. Во время синхронизации БД нам будет предложено создать суперпользователя, | ||
- | |||
- | < | ||
- | < | ||
- | # cd / | ||
- | # python manage.py collectstatic | ||
- | You have requested to collect static files at the destination | ||
- | location as specified in your settings file. | ||
- | |||
- | This will overwrite existing files. | ||
- | Are you sure you want to do this? | ||
- | |||
- | Type ' | ||
- | |||
- | ........ | ||
- | |||
- | 83 static files copied to '/ | ||
- | |||
- | # python manage.py syncdb | ||
- | Creating tables ... | ||
- | Creating table auth_permission | ||
- | Creating table auth_group_permissions | ||
- | Creating table auth_group | ||
- | Creating table auth_user_user_permissions | ||
- | Creating table auth_user_groups | ||
- | Creating table auth_user | ||
- | Creating table auth_message | ||
- | Creating table django_content_type | ||
- | Creating table django_session | ||
- | Creating table django_site | ||
- | Creating table django_admin_log | ||
- | Creating table main_myuser | ||
- | Creating table main_mysession | ||
- | Creating table main_log | ||
- | |||
- | You just installed Django' | ||
- | Would you like to create one now? (yes/no): yes | ||
- | Username (Leave blank to use ' | ||
- | E-mail address: admin@domain.com | ||
- | Password: | ||
- | Password (again): | ||
- | Superuser created successfully. | ||
- | Installing custom SQL ... | ||
- | Installing indexes ... | ||
- | No fixtures found. | ||
- | </ | ||
- | </ |