{"id":21009085,"url":"https://github.com/avin/gw-sms-captive","last_synced_at":"2025-07-23T17:07:37.492Z","repository":{"id":86507001,"uuid":"44887606","full_name":"avin/gw-sms-captive","owner":"avin","description":"Бесплатный WIFI с доступом по SMS (captive-портал)","archived":false,"fork":false,"pushed_at":"2015-11-09T21:35:36.000Z","size":364,"stargazers_count":2,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-06-21T08:02:18.960Z","etag":null,"topics":["captive-portal","freewifi","sms","wifi"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/avin.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2015-10-24T22:35:01.000Z","updated_at":"2024-02-04T21:35:50.000Z","dependencies_parsed_at":"2023-03-12T20:00:41.777Z","dependency_job_id":null,"html_url":"https://github.com/avin/gw-sms-captive","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/avin/gw-sms-captive","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avin%2Fgw-sms-captive","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avin%2Fgw-sms-captive/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avin%2Fgw-sms-captive/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avin%2Fgw-sms-captive/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/avin","download_url":"https://codeload.github.com/avin/gw-sms-captive/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/avin%2Fgw-sms-captive/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266717708,"owners_count":23973384,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-23T02:00:09.312Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["captive-portal","freewifi","sms","wifi"],"created_at":"2024-11-19T09:15:24.800Z","updated_at":"2025-07-23T17:07:37.470Z","avatar_url":"https://github.com/avin.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"## Captive portal с регистрацией через SMS\n\n1.  GW по умолчанию пересылает все сетевые запросы на веб-сервер каптив-портала\n2.  Каптив портал предлагает пользователю ввести ключ верификации\n3.  В случае если ключа у пользоватлея нет - он вводит свой номер сотового телефона для получения ключа\n5.  Тем временем система регистрирует в базе новый ключ с привязкой к указанному номеру телефона и высылает его \nпосредством СМС. Ключ имеет определенный срок действия, после которого является недействительным.\n6.  В случае ввода коректного ключа - система дает команду фаерволу на разрешение форвардинга запросов в интернет. \n(привязка проходит по мак мак адресу)\n7.  По крону каждую минуту система находит просроченные сессии - помечает их и блокирует на фарволе (переходим к пункту 1)\n  \n### Установка\n\nВся установка описана на примере Ubuntu server 14.04\n\nВ последующем подразумевается, что eth0 смотрит в интернет, а eth1 в локалку (к пользователям)\neth1 ip-адрес используем 10.0.0.1\nПример /etc/network/interfaces:\n\n```    \niface lo inet loopback\n\nauto eth0\niface eth0 inet dhcp\n\nauto eth1\niface eth1 inet static\naddress 10.0.0.1\nnetwork 10.0.0.0\nnetmask 255.0.0.0\n```\n    \n\nУстановка необходимых пакетов\n\n```\nsudo add-apt-repository ppa:ondrej/php5-5.6\nsudo apt-get update\nsudo apt-get install python-software-properties conntrack php5 php5-curl php5-json php5-fpm php5-mysql php5-mcrypt \\\n    php5-cli git conntrack nginx mysql-server isc-dhcp-server iptables-persistent\n``` \n\nНастройка dhcp сервера\n  \n```\nsudo sed -i -e 's/INTERFACES=\"\"/INTERFACES=\"eth1\"/' /etc/default/isc-dhcp-server\nsudo sed -i -e 's/#authoritative/authoritative/' /etc/dhcp/dhcpd.conf\n```\n\n```\nsudo vim /etc/dhcp/dhcpd.conf\n```\n\n```\n# Добавить в конец\nsubnet 10.0.0.0 netmask 255.0.0.0 {\nrange 10.0.0.10 10.0.254.254;\noption domain-name-servers 77.88.8.88, 77.88.8.2;\noption routers 10.0.0.1;\noption broadcast-address 10.255.255.255;}\n\n```\n     \nУстановка БД\n```\nmysql -u root\n```\n```\ncreate database smscaptive character set utf8 COLLATE utf8_general_ci;\nexit\n```\n     \nСкачивание и установка данного приложения\n\n```   \nsudo mkdir -p /var/www/apps\ncd /var/www/apps\nsudo git clone https://github.com/avin/gw-sms-captive.git    \ncd ./gw-sms-captive\nsudo chmod -R 777 ./storage\ncurl -sS https://getcomposer.org/installer | sudo php\nsudo php composer.phar install\nsudo php -r \"copy('.env.example', '.env');\"\nsudo php artisan key:generate\nsudo php artisan migrate\nsudo cp ./utils/rmtrack.sh /usr/local/bin/\nsudo chmod +x /usr/local/bin/rmtrack.sh\nsudo chown -R www-data:www-data ../gw-sms-captive\n```\n    \nВ файле .env выставить необходимые параметры (обязательно выставление корректного ключа SMS.RU)    \n\nДобавить в cron\n \n```   \nsudo crontab -u www-data -e\n```\n```\n* * * * * php /var/www/apps/gw-sms-captive/artisan schedule:run \u003e\u003e /dev/null 2\u003e\u00261\n```\n        \n    \nНастройка nginx\n     \n```\nsudo vim /etc/nginx/sites-enabled/default\n```\n        \n```\nserver {\n        listen   80;\n                \n        root /var/www/apps/gw-sms-captive/public;\n        index index.php;        \n\n        location / {\n                 try_files $uri $uri/ /index.php?$query_string;\n        }\n\n        error_page 404 /index.php;\n\n        error_page 500 502 503 504 /50x.html;\n        location = /50x.html {\n              root /usr/share/nginx/www;\n        }\n\n        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000\n        location ~ \\.php$ {\n                try_files $uri =404;\n                fastcgi_pass unix:/var/run/php5-fpm.sock;\n                fastcgi_index index.php;\n                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n                include fastcgi_params;\n        }\n}\n```\n```\nsudo service nginx reload\n```\n\nДобавить пользователя www-data в sudo-users для запуска iptables и conntrack\n\n```\nsudo vim /etc/sudoers\n```\n\n```\n# Добавить в конец\nwww-data ALL=(ALL) NOPASSWD: /sbin/iptables\nwww-data ALL=(ALL) NOPASSWD: /usr/bin/awk\nwww-data ALL=(ALL) NOPASSWD: /usr/local/bin/rmtrack.sh\n# записать и выйти :wq!    \n```\n\nДобавить в файл /etc/sysctl.conf\n\n```\nnet.ipv4.ip_forward=1\n```\n\nПервоночальная настройка iptables\n\n```\nsudo iptables -A POSTROUTING -t nat -o eth0 -j MASQUERADE\nsudo iptables -t mangle -N internet\n\nsudo iptables -t mangle -A PREROUTING -i eth1 -p tcp -m tcp -j internet\nsudo iptables -t mangle -A PREROUTING -i eth1 -p udp -m udp -j internet\n\nsudo iptables -t mangle -A internet -j MARK --set-mark 99\nsudo 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\nsudo 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\nsudo 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\n\nsudo iptables -t nat -I POSTROUTING 1 -j LOG --log-prefix NETFILTER\n\nsudo /etc/init.d/iptables-persistent save \n```\n\nДобавить в /etc/rsyslog.conf\n\n```\n:msg, contains, \"NETFILTER\"       /var/log/iptables.log\n:msg, contains, \"NETFILTER\"     ~\n```\n\nЗакоментировать строку \n```\n$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat\n```\n\n\n### License\n\n[MIT license](http://opensource.org/licenses/MIT)\n\nawk '$0 \u003e= \"2015-11-01T10:22:26.990911-05:00\" \u0026\u0026 $0 \u003c= \"2015-11-01T10:22:27.157133-05:00\"' /var/log/iptables.log\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Favin%2Fgw-sms-captive","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Favin%2Fgw-sms-captive","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Favin%2Fgw-sms-captive/lists"}