Главная Файлы Форум Галерея Гостевая книга Обратная связь Карта сайта Поиск
 

 

Моё место работы

СитиСервис
  • Заправка и ремонт лазерных картриджей
  • Ремонт любых принтеров и копиров
  • Оригинальные и совместимые картриджи
  • Доставка бесплатно (от 2-х картриджей)
  • Накопительная система расчётов для корпоративных клиентов
Телефон
+7 (4722) 373-983
8-980-326-01-23
Адрес E-mail
mybelpost@gmail.com

Привет, Гость

Войти
Идентификация
Я забыл свой пароль
Регистрация

Разделы -> Статьи -> Debian GNU/Linux -> Установка и настройк...

Установка и настройка DHCP, DNS (Dnsmasq, isc-dhcp-server), прокси-сервера (squid),
фильтра контента (dansguardian) под Linux (Debian-7.5 Wheezy)


Доп. настройки вынесенные в отдельные статьи

Версия статьи в PDF-формате.

Задача:
организация прокси-сервера для доступа учреждения (50 компьютеров) к сети интернет с возможностью фильтрации контента по ip-адресам, по URL, по ключевым фразам.
Организация DHCP для получения сетевых настроек клиентами внутренней сети организации.

Для реализации поставленной задачи будем использовать ПК с материнской платой GIGABYTE GA-C1007 UN.
На ней интегрировано всё:
центральный процессор (два ядра Celeron(R) CPU 1007U @ 1.50GHz),
видеокарта (Intel Corporation 3rd Gen Core processor Graphics Controller (rev 09)),
две гигабитные сетевые карты (Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 06)),
есть звуковая карта, но она нам, в данном случае, не нужна.

ОЗУ с огромным запасом - 4 ГиБ (то, что было в магазине).

ОС: Debian-7.5 Wheezy. Установлена в режиме эксперта - только базовая система и утилиты без любых DM ("глухая" консоль).

Тип подключения к сети интернет - PPPOE.
Интерфейc смотрящий к провайдеру - eth0.
Интерфейс смотрящий во внутреннюю сеть - eth1.

И так: интернет у нас пока не подключен, поэтому добавляем в apt репозитории со всех дистрибутивных дисков Debian.

Логинимся под root и выполняем команду для каждого дистрибутивного диска:

apt-cdrom add

Далее, выполняем обновление списков пакетов

apt-get update

Устанавливаем дополнительные приложения:

apt-get install mc ssh

Переключаем текстовый редактор по умолчанию с nano на mcedit (не обязательно, но мне в mcedit удобней)

update-alternatives --config editor

Появится список редакторов, где звёздочкой помечен используемый по умолчанию.
Нажимаем число соответствующее строке с /usr/bin/mcedit. У меня это было число 3.

Настраиваем соединение с интернет по протоколу PPPOE



Если у Вас другой тип подключения, то настройте интерфейc eth0 так как это необходимо в Вашем случае, а моё описание настройки pppoe пропустите.

apt-get install pppoeconf ppp pppoe

Подключаем кабель к сетевой карте с интерфейсом eth0 и выполняем команду:

pppoeconf

Отвечаем на вопросы конфигуратора. Т.е. вводим логин и пароль предоставленный провайдером для подключения к сети интернет.

После завершения настройки PPPOE пробуем наличие подключения, обычно это делается методом пингования любого внешнего ресурса и-нет, к примеру

ping ya.ru

Должны получить, что-то похожее на:

PING ya.ru (93.158.134.3) 56(84) bytes of data.
64 bytes from www.yandex.ru (93.158.134.3): icmp_req=1 ttl=55 time=16.2 ms
и т.д.

Настройка интерфейса смотрящего в локальную сеть организации



Интерфейс смотрящий в локальную сеть - eth1.

От пользователя root открываем на редактирование файл /etc/network/interfaces

mcedit /etc/network/interfaces

Блок отвечающий за интерфейс eth1 должен выглядеть вот так, если локальная сеть имеет адрес 192.168.0.0, а адрес нашего шлюза - 192.168.0.1:

allow-hotplug eth1
auto eth1
iface eth1 inet static
    address 192.168.0.1 # адрес интерфейса eth1, он же будет для всех клиентов сети адресом прокси
    netmask 255.255.255.0 # маска сети
    network 192.168.0.0 # адрес сети
    broadcast 192.168.0.255 # широковещательный адрес сети
    post-up /usr/bin/nat.sh # путь к скрипту выполняемому после поднятия интерфейса (позже в него мы впишем правила iptables)

Если Ваша внутренняя сеть имеет другой адрес, то соответственно, интерфейс eth1 тоже должен быть из диапазона её адресов.
Но у меня именно так как в примере.

Файл /etc/network/interfaces полностью, в моём случае, выглядит вот так:

# Блок отвечающий за ppp
auto dsl-provider
iface dsl-provider inet ppp
pre-up /sbin/ifconfig eth0 up # line maintained by pppoeconf
provider dsl-provider

# Блок отвечающий за eth0
auto eth0
iface eth0 inet manual

# Блок отвечающий за eth1
allow-hotplug eth1
auto eth1
iface eth1 inet static
    address 192.168.0.1
    netmask 255.255.255.0
    network 192.168.0.0
    broadcast 192.168.0.255
    post-up /usr/bin/nat.sh


Настройка NAT



От root создаём файл /usr/bin/nat.sh

touch /usr/bin/nat.sh

И сразу открываем его на редактирование

mcedit /usr/bin/nat.sh

Вписываем в созданный файл вот такие строки (правила соответствуют интерфейсам ppp0 - внешний и eth1 - внутренний):

#! /bin/bash
# Включаем форвардинг
echo 1 > /proc/sys/net/ipv4/ip_forward

# Сброс правил iptables
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

# Разрешаем трафик на внутреннем петлевом интерфейсе (lo)
iptables -A INPUT -i lo -j ACCEPT

# Разрешаем доступ из внутренней сети в интернет
iptables -A FORWARD -i eth1 -o ppp0 -j ACCEPT

# Включаем маскарадинг
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.0/16 -j MASQUERADE

# Разрешаем ответы из внешней сети
iptables -A FORWARD -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Рубим доступ из и-нет во внутреннюю сеть
iptables -A FORWARD -i ppp0 -o eth1 -j REJECT

# Заворачиваем весь трафик с портов 80 и 8080 на порт dansguardian
#iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 8081
#iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 8080 -j REDIRECT --to-port 8081

Две последних строки скрипта пока закомментированы, их мы будем использовать, когда настроим squid и dansguardian

Сохраняем файл (клавиша F2).

Делаем файл исполнимым скомандовав в консоли от root вот так:

chmod 755 /usr/bin/nat.sh

Перезапускаем сетевые интерфейсы:

/etc/init.d/networking stop
/etc/init.d/networking start

После этого можно настроить клиентскую машину на доступ к интернет через шлюз (без прокси пока).
Где ip-адрес шлюза будет 192.168.0.1 (в моём примере).
DNS нужно будет прописать вручную (временно).
И затем, можно попробовать зайти на любой сайт - должно получиться.

