https://github.com/avin/gw-sms-captive
Бесплатный WIFI с доступом по SMS (captive-портал)
https://github.com/avin/gw-sms-captive
captive-portal freewifi sms wifi
Last synced: 11 months ago
JSON representation
Бесплатный WIFI с доступом по SMS (captive-портал)
- Host: GitHub
- URL: https://github.com/avin/gw-sms-captive
- Owner: avin
- Created: 2015-10-24T22:35:01.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2015-11-09T21:35:36.000Z (over 10 years ago)
- Last Synced: 2025-06-21T08:02:18.960Z (about 1 year ago)
- Topics: captive-portal, freewifi, sms, wifi
- Language: PHP
- Homepage:
- Size: 355 KB
- Stars: 2
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
Awesome Lists containing this project
README
## Captive portal с регистрацией через SMS
1. GW по умолчанию пересылает все сетевые запросы на веб-сервер каптив-портала
2. Каптив портал предлагает пользователю ввести ключ верификации
3. В случае если ключа у пользоватлея нет - он вводит свой номер сотового телефона для получения ключа
5. Тем временем система регистрирует в базе новый ключ с привязкой к указанному номеру телефона и высылает его
посредством СМС. Ключ имеет определенный срок действия, после которого является недействительным.
6. В случае ввода коректного ключа - система дает команду фаерволу на разрешение форвардинга запросов в интернет.
(привязка проходит по мак мак адресу)
7. По крону каждую минуту система находит просроченные сессии - помечает их и блокирует на фарволе (переходим к пункту 1)
### Установка
Вся установка описана на примере Ubuntu server 14.04
В последующем подразумевается, что eth0 смотрит в интернет, а eth1 в локалку (к пользователям)
eth1 ip-адрес используем 10.0.0.1
Пример /etc/network/interfaces:
```
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
auto eth1
iface eth1 inet static
address 10.0.0.1
network 10.0.0.0
netmask 255.0.0.0
```
Установка необходимых пакетов
```
sudo add-apt-repository ppa:ondrej/php5-5.6
sudo apt-get update
sudo apt-get install python-software-properties conntrack php5 php5-curl php5-json php5-fpm php5-mysql php5-mcrypt \
php5-cli git conntrack nginx mysql-server isc-dhcp-server iptables-persistent
```
Настройка dhcp сервера
```
sudo sed -i -e 's/INTERFACES=""/INTERFACES="eth1"/' /etc/default/isc-dhcp-server
sudo sed -i -e 's/#authoritative/authoritative/' /etc/dhcp/dhcpd.conf
```
```
sudo vim /etc/dhcp/dhcpd.conf
```
```
# Добавить в конец
subnet 10.0.0.0 netmask 255.0.0.0 {
range 10.0.0.10 10.0.254.254;
option domain-name-servers 77.88.8.88, 77.88.8.2;
option routers 10.0.0.1;
option broadcast-address 10.255.255.255;}
```
Установка БД
```
mysql -u root
```
```
create database smscaptive character set utf8 COLLATE utf8_general_ci;
exit
```
Скачивание и установка данного приложения
```
sudo mkdir -p /var/www/apps
cd /var/www/apps
sudo git clone https://github.com/avin/gw-sms-captive.git
cd ./gw-sms-captive
sudo chmod -R 777 ./storage
curl -sS https://getcomposer.org/installer | sudo php
sudo php composer.phar install
sudo php -r "copy('.env.example', '.env');"
sudo php artisan key:generate
sudo php artisan migrate
sudo cp ./utils/rmtrack.sh /usr/local/bin/
sudo chmod +x /usr/local/bin/rmtrack.sh
sudo chown -R www-data:www-data ../gw-sms-captive
```
В файле .env выставить необходимые параметры (обязательно выставление корректного ключа SMS.RU)
Добавить в cron
```
sudo crontab -u www-data -e
```
```
* * * * * php /var/www/apps/gw-sms-captive/artisan schedule:run >> /dev/null 2>&1
```
Настройка nginx
```
sudo vim /etc/nginx/sites-enabled/default
```
```
server {
listen 80;
root /var/www/apps/gw-sms-captive/public;
index index.php;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
error_page 404 /index.php;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/www;
}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
try_files $uri =404;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
```
```
sudo service nginx reload
```
Добавить пользователя www-data в sudo-users для запуска iptables и conntrack
```
sudo vim /etc/sudoers
```
```
# Добавить в конец
www-data ALL=(ALL) NOPASSWD: /sbin/iptables
www-data ALL=(ALL) NOPASSWD: /usr/bin/awk
www-data ALL=(ALL) NOPASSWD: /usr/local/bin/rmtrack.sh
# записать и выйти :wq!
```
Добавить в файл /etc/sysctl.conf
```
net.ipv4.ip_forward=1
```
Первоночальная настройка iptables
```
sudo iptables -A POSTROUTING -t nat -o eth0 -j MASQUERADE
sudo iptables -t mangle -N internet
sudo iptables -t mangle -A PREROUTING -i eth1 -p tcp -m tcp -j internet
sudo iptables -t mangle -A PREROUTING -i eth1 -p udp -m udp -j internet
sudo iptables -t mangle -A internet -j MARK --set-mark 99
sudo iptables -t nat -A PREROUTING -i eth1 -p tcp -m mark --mark 99 -m tcp --dport 80 -j DNAT --to-destination 10.0.0.1
sudo iptables -t nat -A PREROUTING -i eth1 -p tcp -m mark --mark 99 -m tcp -m multiport ! --dports 80 -j DNAT --to-destination 127.0.0.1
sudo iptables -t nat -A PREROUTING -i eth1 -p udp -m mark --mark 99 -m udp -m multiport ! --dports 53 -j DNAT --to-destination 127.0.0.1
sudo iptables -t nat -I POSTROUTING 1 -j LOG --log-prefix NETFILTER
sudo /etc/init.d/iptables-persistent save
```
Добавить в /etc/rsyslog.conf
```
:msg, contains, "NETFILTER" /var/log/iptables.log
:msg, contains, "NETFILTER" ~
```
Закоментировать строку
```
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
```
### License
[MIT license](http://opensource.org/licenses/MIT)
awk '$0 >= "2015-11-01T10:22:26.990911-05:00" && $0 <= "2015-11-01T10:22:27.157133-05:00"' /var/log/iptables.log