среда, 12 декабря 2018 г.

WEB-сервер lighttpd на CentOS7

WEB-сервер lighttpd на CentOS7

Lighttpd – легковесный web-сервер, простая альтернатива Apache.

Установка сервера:
# yum install lighttpd
Дополнительно установим сетевые уитилиты:
# yum install net-tools

Конфигурационный файл сервера - /etc/lighttpd/lighttpd.conf
Перво-наперво необходимо указать серверу что он будет слушать. Для этого редактируем файл:
# nano /etc/lighttpd/lighttpd.conf
Меняем закомментированную строку
#server.bind = "localhost"
на:
server.bind = "0.0.0.0"

Запуск сервера осуществляется командой:
# systemctl start lighttpd
Добавляем в автозагрузку:
# systemctl enable lighttpd
Проверяем, слушается ли порт:
# netstat -ltupn | grep lighttpd
tcp    0   0 0.0.0.0:80   0.0.0.0:*    LISTEN  1359/lighttpd
В браузере при обращении к IP сервера должны увидеть его стартовую страницу:

HTML документы сайта лежат в директории: /var/www/lighttpd/

Для использования php и mysql (mariadb) на сайте выполняем их установку:

Установка MariaDB.
# yum install mysql mariadb-server
Добавляем скрипт автозапуска и стартуем
# systemctl enable mariadb.service
# systemctl start  mariadb.service
Задаем пароль root для сервера MySQL
# mysql_secure_installation
Сначала вводим на первый вопрос просто <Enter>, затем на следующих вопросах вводим пароль и его подтверждение. На остальные вопросы отвечаем ДА (y)

Сервер lighttpd работает с php через fastcgi.
Установка php и сервера fastcgi, через которого будет происходить запуск команд php от web-сервера выполняется так:
# yum install php php-mysql
# yum install lighttpd-fastcgi
Настраиваем модуль fastcgi в lighttpd.
Для этого сначала определяемся, где лежит php-cgi
# which php-cgi
/usr/local/bin/php-cgi
Этот путь к исполняемому файлу нам понадобиться в дальнейшем.
Открываем конфигурационный файл fastcgi.conf
# nano /etc/lighttpd/conf.d/fastcgi.conf
Проверяем, что строка подключения модуля на месте:
server.modules += ( "mod_fastcgi" )
Вставляем конфигурацию fastcgi, где используем найденный ранее путь к php-cgi в переменной «bin-path». Остальное не меняем.
fastcgi.server = ( ".php" => ((
                     "bin-path" => "/usr/local/bin/php-cgi",
                     "socket" => "/tmp/php.socket",
                     "max-procs" => 1,
                     "bin-environment" => (
                       "PHP_FCGI_CHILDREN" => "16",
                       "PHP_FCGI_MAX_REQUESTS" => "10000"
                     ),
                     "broken-scriptfilename" => "enable"
                 )))
Теперь добавляем файл конфигурации сервера fastcgi в конфиг сервера lighttpd.
# nano /etc/lighttpd/modules.conf
Раскоментируем строчку касающейся включения модуля fastcgi.conf в следующем блоке:
##
## FastCGI (mod_fastcgi)
##
include "conf.d/fastcgi.conf"
Рестартуем сервер: 
# systemctl restart lighttpd
Для проверки поддержки php в lighttpd создаем тестовый файл:
# nano /var/www/lighttpd/info.php
вписываем туда
<?php
phpinfo();
?>
И проверяем обратившись к этому файлу через браузер, что страница описания функций php открывается. Обращаем внимание, что поддержка MySQL присутствует (есть блок MySQL и блок PDO MySQL). Если используется версия php 7, то блока MySQL может и не быть.




вторник, 11 декабря 2018 г.

Установка SNMP агента на сервер Linux CentOS7

Установка SNMP агента на сервер Linux CentOS7

Необходимость установки SNMP агента на сервер Linux может быть вызвана необходимостью мониторить сервер путем SNMP опросов.