Интернет доступен и для дальнейшей настройки сервера желательно подключить официальный репозиторий Debian.
Даём в консоли две команды от пользователя root:

echo "deb http://ftp.us.debian.org/debian wheezy main contrib non-free" > /etc/apt/sources.list
apt-get update

Теперь всё ПО будет устанавливаться из сети интернет.


Настройка Dnsmasq



Dnsmasq это DHCP и кэширующий DNS сервер в одной программе (пригодно для работы в малых сетях из-за ограничений в DNS).
Для чего он нам нужен?
- Для того, чтобы не прописывать вручную сетевые настройки на каждой клиентской машине.

Устанавливаем dnsmasq

apt-get install dnsmasq

Настройка простого DNS



Открываем на редактирование файл /etc/dnsmasq.conf

mcedit /etc/dnsmasq.conf

Ищем строку содержащую listen-address=
Приводим её к такому виду (в нашем случае):

listen-address=127.0.0.1, 192.168.0.1

Здесь указаны ip-адреса, на которых dnsmasq будет принимать запросы от клиентских машин
и транслировать DNS-ы плученные от провайдера или прописанные вручную в файле /etc/resolv.conf


Настройка DHCP



Для того, чтобы клиентские машины получали автоматически не только адреса DNS, но и собственные ip-адреса, нужно на нашем сервере настроить DHCP. Здесь нам поможет уже установленный dnsmasq.

В томже конфигурационном файле: /etc/dnsmasq.conf. Задаём диапазон выдаваемых ip-адресов для локальной сети.

Ищем в этом файле строку: dhcp-range=

И приводим её к такому виду (у Вас задаваемый диапазон может быть другим):

dhcp-range=192.168.0.31,192.168.0.254,255.255.255.0,12h

Где первый ip-адрес задаёт начало диапазона адресов, а второй ip-адрес задаёт конец диапазона. Я зарезервировал первых 30 адресов под фиксированные ip в сети. Сетевые адреса от 192.168.0.1 - 192.168.0.30 выдаваться в сеть не будут, но задать их на клиентских машинах вручную вполне можно. -Это удобно для различных сетевых принтеров и других общедоступных ресурсов.
Далее в строке прописана маска сети и количество часов на, которое выдаётся ip-адрес клиенту.

Сохраняем исправленный файл (F2)
Перезапускаем dnsmasq командой:

/etc/init.d/dnsmasq restart

Теперь на клиентской машине можно выставить автоматические настройки сети и попробовать зайти на любимый сайт - должно сработать.

PS: Для просмотра выданных ip-адресов за текущую дату можно дать в консоли команду:
LANG=en_US.UTF-8; grep "date '+%b %e').*DHCPOFFER" /var/log/syslog; LANG=ru_RU.UTF-8

Переключаю LANG из-за date. Она по умолчанию выдаёт дату кириллицей, а в логе лат.


Настройка dnsmasq описана по мотивам статьи из wiki.archlinux.org.



Установка и настройка DHCP (isc-dhcp-server)


Если на Вашем сервере не используется Dnsmasq, если Вы решили возложить функции DHCP и DNS на разные приложения, то для раздачи сетевых настроек (dhcp) можно установить isc-dhcp-server, о его настройках здесь и пойдёт речь.
(В моей школьной сети работает только isc-dhcp-server а своего DNS нет вообще).

Установка isc-dhcp-server

Получаем права root.
Устанавливаем isc-dhcp-server скомандовав:

apt-get install isc-dhcp-server

Настройка isc-dhcp-server

Открываем на редактирование файл /etc/default/isc-dhcp-server

mcedit /etc/default/isc-dhcp-server

Ищем строку INTERFACES="" и между кавычек вписываем имя интерфейса "смотрящего" в локальную сеть.
В нашем случае это eth1. Т.е. строка должна выглядеть вот так:

INTERFACES="eth1"

Данная строка заставит isc-dhcp-server работать только на интерфейсе eth1.

Сохраняем изменения нажав F2 и выходим из редактора.

Открываем на редактирование файл /etc/dhcp/dhcpd.conf

mcedit /etc/dhcp/dhcpd.conf

Ищем строку option domain-name "example.org" и вместо example.org
вписываем имя нашего локального домена (если он вообще есть). В данной конфигурации оно может быть любым.
К примеру в моём конфигурационном файле данная строка выглядит вот так:

option domain-name "school17kor1";

Следующая строка подлежащая редактированию - это option domain-name-servers ns1.example.org, ns2.example.org
Здесь вместо ns1.example.org, ns2.example.org вбиваем дареса DNS-серверов выданные провайдером.
Посмотреть эти адреса можно скомандовав на нашем шлюзе вот так:

cat /etc/resolv.conf

В выводе консоли мы должны увидеть фразы nameserver и следующий за ней адрес DNS-а - их и вписываем.
Для примера приведу строку изменённую под google-dns

option domain-name-servers 8.8.8.8, 8.8.4.4;

Ниже вписываем секции для раздачи IP-адресов.

subnet 192.168.0.0 netmask 255.255.255.0 {
 range 192.168.0.31 192.168.0.254;
 option broadcast-address 192.168.0.255;
 option routers 192.168.0.1;
}

В этой секции адрес 192.168.0.0 - адрес локальной сети.
Адрес 192.168.0.31 - адрес, с которого будет начинаться раздача.
Адреса с 192.168.0.2 - 192.168.0.30 я зарезервировал под статичные IP-адреса в сети.
Адрес 192.168.0.254 - последний допустимый адрес для раздачи клиентам.
Адрес 192.168.0.255 - широковещательный IP.
Адрес 192.168.0.1 - адрес нашего шлюза (IP-адрес интерфейса смотрящего в локальную сеть).

Пример секции для фиксированных IP-адресов

Это секция для IP-адресов из диапозона, который я зарезервировал в предыдущей секции.

host admin {
 hardware ethernet 00:22:4d:49:24:18;
 fixed-address 192.168.0.2;
}

В этой секции admin - имя хоста, которому будет назначаться всегда один и тот же IP-адрес.
00:22:4d:49:24:18 - MAC-адрес сетевой карты указанного выше хоста (у Вас должен отличаться от моего).
192.168.0.2 - фиксированный IP-адрес, который будет назначаться указанному хосту.

Посмотреть MAC-адрес можно залогинившись на хосте admin с правами root и скомандовав в консоли, к примеру, вот так:

ifconfig -a | grep eth0 | awk '{print $5}'

Для других компьютеров, которым должны раздаваться фиксированные IP-адреса, данная секция выглядит аналогично.

Все остальные не закомментированые строки файла /etc/dhcp/dhcpd.conf должны оставаться не изменными если, Вы не знаете, на что они повлияют.

Сохраняем изменения (для mc это клавиша F2) и выходим из редактора.

