Строим сервер ubuntu 16.04 + Desktop + squid + sams2 + DHCP

Строим сервер ubuntu 16.04 server + squid(с блокировкой сайтов по ssl) + DHCP + sams2

Установка Ubuntu … server …


Скрытый текст
Если При запуске Ubuntu не отобразились сетевые интерфейсы

1. после ввода данной команды отобразятся все сетевые интерфейсы

# lshw -C network

2. Включить выключить интерфейс:

# sudo ifconfig eth0 up #(когда надо отключить меняешь up на down)

И посмотреть:

# ifconfig

Перезапустить сервис:

# sudo /etc/init.d/networking restart

И посмотреть:

# ifconfig

прописать В файл /etc/network/interfaces примерно так:
(это для моего проводного соединения со статическими IP)

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).
 
# The loopback network interface
auto lo
iface lo inet loopback
 
# Моя проводная сеть.
 
auto enp3s2
iface enp3s2 inet static 
	address 192.168.100.119 
	netmask 255.255.255.0 
 
auto enp3s3
iface enp3s3 inet static 
	address 10.33.0.119
	netmask 255.255.255.0 
	gateway 10.33.0.211
	dns-nameservers 10.33.0.211
 
 
#iface enp3s2 inet static - указывает, что интерфейс (iface enp3s2) находится в диапазоне адресов IPv4 (inet) со статическим ip (static);
#address 192.168.100.119 - указывает что IP адрес (address) нашей сетевой карты enp3s2 192.168.100.119;
#netmask 255.255.255.0 - указывает что наша маска подсети (netmask) имеет значение 255.255.255.0;
#gateway 10.33.0.211 - адрес шлюза;
#dns-nameservers 10.33.0.211 8.8.8.8 - адреса DNS серверов (о ниж мы расскажем позже)
#auto enp3s2 - указывет системе что интерфейс enp3s2 необходимо включать автоматически при загрузке системы с вышеуказанными параметрами.

перед установкой доп компанентов
обновимся

# sudo apt-get update && sudo apt-get dist-upgrade -y

Ubuntu 16.04 Desktop Установим графический интерфейс. ЭТОТ ШАГ МОЖНО И ПРОПУСТИТЬ

Скрытый текст
# sudo apt-get install ubuntu-desktop -y

после установки перезагрузимся уже в наш интерфейс и продолжим работу

# reboot

Ubuntu 16.04 прозрачный Squid HTTPS Без подмены сертификатов

Скрытый текст

Чтобы постоянно не вводить sudo переходим в root

# sudo -s

разрешим скачивание исходников

# vi /etc/apt/sources.list

для этого разблокируем ветки где указан deb-src, уберем #

deb http://....
# deb-src http://...

поставим необходимые библиотеки для сборки

# apt-get update 
# apt-get dist-upgrade -y

перезагрузим систему

# reboot

и продолжим из под root

# apt-get install openssl devscripts build-essential dpkg-dev libssl-dev

Создадим папку где будет производится сборка

# mkdir makes
# cd makes

Качаем зависимости (для выполнения этой операции был поставлен dpkg-dev)

# apt-get build-dep squid3

Качаем исходник

# apt-get source squid3

В случае ошибки доступа _apt «Невозможно сбросить права для скачивания» меняем права и повторяем

# chmod 777 squid3_3.5.12-1ubuntu7.5.dsc
# apt-get source squid3

В моем случае это был файл squid3_3.5.12-1ubuntu7.5.dsc может быть и squid3_3.5.12-1ubuntu7.7.dsc и другие разновидности

Если этого не сделать или будут ошибки, то не появится папка debian

Переходим в полученную папку

# cd squid3-3.5.12

Добавляем поддержку ssl
Редактируем файл правил

# vi debian/rules

Добавляем строчки после proxy
ВАЖНО: чтобы все параметры заканчивались \ , а именно дописать после proxy \

--enable-ssl \
--enable-ssl-crtd \
--with-openssl \

теперь собираем DEB пакеты ( Процесс очень долгий )

# dpkg-buildpackage -d

Возможные ошибки:

configure: error: library 'crypto' is required for OpenSSL

Необходимо установить libssl-dev и перезапустить процесс сборки

# apt-get install libssl-dev

удалим логи

# rm config.log

и повторим установку

# dpkg-buildpackage -d

Идем на папку выше и там должны быть получившиеся пакеты

# ls -l *.deb
squid3_3.5.12-1ubuntu7.5_all.deb
squid_3.5.12-1ubuntu7.5_amd64.deb
squid-cgi_3.5.12-1ubuntu7.5_amd64.deb
squidclient_3.5.12-1ubuntu7.5_amd64.deb
squid-common_3.5.12-1ubuntu7.5_all.deb
squid-dbg_3.5.12-1ubuntu7.5_amd64.deb
squid-purge_3.5.12-1ubuntu7.5_amd64.deb

