Если у вас дома есть дети, возможно, вы чувствовали необходимость заблокировать некоторые нежелательные веб-сайты. Другая распространенная проблемная область - это сайты социальных сетей. Вы можете почувствовать, что дети (и взрослые) тратят слишком много времени на Facebook, Twitter и т. Д. И хотят заблокировать их или, по крайней мере, сделать их доступными только в определенное время дня.
Чтобы сделать это возможным, нам нужен маршрутизатор с фильтром контента - устройство, через которое все наши устройства, такие как ноутбуки, смартфоны и планшеты, подключаются к Интернету. Это устройство также перехватывает веб-сайты, к которым имеют доступ эти устройства, и блокирует их, если они пытаются получить доступ к списку веб-сайтов.
На рынке есть коммерческие, готовые к использованию фильтры контента, но для нас, типа «сделай сам», в этом нет ничего интересного. Таким образом, мы испачкаем руки и настроим Raspberry Pi для этой работы. Мы выбрали Raspberry Pi для этого проекта из-за его крошечного размера и незначительного энергопотребления. Тем не менее, эти инструкции будут работать практически без изменений практически на любом компьютере с Debian Linux или его производным (Ubuntu, Mint и т. Д.).
Отказ от ответственности : это руководство предполагает средний уровень опыта работы с Linux и готовность решать проблемы, если и когда они возникают. Предыдущий опыт работы с командной строкой и межсетевыми экранами является бонусом.
Как это устроено
аппаратные средства
Мы будем использовать Raspberry Pi 3 в качестве фильтра содержимого маршрутизатора. Для этого нам понадобятся два сетевых интерфейса: один для подключения к Интернету, а другой для работы в качестве точки доступа WiFi для подключения других наших устройств. Raspberry Pi 3 имеет встроенный разъем Ethernet и модуль WiFi. Таким образом, в этом сценарии мы можем использовать кабель Ethernet ( eth0 ) для подключения к Интернету, в то время как модуль WiFi ( wlan0 ) будет действовать как горячая точка.
Конечно, подключение к Интернету через Ethernet не всегда возможно. В этом случае вам потребуется совместимый USB- адаптер WiFi ( wlan1 ) для подключения к Интернету, а встроенный модуль WiFi ( wlan0 ) будет действовать как точка доступа. Это конфигурация, которую мы будем использовать в этом руководстве.
Имейте в виду, что хотя Raspberry Pi 3 в основном подходит для домашней установки с несколькими ноутбуками и смартфонами, он не обеспечивает производительность, необходимую для работы в больших офисах . Посмотрите на более мощное оборудование, если к вашему контент-фильтру будет подключаться множество клиентов.
Программного обеспечения
Мы будем использовать превосходный E2guardian для перехвата и фильтрации наших веб-запросов. Поскольку фильтрация содержимого может влиять на производительность (в зависимости от размера списка блоков), мы будем использовать кеш Squid для компенсации этого снижения производительности.
Предпосылки
1. Raspberry Pi 3 с последней установленной версией Raspbian OS и доступом к Интернету. Если вы только начинаете работать с Raspberry Pi, мы рекомендуем прочитать наше руководство о том, как начать работу с Raspberry Pi 3.
2. [Необязательно] USB WiFi Dongle - это необходимо, если и только если вы не можете подключить Raspberry Pi 3 к Интернету с помощью кабеля Ethernet. Если вы планируете использовать WiFi как для подключения к Интернету, так и в качестве точки доступа, это необходимо.
3. Физический доступ к Raspberry Pi - из-за природы этой статьи, единственная ошибка в настройке брандмауэра может заблокировать вас от вашего Pi, если вы используете его в автономном режиме. Поэтому при настройке рекомендуется подключить монитор, клавиатуру и мышь, пока все не будет настроено.
Используйте Raspberry Pi в качестве маршрутизатора
1. Подключите свой Pi к Интернету, используя Ethernet ( eth0 ). Если вы используете вместо этого USB WiFi-ключ (возможно, wlan1 ), подключите его к Интернету. Оставьте встроенный модуль WiFi ( wlan0 ) таким, какой он есть сейчас.
2. Получите необходимое программное обеспечение :
sudo apt установить iptables iptables-persistent hostapd dnsmasq squid3
3. Мы hostapd
чтобы наш Pi мог работать как точка доступа WiFi . Для этого создайте файл конфигурации с помощью вашего любимого текстового редактора, например sudo nano /etc/hostapd/hostapd.conf
, и вставьте содержимое со страницы GitHub.
Некоторые строки, которые вы можете изменить по вкусу:
= RaspberryPiAP SSID
Эта строка определяет, как будет называться точка доступа. Я выбрал RaspberryPiAP
.
wpa_passphrase = beebom.com
Здесь указывается фраза-пароль, используемая для доступа к горячей точке. Я использовал beebom.com
, но рекомендуется поменять его на надежную парольную фразу по вашему выбору.
4. Далее мы dnsmasq
DHCP-сервер, используя dnsmasq
. Отредактируйте файл конфигурации /etc/dnsmasq.conf
и добавьте в конце следующие строки:
[Исходный код] Интерфейс = се, wlan0
нет-интерфейс DHCP = л
Диапазон-DHCP = 192.168.8.20, 192.168.8.254, 255.255.255.0, 12h [/ исходный код]
Это заставляет интерфейс на wlan0
(встроенный модуль WiFi) раздавать IP-адреса клиентам в диапазоне от 192.168.8.20 до 192.168.8.254 .
5. Настройте статический IP-адрес для встроенного модуля WiFi wlan0
. Откройте файл /etc/network/interfaces
. Вероятно, это выглядит примерно так (выделено мной):
[исходный код] исходный каталог /etc/network/interfaces.d
авто ло
iface lo inet loopback
iface eth0 inet инструкция
allow-hotplug wlan0
iface wlan0 inet инструкция
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf
allow-hotplug wlan1
iface wlan1 inet инструкция
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf[/sourcecode]
Здесь найдите жирным шрифтом wlan0
, wlan0
, и измените их так, чтобы файл выглядел следующим образом:
[исходный код] исходный каталог /etc/network/interfaces.d
авто ло
iface lo inet loopback
iface eth0 inet инструкция
allow-hotplug wlan0
iface wlan0 inet статический
hostapd /etc/hostapd/hostapd.conf
адрес 192.168.8.1
маска сети 255.255.255.0
allow-hotplug wlan1
iface wlan1 inet инструкция
wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf[/sourcecode]
Это устанавливает статический IP-адрес 192.168.8.1
на wlan0. Запомните этот адрес, так как этот адрес мы будем использовать для связи с нашим Raspberry Pi в дальнейшем .
6. Теперь настройте пересылку IP . Отредактируйте файл /etc/sysctl.conf
и добавьте в него следующую строку:
net.ipv4.ip_forward = 1
7. Теперь мы настроим трансляцию сетевых адресов (NAT) в нашем брандмауэре. Для этого введите следующие 2 команды:
sudo iptables -t nat -A POSTROUTING -s 192.168.8.0/24! -d 192.168.8.0/24 -j MASQUERADE sudo iptables-save | sudo tee /etc/iptables/rules.v4
Первая команда устанавливает NAT, а вторая сохраняет нашу текущую конфигурацию брандмауэра в файл /etc/iptables/rules.v4
. Это гарантирует, что конфигурация сохраняется при перезагрузках.
8. В этот момент перезагрузите Raspberry Pi . Это сделано для того, чтобы убедиться, что все изменения, которые мы внесли в файлы конфигурации, работают.
9. После перезагрузки вы сможете увидеть вновь созданную точку доступа RaspberryPiAP
(если вы не изменили имя на шаге 3) на других своих устройствах, таких как ноутбуки и смартфоны. Вы можете подключиться к нему, используя указанный вами пароль, и получить доступ к Интернету.
Это все, что вам нужно сделать, если вам нужен простой, маломощный маршрутизатор. Если вы хотите настроить фильтр содержимого, читайте дальше.
Настройка фильтра содержимого с помощью E2guardian
E2guardian отсутствует в стандартных репозиториях Raspbian. Чтобы установить его, перейдите на страницу проекта Github и загрузите файл, заканчивающийся на armhf.deb
. Теперь откройте «Терминал», перейдите в папку « Загрузки » (или в другое место, куда вы решили загрузить файл) и установите его:
cd ~ / Загрузки sudo dpkg -i ./e2guardian_*_jessie_armhf.deb
Вероятно, вы увидите несколько ошибок об отсутствующих пакетах при установке E2guardian. Чтобы исправить это, дайте завершить установку и введите следующую команду:
sudo apt-get install -f
Использование списков контента
В /etc/e2guardian/lists
есть несколько списков. Эти файлы включают в себя bannedextensionlist, bannediplist, bannedphraselist, bannedsitelist, bannedurllist, список исключений и многое другое. Эти файлы правильно документированы с комментариями. Посмотрите на них, чтобы ознакомиться.
В качестве примера, давайте предположим, что вы хотите заблокировать некоторые популярные социальные сети . Откройте файл /etc/e2guardian/lists/bannedsitelist
и в блоке Blanket SSL / CONNECT (поскольку эти веб-сайты используют https вместо обычного http ) добавьте следующие строки:
facebook.com twitter.com reddit.com
Теперь перезагрузите сервис E2guardian с помощью команды sudo service e2guardian reload
( вам придется запускать эту команду каждый раз, когда вы изменяете файлы конфигурации ). Любые клиенты, использующие контент-фильтр, теперь не смогут получить доступ к этим веб-сайтам. Даже мобильные сайты (например, m.twitter.com) и специальные приложения для смартфонов не будут работать.
E2guardian также блокирует порно по умолчанию. Если вы хотите разрешить это (эй, мы не судим), откройте файл /etc/e2guardian/lists/bannedphraselist
и найдите следующую строку:
.Включают
Прокомментируйте это, добавив хэш (символ #) в начало, чтобы он выглядел так:
#.Включают
Снова перезагрузите конфигурацию с помощью sudo service e2guardian reload
, и все готово.
Настройка клиентов
Теперь, когда наш прокси-сервер настроен, мы можем перейти к настройке клиентов. Чтобы использовать фильтр содержимого, все клиенты должны быть подключены к точке доступа Rapberry Pi и настроены для использования прокси. Настройка прокси-сервера отличается для всех операционных систем и устройств. Однако мы покажем, как настроить его на Windows и Android, так как они более популярны.
Windows
Перейдите в Панель управления> Сеть и Интернет> Свойства обозревателя . В открывшемся окне перейдите на вкладку « Подключения » и нажмите « Настройки локальной сети» .
Здесь нажмите « Дополнительно» и введите 192.168.8.1
в качестве адреса прокси-сервера и 8080
в качестве порта. Убедитесь, что установлен флажок Использовать один и тот же прокси-сервер для всех протоколов . Нажмите ОК .
Это все, что вам нужно сделать. Самые популярные веб-браузеры, такие как Google Chrome и Firefox, автоматически выбирают параметры прокси-сервера системы.
Android
Зайдите в Настройки системы> WiFi . Теперь нажмите и удерживайте точку доступа Raspberry Pi и выберите « Изменить сеть» . В разделе « Дополнительные параметры» установите для параметра « Прокси» значение « Вручную» . Теперь в поле « Имя хоста прокси» введите IP-адрес Pi 192.168.8.1
. Под прокси-портом введите 8080
и нажмите « Сохранить» .
Теперь вы можете проверить конфигурацию прокси. Попробуйте зайти на сайт в своем черном списке - вы увидите страницу «Отказано в доступе», например:
Принудительное использование прокси
Пока что мы полагаемся на то, что клиенты хорошо играют и используют Интернет через контент-фильтр. Конечно, это редко случается в реальном мире. Таким образом, чтобы заставить всех клиентов проходить через прокси, выполните следующие команды:
sudo iptables -A PREROUTING -t nat -p tcp - порт назначения 80 -j REDIRECT --to-ports 8080 sudo iptables -A PREROUTING -t nat -p tcp --destination-порт 443 -j REDIRECT --to- порты 8080 sudo iptables-save | sudo tee /etc/iptables/rules.v4
Это автоматически перенаправит весь трафик http (порт 80) и https (порт 443) в точке доступа Raspberry Pi к прокси фильтра содержимого. Теперь без настройки параметров прокси на ваших устройствах они вообще не смогут получить доступ к защищенным веб-сайтам https, таким как Facebook, Gmail, Twitter и т. Д. Это гарантирует, что любой, кто хочет подключиться к вашей точке доступа Pi, должен пройти через прокси.
Это все, что вам нужно знать для базового использования фильтра содержимого. Если вы хотите изучить некоторые дополнительные функции, читайте дальше.
Сценарии расширенного использования
Настройка фильтра на основе времени
Допустим, вы хотите заблокировать сайты, которые мы упоминали в разделе « Использование списков контента » выше, но только в определенное время дня . Лично я предпочитаю блокировать Reddit, Facebook и Twitter в рабочие часы (с 9:00 до 17:00) в будние дни, потому что это кошмар производительности.
Откройте файл /etc/e2guardian/lists/bannedsitelist
и добавьте в него следующую строку:
время: 9 0 17 0 01234
Эта строка работает следующим образом: таймер начинается с 9 (9 утра) 0 (00 минут), до 17 (17:00 в 24-часовом формате) 0 (00 минут), с 0 (понедельник) до 4 (пятница).
Давайте возьмем другой пример:
время: 10 30 20 45 024
Это заблокирует настроенные сайты с 10:30 (10 30) до 20:45 (20 45) в понедельник (0), среду (2) и пятницу (4).
Предоставление определенных IP-адресов в обход прокси
Можно разрешить определенным IP-адресам обходить фильтр содержимого. Это можно настроить путем настройки брандмауэра . Вы могли заметить, что в нашем dnsmasq.conf
мы только устанавливаем горячую точку, чтобы назначать клиентам IP-адреса с 192.168.8.20 по 192.168.8.254 . Это означает, что адреса с 192.168.8.2 по 192.168.8.19 не будут автоматически назначены ни одному клиенту (мы не можем использовать 192.168.8.1, потому что это то, что использует сам Raspberry Pi).
Для этого сначала настройте статический IP-адрес на устройстве, к которому вы хотите предоставить полный доступ. Например, чтобы настроить статический IP-адрес 192.168.8.2 на компьютере с Windows, используйте эти параметры:
Теперь на вашем Raspberry Pi выполните следующие команды.
sudo iptables -t nat -A ПРЕДУПРЕЖДЕНИЕ -p tcp -s 192.168.8.2 - порт назначения 80 -j ВОЗВРАЩЕНИЕ sudo iptables -t nat -A ПРЕДУПРЕЖДЕНИЕ -p tcp -s 192.168.8.2 - порт назначения 443 -j ВОЗВРАТ
Теперь отключите использование прокси на вашем устройстве и попробуйте открыть заблокированный сайт. Вы должны быть в состоянии открыть его. Если есть еще IP-адреса, которые вы хотите добавить в белый список, снова выполните две вышеуказанные команды, но замените IP-адрес на тот, который вы хотите. Если вы удовлетворены белым списком, выполните следующую команду, чтобы сохранить конфигурацию брандмауэра:
sudo iptables-save | sudo tee /etc/iptables/rules.v4
Важно помнить, что никому не следует сообщать IP-адреса из белого списка. В противном случае они могут просто настроить свое устройство на этот IP-адрес, чтобы обойти прокси.
Проблемы безопасности
Так как ваш Raspberry Pi будет точкой входа и выхода для всех ваших коммуникаций, важно обеспечить его безопасность. Вот несколько советов о том, как улучшить безопасность. Имейте в виду, что это всего лишь основные указатели, а не полный список ошибок безопасности. Степень безопасности будет зависеть от характера вашей сети (дома, небольшого офиса и т. Д.) И от того, насколько вредны пользователи.
Отключить ненужные сервисы
Поскольку это маршрутизатор, лучше всего запускать только те службы, которые нам нужны. Больше запущенных сервисов означает больше уязвимостей, которые потенциально могут быть использованы. Определенно не используйте эту систему в качестве обычного рабочего стола .
Перейдите в Меню> Настройки> Конфигурация Raspberry Pi . На вкладке « Интерфейсы » отключите все службы, которые вам не нужны.
Изменить пароль по умолчанию
Новая версия Raspbian поставляется с паролем по умолчанию «raspberry» для пользователя по умолчанию «pi». Рекомендуется изменить это на более безопасный пароль. Чтобы изменить его, откройте терминал и выполните следующую команду:
ПАРОЛЬ
Снимите монитор и другие периферийные устройства
Поскольку все, что будет работать на этом Pi, это программное обеспечение, необходимое для его использования в качестве маршрутизатора и веб-фильтра, нам не нужен монитор или другие периферийные устройства, такие как мышь и клавиатура, к нему подключенные. Если вам нужно изменить настройки и тому подобное, вы всегда можете использовать SSH или подключить монитор и клавиатуру по мере необходимости.
Отключить автоматический вход
Raspbian настроен для автоматического входа в систему с учетными данными пользователя pi без запроса пароля. Это может быть хорошо для общего семейного рабочего стола, но опасно для маршрутизатора. Чтобы отключить это, на рабочем столе Raspbian перейдите в Меню> Настройки> Raspberry Pi Configuration . На вкладке « Система » перед заголовком « Автоматический вход» снимите флажок « Вход в систему как пользователь« пи » .
В том же диалоговом окне также рекомендуется установить для параметра Boot значение To CLI . Это сэкономит ресурсы, поскольку нам не нужен графический интерфейс на маршрутизаторе. Если вы по какой-либо причине хотите использовать рабочий стол, войдите под своим именем пользователя и запустите команду startx
чтобы включить графический интерфейс.
Устранение типичных проблем
Интерфейсы продолжают переименовываться
Это очень распространено, если вы используете два беспроводных интерфейса на вашем Pi. Если вы используете Ethernet для подключения вашего Pi к Интернету, вы можете смело игнорировать этот раздел . Проблема в том, что оба беспроводных интерфейса ( wlan0 и wlan1 ) иногда меняют имена после перезагрузки. То есть встроенный WiFi-модуль wlan0 переименовывается в wlan1, и наоборот. Это, конечно, большая проблема, поскольку мы полагаемся на то, что они имеют постоянное имя для наших файлов конфигурации. Вот как сделать это согласованным при перезагрузке:
1. Узнайте MAC-адрес ваших интерфейсов . Запустите команду ifconfig | grep HWaddr
ifconfig | grep HWaddr
на вашем Raspberry Pi. Вы увидите вывод, подобный следующему:
Запишите текст справа от слова «HWaddr» в разделах wlan0 и wlan1 . Вы можете смело игнорировать раздел eth0 . Это MAC-адреса ваших беспроводных интерфейсов.
Если вы не уверены, какой MAC-адрес принадлежит какому интерфейсу, просто отключите USB-адаптер WiFi и снова введите команду. Интерфейс WLAN, который появляется сейчас, - это ваш встроенный интерфейс Wi-Fi, а другой - USB.
2. Создайте новый файл /etc/udev/rules.d/10-network.rules
используя ваш любимый текстовый редактор. Например :
sudo nano /etc/udev/rules.d/10-network.rules
3. Введите следующий текст в этот файл. Замените xx: xx: xx: xx и т. Д. На соответствующий MAC-адрес :
[исходный код] # Установите встроенный модуль WiFi как wlan0. Замените xx: xx: xx и т. Д. На
# MAC-адрес встроенного модуля
SUBSYSTEM == "net", ACTION == "add", ATTR {address} == "xx: xx: xx: xx: xx: xx", NAME = "wlan0"
# Установите USB-адаптер WiFi как wlan1. Замените yy: yy: yy и т. Д. На
MAC-адрес USB-ключа
SUBSYSTEM == "net", ACTION == "add", ATTR {address} == "yy: yy: yy: yy: yy: yy", NAME = "wlan1" [/ sourcecode]
Убедитесь, что MAC-адрес встроенного WiFi-интерфейса соответствует wlan0, а USB WiFi - к wlan1, поскольку это соглашение, которому мы следуем в этом руководстве.
4. Перезагрузите Raspberry Pi. Ваши интерфейсы начнут с правильного имени сейчас.
Сброс настроек брандмауэра
Другая распространенная проблема - плохо настроенный межсетевой экран. В зависимости от конфигурации вашей сети может потребоваться несколько попыток, прежде чем вы получите правильный брандмауэр Если в какой-то момент вы считаете, что могли испортить конфигурацию брандмауэра, выполните следующие команды, чтобы начать с нуля:
sudo iptables --flush sudo iptables - таблица nat --flush sudo iptables - цепь удаления sudo iptables - таблица nat --delete-chain
Это удалит все настройки брандмауэра. Теперь вы можете начать настройку брандмауэра с нуля. Когда вы будете удовлетворены, запустите команду sudo iptables-save | sudo tee /etc/iptables/rules.v4
sudo iptables-save | sudo tee /etc/iptables/rules.v4
чтобы сделать конфигурацию постоянной.
Используйте Raspberry Pi в качестве маршрутизатора и фильтра содержимого
Это все, что делает Raspberry Pi мощным маршрутизатором и прокси-фильтром контента. Точные файлы конфигурации, которые мы использовали для нашей настройки, вы можете найти на нашей странице GitHub. Дайте нам знать, как это работает для вас. Если что-то не работает, как ожидалось, или шаг кажется слишком запутанным, не стесняйтесь задавать нам вопрос в разделе комментариев ниже.