Перезапускаем isc-dhcp-server скомандовав от имени root вот так:

/etc/init.d/isc-dhcp-server restart

Должно работать.

Ниже приведу, для примера, свой рабочий файл /etc/dhcp/dhcpd.conf снятый со школьного шлюза.
(все комментарии из файла удалены)

ddns-update-style none;
option domain-name "school17kor1";
option domain-name-servers 83.217.192.2, 83.217.193.2;

default-lease-time 600;
max-lease-time 7200;

log-facility local7;

subnet 192.168.0.0 netmask 255.255.255.0 {
 range 192.168.0.31 192.168.0.254;
 option broadcast-address 192.168.0.255;
 option routers 192.168.0.1;
}

host admin {
 hardware ethernet 00:22:4d:49:24:18;
 fixed-address 192.168.0.2;
}


Узнать о выданных IP-адресах за текущую дату можно скомандовав в консоли от имени root вот так:

LANG=en_US.UTF-8; grep "date '+%b %e').*DHCPOFFER" /var/log/messages; LANG=ru_RU.UTF-8


Если нужно заблокировать выдачу IP-адреса для определённого ПК, то создаём в файле
/etc/dhcp/dhcpd.conf соответствующую секцию. Для примера, приведу работающую у меня секцию блокирующую одного из Android-ов.

host android-d5d48b7a8e15b0a1 { hardware ethernet b0:df:3a:47:5e:f8; deny booting; }


Где
android-d5d48b7a8e15b0a1 - имя андроида (оно засветилось при выдаче IP-адресов, когда он ещё не был заблокирован) можно заменить на любое, но я выдумывать не стал.
b0:df:3a:47:5e:f8 - MAC-адрес андроида (засветился тогда же)
deny booting - опция запрещающая загрузку.

Есть ещё сценарий автоматического добавления блокирующих андроидов правил для межсетевого экрана. Статья о его включении здесь. Вынес в отдельную публикацию как не обязательный здесь элемент затрудняющий базовую настройку.

Нюанс с настройкой раздачи DNS если он (DNS) время от времени меняется провайдером.


Настройка кэширующего прокси-сервера Squid



Установка
В консоли с правами root командуем:

apt-get install squid

Останавливаем прокси-сервер скомандовав:

/etc/init.d/squid stop

Открываем на редактирование файл /etc/squid/squid.conf

mcedit /etc/squid/squid.conf

Ищем строку содержащую http_port и приводим её к такому виду (в нашем примере):

http_port 192.168.0.1:3128 transparent

Т.е. указываем адрес и порт, которые будет слушать squid, а слово transparent говорит о прозрачности прокси для клиентов.

Далее в этом же файле настраиваем кэш. Ищем строку cache_dir ufs /var/spool/squid и приводим её к такому виду:

cache_dir ufs /var/spool/squid 4096 32 256

Однако, позднее оптимизировать кэш squida-а нужно будет по состоянию логов (вот здесь хорошая статься есть upd.: уже нет по этой ссылке, но google большой!).

Продолжаем настройку. Указываем внуреннюю сеть, а остальные сети комментируем:

acl localnet src 192.168.0.0/24 # RFC1918 possible internal network

Сеть 192.168.0.0/24 - это наша, все остальные acl localnet нужно закомментировать.

Далее, разрешаем доступ из внутренней сети. Ищем и раскомментируем строку

http_access allow localnet

Устанавливаем лимит использования памяти:

memory_pools on
memory_pools_limit 50 MB

Задаем язык вывода ошибок для пользователя

error_directory /usr/share/squid/errors/Russian-koi8-r

Сохраняем файл конфигурации (F2).

Строим кэш squid-а.

/usr/sbin/squid -z

Запускаем прокси-сервер

/etc/init.d/squid start

Теперь, для проверки, можно настроить клиентскую машину на выход в интернет через прокси с адресом 192.168.0.1 и портом 3128.
Должно работать.

Хороший сайт по squid.conf на русском языке здесь: "Группа переводчиков Break-people.ru" (squid.conf по-русски и директивы squid). Очень поможет при вдумчивой настройке.



Настройка фильтра контента Dansguardian



Устанавливаем скомандовав от root:

apt-get install dansguardian

Открываем на редактирование файл /etc/dansguardian/dansguardian.conf

mcedit /etc/dansguardian/dansguardian.conf

Комментируем строку UNCONFIGURED - ...

Ищем строку reportinglevel = и приводим её к виду:

reportinglevel = 3

Это, чтобы выводилась страница информирующая о заблокированном ресурсе и-нет.

Далее выстанавливаем язык страницы запрета:

language = 'russian-koi8-r'

Ищем строку

loglocation = '/var/log/dansguardian/access.log'

и рскомментируем её - это путь к журалу dansguardian.

Указываем ip-адрес и порт, которые будет слушать dansguardian поправив соответствующие строки вот так (для нашего примера):

filterip = 192.168.0.1
filterport = 8081

Сохраняем файл конфигурации (F2).

Запускаем Dansguardian скомандовав:

/etc/init.d/dansguardian start

Если настроено всё правильно, то должно запуститься.

Теперь на клиентской машине можно исправить порт прокси с 3128 на 8081.
Можно проверить работу фильтра зайдя на запрещённый сайт - появится оранжевая страничка запрета от dansguardian.

Для того, чтобы клиенты ходили в интернет всегда через фильтр контента, нужно средствами iptables завернуть весть http-трафик на порт dansguardian.
Мы это уже сделали в файле /usr/bin/nat.sh осталось только раскомментировать нужные строки.
Открываем на редактирование файл /usr/bin/nat.sh

mcedit /usr/bin/nat.sh

Раскомментируем две последние строки, где завёрнуты порты 80 и 8080 на порт 8081. Этот файл должен, для нашего примера, выглядеть вот так:

#! /bin/bash
# Включаем форвардинг
echo 1 > /proc/sys/net/ipv4/ip_forward

# Сброс правил iptables
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

# Разрешаем трафик на внутреннем кольце
iptables -A INPUT -i lo -j ACCEPT

# Разрешаем доступ из внутренней сети наружу
iptables -A FORWARD -i eth1 -o ppp0 -j ACCEPT

# Включаем NAT
iptables -t nat -A POSTROUTING -o ppp0 -s 192.168.0.0/16 -j MASQUERADE

# Разрешаем ответы из внешней сети
iptables -A FORWARD -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Рубим доступ снаружи во внутреннюю сеть
iptables -A FORWARD -i ppp0 -o eth1 -j REJECT

# Заворачиваем весь трафик с портов 80 и 8080 на dansguardian
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 8081
iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 8080 -j REDIRECT --to-port 8081

Сохраняем файл (F2)

Перезапускаем правила iptables скомандовав

nat.sh