Установка необходимых пакетов:
# yum install net-snmp net-snmp-utils

Для надежности лучше забэкапировать конфигурационный файл по умолчанию snmpd:
# cp /etc/snmp/snmpd.conf /etc/snmp/snmpd.conf.orig

Редактируем текущий конфигурационный файл:
# nano /etc/snmp/snmpd.conf
Например:
syslocation NNovgorod,ul.Vitebskaya,100
syscontact Root <root@localhost>

# First, map the "community name" into a "security name"
#          sec.name    source            community
com2sec    local       localhost         public
com2sec    nolocal     10.10.15.0/24     public

# Second, map the "security name" into a "group name":
#        groupName    securityModel    securityName
group    rwgroup      v2c              local
group    rogroup      v2c              nolocal
group    rwgroup      v1               local
group    rogroup      v1               nolocal

# Third, create a view for us to let the group have rights to:
#       name          incl/excl   subtree             mask(optional)
view    all             included        .1              80

# Finally, grant the groups access to the view:
#      group   context sec.model  sec.level prefix  read write notif
access rwgroup   ""      any       noauth   exact   all  all   all
access rogroup   ""      any       noauth   exact   all  none  none

Здесь сначала устанавливается правило работы с community в различных сетях. Из сети 10.10.15.0/24 сервер можно будет опросить с помощью community «Public»
Затем описывается какая версия SNMP будет использоваться. В данном случае разрешена и 1ая и вторая версия SNMP
Следующим шагом описывается какое дерево OID можно просматривать. В данном случае – все дерево (.1)
На финальном шаге определяются группы доступа для просмотра

Добавляем сервис snmpd в автозагрузку:
# systemctl enable snmpd.service
Запускаем сервис snmpd
# systemctl start snmpd

Изменяем уровень журналирования демона snmpd:
# nano /etc/sysconfig/snmpd
Содержимое файла приводим к виду:
# snmpd command line options
# '-f' is implicitly added by snmpd systemd unit file
OPTIONS="-LS0-4d"

Перезапускаем сервис:
# systemctl restart snmpd.service

Все. Теперь сервер можно опрашивать.
Например опросить самого себя командой:
# snmpwalk -v2c -c public localhost system

понедельник, 10 декабря 2018 г.

Установка WebDAV в Apache на CentOS 7

Установка WebDAV в Apache на CentOS 7

WebDAV (Web-based Distributed Authoring and Versioning) - это расширение протокола HTTP, позволяющее пользователю управлять файлами на WEB-сервере.
В CentOS7 при установке Apache это расширение устанавливается по умолчанию.
Проверить это можно командой «httpd -M | grep fs» . Вывод должен быть таким:
# httpd -M | grep fs
dav_fs_module (shared)

Создадим директорию для файлов, которые будут доступны по протоколу WebDAV и дадим ей права:
# mkdir /var/www/webdav
# chown -R apache:apache /var/www/webdav
# chmod -R 755 /var/www/webdav

Создаем пользователя, который будет подключаться к ресурсу:
# htdigest -c "/etc/httpd/wduser.passwd" DAV-upload dev
Adding password for dev in realm DAV-upload.
New password: <вводим пароль, например 12345>
Re-type new password: <вводим пароль еще раз, например 12345>
Здесь DAV-upload это признак пользователя, который будет использоваться далее в настройках.
dev – имя пользователя
12345 – это пароль

