Портал информационной и технической поддержки ПО образовательных учреждений РФ

SPO HELP
  • Новости
  • Продукты
  • Поддержка
  • Учебный центр
  • Документация
  • Сообщество
  • Форумы
       
  • Вход
  • Регистрация

Форумы → Готовые решения → Не очень готовое решение. Всё в одном (DNS+DHCP+squid+sarg+iptables)
Последние записи

Не очень готовое решение. Всё в одном (DNS+DHCP+squid+sarg+iptables)

Подписаться на Не очень готовое решение. Всё в одном (DNS+DHCP+squid+sarg+iptables) Сообщений: 1, участников: 1 Теги: DNS squid iptables sarg openssl bind apache dhcp

  • Участвуют:
  • Viktor
Ответить


05 апреля 2011, 15:55
Custom_Аватар_medium Viktor Записей: 1327

Хотим получить:

Локальную сеть с _автоматическим_ конфигурированием хостов. Фильтрацию, учет посещённых сайтов - желательно. Интеграция в эту сеть терминального сервера (ТС) - необязательно.


Должно быть инсталлировано:

squid - proxy-server;
squidGuard - Filter, redirector and access controller plugin for Squid​ - желательно;

sarg - Squid report generator per user/ip/name - желательно;
apache - web-server - желательно (для sarg) ;
ISC DHCP - dhcp-server;

bind - dns-server;
openssl - Secure Sockets Layer communications libs & utils - вещь полезная, авось пригодится;
iptables - Tools for managing Linux kernel packet filtering capabilities;
Терминальный сервер - необязательно.

Предположения:
Всё, кроме терминального сервера, расположено на одном физическом сервере (GNU/Linux). При этом
eth0 - смотрит во внешнюю сеть (WAN), ip.адрес.eth0.(WAN) - условное обозначение IP-адреса.
eth1 - смотрит в локальную сеть (LAN), ip.адрес.eth1.(LAN) - условное обозначение IP-адреса.
Адрес LAN 192.168.0.0.
Хосты в LAN - любые, главное чтобы сетевые настройки получали автоматически (через dhcp-клиента).
Все действия от root.
# Комментарии, как правило, предшествуют
записи
#Запись комментирована

Предупреждение:
Использование дистрибутивных (особенно GUI) утилит для настройки крайне нежелательно, т.к. в ряде случаев может привести к _перезаписи_ конфигурационных файлов и, в наиболее тяжких случаях, использованию другого ПО.
Расположение, а иногда и название конфигурационных файлов в Вашем дистрибутиве может отличаться, поэтому будьте внимательны.
Да и необходимо уметь создавать, редактировать файлы, создавать ссылки (не жесткие), перезапускать, отключать (опционально, т.е. необязательно) сервисы (демоны, службы), а так же изменять права доступа (владельца).


1) DNS-server (named, он же bind)
Здесь сложности, т.к. в разных дистрибутивах разные реализации. Например в Debian/Ubuntu конфигурационные файлы в /etc/bind/ и называются

/etc/bind/named.conf
/etc/bind/named.conf.options
/etc/bind/named.conf.local

named в ряде дистрибутивов в chroot. Здесь рассматривается именно такой вариант, например /var/lib/named - корень, поэтому в конфиге все пути относительно этого корня. Значит (при необходимости) /etc/named.conf ссылка на /var/lib/named/etc/named.conf. То же касается ключа /etc/rndc.key и /etc/rndc.conf. rndc.key нам нужен для обеспечения безопасного взаимодействия с DHCP-server. Обычно генерируется при установке. Если у Вас этого не произошло, т.е rndc.key и rndc.conf отсустствуют (проверьте!), то делаем сами. В командном интерпретаторе


rndc-confgen -a -c /var/lib/named/etc/rndc.key


В /var/lib/named/etc/rndc.key будет примерно следующее

key mykey {
algorithm hmac-md5;
secret "Здесь_у_каждого_своё:)";
};

Создать /var/lib/named/etc/rndc.conf. Первая "секция" копируется из /var/lib/named/etc/rndc.key