Перестраиваем клиентскую машину удалив прокси и его порт. Т.е. оставляем автоматические настройки сети и без прокси-сервера.
Теперь любой запрос клиента на порт 80 или 8080 будет перекинут на порт 8081. Соответственно трафик пойдёт через Dansguardian.
Однако, порт Squid-а (3128) остаётся доступным из локальной сети и при необходимости можно настроить клиентские машины так, чтобы они использовали прокси-сервер с адресом 192.168.0.1 и портом 3128. Такая настройка позволит настроенным вручную клиентским машинам посещать интернет мимо фильтар контента.


Тонкая настройка Dansguardian для фильтрации русскоязычного контента



С правами root открываем на редактирование файл /etc/dansguardian/dansguardian.conf

mcedit /etc/dansguardian/dansguardian.conf

Ищем строку preservecase = и приводим её к виду:

preservecase = 2

Ищем строку hexdecodecontent = off и приводим к виду:

hexdecodecontent = on

Ищем строку forcequicksearch = off, приводим к виду:

forcequicksearch = on

Сохраняем файл (F2) и перезапускаем dansguardian командой:

/etc/init.d/dansguardian restart

Теперь необходимо настроить списки ключевых фраз для фильтра.

Создаём каталог для русских фраз:

mkdir /etc/dansguardian/lists/phraselists/rus

Создаём три файла для трёх кодировок кириллицы

cd /etc/dansguardian/lists/phraselists/rus
touch ./1251 ./utf8 ./koi8

Открываем на редактирование файл для кодировки UTF8

mcedit /etc/dansguardian/lists/phraselists/rus/utf8

Вписываем фильтруемые фразы в формате:

<фраза><20>
< фраза><40>
<фраза ><35>

Пробел в поле "фраза" запрещает подстановку символов в ключевую фразу при обработке страницы сайта.
Т.е. пробел вначале ключевой фразы запретит подстановку символов вначале, а пробел вконце зпретит подстановку вконце.
Числа 20, 40 и 35, в этом примере, обозначают вес фразы на странице (нужно подбирать экспериментально).
Очень трудно найти точную фразу для блокировки именно негативного контента. Ключевая фраза <пед> заблокирует всю педагогику - возможны ложные срабатывания.
Логика работы с фразами хорошо описана здесь.

После создания списка фраз в UTF8, нам нужно перекодировать этот список в koi8-r и windows-1251.
Для этого создадим bash скрипт, который будет заниматься перекодировкой и последующим перезапуском dansguardian.

Создаём файл /usr/bin/phraserec.sh

touch /usr/bin/phraserec.sh

Делаем скрипт испольнимым

chmod 755 /usr/bin/phraserec.sh

Открываем файл на редактирование

mcedit /usr/bin/phraserec.sh

Вписываем вот такой сценарий:

#! /bin/bash
cd /etc/dansguardian/lists/phraselists/rus;
iconv -f UTF-8 -t WINDOWS-1251 ./utf8 > ./1251;
iconv -c -f UTF-8 -t KOI8-R ./utf8 > ./koi8;
dansguardian -r # Сбрасывает все подключения и перезагружает конфигурационные файлы
exit 0;

Сохраняем файл (F2).

Чтобы наши ключевые фразы работали нужно их подключить в конфигурационном файле /etc/dansguardian/lists/weightedphraselist
Открываем его на редактирование:

mcedit /etc/dansguardian/lists/weightedphraselist

По аналогии с уже имеющимися строками, в самый конец файла дописываем три строки:

.Include</etc/dansguardian/lists/phraselists/rus/1251>
.Include</etc/dansguardian/lists/phraselists/rus/utf8>
.Include</etc/dansguardian/lists/phraselists/rus/koi8>

Сохраняем файл (F2).
Запускаем файл phrserec.sh скомандовав от root:

phraserec.sh

Всё! Можно проверять качество внесённых фраз зайдя на сайт с контентом заведомо подлежащем фильтрации.

В дальнейшем, после добавления новых ключевых фраз в файл /etc/dansguardian/lists/phraselists/rus/utf8, также запускаем скрипт phraserec.sh
Он транслирует фразы в другие кодировки и перезапустит dansguardian.

Готовый список фраз для быстрого запуска dansguardian можно скачать здесь.

Тонкая настройка Dansguardian описана по мотивам сайта "Информатизация, Linux и СПО в Российском образовании".



Dansguardian умеет фильтровать не только по фразам, но и по спискам адресов...

Для внесения сайтов в "чёрный" список имеются файлы:

/etc/dansguardian/lists/blacklists/ads/urls
/etc/dansguardian/lists/blacklists/ads/domains

Синтаксис этих файлов прост. Одна строка - однин URL или доно доменное имя. Некоторые сайты в список уже внесены по умолчанию так, что можно вписывать свои по аналогии.

Для внесения сайтов в "белый" список есть файлы:

/etc/dansguardian/lists/exceptionsitelist
/etc/dansguardian/lists/exceptionurllist

В этих файлах одна строка - это один URL или доменное имя, или ip.

Вообще, в каталоге /etc/dansguardian/lists есть много различных файлов со списками. Там есть список разрешённых форматов файлов для закачки и прочее. Можно экспериментировать.

После дополнения "белых" / "чёрных" списков необходимо перезапустить dansguardian можно командой:

/etc/init.d/dansguardian restart

или

dansguardian -r

или

dansguardian -g

dansguardian -r - сбросит все подключения и перезагрузит конфигурационные файлы.
dansguardian -g - перезагрузит конфигурационные файлы не сбрасывая уже инициированные подключения.

Готовый белый список (для быстрого запуска) можно скачать здесь.
Чёрный список от Роскомнадзора можно скачать здесь.

Узнать запрещён ли сайт можно вот здесь: единый реестр запрещённых сайтов РосКомНадзор. Здесь списка нет, но есть поисковка, где можно узнать, внесён ли сайт в чёрный список РосКомНадзора.
И есть Федеральный список экстремистских материалов Министерства Юстиции РФ. Здесь огромная таблица.


Подключение к Dansguardian "чёрных" списков от Shalla Secure Services
с их автообновлением.


С подачи товарища по оружию Григория Засима публикую получившийся у меня скрипт подключения списков от Shalla Secure Services.

Логинимся на сервере, где работает dansguardian под root.
Устанавливаем приложение curl скомандовав в консоли:

apt-get install curl

Создаём файл с любым доступным именем. К примеру, вот так:

touch /usr/bin/shallalistinclude.sh
chmod 755 /usr/bin/shallalistinclude.sh

Заполняем его вот таким содержимым:
(Скрипт обновлён 22 декабря 2015 г.)
Не копируйте скрипт со страницы сайта!
В нём могут быть ошибки из-за специфической вставки кода в страницу.
Качайте этот сценарий отсюда.

#! /bin/bash
# Скрипт скачивания и подключения к dansguardian чёрных списков от www.shallalist.de
# Обновлён 22 декабря 2015 г.
#
##########
# Для работы скрипта необходимо приложение curl
#
# Кладём этот скрипт в /usr/bin/
# Делаем его исполняемым.
#
# Добавляем задание для крона
# Пример запуска файла каждое воскресенье в 09:00
#   Запускаем crontab -e от root
#   Вписываем вот это: 00  09   *   *   7   /usr/bin/shallalistinclude.sh
##########