Добавляем виртуальный хост к серверу Apache, который будет обслуживать созданную папку webdav. Для этого создаем файл конфигурации webdav.conf и наполняем его содержимым:
# nano /etc/httpd/conf.d/webdav.conf
Вставляем описание хоста:
Listen 0.0.0.0:8080
DavLockDB /var/www/DavLock
<VirtualHost *:8080>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/webdav/
    ErrorLog /var/log/httpd/error.log
    CustomLog /var/log/httpd/access.log combined
    Alias /webdav /var/www/webdav
    <Directory /var/www/webdav>
        DAV On
        AllowOverride All
        Order allow,deny
        allow from all
        AuthType Digest
        AuthName DAV-upload
        AuthUserFile "/etc/httpd/wduser.passwd"
        AuthDigestProvider file
        Require valid-user
        Options Indexes MultiViews
        IndexOptions Charset=UTF-8 FancyIndexing HTMLTable VersionSort NameWidth=350 FoldersFirst IgnoreCase SuppressDescription
        IndexOrderDefault Descending Name
        IndexIgnore *~ favicon.ico *.bat *.sh* ~$* Thumbs.db
        IndexStyleSheet "http://localhost/style.css"
    </Directory>
</VirtualHost> 
Для WebDAV важно, что бы вся папка /var/www/ принадлежала пользователю apache, поэтому выполняем:
# chown -R apache:apache /var/www/

Рестартуем сервер
# systemctl restart httpd

Не забываем открыть порт 8080 в файрволле:
Для iptables:
# nano /etc/sysconfig/iptables
Добавляем строку:
-A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT
Рестартуем сервис:
# service iptables save
# service iptables restart

Для тестирования WEbDAV устанавливаем утилиту - клиента WebDav - cadaver
# yum --enablerepo=epel install cadaver
Проверяем работу WebDav с помощью cadaver
Подключение к ресурсу WebDev:
# cadaver http://10.10.49.162:8080/webdav/
Authentication required for webdav on server `10.10.49.162':
Username: dev
Password: <вводим пароль 12345>
dav:/webdav/>
Увидев это приглашение понимаем, что подключение прошло успешно.
Тестовая заливка файла:
> put /var/www/html/network2.html
Uploading /var/www/html/network2.html to `/webdav/network2.html':
Progress: [=============================>] 100,0% of 2364 bytes succeeded.
Просмотр содержимого каталога:
> ls
Listing collection `/webdav/': succeeded.
        network2.html                       2364  дек  1 19:45
        test.txt                              26  ноя 18 08:06
Скачивание файла:
> get test.txt
Downloading `/webdav/test.txt' to test.txt:
Progress: [=============================>] 100,0% of 26 bytes succeeded.
Удаление файла:
> delete test.txt
Deleting `test.txt': succeeded.
Выход из клиента:
> exit
Connection to `10.10.49.162' closed.


