Интернет шлюз на Ubuntu / Debian

Обновлено: 17.01.2024 Опубликовано: 23.01.2019
- Включение redirect на уровне ядра.
- Настройкой брандмауэра.
- Опционально, настройка проброса портов.
Настройка ядра системы
Открываем следующий файл:
Добавляем в него строку:
sysctl -p /etc/sysctl.d/gateway.conf
Если мы получим ошибку sysctl command not found, либо нужно установить пакет:
apt install procps
либо перезайти в режим суперпользователя с загрузкой его окружения:
В случае с единственным сетевым адаптером больше ничего делать не потребуется — Ubuntu начнет работать как Интернет-шлюз.
В случае с несколькими сетевыми адаптерами, настраиваем сетевой экран.
Настройка брандмауэра
Как правило, управление брандмауэром netfilter в Linux на базе Debian выполняется с помощью утилиты iptables.
Iptables
Предположим, что сеть Интернет настроена через интерфейс ens160, а локальная сеть доступна через ens32. Создадим правило:
iptables -t nat -I POSTROUTING -o ens160 -j MASQUERADE
Если на сервере для доступа в локальную и глобальную сети используются разные сетевые интерфейсы, нам может понадобиться создать еще два правила.
iptables -I FORWARD -i ens32 -o ens160 -m state —state RELATED,ESTABLISHED -j ACCEPT
iptables -I FORWARD -i ens32 -o ens160 -j ACCEPT
* интерфейс ens160, как условились ранее, используется для доступа в Интернет. Интерфейс ens32 — локальная сеть.
Сохраняем настройки iptables:
apt install iptables-persistent
Проброс портов (Port Forwarding)
Необходим для перенаправление сетевых запросов на сервер, стоящий за NAT и не имеющий прямого выхода во внешнюю сеть.
Iptables
Настройка выполняется двумя командами:
iptables -t nat -I PREROUTING -p tcp -m tcp -d 10.8.232.111 —dport 25 -j DNAT —to-destination 192.168.0.15:8025
iptables -t nat -I POSTROUTING -p tcp -m tcp -s 192.168.0.15 —sport 8025 -j SNAT —to-source 10.8.232.111:25
iptables -t nat -I PREROUTING -p tcp -i eth0 —dport 25 -j DNAT —to-destination 192.168.0.15:8025
iptables -I FORWARD -p tcp -d 192.168.0.15 —dport 8025 -m state —state NEW,ESTABLISHED,RELATED -j ACCEPT
* где eth0 — внешний сетевой интерфейс.
iptables -I INPUT 1 -p tcp —dport 8025 -j ACCEPT
* обратите внимание, что мы разрешаем порт, на который переводим запрос, так как цепочки POSTROUTING и PREROUTING работают до цепочки FILTER, а потому открывать нужно не входящий порт (25), а тот, на который назначается пакет (8025).
Не забываем сохранить правила:
Шаблон с переменными
Для удобства ввода команд, можно использовать переменные:
Адрес, на который переводим запрос:
Порт внешний, на котором слушает NAT:
Порт сервера, куда переводим запрос:
Интерфейс NAT, куда приходит запрос:
И после вводим команды для настройки брандмауэра:
iptables -t nat -I PREROUTING -p $ -i $ —dport $ -j DNAT —to-destination $:$
iptables -I FORWARD -p $ -d $ —dport $ -m state —state NEW,ESTABLISHED,RELATED -j ACCEPT
Не забываем сохранить правила:
Интернет-шлюз на базе Ubuntu Server / Internet Connection Sharing + Squid, Firestarter
Имеется сервер и подключенные к нему клиенты по локальной сети. Сервер имеет выход в интернет. Необходимо устроить раздачу интернета сервером.
Основная часть
Собственно, установка шлюза на базе Ubuntu Server занимает не больше 10-15 минут.
PPPoE
Если Вы используете для подключения по локальной сети PPPoE, вам необходимо просто-напросто ввести в терминале команду:
sudo pppoeconf
и дать ответы на вопросы. По окончании работы pppoeconf соединение должно быть установлено.
L2TP
Если Вы используете для подключения к провайдеруL2TP, то для этого понадобится установить xl2tpd — демон l2tp и pppd — демон ppp. 1)
sudo apt-get install pppd xl2tpd
Редактируем файл настроек xl2tpd:
sudo nano /etc/xl2tpd/xl2tpd.conf
[global] access control = yes # разрешать соединения только с адресами из lac секций [lac beeline] lns = tp.internet.beeline.ru # адрес для подключения redial = yes # "перезвонить" при потере связи redial timeout = 10 # время между попытками переустановить связь после обрыва(в секундах) max redials = 100 # максимальное количество попыток autodial = yes # устанавливать соединение при запуске xl2tpd require pap = no # не использовать pap аутентификацию require chap = yes # использовать chap аутентификацию require authentication = no # не использовать аутентификацию удаленного сервера name = 000ххххххх # логин pppoptfile = /etc/ppp/options.l2tp # файл с опциями ppp ppp debug = yes # вывод подробной информации pppd в syslog tx bps = 100000000 # скорость туннеля
sudo nano /etc/ppp/options.xl2tp
000ххххххх #номер договора noauth nobsdcomp # nodeflate # параметры сжатия пакетов nopcomp # noaccomp # connect /bin/true remotename beeline # метка для удаленного сервера ipparam beeline # дополнительный параметр для системных скриптов defaultroute # маршрут по умолчанию через ppp интерфейс replacedefaultroute mtu 1460
Записываем в файл chap-secrets логин и пароль:
sudo nano /etc/ppp/chap-secrets:
login * password
sudo service xl2tpd start
соединение должно быть установлено.
На установленной машине Интернет появился. Теперь надо добавить включить все репозитарии в /etc/apt/source.list и выполнить:
sudo apt-get update
Для доступа с других машин вашей локальной сети необходимо поставить всего лишь навсего два малюсеньких пакета:
Установите и запустите пакет для раздачи пакетов по сети:
sudo apt-get install dnsmasq
Или, вы можете использовать DNS провайдера.
Так же необходимо установить пакет ipmasq для NAT:
sudo apt-get install ipmasq
Прокси-сервер squid
Squid — программный пакет, реализующий функцию кэширующего прокси-сервера для протоколов HTTP , FTP , Gopher и HTTPS.
Для установки прокси-сервера squid необходимо выполнить команду:
apt-get install squid
Теперь редактируем конфигурационный файл. Открываем /etc/squid/squid.conf , ищем нужные строки и корректируем следующим образом:
. http_port 3128 #Перезапускаем прокси-сервер командой:
/etc/init.d/squid restartНастраиваем браузеры на клиентских машинах на использование прокси: адрес прокси - пишем IP адрес интерфейса, обращенного в локальную сеть. Скорее всего,это будет 192.168.0.1, порт прокси - указанный в конфигурационном файле 3128.
Желающим сделать прозрачное проксирование необходимо изменить в файле настроек squid.conf одну строчку:
. http_port 3128 transparent .Затем для заворачивания нужных портов на прокси-сервер прописывается правило:
iptables -t nat -A PREROUTING -i eth0 ! -d 192.168.0.0/24 -p tcp -m multiport --dports 80,8080 -j DNAT --to-destination 192.168.0.1:3128Раздача Интернета в локальную сеть c помощью firestarter
Firestarter – это средство для создания межсетевых экранов для Linux, использующее GNOME. С помощью мастера можно создать базовый межсетевой экран, в дальнейшем его возможности расширяются с помощью динамических правил. Несколькими щелчками мыши можно открывать и закрывать порты или скрывать сервисы, оставляя доступ только к некоторым из них. В программе имеется монитор, который в режиме реального времени показывает попытки поиска злоумышленниками открытых портов.
Для начала установим firestarter :
sudo apt-get install firestarterПри настройке указываем интерфейс с Интернетом — ppp0 раздавать на eth1 2)
Раздача Интернета в локальную сеть (ICS: Internet Connection Sharing)
Для организации совместного доступа в Интернет с помощью общего доступа к подключению Интернета на сервере должна быть одна сетевая карта для подключения к внутренней сети и еще одна карта или модем для подключения к Интернету.
На сервере
Для настройки общего доступа к подключению Интернета необходимо выполнить на сервере указанные ниже действия.
Исходные данные: Оба компьютера соединены по сети. На сервере установлено две сетевые карты:
eth0 - к ней подключен интернет;
eth1 - к ней подключена локальная сеть.
IP: 192.168.0.1
Netmask: 255.255.255.0Это можно сделать вручную или используя терминал:
sudo ifconfig eth1 192.168.0.1 netmask 255.255.255.0 sudo ifconfig eth1 upРазрешите направление пакетов. Чтобы сделать это, отредактируйте /etc/sysctl.conf . Откройте сам файл командой:
sudo gedit /etc/sysctl.confА затем вставьте следующую строчку:
net.ipv4.ip_forward=1Для того, чтобы применить это правило до перезагрузки выполните:
sysctl -w net.ipv4.ip_forward="1"Затем добавляем правило для NAT:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEГде eth0 название вашего интерфейса через который выходите в интернет. Измените его если используете другой интерфейс (напрмер ppp0) тогда команда будет выглядит иначе:
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADEУстановите и запустите пакет для раздачи пакетов по сети:
sudo apt-get install dnsmasqИли, вы можете использовать DNS провайдера.
Чтобы NAT работал после перезагрузки сохраняем настройки iptables в файл:
iptables-save > /etc/iptables.up.rulesИ добавляем в конец файла:
sudo gedit /etc/network/interfacesЭту строчку, для автоматической подгрузки правил:
pre-up iptables-restore < /etc/iptables.up.rulesТакже в этот файл добавляем правила роутинга:
up route add -net 192.168.0.0 netmask 255.255.255.0 dev eth1 up route add -net 0.0.0.0 netmask 255.255.255.255 dev eth0На клиентском компьютере
Установите на втором компьютере:
IP: 192.168.0.2
Netmask/Маска: 255.255.255.0
Gateway/Шлюз: 192.168.0.1
DNS : 192.168.0.1Второй компьютер теперь должен быть подключён к интернету.
Если компьютеров несколько
Можно использовать dnsmasq как DHCP сервер. Для этого на сервере редактируем файл dnsmasq.conf:
sudo nano /etc/dnsmasq.confinterface=eth1 # интерфейс, который будет слушать dnsmasq listen-address=192.168.0.1 # адрес, на котором будет находиться dnsmasq bind-interfaces eth1 # слушать только интерфейс dhcp-range=192.168.0.5,192.168.0.50,255.255.255.0,24h1 # диапазон выдаваемых адресов dhcp-option=3,192.168.0.1 # шлюз по умолчаниюsudo service dnsmasq restartНастраиваем клиентские компьютеры на автоматическое получение адреса.
Если после перезагрузки правила iptables не восстанавливаются, добавьте:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADEв любой стартовый скрипт (rc.local например). Вместо eth0 надо написать ppp0, если этот интерфейс получает интернет от провайдера:
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADEФорум русскоязычного сообщества Ubuntu
Страница сгенерирована за 0.071 секунд. Запросов: 25.
- Сайт
- Об Ubuntu
- Скачать Ubuntu
- Семейство Ubuntu
- Новости
- Форум
- Помощь
- Правила
- Документация
- Пользовательская документация
- Официальная документация
- Семейство Ubuntu
- Материалы для загрузки
- Совместимость с оборудованием
- RSS лента
- Сообщество
- Наши проекты
- Местные сообщества
- Перевод Ubuntu
- Тестирование
- RSS лента
© 2012 Ubuntu-ru — Русскоязычное сообщество Ubuntu Linux.
© 2012 Canonical Ltd. Ubuntu и Canonical являются зарегистрированными торговыми знаками Canonical Ltd.
Настраиваем интернет шлюз с прозрачным обходом блокировок (а рекламу таки будем блокировать)