Устанавливаем наши пакеты

# dpkg -i *.deb

Правим зависимости и переставляем

# apt-get install -f
# dpkg -i *.deb

Если все успешно то смотрим версию squid и что у нас вышло

# squid -v

выдаваемый код сократил.

Squid Cache: Version 3.5.12
Service Name: squid
Ubuntu linux
configure options:.....

Конфигурация с блокировкой сайтов по ssl. Чтобы Именно посмотреть работу прозрачного режима. Настройка Обычная базовая с добавлением SSL

Переходим в папку squid и генерируем сертификат

# cd /etc/squid/
# openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 -keyout squidCA.pem -out squidCA.pem
Для удобства Упростим конфигурацию файла squid.conf, уберем все примечания и комментарии базового файла
# cp squid.conf squid.conf.bak
# cat squid.conf.bak | grep -v "^#" | grep -v "^$" > squid.conf

Добавим сеть src 192.168.100.0/24
Добавим порты под HTTP 3128 и HTTPS 3129
Добавим генерацию сертификатов sslcrtd_program и sslcrtd_children

# vi squid.conf

acl SSL_ports port 443
acl Safe_ports port 80          # http
acl Safe_ports port 21          # ftp
acl Safe_ports port 443         # https
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 WhiteIp src "/etc/squid/whiteip.list" # список IP которым разрешен доступ
acl BlackURL dstdomain "/etc/squid/bad_url.list" # блокируем обычные сайты
 
acl local src 192.168.100.0/24
 
acl CONNECT method CONNECT
 
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager
http_access deny BlackURL 
http_access allow localhost
http_access allow WhiteIp
http_access deny all
 
http_port 192.168.100.119:3128 intercept
https_port 192.168.100.119:3129 intercept ssl-bump cert=/etc/squid/squidCA.pem
 
acl blocked_fast ssl::server_name "/etc/squid/https.list"
acl blocked_ssl ssl::server_name_regex -i "/etc/squid/https.list"
 
ssl_bump peek all
ssl_bump terminate blocked_fast
ssl_bump terminate blocked_ssl
ssl_bump splice all
 
sslcrtd_program /usr/lib/squid/ssl_crtd -s /var/lib/ssl_db -M 4MB
sslcrtd_children 8 startup=1 idle=1
 
coredump_dir /var/spool/squid
 
visible_hostname name.domain.local
 
refresh_pattern ^ftp:           1440    20%     10080
refresh_pattern ^gopher:        1440    0%      1440
refresh_pattern -i (/cgi-bin/|\?) 0     0%      0
refresh_pattern (Release|Packages(.gz)*)$      0       20%     2880
refresh_pattern .               0       20%     4320

создадим файл с блокируемыми сайтами

# vi /etc/squid/bad_url.list
.vseigru.net
.stoboi.ru
.igroutka.net

создадим Список белых IP

# vi /etc/squid/whiteip.list
192.168.100.8
192.168.100.56
192.168.100.89

Создадим файл с сайтами что будем блокировать глобально .

# vi /etc/squid/https.list

вот с таким содержимым

#################################################
#       Домашние HTTPS развлечения              #
#################################################
(^|\.)vk\.com$
(^|\.)ok\.ru$
(^|\.)facebook\.com$
(^|\.)youtube\.com$
(^|\.)yaplakal\.com$
(^|\.)yapfiles\.ru$
(^|\.)fishki\.net$
(^|\.)vasi\.net$
(^|\.)pikabu\.ru$
(^|\.)joyreactor\.cc$
(^|\.)sasisa\.ru$
(^|\.)zaycev\.net$
 
#################################################
#       Запросы оффисных приложений             #
#################################################
(^|\.)microsoft\.com$
(^|\.)office\.com$
(^|\.)office\.net$
(^|\.)microsoftstore\.com$
(^|\.)officeapps\.live\.com$
(^|\.)autodiscover\.fs\.ess$
(^|\.)msecnd\.net$
(^|\.)windowsupdate\.com$
(^|\.)windows\.com$

И теперь применяем конфигурацию

# squid -k parse
# squid -k reconfigure

теперь Для работы необходимо настроить iptables

Настройка NAT

Скрытый текст
# vi /etc/nattables
#!/bin/bash
#==========================================================
# Настройка IPTABLES
#==========================================================
 
#==========================================================
# Сетевый интерфейсы
#==========================================================
LAN="enp3s2"
WAN="enp3s3"
LO="lo"
 
#==========================================================
# Локальная сеть
#==========================================================
LAN_RANGE=192.168.100.0/255.255.255.0
 
#==========================================================
# Путь к таблицам
#==========================================================
IPTABLES="/sbin/iptables"
 