Ресурс WebDAV можно подключить в ОС Windows как сетевой диск.
Первый вариант (самый легкий):
"Мой компьютер" – кнопка "Подключить сетевой диск"
В поле "Папка" вводим наш URL http://10.10.49.162:8080/webdav/, отмечаем все галочки. Затем будет запрошен логин и пароль. После чего подключением можно пользоваться.
Второй вариант.
Подключаем сетевой диск в Windows из командной строки так:
C:\Users\rossyp>net use N: http://10.10.49.162:8080/webdav/
Введите имя пользователя для '10.10.49.162': dev
Введите пароль для 10.10.49.162:
Команда выполнена успешно.
Отключаем сетевой диск:
C:\Users\rossyp>net use N: /DELETE
N: успешно удален.
Третий вариант.
С помощью программы Cyberduck (https://cyberduck.io/ ) работать с ресурсом можно без проблем. В поле «Сервер» вводим URL, затем вводим логин и пароль и с ресурсом можно работать. Очередь загрузки / выгрузки показывается в удобном окне:

ПРИМЕЧАНИЯ:
1.
Для добавления хранилищу красивости просмотра через WEB-интерфейс можно в корне создать файл "HEADER.html", содержимое которого будет выводиться над листингом, и файл "README.html", содержимое которого будет выводиться под листингом.
Файл style.css применяется в конфигурации для подкачки стиля оформления страниц.
2.
Для решения проблемы работы с большими файлами через WebDAV в Windows необходимо исправить одну переменную в реестре:
Запускаем редактор реестра:
>regedit
Ищем ветку:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters
Исправляем параметр FileSizeLimitInBytes на ffffffff
По умолчанию здесь -  2faf080

воскресенье, 8 апреля 2018 г.

Установка и использование graphviz в CentOS7

Установка и  использование graphviz в CentOS7

1. Просмотр доступных пакетов graphviz
# yum list available 'graphviz*'

2. Установка всех пакетов graphviz
# yum install 'graphviz*'

3. Проверка работы системы graphviz
Создаем файл temp.dot 
# touch temp.dot
Помещаем в файл следующее:
digraph G{
  Один->Два->Три->Четыре->Пять->Шесть->Десять;
  Три->Десять;
  Четыре->Десять;
}
Конвертируем данные в граф с представлением в png
# dot -Tpng temp.dot -o temp.png
После ключа T указываем тип выходного файла
Получим файл png с изображением:

4. Установка связки php с GraphViz
# yum install php-pear-Image-GraphViz
# service httpd restart

5. Создадим файл  network.php с содержимым
<?php
require_once 'Image/GraphViz.php';

$gv = new Image_GraphViz();
$gv->addEdge(array('wake up'        => 'visit bathroom'));
$gv->addEdge(array('visit bathroom' => 'make coffee'));
$gv->image();
?>
При просмотре этого файла в браузере получим изображение



Основными объектами являются узлы («node») и ребра («edge»)
Пример описания узла и связей:
<?php

require_once 'Image/GraphViz.php';

$gv = new Image_GraphViz();

$gv->addNode(
    'Node1',
    array(
      'URL'   => 'http://yandex.su',
      'label' => 'Яндекс',
      'shape' => 'box3d',
      'color' => 'green',
      'style'=>'filled',
      'fillcolor'=>'lightgrey'
    )
  );

$gv->addEdge(array('Node1' => 'Node2'));
$gv->addEdge(array('Node2' => 'Node3'),  
array('color' => 'red',
'fontcolor'=>"blue",
'label'=>"ссылка на Google",
'URL'=>"http://www.google.com"

);
$gv->image();

?>

Результат:



Попытка вставить код php в имеющуюся отформатированную страницу приведет к ошибке
 
Это связано с тем, что код, который генерит GraphViz.php имеет первую строку 
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
При наличии xml-фрагмента браузер не допускает других символов перед <?xml.

Обойти это можно создав другую страницу, которая будет получать код основной с построенным графом.
Пример файла забирающего данные с другой страницы и выводящего дополнительные данные до и после графа:
<p>123</p>
<?php

date_default_timezone_set('Etc/GMT-3');

$url = "http://10.10.49.162/network.php";
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11');
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
$output = curl_exec($ch);

?>
<p>456</p>
Результат:

воскресенье, 18 марта 2018 г.

Apache на CentOS 7. Добавление виртуального хоста.

Apache на CentOS 7. Добавление виртуального хоста.

Есть установленный WEB-сервер на ip 10.10.49.162, порт 80
Сервер настроен по умолчанию. Имя сервера www.kos.domain.ru.
Сервер смотрит папку /var/www/html.
В ней один файл index.php:
<!DOCTYPE html>
<html>
<head>
  <title>1</title>
</head>
  <body>
    Сервер www.kos.domain.ru
  </body>
</html>
Задача: поднять виртуальный сервер www.purga.domain.ru, документы которого будут в папке /mnt/purga.

Для тестирования работы двух виртуальных серверов установим браузер links
# yum install links
Так мы сможем смотреть ответы сервера в консоли, а не по сети в отсутствии настроек DNS сервера.
Смотрим существующий сервер из консоли так:
# links www.kos.domain.ru

Для добавления нового виртуального хоста необходимо:
1) Прописать новое имя сервера в файл hosts
# nano /etc/hosts
Добавляем строку в конец
127.0.0.1 www.purga.domain.ru purga.domain.ru
Теперь с локальной машины данный адрес успешно пингуется по доменного имени.
# ping www.purga.domain.ru
2) Создаем корневую папку для WEB-сервера и даем ей права
# mkdir /mnt/purga
# chown apache:apache /mnt/purga
Делаем ссылку на эту папку в каталог /var/www:
# ln -s /mnt/purga/ /var/www/purga
3) В папку /mnt/purga кладем файл index.php:
# touch /mnt/purga/index.php
# chown apache:apache /mnt/purga/index.php
# chmod -R 755 /mnt/purga/
# nano /mnt/purga/index.php
Содержимое файла:
<!DOCTYPE html>
<html>
<head>
<title>2</title>
</head>
<body>
Сервер www.purga.domain.ru
</body>
</html>
4) Создаем файл описания виртуального сервера
# touch /etc/httpd/conf.d/purga.conf
Содержимое файла:
<VirtualHost purga.domain.ru:80>

    ServerName purga.domain.ru
    ServerAlias www.purga.domain.ru

    DocumentRoot "/var/www/purga"

    <Directory /var/www/purga >
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>

    LogLevel warn

    ErrorLog /var/log/httpd/error_log

    CustomLog /var/log/httpd/access_log combined