key mykey {
algorithm hmac-md5;
secret "Здесь_у_каждого_своё:)";
};

options {
default-key mykey;
default-server 127.0.0.1;
default-port 953;
};

В named.conf должно быть

include "/etc/rndc.key";

controls {
inet 127.0.0.1 port 953
allow { 127.0.0.1; } keys { mykey; };
};

Если этого нет, то добавляем сами в начало файла все вышеуказанные строки.
Стоит проверить какие адреса и порты используются. Если

listen-on port 53 { any; };

Значит все, включая внешний. Думаю Вам это не надо. Сорри, если Вы не знаете зачем Вам это надо, то исправляем.

listen-on port 53 { 127.0.0.1; ip.адрес.eth1.(LAN); };

Так же нужно добавить наши зоны, где mydomain - Ваш домен (придумайте имя), а .example.com - потому, что вряд ли он у Вас зарегистрирован и Вам делегирован:), если не так, то сами знаете, что и где указать.

zone "mydomain.example.com" IN {
type master;
file "master/mydomain.zone";
allow-update { key "mykey"; };
notify yes;
};

zone "0.168.192.in-addr.arpa" IN {
type master;
file "master/0.168.192.in-addr.arpa.zone";
allow-update { key "mykey"; };
notify yes;
};

Теперь нужно создать файлы зон.
В /var/lib/named/var/named/master (помните про chroot:)) создаём файл mydomain.zone и пишем в него

$ORIGIN .
$TTL 86400 ; 1 day
mydomain.example.com IN SOA ns.mydomain.example.com. root.mydomain.example.com. (
14934 ; serial
28800 ; refresh (8 hours)
7200 ; retry (2 hours)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS ns.
$ORIGIN mydomain.example.com.
ns A ip.адрес.eth1.(LAN)

В /var/lib/named/var/named/master (помните про chroot:)) создаём файл 0.168.192.in-addr.arpa.zone и пишем в него

$ORIGIN .
$TTL 86400 ; 1 day
0.168.192.in-addr.arpa IN SOA ns.mydomain.example.com. root.0.168.192.in-addr.arpa. (
10055 ; serial
28800 ; refresh (8 hours)
7200 ; retry (2 hours)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS ns.
$ORIGIN 0.168.192.in-addr.arpa.

;Пока всё. Это не писать.

2) DHCP-server
Здесь попроще. Конфиг /etc/dhcpd.conf. Debian/Ubuntu /etc/dhcp/dhcpd.conf Стоит обратить внимание на наличие следующих "записей":

authoritative;

#Это копируем из /var/lib/named/etc/rndc.key и убираем кавычки

key mykey {
algorithm hmac-md5;
secret Здесь_у_каждого_своё:);
}

# Server configuration:

option domain-name-servers ip.адрес.eth1.(LAN), ip.адрес.dns1.провайдера, ip.адрес.dns2.провайдера;
ddns-domainname "mydomain.example.com.";
ddns-rev-domainname "in-addr.arpa.";
ddns-update-style interim;
ddns-updates on;


# This is the communication zone

zone mydomain.example.com. {
primary 127.0.0.1;
key mykey;
}

zone 0.168.192.in-addr.arpa. {
primary 127.0.0.1;
key mykey;
}

default-lease-time 21600; # 6 hours
max-lease-time 43200; # 12 hours


# Client configuration:

option domain-name "mydomain.example.com.";
option ip-forwarding off;

subnet 192.168.0.0 netmask 255.255.255.0 {
authoritative;
ddns-domainname "mydomain.example.com.";
ddns-rev-domainname "in-addr.arpa.";
ddns-update-style interim;
ddns-updates on;
range 192.168.0.99 192.168.0.254;
option routers ip.адрес.eth1.(LAN);
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.0.255;
option domain-name-servers ip.адрес.eth1.(LAN), ip.адрес.dns1.провайдера, ip.адрес.dns2.провайдера;
}

