ВКР_Плотникова_24Б (1209280), страница 5
Текст из файла (страница 5)
Рисунок 4.1.2.2 – Отличия механизмов работы iptables и firewalld
Настройки брандмауэра хранятся в скрипте first.sh, который лежит в корневой папке сервера. При запуске либо перезагрузке сервера запускается данный скрипт. Текст скрипта first.sh:
#!/bin/bash
echo "*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
#bind
-A INPUT -j ACCEPT -p udp -m state --state NEW -m udp --dport 53
#httpd
-A INPUT -j ACCEPT -p tcp -m state --state NEW -m tcp -m multiport --dports 80,443
#ssh
-A INPUT -j ACCEPT -p tcp -m state --state NEW -m tcp --dport 22
#samba
-A INPUT -j ACCEPT -p udp -m state --state NEW -m udp -m multiport --dports 137,138
-A INPUT -j ACCEPT -p tcp -m state --state NEW -m tcp -m multiport --dports 139,445
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
# Интерфейс eno16777736 смотрит во внешнюю сеть
*nat
-A PREROUTING -i eno33554960 -p tcp -m multiport --dports 80 -j REDIRECT --to-port 80
-A PREROUTING -i eno33554960 -p tcp -m multiport --dports 443 -j REDIRECT --to-port 443
-A POSTROUTING -o eno16777736 -j MASQUERADE
COMMIT" > /etc/sysconfig/iptables
systemctl reload iptables
exit 0
Для того, чтобы внести IP-адрес пользователя в список разрешенных в iptables, используется скрипт allowHost.sh, который запускается веб-приложением при прохождении всех условий. Текст скрипта allowHost.sh:
#!/bin/bash
#Добавляет разрешающее правило из iptables
#Скрипт принимает 2 параметра
#1 - ip адрес
#2 - Mac адрес (необязательно)
if [ -z "$2" ]
then
iptables -I FORWARD 1 -s $1 -j LOG -m state --state NEW
iptables -I FORWARD 2 -s $1 -j ACCEPT
iptables -t nat -I PREROUTING 1 -s $1 -j ACCEPT
else
iptables -I FORWARD 1 -s $1 -m mac --mac $2 -j LOG -m state --state NEW
iptables -I FORWARD 2 -s $1 -m mac --mac $2 -j ACCEPT
iptables -t nat -I PREROUTING 1 -s $1 -m mac --mac $2 -j ACCEPT
fi
exit 0
По истечению времени, назначенного администратором, для удаления записи из iptables, используется скрипт deniedHost.sh.
Он запускается службой, работающей на сервере, которая «пробегает» по записям в таблице базы данных MySQL и проверяет текущее время и дату с датой и временем в таблице.
Текст скрипта deniedHost.sh:
#!/bin/bash
#Убирает разрешающее правило из iptables
#Скрипт принимает 2 параметра
#1 - ip адрес
#2 - Mac адрес (необязательно)
if [ -z "$2" ]
then
iptables -D FORWARD -s $1 -j LOG -m state --state NEW
iptables -D FORWARD -s $1 -j ACCEPT
iptables -t nat -D PREROUTING -s $1 -j ACCEPT
else
iptables -D FORWARD -s $1 -m mac --mac $2 -j LOG -m state --state NEW
iptables -D FORWARD -s $1 -m mac --mac $2 -j ACCEPT
iptables -t nat -D PREROUTING -s $1 -m mac --mac $2 -j ACCEPT
fi
exit 0
4.1.3 Теоретические и алгоритмические сведения о концепции проектирования MVC для веб-приложений
Для реализации данного программного модуля было решено разработать веб-приложение, расположенный на локальном сервере и обеспечивающий контролируемый доступ к ресурсам сети Интернет с обязательной регистрацией пользователей. Во время подключения к публичной сети Wi-Fi, должен срабатывать механизм, перенаправляющий пользователя на данный веб-приложение. Далее после ввода номера телефона, необходимо посылать через смс-шлюз сообщение на телефон пользователя, содержащее код авторизации. Код и номер телефона вносятся в отдельную таблицу в базе данных, содержащую пару номер телефона/код, чтобы в случае обрыва связи можно было восстановить доступ, посредством повторного ввода кода. После регистрации данные пользователя будут внесены в таблицу, содержащую в себе: номер телефона, MAC-адрес устройства, IP-адрес устройства в локальной сети предприятия, дату подключения и дату, по истечении которой доступ к сети Интернет будет ограничен, и потребуется повторный ввод номера телефона, а также идентификатор типа регистрации.
Из вышесказанного следует, что необходимо выбрать схему проектирования данного веб-приложения. Было решено взять за основу MVC (англ. Model-View-Controller – Модель-Представление-Контроллер) – конструкционный шаблон проектирования, который описывает способ построения структуры приложения, сферы ответственности и взаимодействие каждой части в данной структуре (рисунок 4.1.3.1).
Рисунок 4.1.3.1 – Визуальное представление устройства конструкционного шаблона проектирования MVC
Идея, которая лежит в основе этой концепции, очень проста: используется несколько шаблонов проектирования, с помощью которых модель приложения, пользовательский интерфейс и взаимодействие с пользователем разделены на три отдельных компонента. Благодаря такому разделению модификация одного из компонентов оказывает минимальное воздействие на остальные. Данная схема проектирования часто используется для построения архитектурного каркаса, когда переходят от теории к реализации в конкретной предметной области.
Впервые данная концепция была описана Трюгве Реенскаугом в 1979 году, но для другого окружения. Шаблон, который мы будем использовать является адаптированной версией оригинального шаблона к веб-разработке.
Основной целью концепции MVC является отделение бизнес-логики (модели данных) от ее визуализации (представления). Это разделение позволяет нам повторно использовать модель, то есть видеть одни и те же данные в различных контекстах или с различных точек зрения. В частности, выполняются следующие задачи:
-
к одной модели можно присоединить несколько представлений, при этом не затрагивая реализацию модели;
-
не затрагивая реализацию представлений, можно изменить реакции на действия пользователя – для этого достаточно использовать другой контроллер;
-
ряд разработчиков специализируется только в одной из областей: либо разрабатывают графический интерфейс, либо занимаются разработкой бизнес-логики. Данный конструкционный шаблон позволяет добиться того, что программисты, занимающиеся разработкой бизнес-логики (модели), вообще не будут осведомлены о том, какое представление будет использоваться.
Важно отметить, что как представление, так и контроллер зависят от модели; однако модель не зависит ни от представления, ни от контроллера. Тем самым достигается назначение такого разделения: оно позволяет строить модель независимо от визуального представления, а также создавать несколько различных представлений для одной модели. Функции каждого элемента кратко рассмотрены на рисунке 4.1.3.2.
Рисунок 4.1.3.2 – Элементы конструкционного шаблона проектирования MVC
Контроллер управляет запросами пользователя (получаемые в виде запросов HTTP GET или POST, когда пользователь нажимает на элементы интерфейса для выполнения различных действий). Его основная функция – вызывать и координировать действие необходимых ресурсов и объектов, нужных для выполнения действий, задаваемых пользователем. Обычно контроллер вызывает соответствующую модель для задачи и выбирает подходящий вид.
Модель – это данные и правила, которые используются для работы с данными, которые представляют концепцию управления приложением. В любом приложении вся структура моделируется как данные, которые обрабатываются определённым образом.
Модель даёт контроллеру представление данных, которые запросил пользователь (сообщение, страницу книги, фотоальбом, и тому подобное). Модель данных будет одинаковой, вне зависимости от того, как мы хотим представлять их пользователю. Поэтому мы выбираем любой доступный вид для отображения данных.
Модель содержит наиболее важную часть логики нашего приложения, логики, которая решает задачу, с которой мы имеем дело (форум, магазин, банк, и тому подобное). Контроллер содержит в основном организационную логику для самого приложения (очень похоже на ведение домашнего хозяйства).
Вид обеспечивает различные способы представления данных, которые получены из модели. Он может быть шаблоном, который заполняется данными. Может быть несколько различных видов, и контроллер выбирает, какой подходит наилучшим образом для текущей ситуации.
Веб приложение обычно состоит из набора контроллеров, моделей и видов. Контроллер может быть устроен как основной, который получает все запросы и вызывает другие контроллеры для выполнения действий в зависимости от ситуации.
Самое очевидное преимущество, которое мы получаем от использования концепции MVC – это чёткое разделение логики представления (интерфейса пользователя) и логики приложения.
Поддержка различных типов пользователей, которые используют различные типы устройств является общей проблемой наших дней. Предоставляемый интерфейс должен различаться, если запрос приходит с персонального компьютера или с мобильного телефона. Модель возвращает одинаковые данные, единственное различие заключается в том, что контроллер выбирает различные виды для вывода данных.
Помимо изолирования видов от логики приложения, концепция MVC существенно уменьшает сложность больших приложений. Код получается гораздо более структурированным, и, тем самым, облегчается поддержка, тестирование и повторное использование решений.
Для разработки был выбран язык программирования PHP, поскольку является гибким средством, а также все действия происходят на сервере, что позволяет снизить нагрузку на устройство пользователя. Не зависимо от типа и модификации устройства пользователя вид веб-приложения будет всегда одинаковым. Было решено использовать фреймворк Yii2.
Yii – это высокоэффективный, основанный на компонентной структуре PHP-фреймворк для быстрой разработки крупных веб-приложений. Он позволяет максимально применить концепцию повторного использования кода –MVC-концепцию, и может существенно ускорить процесс разработки.
4.1.4 Система управления базами данных MySQL
MySQL – это свободная система управления реляционными базами данных.
Реляционная база данных хранит информацию в отдельных таблицах, а не в одном большом хранилище, благодаря чему достигается высокая производительность и гибкость. Часть "SQL" слова "MySQL" обозначает "Structured Query Language" ("Язык структурированных запросов"). SQL – наиболее общий стандартизованный язык доступа к базам данных; он соответствует стандарту ANSI/ISO SQL. Стандарт SQL впервые был принят в 1986 году и на настоящее время существует несколько его версий.
Разработку и поддержку MySQL осуществляет корпорация Oracle.
Продукт распространяется как под GNU General Public License, так и под собственной коммерческой лицензией. Помимо этого, разработчики создают функциональность по заказу лицензионных пользователей.
MySQL разработал Михаэль Видениус. MySQL является относительно небольшой и быстрой реляционной СУБД. Основные цели MySQL – быстродействие и ошибкоустойчивость.
Основные преимущества:
-
многопоточность. Поддержка нескольких одновременных запросов;
-
оптимизация связей с присоединением многих данных за один проход;
-
записи фиксированной и переменной длины;
-
ODBC драйвер в комплекте с исходником;
-
гибкая система привилегий и паролей;
-
до 16 ключей в таблице. Каждый ключ может иметь до 15 полей;
-
поддержка ключевых полей и специальных полей в операторе CREATE;
-
поддержка чисел длинной от 1 до 4 байт (ints, float, double, fixed), строк переменной длины и меток времени;
-
интерфейс с языками C и perl;
-
основанная на потоках, быстрая система памяти;
-
утилита проверки и ремонта таблицы (isamchk);
-
все данные хранятся в формате ISO8859_1;
-
все операции работы со строками не обращают внимания на регистр символов в обрабатываемых строках;
-
псевдонимы применимы как к таблицам, так и к отдельным колонкам в таблице;
-
все поля имеют значение по умолчанию. INSERT можно использовать на любом подмножестве полей;
-
легкость управления таблицей, включая добавление и удаление ключей и полей.
5 Руководство пользователя
При первом подключении к открытой сети Wi-Fi происходит переход на страницу авторизации (рисунок 5.1).
Рисунок 5.1 – Страница авторизации