</VirtualHost>
5) Перезагружаем сервер apache
# systemctl restart httpd.service
6) Проверяем:
# links www.purga.domain.ru
# links www.kos.domain.ru

Все великолепно!

четверг, 22 февраля 2018 г.

Проброс портов в firewalld и iptables в CentOS7

Проброс портов в firewalld и iptables в CentOS7

Проброс портов через firewalld

Просмотр статуса сервиса firewalld
# systemctl status firewalld

Просмотр созданных правил
# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens32
  sources:
  services: dhcpv6-client ssh
  ports: 80/tcp
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

Пробросить порт 9006 на 80 порт сервера 10.200.16.216
# firewall-cmd --zone=public --add-masquerade --permanent
# firewall-cmd --zone=public --add-forward-port=port=9006:proto=tcp:toport=80:toaddr=10.200.16.216 --permanent

Перезагрузка службы и применение настроек
# firewall-cmd --reload


Проброс портов через iptables 

Сервиса iptables не существует. Iptables – это набор команд для изменения пакетного фильтра netfilter, встроенного в ядро Linux. Для работы netfilter необходимы две таблицы: таблица filter и таблица nat
Просмотр действующих правил таблицы filter
# iptables --list
Chain INPUT (policy ACCEPT)
target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination

Просмотр правил всех таблиц
# service  iptables status
Таблица: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

Таблица: nat
Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination

Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

Файл настроек iptables - /etc/sysconfig/iptables
В файле два блока – для таблицы nat и таблицы filter
# Generated by iptables-save v1.4.7 on Tue Dec 31 10:19:33 2013
*nat
:PREROUTING ACCEPT [146:9375]
:POSTROUTING ACCEPT [457:36459]
:OUTPUT ACCEPT [457:36459]
COMMIT
# Completed on Tue Dec 31 10:19:33 2013
# Generated by iptables-save v1.4.7 on Tue Dec 31 10:19:33 2013
*filter
:INPUT ACCEPT [4027:397752]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [3661:1561691]
COMMIT
# Completed on Tue Dec 31 10:19:33 2013

Для возможности проброса портов необходимо включить переадресацию трафика на уровне ядра
# echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
Чтобы настройка сохранялась после перезагрузки используйте такую команду:
# sysctl -w net.ipv4.ip_forward=1

Пробросить порт 9006 на 80 порт сервера 10.200.16.216
# iptables -t nat -A PREROUTING -i eth2 -p tcp --dport 9006 -j DNAT --to-destination 10.200.16.216:80
# iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 80 -d 10.200.16.216 -j SNAT --to-source 10.200.16.227

Сохранение настроек
# service iptables save