# Для ТС. 192.168.0.1 - IP-адрес терминального сервера.
allow booting;
allow bootp;
use-host-decl-names on;
next-server 192.168.0.1;
option option-128 code 128 = string;
option option-129 code 129 = string;
option root-path "192.168.0.1:/var/lib/ltsp/i586";
if substring( option vendor-class-identifier, 0, 9 ) = "PXEClient" {
filename "/ltsp/i586/pxelinux.0";
} else if substring( option vendor-class-identifier, 0, 9 ) = "Etherboot" {
filename "/ltsp/i586/nbi.img";
#filename "/ltsp/i586/pxelinux.0";
} else {
option-129 = " initrd=/ltsp/i586/initrd.img";
filename "/ltsp/i586/vmlinuz";
}



# Практически весь файл. Можно даже копипастить.
Примечание: на ТС отключить dhcp-server.

3) SQUID
Ещё проще. Конфиг /etc/squid/squid.conf (Где-то /etc/squid3/squid.conf). Как правило он хорошо (даже слишком) документирован. Вспоминается добрым словом *.conf.example. Поэтому можно cp /etc/squid/squid.conf /etc/squid/squid.conf.example и после этого в /etc/squid/squid.conf оставить только не комментированные строки и необходимые Вам комментарии.

# Редирект на squidGuard
redirect_program /usr/bin/squidGuard
redirect_children 15
redirector_bypass on
# Адрес:порт, который слушает прокси, тип
http_port 192.168.0.2:3128 transparent
# Если надо, то и для https. Иначе комментируем.
https_port 192.168.0.2:3129 transparent key=/etc/squid/ssl/squid.key cert=/etc/squid/ssl/squid.pem
# Фильтрация
dns_nameservers 81.176.72.82 81.176.72.83
hierarchy_stoplist cgi-bin ?
acl QUERY urlpath_regex cgi-bin \?
no_cache deny QUERY
cache_dir diskd /var/spool/squid 2048 16 256
access_log /var/log/squid/access.log squid
cache_log /var/log/squid/cache.log
cache_store_log /var/log/squid/store.log
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
# Это (refresh_pattern) имеет отношение к кэшу
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i \.gif$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.png$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.jpg$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.jpeg$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.pdf$ 43200 100% 43200 override-lastmod override-expire
#refresh_pattern -i \.zip$ 43200 100% 43200 override-lastmod override-expire
#refresh_pattern -i \.tar$ 43200 100% 43200 override-lastmod override-expire
#refresh_pattern -i \.gz$ 43200 100% 43200 override-lastmod override-expire
#refresh_pattern -i \.tgz$ 43200 100% 43200 override-lastmod override-expire
#refresh_pattern -i \.exe$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.prz$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.ppt$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.inf$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern -i \.swf$ 43200 100% 43200 override-lastmod override-expire
#refresh_pattern -i \.mid$ 43200 100% 43200 override-lastmod override-expire
#refresh_pattern -i \.wav$ 43200 100% 43200 override-lastmod override-expire
#refresh_pattern -i \.mp3$ 43200 100% 43200 override-lastmod override-expire
refresh_pattern . 0 20% 4320
half_closed_clients off
# Эти строки во многих дистрибутивах должны быть комментированы. Если при запуске ругается на all, то снимаем комментарий.
#acl all src 0.0.0.0/0.0.0.0
#acl all src 0.0.0.0
acl manager proto cache_object
acl localhost src 127.0.0.1/255.255.255.255
acl to_localhost dst 127.0.0.0/8
acl localnet src 192.168.0.0/24 # RFC1918 possible internal network
acl SSL_ports port 443 # https
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 563 # snews
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
# Два последующих acl приведены в качестве примера.
# Список доменов, доступ к которым регламентируем (в данном случае запрещаем - http_access deny saitdeny) 
acl saitdeny dstdomain .3a_pycb.livejornal.com encrypted.google.com .BelPar.org .INGUSHETIYA.RU .adpix.ru .agonoize.beon.ru .anenerbe-org.narod.ru .antifa.com.ua .artmp3.net .chechentimes.net .dawap.ru .diary.ru .dpni-kirov.org .durov.ru .fank.ru .goole.ru .hitzona.ru .hoolvideo.narod.ru .myplaycity.ru .namarsch.ru .national-socialist.tk .nazbol.ru .nb-info.ru .nbp-info.ru .newp.org/nazi .novoteka.ru .nso.korpus.org .odnoklassniki.ru .odnanochnik.ru .offtop.ru/punkskin/ .onlineguru.ru .opera-mini.net .pat-index.livejournal.com .pokajem.com .punk.nnov.ru .reinform.livejournal.com .rusigra.info .rusigra.livejournal.com .rusigra.org .rusinfo.org .sbl4.org .shum2money.ru .tankionline.com .travian.ru .ufagub.com .vapka.ru .vdesyatku.biz .vk.com .vkontakte.ru .wapx.ru .yooooo.ru .zaycev.net .flashgm.net
# Регулярные варажения, встречающиеся в доменных именах. Опция -i обеспечивает нечувствительность к регистру (аналогично)
acl regexdeny dstdom_regex -i game igry sex encrypted.google.com porno xxx adult erotic durov travian igro games warez odnoklasniki odnoklassniki vkontakte nbp nacbol nazbol upyachka
# Для примера собрал в кучу, так более понятно как это работает
acl UserRedir dstdom_regex -i bash.org.ru humor bashorg
http_access deny UserRedir
deny_info http://www.spohelp.ru/categories/2-novosti UserRedir
# Здесь важен порядок следования
http_access deny regexdeny
http_access deny saitdeny
http_access allow manager localhost
http_access deny manager
# Ну коль уж решили https через прокси:)
#http_access deny CONNECT !SSL_ports
http_access allow CONNECT SSL_ports
http_access deny !Safe_ports
http_access deny to_localhost
http_access allow localnet
http_access allow localhost
http_reply_access allow all
icp_access allow localnet
icp_access allow all
memory_pools off
coredump_dir /var/spool/squid
ie_refresh on
cache_effective_user squid
cache_effective_group squid
# Можно создать файл MY_ACCESS_DENIED в формате html с сообщением о причинах блокировки и разместить его в каталоге с соответствующими файлами.
# В ряде случаев может потребоватся создание ссылки (или копии) в /etc/squid/. Если не лень, то делаем и убираем комментарии.
#deny_info MY_ACCESS_DENIED saitdeny
#deny_info MY_ACCESS_DENIED regexdeny