# Переменные, которые можно изменять
iter=5; # количество попыток соединения и проверок наличия файла
wt=5; # время ожидания между попытками (сек.)
plan="* */1 * * * root $0"; # Задание крону запускать этот скрипт каждый час

# Переменные которые должны быть изменены если у Вас не стандартное расположение файлов dansguardian
# и если изменился адрес получения чёрных списков
url="http://www.shallalist.de/Downloads/shallalist.tar.gz"; # архив с чёрными спискам, который будем качать
url_md5="http://www.shallalist.de/Downloads/shallalist.tar.gz.md5"; # md5 скачиваемого архива
#whitelist="/etc/dansguardian/lists/exceptionsitelist"; # путь к белому списку доменных имён
# Если переменная whitelist пуста, то из чёрных списков не будут удаляться совпадения с белым списком
whitelist="";
dirblacklist="/etc/dansguardian/lists/blacklists"; # путь к каталогу с чёрными списками dansguardian
bannedurllist="/etc/dansguardian/lists/bannedurllist"; # путь к файлу подключения чёрных url
bannedsitelist="/etc/dansguardian/lists/bannedsitelist"; # путь к файлу подключения чёрных доменных имён

cronf="/etc/crontab"; # Путь к файлау заданий cron
tmp_path="/tmp" # Путь к каталогу временного хранения

logdir="/var/log/shallalistinclude"; # Путь к каталогу с журналом этого сценария

useragent="Mozilla/5.0 (X11; Linux i686; rv:42.0) Gecko/20100101 Firefox/42.0"; # маскируемся под Firefox


# Переменные не для пользовательского редактирования
arch=$(echo "$url" | sed 's/^.*\///');
md5f=$(echo "$url_md5" | sed 's/^.*\///');

# Функция добавления и удаления задания для крона
function cron_plan () {
    reg=$(echo "$plan" | sed 's/\*/\\\*/g; s/\//\\\//g; s/\./\\\./g');
    if [[ "$1" = "add" ]]; then
        sed -i "/$reg/d" $cronf;
        sed -i '/^$/d' $cronf;
        echo -e "$plan\n" >> $cronf;
        echo "$(date +%d-%m-%Y" "%H-%M-%S) Ежечасный старт $(basename $0) добавлен в задания крону" >> $logdir/shallalistinclude.log;
    else
        sed -i "/$reg/d" $cronf;
        sed -i '/^$/d' $cronf;
        echo "" >> $cronf;
        echo "$(date +%d-%m-%Y" "%H-%M-%S) Ежечасный старт $(basename $0) удален из заданий крона" >> $logdir/shallalistinclude.log;
    fi
}

# Функция скачивания файла
function download () {
echo "$(date +%d-%m-%Y" "%H-%M-%S) Скачивание файлов $url_md5 и $url" >> $logdir/shallalistinclude.log;
# Качаем списки от shalla
    wget -q -N -c -nv -P $tmp_path $url_md5 $url;

# Если файл не скачан или не совпадает хеш-сумма, то создаём задание крону и завершаем работу скрипта.
    if [[ -f "$tmp_path/$arch" ]] && [[ -f "$tmp_path/$md5f" ]]; then
        echo "$(date +%d-%m-%Y" "%H-%M-%S) проверка хеш-суммы скачанного файла." >> $logdir/shallalistinclude.log;
        cd $tmp_path;
        if ! [[ $(md5sum -c ./$md5f | awk '{ print $2 }') = "ЦЕЛ" ]]; then
            echo "$(date +%d-%m-%Y" "%H-%M-%S) Ошибка: хеш-сумма $tmp_path/$arch не совпадает" >> $logdir/shallalistinclude.log;
            cron_plan add
            echo "$(date +%d-%m-%Y" "%H-%M-%S) завершиение работы $(basename $0)" >> $logdir/shallalistinclude.log;
            exit 0;
        else
            echo "$(date +%d-%m-%Y" "%H-%M-%S) хеш-сумма совпала." >> $logdir/shallalistinclude.log;
        fi
        cd $OLDPWD;
    else
        echo "$(date +%d-%m-%Y" "%H-%M-%S) Ошибка: файл $url или файл $url_md5 не скачан" >> $logdir/shallalistinclude.log;
        cron_plan add
        echo "$(date +%d-%m-%Y" "%H-%M-%S) завершиение работы $(basename $0)" >> $logdir/shallalistinclude.log;
        exit 0;
    fi

}

# Функция обработки и подключения чёрных списков
function shalla_inc () {
    echo "$(date +%d-%m-%Y" "%H-%M-%S) обработка и подключение полученных списков" >> $logdir/shallalistinclude.log;
# Переходим в tmp
    cd $tmp_path;
# Распаковываем списки
    echo "$(date +%d-%m-%Y" "%H-%M-%S) распаковка скачанного архива" >> $logdir/shallalistinclude.log;
    tar -zxf $arch;
# Удаляем скачанный архив
    rm ./$arch;
# Если переменная whitelist задана, то исключаем из "чёрных" списков доменов
# то, что включено в белый. Очень длительная процедура...
    if [[ -f "$whitelist" ]]; then
        echo "$(date +%d-%m-%Y" "%H-%M-%S) исключаем из чёрных списков то, что включено в белый" >> $logdir/shallalistinclude.log;
        for wdom in $(cat $whitelist); do
            wdom=$(echo $wdom | sed 's/\./\\\./g');
            find $tmp_path/BL -name "domains" -exec sed -i '/'$wdom'/d' {} \;
        done
# Удаляем пустые строки
        find $tmp_path/BL -name "domains" -exec sed -i '/^$/d' {} \;
        echo "$(date +%d-%m-%Y" "%H-%M-%S) сравнение чёрных и белого списков закончена" >> $logdir/shallalistinclude.log;
    fi
# Отключаем DG
    echo "$(date +%d-%m-%Y" "%H-%M-%S) остановка dansguardian" >> $logdir/shallalistinclude.log;
    service dansguardian stop;
# Удаляем старые списки
    if [[ -d "$dirblacklist/BL" ]]; then
        echo "$(date +%d-%m-%Y" "%H-%M-%S) удаление старых чёрных спсков от shalla" >> $logdir/shallalistinclude.log;
        rm -Rf $dirblacklist/BL;
    fi
# Перебрасываем подготовленные новые списки
    echo "$(date +%d-%m-%Y" "%H-%M-%S) перемещение новых чёрных списков на место старых" >> $logdir/shallalistinclude.log;
    mv $tmp_path/BL $dirblacklist;
# Переподключаем списки при каждом обновлении (вдруг у shalla появятся новые каталоги)
# Исключаем из конфига старые
    echo "$(date +%d-%m-%Y" "%H-%M-%S) исключение старых списков из конфигурации" >> $logdir/shallalistinclude.log;
    dbl=$(echo $dirblacklist/BL | sed 's/\//\\\//g');
    if [[ -f "$bannedurllist" ]]; then
        sed -i "/$dbl/d" $bannedurllist;
    fi
    if [[ -f "$bannedsitelist" ]]; then
        sed -i "/$dbl/d" $bannedsitelist;
    fi
# Включаем в конфиг новые
    echo "$(date +%d-%m-%Y" "%H-%M-%S) включение новых списков в конфигурацию" >> $logdir/shallalistinclude.log;
    sed -i '/^$/d' $bannedurllist;
    sed -i '/^$/d' $bannedsitelist;
    echo "" >> $bannedurllist;
    echo "" >> $bannedsitelist;
    find $dirblacklist/BL -name "urls" -exec echo ".Include<{}>" >> $bannedurllist \;
    find $dirblacklist/BL -name "domains" -exec echo ".Include<{}>" >> $bannedsitelist \;
# Перезагружаем squid (почему-то если этого не сделать, то шлюз будет сбрасывать соединения)
    echo "$(date +%d-%m-%Y" "%H-%M-%S) перезапуск squid" >> $logdir/shallalistinclude.log;
    service squid stop;
    service squid start;
# Запускаем DG
    echo "$(date +%d-%m-%Y" "%H-%M-%S) старт dansguardian" >> $logdir/shallalistinclude.log;
    service dansguardian start;
    rm $tmp_path/shallalist.tar*;
    echo "$(date +%d-%m-%Y" "%H-%M-%S) новые списки от shallalist подключены" >> $logdir/shallalistinclude.log;
}