#==========================================================
# Список портов
#==========================================================
SSH="22"
DNS="53"
SQUIDH="3128"
SQUIDS="3129"
HTTP="80"
HTTPS="443"
 
# Сбрасываем все правила
#=========================================================================================
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X
 
# Базовая расстановка правил
#==========================================================
$IPTABLES --policy INPUT   ACCEPT       #DROP
$IPTABLES --policy OUTPUT  ACCEPT       #DROP
$IPTABLES --policy FORWARD DROP         #ACCEPT
 
# Включаем форвардинг ip в ядре.
#=========================================================================================
/bin/echo 1 > /proc/sys/net/ipv4/ip_forward
 
# Включаем маскарадинг для маскарад для отработки NAT
#=========================================================================================
$IPTABLES -t nat -A POSTROUTING -o $WAN -j MASQUERADE
 
# Разрешаем пакеты по уже установленным соединениям
#=========================================================================================
$IPTABLES -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
 
# Разрешаем доступ к SSH и DNS серверу если INPUT DROP (Не пригодилось)
#=========================================================================================
#$IPTABLES -A INPUT --protocol tcp -i $LAN --dport $SSH -j ACCEPT
#$IPTABLES -A INPUT --protocol tcp -i $LAN --dport $DNS -j ACCEPT
#$IPTABLES -A INPUT --protocol udp -i $LAN --dport $DNS -j ACCEPT
 
# Разрешаем доступ к HTTP и HTTPS серверу если INPUT DROP (Не пригодилось)
#=========================================================================================
#$IPTABLES -A INPUT --protocol tcp -i $LAN --dport $HTTP -j ACCEPT
#$IPTABLES -A INPUT --protocol tcp -i $LAN --dport $SQUID -j ACCEPT
 
# Заворачиваем SQUID
#=========================================================================================
iptables -t nat -A PREROUTING -i $LAN -p tcp --dport $HTTP  -j REDIRECT --to-port $SQUIDH
iptables -t nat -A PREROUTING -i $LAN -p tcp --dport $HTTPS -j REDIRECT --to-port $SQUIDS
 
# Смотрим что мы натворили
#=========================================================================================
$IPTABLES -L -n -t nat -v

Если в качестве шлюза используется маршрутизатор, то на нем перенаправляем порты 80 и 443 на сервер где стоит SQUID на порты 3128 и 3129 соответственно
В таком случае правила «Заворачиваем SQUID» для iptables ненужны.

После сохранения изменений обеспечим для файла права на исполнение:

# chmod +x /etc/nattables

Далее необходимо поставить созданный файл на автозагрузку при включении сервера. Для этого откроем рассмотренный ранее файл interfaces:

# vi /etc/network/interfaces

и добавим в самый низ строку:

post-up /etc/nattables

Перезагрузим сервер для автоматического применения новых настроек:

# reboot

Теперь настроим Сервер DHCP

Скрытый текст
Для установки сервера DHCP используется команда:

# apt-get install isc-dhcp-server

Файл конфигурации по умолчанию находится в /etc/dhcp/dhcpd.conf, откроем файл в редакторе с помощью команды:

# vi /etc/dhcp/dhcpd.conf

В большинстве случаев минимальная настройка производится внесением блока вида:

subnet 192.168.0.0 netmask 255.255.255.0 {#подсеть 192.168.0.0/24
  range 192.168.0.2 192.168.0.254; #диапазон выдаваемых адресов
  option domain-name-servers 8.8.8.8;#dns-сервер
  option domain-name "test.loc"; #имя домена
  option routers 192.168.0.1; # “рекомендуемый” шлюз
  default-lease-time 604800; # стандартная длительность аренды ip-адреса
  max-lease-time 604800; #максимальная длительность аренды ip-адреса
}

После изменения конфигурационного файла необходимо перезапустить сервер DHCP для применения новых настроек:

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

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

Ну вот и подошли к Sams2 и php 7

Скрытый текст
Установка из исходников.
Скачиваем архив с исходниками —

# wget http://sams.perm.ru/download/sams-2.0.0-rc1.tar.bz2

или

# wget http://sani4.ru/ubuntu/sams-2.0.0-rc1.tar.bz2

Разархивирование

# tar -xvf sams-2.0.0-rc1.tar.bz2

и заходим в распакованный каталог
# cd sams2.0.0-rc1/
Перед сборкой конфигурации необходимо отредактировать файл
# vi debian/control
и меняем все php5 на php7
Собираем скрипт конфигурации:

# make -f Makefile.cvs
# ./configure

По окончании работы скрипта вы должны увидеть следующее сообщение:

Use MySQL API: yes
Use PostgreSQL API: no
Use unixODBC API: no
Use LDAP API: yes
Using pcre: pcre
Use dynamic plugin: yes

