воскресенье, 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

воскресенье, 24 декабря 2017 г.

Использование SSH в PHP

Использование SSH в PHP

Для использования ssh в PHP необходимо установить расширение
# yum install php-pecl-ssh2
Что бы применить раширение в Apache необходимо перезапустить apache
# service httpd restart

Пример кода подключения к серверу и выполнения команды:

Переменные $ip, $login, $password, $cmd должны быть определены.

$connection = ssh2_connect($ip, 22);
ssh2_auth_password($connection, $login, $password);

$stream = ssh2_exec($connection, $cmd);
$errorStream = ssh2_fetch_stream($stream, SSH2_STREAM_STDERR);

stream_set_blocking($stream, true);
stream_set_blocking($errorStream, true);

echo "Output: " . stream_get_contents($stream);
echo "Error: " . stream_get_contents($errorStream);

fclose($errorStream);

fclose($stream);