############################################################

if ! [[ -d "$logdir" ]]; then
    mkdir -p "$logdir";
fi
echo "$(date +%d-%m-%Y" "%H-%M-%S) Старт $(basename $0)" >> $logdir/shallalistinclude.log;

#Проверяем наличие необходимых приложений
if ! [[ -f $(which curl) ]]; then
    echo "$(date +%d-%m-%Y" "%H-%M-%S) Ошибка: не найдено приложение curl" >> $logdir/shallalistinclude.log;
    echo "$(date +%d-%m-%Y" "%H-%M-%S) завершиение работы $(basename $0)" >> $logdir/shallalistinclude.log;
    exit 0;
fi
# Когда скрипт запустили, то соответствующее задание крона больше не нужно - удаляем его (если задание там было).
cron_plan

while [[ $iter -ge 0 ]]; do # крутим пока больше или равно нулю

    if [[ $(curl -s --connect-timeout 30 --max-time 30 -A "$useragent" -L -I "$url" | grep "HTTP" | tail -n 1 | awk '{ print $2 }') != 200 ]] || [[ $(curl -s --connect-timeout 30 --max-time 30 -A "$useragent" -L -I "$url_md5" | grep "HTTP" | tail -n 1 | awk '{ print $2 }') != 200 ]]; then
        if [[ $iter -gt 0 ]]; then # Если больше нуля
            let iter=iter-1;
            echo "$(date +%d-%m-%Y" "%H-%M-%S) Ошибка: Файл $url или $url_md5 не доступен" >> $logdir/shallalistinclude.log;
            echo "$(date +%d-%m-%Y" "%H-%M-%S) следующая попытка подключения через $wt сек" >> $logdir/shallalistinclude.log;
            sleep $wt;
        else
            let iter=iter-1;
            echo "$(date +%d-%m-%Y" "%H-%M-%S) Ошибка: файл $url или $url_md5 не доступен" >> $logdir/shallalistinclude.log;
            cron_plan "add";
        fi
    else
        iter=-1;
        download
        shalla_inc
    fi
done
echo "$(date +%d-%m-%Y" "%H-%M-%S) завершиение работы $(basename $0)" >> $logdir/shallalistinclude.log;
exit 0;


Пример запуска файла каждое воскресенье в 09:00 (используем cron)

В консоли запускаем редактор crontab от root

crontab -e

Вписываем вот это:

00  09   *   *   7   /usr/bin/shallalistinclude.sh

Сохраняем изменения и закрываем редактор.

Процедура чистки списков очень длительная. Потому желательно выполнять этот скрипт во время, когда нагрузка на сервер минимальна.

Готовый архив со скриптом можно скачать здесь