6. Файл libtool, который генерирует скрипт, нуждается в патче.
И нам необходимо его отредактировать.

# vi libtool

и в строке 7486
absdir=`cd «$dir» && pwd`
заменить на
absdir=»/usr/lib»
Cобираем SAMS2

# make

8. Устанавливаем

# make install

Меняем владельца директории sams2 на www-data:

chown www-data:www-data -R /usr/local/share/sams2/
ln -s /usr/local/share/sams2 /var/www/sams2

10.В директории /etc/apache2/conf-enabled/ создаем файл sams2.conf со следующим содержимым

# vi /etc/apache2/conf-available/sams2.conf
Alias /sams2 /usr/local/share/sams2
 
<directory usr="" local="" share="" sams2="">
        Options +FollowSymLinks
        AllowOverride All
        order allow,deny
        allow from all
</directory>

И еще один

# vi /etc/apache2/sites-available/sams2.conf
ServerName /sams2
DocumentRoot /usr/local/share/sams2
 
ErrorLog ${APACHE_LOG_DIR}/sams2.error.log
CustomLog ${APACHE_LOG_DIR}/sams2.access.log combined

Активируем

# a2enconf sams2
# a2ensite sams2.conf

теперь перезагрузим apache2

# service apache2 reload

И еще необходимо создать файл php5tophp7.php
с текстом

&lt; ?php 
$GLOBALS["MySQL_mod"] = "mysqli";
function mysql_query($a) {
return mysqli_query($GLOBALS["MySQLconn"],$a);}
function mysql_affected_rows() {
return mysqli_affected_rows($GLOBALS["MySQLconn"]);}
function mysql_set_charset($a) {
return mysqli_set_charset($GLOBALS["MySQLconn"],$a);}
function mysql_error() {
return mysqli_error();}
function mysql_close($a) {
return mysqli_close($a);}
function mysql_num_rows($a) {
return mysqli_num_rows($a);}
function mysql_fetch_array($a) {
return mysqli_fetch_array($a);}
function mysql_insert_id() {
return mysqli_insert_id($GLOBALS["MySQLconn"]);}
function mysql_fetch_assoc($a) {
return mysqli_fetch_assoc($a);}
function mysql_select_db($a) {
return true;}
function mysql_result($res, $row, $field=0) {
        $res-&gt;data_seek($row);
        $datarow = $res-&gt;fetch_array();
        return $datarow[$field];}
function mysql_connect($a, $b, $c) {
       $h = M_HOST;  
       $p = M_PORT; 
       $s = "";
       if ($a[0] == "/") {
              $h = "";
              $s = $a;
              $p = 0;
       };
       $GLOBALS["MySQLconn"] = mysqli_connect($h, $b, $c,M_BASE,$p,$s);
return $GLOBALS["MySQLconn"];}
function mysql_real_escape_string($a) {
return mysqli_real_escape_string($GLOBALS["MySQLconn"],$a);}

Заходим на http://ip-address-proxy/sams2/setup.php настраиваем следуя инструкции.

Добавление сайтов в Apache2

Скрытый текст
перейдем в /etc/apache2

# cd /etc/apache2

скопируем файл настроек

# cp sites-available/000-default.conf sites-available/test.conf

и отредактируем

ServerName /test
DocumentRoot /var/www/test
 
ErrorLog ${APACHE_LOG_DIR}/test.error.log
CustomLog ${APACHE_LOG_DIR}/test.access.log combined

подключим его

# a2ensite test.conf

далее
скопируем файл конфигурации

# cp conf-available/javascript-common.conf conf-available/test.conf

отредактируем

Alias /test /var/www/test
 
<directory "="" var="" www="" test"="">
      Options FollowSymLinks MultiViews
</directory>

включим конфигурацию

# a2enconf test

теперь перезагрузим apache2

# service apache2 reload
# service apache2 restart

Установка PHP 5.6 в Ubuntu 16.04

Скрытый текст
В Ubuntu 16.04 Xenial уже давно из репозитория убрали PHP 5.6 и вместо него по умолчанию устанавливается новая версия PHP 7.0. Но как быть тем, кто по той или иной причине не может перейти на новую версию? В этом случае, если вы хотите использовать PHP 5.6 вам необходимо предварительно добавить репозиторий для старой версии.

Добавим ppa-репозиторий в систему:

# sudo add-apt-repository ppa:ondrej/php
# apt-get update

Далее запускаем установку PHP 5.6

# sudo apt-get install php5.6

Переключать активные версии можно командами:
Отключаем PHP 7.0

# sudo a2dismod php7.0

Включаем PHP 5.6

# sudo a2enmod php5.6

Перезагружаем apache2

# sudo service apache2 restart

И обратно

Проверить рабочую версию в данный момент, можно функцией phpinfo

< ?php phpinfo(); ?>