Если решили заморочится с https, то необходимо


openssl genrsa -out /etc/squid/ssl/squid.key

openssl req -new -key /etc/squid/ssl/squid.key -out /etc/squid/ssl/squid.csr


При генерации сертификата Вам будут заданы вопросы. Это нормально.


openssl x509 -req -days 3650 -in /etc/squid/ssl/squid.csr -signkey /etc/squid/ssl/squid.key -out /etc/squid/ssl/squid.pem

 

Про SquidGuard и безопасный поиск http://www.spohelp.ru/forums/19-kontent-filtry/...

4) SARG
Конфиг /etc/sarg/sarg.conf. Возможно, что есть еще один /etc/sarg/sarg-reports.conf. Проверяйте параметры в обоих.

Должен работать с большинством дефолтных настроек.
Рекомендуются
# Это понятно
language Russian_UFT-8
resolve_ip yes
charset UTF-8
squidguard_conf /etc/squid/squidGuard.conf
# Европейский формат даты
date_format e
# В Debian/Ubuntu, возможно output_dir /var/www/squid (см. APACHE)
output_dir /var/www/html/squid

5) APACHE
С конфигами сложно. В разных дистрибутивах они могут отличаться названием и (или) расположением. Например
/etc/httpd/conf/httpd.conf или /etc/apache2/apache2.conf
Но в любом случае там должно быть что-то типа

# Берем из /etc/sarg/sarg.conf значение параметра output_dir
<Directory "/var/www/html/squid">
# Сделаем доступ по логину и паролю
deny from all
AuthType Basic
AuthName "Statistics: login & password"
require valid-user
AuthUserFile /var/www/.htpasswd
</Directory>