У вас есть старенький (или не очень) компьютер с двумя сетевыми картами? Вам надоела реклама и лишние телодвижения для обхода блокировок? Вы не хотите с этим мириться? Тогда добро пожаловать под кат.
Цель
Настроить интернет шлюз таким образом, чтобы клиенты внутри локальной сети без дополнительных настроек работали с интернетом без ограничений. К заблокированным сайтам доступ будет осуществляться через тор, к остальным через обычное интернет соединение. К .onion ресурсам доступ из любого браузера как к обычным сайтам. В качестве бонуса, настроим блокировку рекламных доменов и доступ к условно заблокированным сайтам через тор (имеются в виду сайты, которые ограничивают функциональность для пользователей из РФ). Мой интернет провайдер чтоб тебе икнулось осуществляет перехват DNS запросов и подмену адресов (т.е. при резольвинге запрещенных сайтов возвращает адрес своей заглушки), поэтому все DNS запросы я отправляю в тор.
Предупреждение
Все что описано ниже помогает обойти блокировки, но НЕ ОБЕСПЕЧИВАЕТ анонимности. От слова совсем.
Идеи и способы реализации взял отсюда и отсюда. Авторам этих статей большое спасибо.
Итак поехали
Предполагается, что на начальном этапе у вас уже есть установленная ОС (в моем случае Ubuntu server 16.04) на компьютере с двумя сетевыми интерфейсами. Один из которых (у меня это ppp0) смотрит в сторону провайдера, а второй (у меня это enp7s0) в локалку. Внутренний IP шлюза 192.168.1.2. Локальная сеть 192.168.1.0/24.
Как подойти к этому этапу в данной статье не рассматривается, так как информации в сети более чем достаточно. Скажу только, что pppoe подключение к провайдеру удобно настраивать утилитой pppoeconf.
Подготовительный этап
Если вы, как и я, используете н<е|оу>тбук, то возможно вам захочется, чтобы он не засыпал при закрытии крышки.
sudo nano /etc/systemd/logind.conf
HandleLidSwitch=ignore
Разрешаем форвардинг в ядре. Я за одно отключил IPv6.
sudo nano /etc/sysctl.conf
net.ipv4.ip_forward=1 # IPv6 disabled net.ipv6.conf.all.disable_ipv6 = 1 net.ipv6.conf.default.disable_ipv6 = 1 net.ipv6.conf.lo.disable_ipv6 = 1
Применим изменения без перезагрузки.
sudo sysctl -p
Настройка DHCP
Мы хотим, чтобы клиенты настраивались автоматически, поэтому без DHCP сервера не обойтись.
$ sudo apt install isc-dhcp-server $ sudo nano /etc/dhcp/dhcpd.conf
Приводим файл примерно к такому виду.
default-lease-time 600; max-lease-time 7200; subnet 192.168.1.0 netmask 255.255.255.0
Пояснение
subnet 192.168.1.0 netmask 255.255.255.0 — определяет сеть и маску,
range 192.168.1.100 192.168.1.200; — диапазон адресов, который будет выдаваться сервером,
option routers 192.168.1.2; — адрес шлюза
option domain-name-servers 192.168.1.2, 8.8.8.8; — адреса DN серверов
option broadcast-address 192.168.1.255; — широковещательный адрес.
sudo /etc/init.d/isc-dhcp-server restart
Настройка TOR
Устанавливаем и открываем настройки.
$ sudo apt install tor $ sudo nano /etc/tor/torrc
Добавляем строки
#Определяем подсеть в которую тор будет разрешать имена onion #такой диапазон достаточно жирный. Можно смело сокращать. VirtualAddrNetworkIPv4 10.0.0.0/8 #Включаем DNS от луковицы AutomapHostsOnResolve 1 #Определяем порты прозрачного прокси и DNS TransPort 0.0.0.0:9040 DNSPort 0.0.0.0:5353 #Не пользуемся выходными узлами из этих стран ExcludeExitNodes , ,
Настройка DNS
Если вам не нужна блокировка рекламы, то данный пункт можно не выполнять. Если вы хотите просто пользоваться DNS от тора, добавьте в файл /etc/tor/torrc строку DNSPort 0.0.0.0:53 и всё.
Но я буду резать рекламу, а значит устанавливаем и открываем настройки
$ sudo apt install bind9 $ sudo nano /etc/bind/named.conf.options
Приводим файл к следующему виду
options < directory "/var/cache/bind"; forwarders < 127.0.0.1 port 5353; >; listen-on < 192.168.1.2; 127.0.0.1; >; dnssec-validation auto; auth-nxdomain no; listen-on-v6 < none; >; >;
Если ваш провайдер не химичит с DNS запросами, можете направить трафик на другие днс серверы. Например на сервера гугла:
forwarders < 8.8.8.8; 8.8.4.4; >;
Теоретически должно работать по шустрее, чем через тор.
К дальнейшей настройке DNS вернемся чуть позже. Пока этого достаточно. А сейчас перезапустим службу.
sudo /etc/init.d/bind9 restart
Настройка iptables
Вся магия будет твориться именно здесь.
Суть идеи
- Формируем список IP адресов на которые мы хотим ходить через тор.
- Заворачиваем запросы к этим адресам на прозрачный прокси тора.
- Заворачиваем DNS запросы к ресурсам .onion на DNS тора
- Тор при резольвинге имен из зоны .onion возвращает IP адрес из подсети 10.0.0.0/8 (которую мы указали при настройке ТОР). Разумеется, эта зона не маршрутизируется в интернете и нам нужно завернуть обращения на эту подсеть на прозрачный прокси тора.
Лирическое отступление
Изначально я полагал, что можно обойтись без перенаправления DNS запросов к .onion в iptables. Что можно настроить bind таким образом, чтобы он перенаправлял запросы на тор DNS и возвращал адреса из 10-й зоны. У меня не получилось так настроить.
forwarders < 127.0.0.1 port 5353; >;
Не приводит к желаемому результату, так же как выделение отдельной зоны ".onion" с forwarders на 127.0.0.1 port 5353.
Если кто-нибудь знает почему так происходит и как это исправить, напишите в комментариях.
Полагаю, что iptables уже установлен. Устанавливаем ipset. С помощью этой утилиты мы сможем управлять списком заблокированных адресов и заворачивать пакеты в прозрачный прокси тора.
sudo apt install ipset
Далее последовательно из под рута выполняем команды по настройке iptables. Разумеется вам нужно заменить имена интерфейсов и адреса на свои. Я поместил эти команды в /etc/rc.local перед exit 0 и они выполняются каждый раз после загрузки.
Предлагаю и вам поступить аналогично.
#Создаем ipset для списка блокировок ipset -exist create blacklist hash:ip #Редирект запросов DNS на TOR для доменов onion. Средствами bind9 такой редирект настроить не удалось iptables -t nat -A PREROUTING -p udp --dport 53 -m string --hex-string "|056f6e696f6e00|" --algo bm -j REDIRECT --to-port 5353 iptables -t nat -A OUTPUT -p udp --dport 53 -m string --hex-string "|056f6e696f6e00|" --algo bm -j REDIRECT --to-port 5353 #Редирект на ТОР IP адресов из списка блокировок iptables -t nat -A PREROUTING -p tcp -m set --match-set blacklist dst -j REDIRECT --to-port 9040 iptables -t nat -A OUTPUT -p tcp -m set --match-set blacklist dst -j REDIRECT --to-port 9040 #Редирект на тор для ресурсов разрезольвенных тором в локалку 10.0.0.0/8 #обычно это .onion iptables -t nat -A PREROUTING -p tcp -d 10.0.0.0/8 -j REDIRECT --to-port 9040 iptables -t nat -A OUTPUT -p tcp -d 10.0.0.0/8 -j REDIRECT --to-port 9040 ########################################### #Все что ниже относится к настройке самого шлюза, а не к обходу #блокировок ########################################### #Включаем NAT iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE # Рзрешаем пинги iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT iptables -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT iptables -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT # Отбрасываем неопознанные пакеты iptables -A INPUT -m state --state INVALID -j DROP iptables -A FORWARD -m state --state INVALID -j DROP # Отбрасываем нулевые пакеты iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP # Закрываемся от syn-flood атак iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP iptables -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP #Разрешаем входящие из локалки и локальной петли, и все уже установленные соединения iptables -A INPUT -i lo -j ACCEPT iptables -A INPUT -i enp7s0 -j ACCEPT iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT #Остальные входящие запрещаем iptables -P INPUT DROP #Разрешаем форвардинг изнутри локалки. iptables -A FORWARD -i enp7s0 -j ACCEPT iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT #Остальной форвардинг запрещаем iptables -P FORWARD DROP
После перезагрузки мы должны получить шлюз, который:
- Выдает IP адреса и настройки сети клиентам.
- Раздает интернет.
- Резольвит имена через тор DNS.
- Резольвит имена .onion и позволяет посещать эти ресурсы через обычный браузер.
- Закрывает нас от входящих подключений.
Заполняем blacklist
Создаем каталог в котором будет лежать скрипт.
# mkdir -p /var/local/blacklist
# nano /var/local/blacklist/blacklist-update.sh
со следующим содержимым
#! /bin/bash #Переходим в каталог скрипта cd $(dirname $0) #Скачиваем с github репозиторий со списком заблокированных ресурсов git pull -q || git clone https://github.com/zapret-info/z-i.git . #Обрабатываем dump.csv так чтобы получился файл blacklist.txt с IP адресами заблокированных ресурсов cat dump.csv | cut -f1 -d\; | grep -Eo '[0-9]\.[0-9]\.[0-9]\.[0-9]' | sort | uniq > blacklist.txt #Обрабатываем файл my-blacklist c именами доменов, которые не под блокировкой #но на которые мы хотим ходить через тор. Дополняем blacklist.txt dig +short -f my-blacklist >> blacklist.txt #Очищаем ipset ipset flush blacklist #Запиcываем новые данные cat blacklist.txt | xargs -n1 ipset add blacklist
Делаем скрипт исполняемым
# chmod +x /var/local/blacklist/blacklist-update.sh
создаем файл my-blacklist, который в дальнейшем будем наполнять вручную теми ресурсами, на которые хотим ходить через тор.
# echo lostfilm.tv > /var/local/blacklist/my-blacklist
Выполняем скрипт
# /var/local/blacklist/blacklist-update.sh
Скрипт работает долго, будь пациентом be patient. Теперь должна открываться флибуста должны работать заблокированные сайты. Добавляем в конец файла /etc/rc.local, но перед exit 0
#Ждем минуту чтобы тор полностью загрузился, подключился, #заработал тор DNS sleep 60 #Заполняем список запрещенных сайтов. Длительная операция. /var/local/blacklist/blacklist-update.sh
Настраиваем фильтр рекламы
Суть идеи
- Устанавливаем и запускаем микро HTTP сервер, который слушает 80 порт и на любой запрос возвращает картинку png с одним прозрачным пикселем.
- Получаем список рекламных доменов.
- Настраиваем bind как авторитативный сервер для них.
- Заворачиваем все запросы на рекламные домены на наш HTTP сервер с чудесной картинкой.
Приступим. Займемся севером. Создаем файл
# nano /usr/local/bin/pixelserv
с содержимым
#! /usr/bin/perl -Tw use IO::Socket::INET; $crlf="\015\012"; $pixel=pack("C*",qw(71 73 70 56 57 97 1 0 1 0 128 0 0 255 255 255 0 0 0 33 249 4 1 0 0 0 0 44 0 0 0 0 1 0 1 0 0 2 2 68 1 0 59)); $sock = new IO::Socket::INET ( LocalHost => '0.0.0.0', LocalPort => '80', Proto => 'tcp', Listen => 30, Reuse => 1); if (!defined($sock)) < print "error : cannot bind : $! exit\n"; exit(1); >while ($new_sock = $sock->accept()) < while () < chop;chop; # print "$_\n"; if ($_ eq '') < last; >> print $new_sock "HTTP/1.1 200 OK$crlf"; print $new_sock "Content-type: image/gif$crlf"; print $new_sock "Accept-ranges: bytes$crlf"; print $new_sock "Content-length: 43$crlf$crlf"; print $new_sock $pixel; shutdown($new_sock,2); undef($new_sock); > close($sock); exit(0);
делаем его исполняемым
# chmod +x /usr/local/bin/pixelserv
Создаем файл инициализации сервера
# nano /etc/init.d/pixelserv
с содержимым
#! /bin/sh # /etc/init.d/pixelserv # # Carry out specific functions when asked to by the system case "$1" in start) echo "Starting pixelserv " /usr/local/bin/pixelserv & ;; stop) echo "Stopping script pixelserv" killall pixelserv ;; *) echo "Usage: /etc/init.d/pixelserv " exit 1 ;; esac exit 0
Делаем его исполняемым, регистрируем сервис, запускаем http сервер
# chmod +x /etc/init.d/pixelserv # update-rc.d pixelserv defaults # /etc/init.d/pixelserv start
Теперь создаем скрипт обновления рекламных доменов
# nano var/local/blacklist/ad-update.sh
#! /bin/bash cd /etc/bind/ curl "http://pgl.yoyo.org/adservers/serverlist.php?hostformat=bindconfig&showintro=0&mimetype=plaintext" | sed 's/null.zone.file/\/etc\/bind\/db.adzone/g' > named.ad.conf rndc reload
Делаем его исполняемым
# chmod +x /var/local/blacklist/ad-update.sh
# /var/local/blacklist/ad-update.sh
Создаем файл зоны
# nano /etc/bind/db.adzone
со следующим содержимымсервис
$TTL 86400 ; one day @ IN SOA ads.example.com. hostmaster.example.com. ( 2014090102 28800 7200 864000 86400 ) NS my.dns.server.org A 192.168.1.2 @ IN A 192.168.1.2 * IN A 192.168.1.2
Добавляем в файл
# nano /etc/bind/named.conf
include "/etc/bind/named.ad.conf";
rndc reload
Настраиваем обновление списка доменов при загрузке. Для этого открываем файл /etc/rc.local и добавляем после sleep 60
/var/local/blacklist/ad-update.sh
Последние штрихи
Для периодического обновления списков, создадим файл
# nano /etc/cron.daily/blacklist-update
Со следующим содержимым
#!/bin/bash #Загружаем свежий список рекламных доменов для фильтрации /var/local/blacklist/ad-update.sh #Заполняем список запрещенных сайтов. Длительная операция. /var/local/blacklist/blacklist-update.sh
Делаем его исполняемым
# chmod +x /etc/cron.daily/blacklist-update
Замечание для пользователей десктопных версий Ubuntu
Несмотря на то, что целью было создать шлюз, который не требует настроек клиентов, в моем случае получилось не совсем так. В качестве рабочей операционной системы я использую десктопную Ubuntu 16.04. Для настройки сети в ней используется утилита NetworkManager, которая по умолчанию настроена таким образом, что адрес DN сервера берется не с DHCP сервера, а устанавливается как 127.0.1.1:53. На этом порту висит dnsmasq и только по ему известным правилам резольвит имена. В обычной жизни это никак не мешает, а в нашем случае делает совершенно неработоспособной зону .onion
Чтобы это исправить нужно в файле /etc/NetworkManager/NetworkManager.conf закоментировать строку
dns=dnsmasq
#dns=dnsmasq
После перезагрузки все работает.
Заключение лишь бы не под стражу
Клиенты на андроид работают нормально без дополнительных настроек.
Windows не проверял, так как не использую, но думаю, проблем возникнуть не должно.
Ограничения для firefox и iOs описаны здесь
Прошу прощения за сумбурное изложение. Дополнения, исправления, замечания приветствуются.
Спасибо за внимание.
Дополнение от 03.09.2017
По просьбам трудящихся выложил свои настройки на github.
Настройки даны как справочная информация. Из коробки они вам не подойдут с вероятностью близкой к 100%. Требуется подгонка под себя.
- блокировки
- linux
- ubuntu
- шлюз на линукс
- администрирование linux-систем