Вышеприведённый сценарий содержит несколько переменных, которые можно изменять.
Переменная:
  • iter - количество попыток соединения и проверок наличия файла (по умолчанию выставлено 5)
  • wt - время ожидания между попытками в секундах (по умолчанию выставлено в 5)
  • plan - задание крону запускать этот скрипт в случае неудачной загрузки (по умолчанию: каждый час)
  • url - url. То, что будем скачивать (по умолчанию: http://www.shallalist.de/Downloads/shallalist.tar.gz)
  • url_md5 - url файла с хеш-суммой (по умолчанию: http://www.shallalist.de/Downloads/shallalist.tar.gz.md5)
  • whitelist - путь к файлу белого списка dansguardian. По умолчанию переменная пуста. Если Вы зададите в переменной путь к белому списку, то скрипт удалит все совпадения с ним из чёрных списков.
  • dirblacklist - путь к каталогу с чёрными списками dansguardian (по умолчанию: /etc/dansguardian/lists/blacklists)
  • bannedurllist - путь к файлу подключения чёрных url (по умолчанию: /etc/dansguardian/lists/bannedurllist)
  • bannedsitelist - путь к файлу подключения чёрных доменных имён (по умолчанию: /etc/dansguardian/lists/bannedsitelist)
  • cronf - путь к файлау заданий cron (по умолчанию: /etc/crontab)
  • tmp_path - путь к каталогу временно хранения (по умолчанию: /tmp)
  • logdir - путь к каталогу журнала этого скрипта (по умолчанию: /var/log/shallalistinclude)
  • useragent - переменная содержит useragent для маскировки curl (по умолчанию: Mozilla/5.0 (X11; Linux i686; rv:42.0) Gecko/20100101 Firefox/42.0)

Теперь журнал /var/log/shallalistinclude/shallalistinclude.log нужно включить в ротацию логов.
Но для начала созданим каталог для журналов скомандовав в консоли:

mkdir -p /var/log/shallalistinclude

Т.к. сценарий подключения чёрных списков должен отрабатывать (в данном примере) один раз в неделю, то и ротацию его журнала будем выполнять один раз в неделю.
Для этого командуем в консоли:

echo -e "/var/log/shallalistinclude/shallalistinclude.log {\nrotate 5\nweekly\ncreate\nmissingok\nendscript\n}" >> /etc/logrotate.conf
(Это одна командная строка).

Всё. Со скриптом подключения чёрных списков от shallalist закончили.

Ещё сделал один маленький
скрипт для чистки и сортировки "белого" списка /etc/dansguardian/lists/exceptionsitelist
Его запускаем после добавления новых доменов в белый список и желательно запускать перед выполнением вышеприведённого shallalistinclude.sh
Скрипт перекодирует домены на кириллице в формат понятный dansguardian.

#! /bin/bash
doroga="/etc/dansguardian/lists/exceptionsitelist";
ftmp="/tmp/exceptionsitelist";

sed -i 's/ //g' $doroga;
sed -i 's/^http:\/\///g' $doroga;
sed -i 's/^https:\/\///g' $doroga;
sed -i 's/^www\.//g' $doroga;
sed -i 's/\/.*//g' $doroga;
idn2 -l < $doroga |sort -u > $ftmp;
sed -i '/^$/d' $ftmp;

mv $ftmp $doroga;

echo "Чистка и сортировка exceptionsitelist. Готово $(date)";
exit 0;

Готовый архив со скриптом можно скачать здесь
Ряд bash-скриптов упрощающих работу со списками dansguardian я вынес в отдельную статью.

Белый список для dansguardian можно скачать здесь. Обновлён 11.04.16
В белом списке удалены совпадения со списками Роскомнадзора и Прокуратуры, удалены IP-адреса. Оставлены только доменные имена.

Белый список от областного казенного учреждения "Информационно-аналитический центр" Курской области тоже можно использовать, я его добавил в вышеприведённый белый список для dansguardian.

Чёрные списки URL и доменов (Роскомнадзор + Миасс) можно скачать здесь. Обновлён 11.04.16

Списки периодически обновляются.


Подключение безопасного DNS от Yandex


Идём на сайт Yandex, смотрим IP-адреса DNS и вписываем их в файл: /etc/resolv.conf на шлюзе.
На яндексе предложено 3 пары адресов IPv4 и 3 пары IPv6.
Выбираем (в нашем случае) пару IPv4 с нужной степенью фильтрации, к примеру: "Семейный".
Редактировать файл /etc/resolv.conf можно скомандовав в консоли от имени root вот так:

cat > /etc/resolv.conf<<EOF
nameserver 77.88.8.7
nameserver 77.88.8.3
EOF

Однако, в моей школе использование иных DNS, кроме как от провайдера, не проходит!
Имейте в виду, что если провайдер запрещает "чужие" DNS, а вы внесли изменения в /etc/resolv.conf, то после этого связи с внешним миром может вообще не оказаться.
По крайней мере, до получения настроек от провайдера заново, к примеру, до перезагрузки вашего сервера.


Подключение к серверу по ssh без пароля (по ключу)


  На машине, с которой будет администрироваться сервер
(считаем, что на ней установлена ОС Debian GNU/Linux)
логинимся под пользователем от имени, которого будет администрироваться сервер (обычный пользователь - не root).
Открываем терминал и заходим в каталог ~/.ssh

cd ~/.ssh

Если такого каталога нет, то создаём его скомандовав в терминале:

mkdir ~/.ssh

Генерируем ключевую пару:

ssh-keygen -t rsa

Отправляем открытый ключ на сервер:

ssh-copy-id -i id_rsa.pub пользователь_на_сервере@IP-адрес_сервера

Спросит пароль - вводим его.
Теперь можно подключиться к серверу скомандовав в терминале на машине администратора:

ssh пользователь_на_сервере@ip-адрес_сервера

Также можно подключиться прямо из файлового менеджера Nautilus или Caja скомандовав в консоли:

nautilus ssh://пользователь_на_сервере@ip-адрес_сервера

В Caja аналогично, только в вышеприведённой команде меняем nautilus на caja.

После подключения можно создать закладку в файловом менеджере и в дальнейшем заходить на сервер через меню "Переход" на панели GNOME2 / MATE или открыв любой каталог в файловом менеджере и в левой панели щёлкнуть по созданной ссылке.


Автоматическое отключение и включение компьютера (сервера) по времени


Устанавливаем время в BIOS / UEFI в UTC (если Москва, то = GMT+4)


Настраиваем синхронизацию времени

Устанавливаем приложение ntpdate скомандовав в консоли от root

apt-get install ntpdate

Для ежечасной синхронизации будем использовать ntpdate-debian и cron.
Создаём файл с двумя строками программного кода скомандовав в консоли от root:

echo -e "#! /bin/bash\nntpdate-debian" > /etc/cron.hourly/timesync

Делаем этот файл исполняемым

chmod 755 /etc/cron.hourly/timesync

Чтобы при отключении сервера система не изменяла время в BIOS / UEFI нужно отредактировать файл /etc/default/rcS
Открываем его от root:

mcedit /etc/default/rcS

Ищем строку HWCLOCKACCESS=
и приводим её к виду:

HWCLOCKACCESS=no

Если такой строки нет, то её нужно создать.

Сохраняем файл (F2) и выходим из редактора.

Синхронизация готова!


Настройка автоматического отключения и включения сервера

Создаём файл /usr/bin/timer скомандовав в консоли от root:

touch /usr/bin/timer

Делаем файл исполняемым

chmod 755 /usr/bin/timer

Открываем файл на редактирование

mcedit /usr/bin/timer

Вписываем в открытый файл такие строки:

#! /bin/bash
# обнуление будильника
sh -c "echo 0 > /sys/class/rtc/rtc0/wakealarm";
# Устанавливаем будильник всегда на завтра на 08:00
sh -c "echo `date '+%s' --date='08:00 next day'` > /sys/class/rtc/rtc0/wakealarm";
# Отключаем сервер
halt;

Сохраняем изменения (F2) и закрываем редактор.

Чтобы сервер отключался ежесуточно и устанавливал будильник, необходимо наш скрипт "скормить" cron-у
Для этого командуем в консоли от root вот так:

echo "0 20    * * *    root    /usr/bin/timer" >> /etc/crontab

Перезагружаем cron (не обязательно, т.к. cron сам каждую минуту проверяет файлы заданий)

/etc/init.d/cron stop
/etc/init.d/cron start

Всё, теперь сервер должен отключаться каждые сутки в 20:00 и включаться каждые сутки в 08:00.
Конечно же время отключения и включения Вы можете изменить под себя.

Если сервер отключить из консоли командой halt или shutdown, то он самостоятельно не будет запущен, т.к. наш скрипт не отработает в этом случае. Т.е. если нужно отключить сервер вручную, но при этом он должен будет запуститься завтра сам, то командовать надо не halt или shutdown, а timer - запускать наш скрипт.

PS: Если компьютер отключить скриптом timer в туже дату, когда машина должна проснуться, то пробуждения не произойдёт. Т.к. скрипт установит завтрашнюю дату старта. Здесь выход один - вручную задавать параметры времени пробуждения перед отключением.



Если тормозит подключение по SSH



   Скорее всего, сервер пытается определить hostname клиента, и в случае проблем с DNS, авторизация и последующая работа может сильно тормозить.

Решаем проблему с торможением SSH

   Заходим на сервер по ssh (пока с тормозами), получаем права root.
Открываем на редактирование файл /etc/ssh/sshd_config

mcedit /etc/ssh/sshd_config

ищем строку содержащую UseDNS, приводим её к виду:

UseDNS no

Если такой строки нет, то её нужно создать.

Сохраняем изменения (F2). Закрываем редактор (двойное нажатие ESC)

Далее, открываем другой конфигурационный файл:

mcedit /etc/ssh/ssh_config

Ищем строчку GSSAPIAuthentication yes и приводим её квиду:

GSSAPIAuthentication no

Если такой строки нет, то создаём её.
Сохраняем изменения, закрываем редактор.

Перезагружаем сервер командой reboot или рестартуем sshd, можно командой

/etc/init.d/ssh restart

или

service ssh restart

Пробуем снова подключиться к серверу по SSH - должно быть без тормозов.


Настройка клиентского ПК на работу через наш прокси-сервер



   В моей организации все клиентские компьютеры имеют на борту только ОС Debian различных версий.
Потому в примере будет настройка Debian с GNOME2.

Всё очень просто.
Запускаем систему, логинимся под обычным пользователем.
Переходим в главном меню по пути Система > Параметры > Сетевая прокси-служба.

В появившемся окне переходим на вкладку "Параметры прокси".
Ставим точку в чекбоксе "Автоматическая настройка прокси-службы".
В поле "Адрес (URL) автоконфигурации" вбиваем IP-адрес нашего сервера.
Жмём кнопку "Закрыть".
Пользуемся.
Теперь сетевые настройки ПК будет получать от нашего DHCP и ходить в интернет будет через наш прокси-сервер с фильтром контента.
Для работы по FTP с внешними ресурсами используйте Filezilla, т.к. Nautilus / Caja не подключается через наш прокси.

Для настройки консольных приложений, чтобы они ходили в и-нет через прокси, но в обход фильтра контента, необходимо подправить некоторые конфигурационные файлы. О том как это сделать есть статья вот здесь.

Автоматическая очистка кэш (cache) прокси-сервера squid


   Ниже приведён bash-скрипт, который нужно отдать на выполнение cron-у.
Т.е. создаём файл с любым доступным именем, копируем в него ниже приведённый текс скрипта, сохраняем изменения, делаем созданный файл исполнимым, копируем его в один из каталогов: cron.hourly, cron.daily, cron.weekly или cron.monthly

Даный bash-скрипт сработает корректно если кэш squid находится в каталоге
/var/spool/squid, а скрипты запускаемые при старте системы лежат в каталоге /etc/init.d
Расположение кэша squid можно посмотреть в конфигурационном файле /etc/squid/squid.conf - строка с переменной cache_dir.

В Debian, если squid был установлен из официального репозитория, скрипт работает корректно.

bash-скрипт очистки кэша squid:

#! /bin/bash
# Скрипт чистки кэша squid (Debian)
# Скрипт нужно "скормить" cron-у, к примеру, положить его в каталог cron.weekly
# и не забыть сделать файл скрипта исполняемым.

# "Роняем" squid
/etc/init.d/squid stop;

# Переходим в каталог с кэшем
cd /var/spool/squid;

# Удаляем содержимое кэша
rm -R ./*;

# Формируем кэш заново
squid -z;

# "Поднимаем" squid
/etc/init.d/squid start;

# Говорим до свидания.
exit 0;



"Рубим" https://m.vk.com средствами встроенного firewall (iptables)


   Логинимся на сервере с правами root.
Создаём правило для интегрированного в ядро Linux межсетевого экрана средствами iptables.
Дописываем в самый низ файла /usr/bin/nat.sh вот такую строку:
iptables -t filter -I FORWARD -d vk.com -p tcp -m tcp --dport 443 -j DROP
Можно одной консольной командной:

echo "iptables -t filter -I FORWARD -d vk.com -p tcp -m tcp --dport 443 -j DROP" >> /usr/bin/nat.sh

Теперь все попытки достучаться с мобильных устройств к https://m.vk.com будут отсекаться.
Так пришлось сделать потому, что squid не хочет фильтровать https протокол. Т.е. http://vk.ru и ему подобные отсекаются, а https нет.

Некоторые команды мониторинга


Некоторые команды, которые я чаще всего применяю для мониторинга.
Без "воды".

Процессы

ps -auxf | less

pstree -up | less

top -u пользователь

Сеть

netstat -tunap

tcpdump

Поедатели памяти

ps -eo size,pid,user,command | awk '{ hr=$1/1024 ; printf("%13.6f Mb ",hr) } { for ( x=4 ; x<=NF ; x++ ) { printf("%s ",$x) } print "" }' | sort

Распределение памяти

cat /proc/meminfo

Squid

tail -n 50 /var/log/squid/access.log

Dansguardian

Кого куда носило за указанную дату

grep 2015.1.24 /var/log/dansguardian/access.log | enconv

Ну, и за текущую дату

grep $(date +%Y.%m.%d | sed 's/\.0/\./g') /var/log/dansguardian/access.log | enconv

(enconv в пакете enca т.е. сначала apt-get install enca)

Кому раздавались IP за текущую дату

LANG=en_US.UTF-8; grep "$(date '+%b %e').*DHCPOFFER" /var/log/dhcpd/dhcpd.log; LANG=ru_RU.UTF-8

Если место расположения лога не менялось для dnsmasq, то

LANG=en_US.UTF-8; grep "$(date '+%b %e').*DHCPOFFER" /var/log/syslog; LANG=ru_RU.UTF-8

Если место расположения лога не менялось для isc-dhcp-server, то

LANG=en_US.UTF-8; grep "$(date '+%b %e').*DHCPOFFER" /var/log/messages; LANG=ru_RU.UTF-8

Лог аутентификаций.

tail -n 50 -f /var/log/auth.log

Или полностью за текущую дату

LANG=en_US.UTF-8; grep "$(date '+%b %e')" /var/log/auth.log; LANG=ru_RU.UTF-8

ФС. Что, куда смонтировано и сколько занимает

df -h

что, куда и как смонтировано

cat /proc/1/mounts


Размеры конкретного каталога

du -hs /путь

Ну, и со всеми его потрохами, т.е. со всеми вложенными каталогами

du -h /путь | less




Опубликовано: Константин, Автор/источник: Сакрюкин К.В. 08 Май 2014 09:46:25

Комментировать

Вы не залогинены! Регистрация

Афоризмы, мысли

Некоторые рождены, чтобы повести за собой миллионы. Другие чтобы написать программу, которая перевернет мир. И лишь одному удалось и то, и другое – Линусу Торвальдсу.

/IT индустрия/

Счётчик

Сейчас на сайте - 1 (0 зарег.)
Всего хитов9019 
Сегодня хитов9019 
Сегодня хостов1356 

Откуда гости наши?

 
Powered by ReloadCMS 1.5.0.
© 2004-2012 ReloadCMS Team
RSS AggregationPHP powered
Генерация страницы: 0.45
  Яндекс.Метрика
    Сакрюкин К.В.   Яндекс цитирования    
 
Здесь всё можно копировать и цитировать, но рабочая ссылка на мой сайт обязательна!