Создадим .htpasswd. -с создаст файл. Принято размешать в каталоге, на уровень выше корня web-сервера.

htpasswd -c /var/www/.htpasswd user1

Вводим пароль (2 раза)

Если кого-то добавить, то

htpasswd /var/www/.htpasswd user2

Вводим пароль (2 раза)

6) IPTABLES
Существует множество вариантов использования. Во многих дистрибутивах дефолтные (по-умолчанию) правила хранятся в /etc/sysconfig/iptables. Но, например в Debian/Ubuntu это не так. Более того, даже стартовый скрипт iptables может отсутствовать (и как правило отсутствует). Поэтому определимся. Если в Вашем дистрибутиве (например типа Debian/Ubuntu) файл /etc/sysconfig/iptables отсутствует, то создаем или всё же находим файл(ы), где сохраняются правила.

В Debian/Ubuntu применять правила при загрузке можно попробовать так:
В /etc/network/interfases

auto eth0
iface eth0 inet static
address ip.адрес.eth0.(WAN)
netmask 255.255.255.0
network 192.168.0.0
broadcast 192.168.0.255
gateway IP.адрес.шлюза.провайдер
# Добавить
pre-up iptables-restore < /etc/sysconfig/iptables
post-down iptables-save -c > /etc/sysconfig/iptables

Остальным проверить наличие /etc/init.d/iptables

Пример файла /etc/sysconfig/iptables. Здесь важен порядок следования.


# Generated by mymy
*filter
:FORWARD ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
# Completed
# Generated by mymy
*mangle
:tcpre - [0:0]
:INPUT ACCEPT [0:0]
:tcout - [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:tcpost - [0:0]
:FORWARD ACCEPT [0:0]
:tcfor - [0:0]
:PREROUTING ACCEPT [0:0]
-A PREROUTING -j tcpre
-A FORWARD -j tcfor
-A OUTPUT -j tcout
-A POSTROUTING -j tcpost
COMMIT
# Completed
# Generated by mymy
*nat
:eth0_masq - [0:0]
:PREROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:loc_dnat - [0:0]
:POSTROUTING ACCEPT [0:0]
# MyHost
# ПРИМЕР 1 Начало. Этих 2 мимо прокси (напрямую в инет)
-A PREROUTING -s 192.168.0.3 -i eth1 -j ACCEPT
-A PREROUTING -s 192.168.0.4 -i eth1 -j ACCEPT
# ПРИМЕР 2. Проброс ВСЕГО с вненшего адреса на хост с ip 192.168.0.4
-A PREROUTING -d ip.адрес.eth0.(WAN) -j DNAT --to-destination 192.168.0.4
# ПРИМЕР 1,2 Конец.
-A POSTROUTING -o eth0 -j eth0_masq
# my
# ПРИМЕР 1 Продолжение. Этих 2 мимо прокси (напрямую в инет)
-A OUTPUT -s 192.168.0.3
-A OUTPUT -s 192.168.0.4
# ПРИМЕР 1 Продолжение. Конец.
-A OUTPUT -p tcp -m tcp -m owner --dport 80 --uid-owner squid -j RETURN
-A OUTPUT -p tcp -m tcp -m owner --dport 443 --uid-owner squid -j RETURN
-A eth0_masq -s 192.168.0.0/24 -j MASQUERADE
-A loc_dnat -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3129
-A loc_dnat -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
-A OUTPUT -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
-A OUTPUT -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3129
-A PREROUTING -i eth1 -j loc_dnat
COMMIT
# Completed




Войдите чтобы ответить на тему

Форумы → Готовые решения → Не очень готовое решение. Всё в одном (DNS+DHCP+squid+sarg+iptables)
  • Главная
  • О проекте
  • Справка
  • Теги
  • Карта сайта

©2015 Все права защищены. Портал информационной и технической поддержки ПО образовательных учреждений РФ.
Cо всеми проблемами и пожеланиями по работе портала и службы технической поддержки вы можете обратиться по адресу .