Содержание статьи:
1. Отключение IPv6
2.iface Настройка IPV4
2.0.Netplan Настройка IPV4
3.01. Установка MySQL
3.03. Устанавливаем Nginx
3.04. Установка и Настройка DHCP
4.0. Установка Desktop
5.0. Ставим SQUID с поддержкой SSL и отключенном IPv6
5.0.1 SQUID и LOG с нормальными датой и временем
5.0.2 Парсер Логов Squid (SQUID_LOG)
5.1.Настройка NAT
6.1 установим vsftpdFTP
999.Help Тут некие пригодившиеся вещи….
# vi /etc/default/grub
Добавим значение
ipv6.disable=1
в параметры (если там данные уже есть то вносим через пробел)
GRUB_CMDLINE_LINUX_DEFAULT = "ipv6.disable=1"
и
GRUB_CMDLINE_LINUX = "ipv6.disable=1"
После сохранения обновим GRUB и перезагрузим комп:
# update-grub # reboot
Теперь, когда вы выполните ip addr show, здесь не должно быть ipv6 адреса:
# ip addr show
1. после ввода данной команды отобразятся все сетевые интерфейсы
# lshw -C network
2. Включить выключить интерфейс:
# sudo ifconfig eth0 up #(когда надо отключить меняешь up на down)
И посмотреть:
# ifconfig
Перезапустить сервис:
# sudo /etc/init.d/networking restart
И посмотреть:
# ifconfig
# vi /etc/network/interfaces
прописать В файл /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 eth0 inet static - указывает, что интерфейс (iface eth0) находится в диапазоне адресов IPv4 (inet) со статическим ip (static); address 192.168.0.1 - указывает что IP адрес (address) нашей сетевой карты 192.168.0.1; netmask 255.255.255.0 - указывает что наша маска подсети (netmask) имеет значение 255.255.255.0; gateway 192.168.0.111 - адрес шлюза (gateway) по умолчанию 192.168.0.254; dns-nameservers 192.168.0.111 8.8.8.8 - адреса DNS серверов (о ниж мы расскажем позже) auto eth0 - указывет системе что интерфейс eth0 необходимо включать автоматически при загрузке системы с вышеуказанными параметрами.
перед установкой доп компанентов
обновимся
# sudo apt-get update && sudo apt-get dist-upgrade -y
зайдем как суперпользователь
sudo -s
отредактируем файл
# vim /etc/netplan/ИМЯ ФАЙЛА.yaml
network: version: 2 enp5s1: addresses: [192.168.100.119/24] enp5s2: addresses: [192.168.10.119/16] ##Можно указать два IP gateway4: 192.168.100.101 nameservers: addresses: 192.168.100.101
применим наши параметры
# netplan try
# netplan apply
В качестве сервера баз данных, выбрал MaridDB. По функционалу в чем-то даже лучше MySQL, но статья не об этом.
apt-get install mariadb-server #настраиваем пароли на доступ mysql_secure_installation #запускаем mysql и сбрасываем привилегии mysql -u root use mysql; update user set plugin='' where User='root'; flush privileges;
Проверяем, все ли хорошо у нас запустилось:
service mysql status
В Ubuntu 16.04 Xenial уже давно из репозитория убрали PHP 5.6 и вместо него по умолчанию устанавливается новая
версия PHP 7.0. Но как быть тем, кто по той или иной причине не может перейти на новую версию? В этом случае, если
вы хотите использовать PHP 5.6 вам необходимо предварительно добавить репозиторий для старой версии.
Добавим ppa-репозиторий в систему:
add-apt-repository ppa:ondrej/php
# apt-get update
#apt-get install php5.6-cli php5.6-common php5.6-mysql php5.6-gd php5.6-fpm php5.6-cgi php-pear
останавливаем установленный сервис и редактируем файлы настройки
service php5.6-fpm stop
# vi /etc/php/5.6/fpm/php.ini
cgi.fix_pathinfo = 0 post_max_size = 200M upload_max_filesize = 200M
# vi /etc/php/5.6/fpm/pool.d/www.conf
security.limit_extensions = .php .php3 .php4 .php5 listen = /run/php/php5.6-fpm.sock listen.owner = www-data listen.group = www-data listen.mode = 0660
# service php5.6-fpm start
Можно убедится в том, что права доступа к сокету установлены верно:
ls -la /run/php/php5.6-fpm.sock
#srw-rw---- 1 www-data www-data 0 May 2 16:36 /run/php/php5.6-fpm.sock
Проверяем:
php -v
PHP 5.6.23-2+deb.sury.org~xenial+1 (cli) Copyright (c) 1997-2016 The PHP Group Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
apt-get install nginx nginx-extras
На данном этапе уже есть возможность указать на локальной машине статический IP-адрес из локальной подсети,
например 192.168.0.2, наш сервер (192.168.0.1), в качестве шлюза, и DNS-сервер. Компьютер будет подключен к
локальной сети.
Но система статических IP-адресов имеет свои недостатки: необходимо настраивать каждую машину для подключения к
локальной сети, возможен конфликт одинаковых IP и тому подобное.
Поэтому следующим этапом будет настройка механизма автоматической трансляции IP-адресов через DHCP. В таком случае
при подключении к сети нового компьютера все настройки будут переданы ему автоматически.
Для установки сервера DHCP используется команда:
# sudo 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
Теперь все клиенты локальной сети будут получать все настройки автоматически при подключении.
# sudo apt-get install ubuntu-desktop -y
после установки перезагрузимся уже в наш интерфейс и продолжим работу
# reboot
После установки обновимся
# apt-get update
# apt-get dist-upgrade -y
# reboot
Разблокируем ветки где указан src
# vi /etc/apt/sources.list
для этого разблокируем ветки где указан deb-src, уберем #
deb http://.... # deb-src http://...
поставим необходимые библиотеки для сборки
# apt-get update
# apt-get dist-upgrade -y
# reboot
для установки в 18.04 требовался не libssl-dev а libssl1.0-dev
apt-get install openssl devscripts build-essential dpkg-dev
apt-get install git fakeroot checkinstall patch libssl-dev libgnutls28-dev
apt-cache policy squid3
apt-get update
Перейдем в папку tmp где и произведем сборку (после перезагрузки все данные из этой папки стераются)
# cd /tmp
Качаем зависимости (для выполнения этой операции был поставлен dpkg-dev)
# apt-get build-dep squid3
Качаем исходник
# apt-get source squid3
В случае ошибки доступа apt «Невозможно сбросить права для скачивания» меняем права и повторяем
# chmod 777 squid3_3.5.12-1ubuntu7.2.dsc
# apt-get source squid3
В моем случае это был файл squid3_3.5.12-1ubuntu7.2.dsc может быть и squid3_3.5.12-1ubuntu7.3.dsc и другие
разновидности
Если этого не сделать или будут ошибки, то не появится папка debian
Переходим в полученную папку
# cd squid3-3.5.12
Добавляем поддержку ssl
Редактируем файл правил
# vi debian/rules
Добавляем строчки
ВАЖНО: чтобы все параметры заканчивались \, а именно дописать после proxy \
--disable-ipv6 \ --enable-icap-client \ --enable-ssl \ --enable-ssl-crtd \ --with-openssl \
ЕЩЕ РАЗ. ОЧЕНЬ ВАЖНО: чтобы все параметры заканчивались \ , а именно дописать после proxy \
Собираем DEB пакеты ( Процесс долгий минут 15-20)
# 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 -1
squid3-3.5.12 squid3_3.5.12-1ubuntu7.2_all.deb squid3_3.5.12-1ubuntu7.2_amd64.build squid3_3.5.12-1ubuntu7.2_amd64.changes squid3_3.5.12-1ubuntu7.2.debian.tar.xz squid3_3.5.12-1ubuntu7.2.dsc squid3_3.5.12.orig.tar.gz squid_3.5.12-1ubuntu7.2_amd64.deb squid-cgi_3.5.12-1ubuntu7.2_amd64.deb squidclient_3.5.12-1ubuntu7.2_amd64.deb squid-common_3.5.12-1ubuntu7.2_all.deb squid-dbg_3.5.12-1ubuntu7.2_amd64.deb squid-purge_3.5.12-1ubuntu7.2_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: '--build=x86_64-linux-gnu' '--prefix=/usr' '--includedir=${prefix}/include' '--mandir=${prefix}/share/man' '--infodir=${prefix}/share/info' '--sysconfdir=/etc' '--localstatedir=/var' '--libexecdir=${prefix}/lib/squid3' '--srcdir=.' '--disable-maintainer-mode' '--disable-dependency-tracking' '--disable-silent-rules' 'BUILDCXXFLAGS=-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wl,-Bsymbolic-functions - fPIE -pie -Wl,-z,relro -Wl,-z,now' '--datadir=/usr/share/squid' '--sysconfdir=/etc/squid' '--libexecdir=/usr/lib/squid' '--mandir=/usr/share/man' '--enable-inline' '--disable-arch-native' '--enable-async-io=8' '--enable-storeio=ufs,aufs,diskd,rock' '--enable-removal-policies=lru,heap' '--enable-delay-pools' '--enable-cache-digests' '--enable-icap-client' '--enable-follow-x-forwarded-for' '--enable-auth-basic=DB,fake,getpwnam,LDAP,NCSA,NIS,PAM,POP3,RADIUS,SASL,SMB' '--enable-auth-digest=file,LDAP' '--enable-auth-negotiate=kerberos,wrapper' '--enable-auth-ntlm=fake,smb_lm' '--enable-external-acl- helpers=file_userip,kerberos_ldap_group,LDAP_group,session,SQL_session,unix_group,wbinfo_group' '--enable-url-rewrite-helpers=fake' '--enable-eui' '--enable-esi' '--enable-icmp' '--enable-zph-qos' '--enable-ecap' '--disable-translation' '--with-swapdir=/var/spool/squid' '--with-logdir=/var/log/squid' '--with-pidfile=/var/run/squid.pid' '--with-filedescriptors=65536' '--with-large-files' '--with-default-user=proxy' '--enable-ssl' '--enable-ssl-crtd' '--with-openssl' '--enable-build-info=Ubuntu linux' '--enable-linux-netfilter' 'build_alias=x86_64-linux-gnu' 'CFLAGS=-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security -Wall' 'LDFLAGS=-Wl,-Bsymbolic-functions -fPIE -pie -Wl,-z,relro -Wl,-z,now' 'CPPFLAGS=-Wdate-time -D_FORTIFY_SOURCE=2' 'CXXFLAGS=-g -O2 -fPIE -fstack-protector-strong -Wformat -Werror=format-security'
Конфигурация без блокировок и прочего. Именно посмотреть работу прозрачного режима. Обычная базовая с добавлением
SSL
Переходим в папку squid и генерируем сертификат
# cd /etc/squid/
# openssl req -new -newkey rsa:1024 -days 365 -nodes -x509 -keyout squidCA.pem -out squidCA.pem
Упростим конфигурацию файла для этого удалим все комментарии и пустые строки
# 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
# 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 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 allow localhost http_access allow local 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 #####Для режима варианта с подменой сертификата следующие строчки писать не надо ssl_bump peek all ssl_bump splice all sslcrtd_program /usr/lib/squid/ssl_crtd -s /var/lib/ssl_db -M 4MB #####Для режима варианта с подменой сертификата следующие строчки писать не надо coredump_dir /var/spool/squid 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 # squid -k parse # squid -k reconfigure
acl https_port port 443 logformat https %{%Y.%m.%d/%H:%M:%S}tl %6tr %<a %Ss/%03>Hs %<st %rm %ssl::>sni %[un %Sh/%<a %mt. cache_access_log /var/log/squid3/access.log https https_port acl http_port port 80 logformat http %{%Y.%m.%d/%H:%M:%S}tl %6tr %<a %Ss/%03>Hs %<st %rm %ru %[un %Sh/%<a %mt. cache_access_log /var/log/squid3/access.log http http_port
либо общий вид
logformat squid %{%Y.%m.%d/%H:%M:%S}tl %6tr %>a %Ss/%03>Hs %<st %rm %ru %[un %Sh/%<a %mt %ssl::>sni
просмотр логов в реальном времени
tail -f /var/log/squid/access.log | perl -p -e 's{^([\d]+\.[\d]+)(.*$)}{localtime($1).$2}e'
Делаем парсер логов
Подразумевается что БД есть и ТАБЛИЦА создана под наши требования
CREATE TABLE `squidlog` ( `date` text NOT NULL, `time` text NOT NULL, `size1` text NOT NULL, `ip` text NOT NULL, `udpzapros` text NOT NULL, `size2` text NOT NULL, `udp` text NOT NULL, `link_site1` text NOT NULL, `ip_site` text NOT NULL, `link_site2` text NOT NULL, `mime_type` text NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
и добавим в таблицу ID
ALTER TABLE `squidlog` ADD `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;
Скрипт переносит данные из лог файла squid в БД MySQL или любую другую
(подправить недолго)
# vim /etc/squid/squidlog.sh
наш скрипт:
#/bin/sh #Создаем папку в которой будем перегонять данные mkdir /tmp/squid #копируем туда access.log cp /var/log/squid/access.log /tmp/squid/access.log #Чистим файл логов truncate -s 0 /var/log/squid/access.log # Создаем файл с SQL командами для занесения данных в БД. # (Заносятся данные: Дата, время, объем полученных данных, адрес посещенной страницы) # перегоняем access.log в MySQL команду awk '{FS="[ ]+"} {print "INSERT INTO squidlog (date,time,size1,ip,udpzapros,size2,udp,link_site1,ip_site,link_site2,mime_type) VALUES (\""$1"\",\""$2"\", \""$3"\",\""$4"\",\""$5"\",\""$6"\",\""$7"\",\""$8"\",\""$10"\",\""$12"\",\""$11"\");"}' \ /tmp/squid/access.log > /tmp/squid/tmp.squid #Обнуляем после этого лог SQUID чтобы потом не занести данные снова truncate -s 0 /tmp/squid/access.log /usr/local/mysql/bin/mysql -u root --password=17081984 -D SQUID_DB_NAME < /tmp/squid/tmp.squid truncate -s 0 /tmp/squid/tmp.squid #Все
укажем что наш скрипт можно запускать
chmod +x /etc/squid/squidlog.sh
теперь добавим выполнение скрипта в CRON
crontab -e
и в самом конце
0 3 * * * root /etc/squid/squidlog.sh
Простейший вывод двнных из БД squidlog
<?PHP session_start([ 'cookie_lifetime' => 886400, 'read_and_close' => true, ]); date_default_timezone_set('Europe/Moscow'); ini_set('display_errors',1); error_reporting(E_ALL); require_once("connsan.php"); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>Выполнение скрипта SQUIDLOG.SH</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body> Выполнение скрипта SquidLOG.sh......system...... <br> <?php $result = system('sudo -u sani4 -S /etc/squid/./squidlog.sh'); echo $result; if ($result) { echo "Ok."; } if (!$result) { echo "Errors."; } ?> <br> <table border=3> <tr> <td>Дата</td> <td>Время</td> <td>IP или ИМЯ машины</td> <td>URL</td> <td>Объем(КБ)</td> </tr> <?PHP $query="SELECT * FROM squidlog where ip_site not like '%192.168.100.119'"; $result = mysqli_query($link, $query); while($row = mysqli_fetch_array($result)){ if (($row['link_site2'])=="-") {$URL=$row['link_site1'];} else {$URL=$row['link_site2'];} $SIZE=$row['size2']/1024; echo "<tr> <td>$row[date]</td> <td>$row[time]</td> <td>$row[ip]</td> <td>$URL</td> <td>$SIZE</td> </tr>"; } ?> </table> </body> </html>
После организации локальной сети необходимо подключить её к Интернету — для этого реализуется трансляция сетевых
адресов (Network Address Translation или NAT). Благодаря NAT несколько компьютеров могут выходить в интернет,
используя один IP-адрес.
В Ubuntu механизм NAT реализуется с помощью сетевого фильтра iptables, который одновременно является брандмауэром.
Для автоматической загрузки настроек iptables при старте системы создадим новый пустой конфигурационный файл
командой:
sudo touch /etc/nat
И откроем его для изменения:
vi /etc/nat
Варианты конфигурации брандмауэра зависят от политики сетевой безопасности в компании. Минимальный набор настроек
выглядит следующим образом:
#!/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/nat
Далее необходимо поставить созданный файл на автозагрузку при включении сервера. Для этого откроем рассмотренный
ранее файл interfaces:
vi /etc/network/interfaces
и добавим в самый низ строку:
post-up /etc/nat
Перезагрузим сервер для автоматического применения новых настроек:
reboot
# apt-get install vsftpd
некоторые настройки
# vi /etc/vsftpd.conf
listen=YES # Включаем слушание демоном всех интерфейсов anonymous_enable=NO # Явно отключаем доступ для анонимных пользователей local_enable=YES # Разрешить доступ локальным пользователям write_enable=YES # Разрешить писать локальным пользователям local_umask=002 # Маска файлов/папок при создании dirmessage_enable=NO # Отключаем сообщения в папках use_localtime=YES # Использовать локальное время сервера (актуально для логирования) xferlog_enable=YES # Включаем логирование connect_from_port_20=YES # Разрешаем доступ по 20-ому порту data_connection_timeout=600 # Таймаут соединения #chroot_local_user=YES # Чрутить локальных пользователей (запираем в домашнем каталоге) #chroot_list_enable=YES # Включаем чрут-лист chroot_list_file=/etc/vsftpd/vsftpd_users # Расположение чрут-листа secure_chroot_dir=/var/run/vsftpd/empty # Имя пустого каталога без возможности записи для пользователя ftp user_config_dir=/etc/vsftpd # Директория с конфигами для пользователей pam_service_name=vsftpd # Указываем имя PAM сервиса для vsftpd
# dpkg-reconfigure tzdata
Обновления системы безопасности (при наличии уведомления об этом)
# apt-get dist-upgrade