Правила iptables для FTP ProFTPD

Дата: 07.11.2017Метки:

После того как закрыл все порты в iptables мне понадобилось разрешить подключение к серверу по протоколу ftp. Первым делом открыл порт 21, но этого оказалось недостаточно. Клиент подключался к серверу, но не мог получить содержимое каталога сервера.

Для правильной работы ProFTPD необходимо применить указанные ниже правила:

iptables -A OUTPUT -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
iptables -A INPUT -p tcp --sport 1024: --dport 1024: -m state --state ESTABLISHED,RELATED,NEW -j ACCEPT

rc.local в Debian 9

Дата: 06.11.2017Метки:

Установил у себя новую Debian 9 и вот по старинке решил добавить в rc.local пару команд в автозагрузку. Оказалось, что после установки Debian 9 по умолчанию нет файла rc.local. При желании мы можем вернуть автозапуск команд из rc.local, для этого необходимо настроить работу сервиса в systemd.

Что бы включить rc.local в Debian 9 необходимо выполнить следующие команды:

touch /etc/rc.local
chmod +x /etc/rc.local
systemctl enable rc-local
systemctl start rc-local

Перемонтировать раздел в Linux

Дата: 06.11.2017Метки:

Иногда бывает, что после изменения fstab нужно применить параметры монтирования без перезапуска сервера. В самом простом случае можно просто предварительно отмонтировать раздел в Linux. Но в моем случае этот способ не подходил, связи с тем, что в данный момент времени раздел использовался приложениями в системе.

Чтобы применить необходимы настройки необходимо использовать следующую команду:

mount -o remount,.. /dev/mapper/storage-vm /vm

В моем случае /dev/mapper/storage-vm LVM раздел, а /vm каталог монтирования. После remount, вместо трех точек указываем необходимые параметры монтирования, которые мы указали ранее в fstab.

Настройка IPv6 для KVM

Дата: 06.11.2017Метки: ,

На протяжение уже несколько лет подымается тема о том, что доступные свободные блоки IPv4 исчерпаны. Не смотря на проблему до сих пор доля использования IPv6 очень низкая. Всеобщий дефицит IPv6 стал причиной роста цен на аренду адресов. Что по сути является платой за воздух. Связи с чем предаю всем по возможности обеспечить вашим сайтам и сервисам поддержку IPv6. Таким образом каждый сделает свой вклад в скорейший переход на IPv6.

Предлагаю краткий мануал по настройке IPv6 на выделенном сервере c Failover IP для работы с виртуализацией KVM. Все работы выполняются в дистрибутиве CentOS 7.

Для начала необходимо настроить IPv6 на хосте:

vi /etc/sysconfig/network-scripts/ifcfg-vmbr0

Добавим в конец файла следующие строки:

IPV6ADDR=2001:41d0:0001:0001::1/64
IPV6INIT=yes
IPV6_AUTOCONF=no

Создадим файл с настройками шлюза IPv6:

vi /etc/sysconfig/network-scripts/route6-vmbr0

Скопируйте в файл следующие строки:

2001:41d0:0001:ffff:ff:ff:ff:ff dev vmbr0
default via 2001:41d0:0001:ffff:ff:ff:ff:ff

Следует отметить, что все IPv6 адреса необходимо заменить на свои.
Применяем настройки:

service network restart

Пингаем IPv6 DNS Google:

# ping6 -c 4 2001:4860:4860::8888
PING 2001:4860:4860::8888(2001:4860:4860::8888) 56 data bytes
64 bytes from 2001:4860:4860::8888: icmp_seq=1 ttl=59 time=4.10 ms
64 bytes from 2001:4860:4860::8888: icmp_seq=2 ttl=59 time=4.06 ms
64 bytes from 2001:4860:4860::8888: icmp_seq=3 ttl=59 time=4.09 ms
64 bytes from 2001:4860:4860::8888: icmp_seq=4 ttl=59 time=4.12 ms

Как видите IPv6 работает на хосте, осталось только прописать IPv6 DNS в системе:

vi /etc/sysconfig/network-scripts/ifcfg-vmbr0
DNS3="2001:4860:4860::8888"

Включам форвардинг IPv6 на хосте.

vi /etc/sysctl.conf

Добавить в конец:

net.ipv6.conf.all.forwarding = 1

Применяем настройки:

sysctl -p

Дата-центр с использует Failover IP и тут я решил настроить по аналогии с IPv4, но вот сейчас возникла мысль, а что если использовать в виртуальных машинах сразу шлюз 2001:41d0:0001:ffff:ff:ff:ff:ff?

Настройка IPv6 на виртуальной машине с CentOS 7:

vi /etc/sysconfig/network

Добавить в содержимое файла:

NETWORKING_IPV6=yes

Изменяем настройки сетевого интерфейса:

vi /etc/sysconfig/network-scripts/ifcfg-eth0

Добавить в конец:

IPV6ADDR="2001:41d0:0001:0001::2/64"
IPV6_DEFAULTGW="2001:41d0:0001:0001::1"
IPV6INIT="yes"
IPV6_AUTOCONF="no"
DNS3="2001:4860:4860::8888"

Применяем настройки:

service network restart

Проверяем работу IPv6:

# ping6 -c 4 2001:4860:4860::8888
PING 2001:4860:4860::8888(2001:4860:4860::8888) 56 data bytes
64 bytes from 2001:4860:4860::8888: icmp_seq=1 ttl=59 time=4.10 ms
64 bytes from 2001:4860:4860::8888: icmp_seq=2 ttl=59 time=4.06 ms
64 bytes from 2001:4860:4860::8888: icmp_seq=3 ttl=59 time=4.09 ms
64 bytes from 2001:4860:4860::8888: icmp_seq=4 ttl=59 time=4.12 ms

/bin/sh can’t access tty

Дата: 15.10.2017Метки:

На одном из серверов упал сайт. В браузере отображалась информация об отсутствии подключения к MySQL. Запускаться вручную MySQL отказывался. Отправил сервер на перезагрузку, после чего система отказалась запускаться. Если подключится к консоли можно увидеть вот такое сообщение об ошибке:

/bin/sh can't access tty

У меня была установлена система Debian 8, вылечилось достаточно просто. Запустил проверку файловой системы:

fsck -t ext4 /dev/sda1

В процессе проверки были найдены ошибки, на всех запросах жал Y для подтверждения. После перезапуска система ожила.

Ошибка установки Composer

Дата: 13.09.2017Метки:

Имеем сервер с операционной системой CentOS 7, на который установлен PHP 7. Выполняем команду для установки Composer:

curl -sS https://getcomposer.org/installer | php

В результате получаем ошибку:

Some settings on your machine make Composer unable to work properly.
Make sure that you fix the issues listed below and run this script again:

The json extension is missing.
Install it or recompile php without --disable-phar

Для начала попробуем установить расширение phar:

yum install php-pecl-phar

В моем случае расширение было уже установлено в системе. Дополнительно следует отметить, что Composer может ругаться и на другие модули. В этом случае используем список модулей для ручной установки.

Добавляем расширение phar в php.ini:

extension = phar.so

Проверяем изменения:

php -m | grep Phar

Результат выполнения команды «Phar», после чего пробуем повторно установить Composer.

libvirtd: Timed out during operation: cannot acquire state change lock

Дата: 24.08.2017Метки:

По непонятной причине выключилась одна из виртуальных машин. При попытке запустить я получил следующую ошибку:

libvirtd: Timed out during operation: cannot acquire state change lock

Проблему полностью решает перезагрузка системы. Как компрмисный варинат можно попробовать жестко перезапустить процесс libvirtd:

killall -9 libvirtd
rm /var/run/libvirtd.pid
/etc/init.d/libvirt-bin restart

Перезапуск libvirtd помогает запустить витальную машины без перезапуска системы. Однако продолжают наблюдаться различного рода проблемы в работе. На моем опыте возникали ошибка при создании новой виртуальной машины, не работала миграция.

Файл rc.local в Debian 9

Дата: 24.08.2017Метки:

Если вы уже успели попробовать свежую Debian 9, то первым делом, наверно, что в системе больше нет файла rc.local. Насколько это правильное решение судить не мне, я просто расскажу как его снова вернуть rc.local в систему.

Создаем файл:

vi /etc/rc.local

Копруем в него следующие строки:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

exit 0

Даем право на выполнение:

chmod +x /etc/rc.local

Включаем автозапуск следующей службы:

systemctl start rc-local
systemctl status rc-local

Теперь как и в старые добрые времена можно испольовать rc.local для простого и быстрого добавления программ и скриптов в автозагрузку.

Web-сервер на CentOS 7: Nginx, PHP 7.x, PerconaDB

У меня уже были ранее записи, про установку PHP 7 на CentOS. В этот раз у меня появилась задача поднять сразу веб-сервер с нуля на базе операционной системы CentOS 7. Пользуясь случаем, решил записать последовательность действий для экономии времени в будущем. Возможно, вы тоже решили установить веб-сервер под CentOS 7 с последней версией PHP 7, тогда этот материал вам тоже будет полезен.

Список актуальных версий пакетов на момент установки:

  • Веб-сервер Nginx 1.13.4
  • Менеджер процессов FastCGI PHP 7.1.7
  • MySQL сервер Percona 5.7

Предварительная настройка

Настройку сервера начнем с предварительной настройки сервера. Для начала я отключу firewalld, в дальнейшем доступ к серверу будет ограничен через iptables. Для отключения firewalld в CentOS 7 выполните следующие команды:

systemctl disable firewalld
systemctl stop firewalld

Создаем файл с правилами iptables:

mkdir -p /etc/iptables
vi /etc/iptables/rules.v4

Добавляем в содержимое файла следующие строки:

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]

-A INPUT -i lo -j ACCEPT
-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT

# DROP INVALID PACKETS
-A INPUT -m conntrack --ctstate INVALID -j DROP

# ICMP
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

# SSH
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
# Если у вас статический ip, ограничьте доступ к SSH по ip-адресу.
# Меняем адрес 1.2.3.4 на свое значение и меняем строку выше на следующую:
#-A INPUT -s 1.2.3.4/32 -p tcp -m tcp --dport 22 -j ACCEPT

# NGINX
-A INPUT -i -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -i -p tcp -m tcp --dport 443 -j ACCEPT
COMMIT

В дальнейшем, если вы решите настроить тот или иной сервис, для открытия порта извне необходимо добавить соответствующее правило в iptables. Дополнительно в целях защиты доступа к серверу по SSH настройте fail2ban и авторизацию по ключу.

Применяем правила:

iptables-restore < /etc/iptables/rules.v4

Добавляем выполнение правил при старте системы:

chmod +x /etc/rc.local
vi /etc/rc.local

Добавляем содержимое файла:

#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.

iptables-restore < /etc/iptables/rules.v4

touch /var/lock/subsys/local

Установка Nginx в CentOS

Установку Nginx в CentOS будем из официального репозитория, я рекомендую использовать более свежую mainline-версию. Для настройки репозитория yum для CentOS необходимо создать файл:

/etc/yum.repos.d/nginx.repo

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

[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/mainline/centos/7/$basearch/
gpgcheck=0
enabled=1

Устанавливаем Nginx:

yum install nginx

Запускаем и добавляем nginx в атозапуск при старте системы:

systemctl start nginx
systemctl enable nginx

Откройте файл:

vi /etc/nginx/nginx.conf

Приведите значение параметров к следующему виду:

worker_processes auto;
access_log off;
server_tokens off;

sendfile on;
tcp_nopush on;
tcp_nodelay on;

keepalive_timeout 0;

Применяем значения параметров:

service nginx restart

Установка PHP 7 в CentOS

На данный момент PHP 7 нет в официальных репозиториях. Для установки PHP 7.1 в CentOS 7 нам понадобится добавить в систему репозиторий Webtatic. Для установки модулей есть PEAR, но его поддерживают не все модуля. Связи с чем установки неподдерживаемых PHP PEAR модулей нужно выполнять из репозитория Webtatic.

Добавим в систему EPEL и Webtatic репозитории:

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

Устанавливаем PHP 7.1 и наиболее часто используемые расширения:

yum install php71w-fpm php71w-opcache php71w-cli php71w-common php71w-gd php71w-mbstring php71w-mcrypt php71w-mysqlnd php71w-xml

Расширение OPcache, но я рекомендую его использовать для более быстрой работы ваших сайтов. OPcache теперь официально включен в исходный дистрибутив и поддерживается командой PHP. Это дает ему преимущество по сравнению с другим кэшем Opcode.

Список доступных для установки расширений PHP 7.1 есть на официальной странице репозитория Webtatic, в разделе Packages.

Запускаем и добавляем php-fpm в атозапуск при старте системы:

systemctl start php-fpm
systemctl enable php-fpm

Теперь переходим к настройке PHP-FPM, откройте следующий файл:

vi /etc/php-fpm.d/www.conf

Раскомментируйте и приведите значение параметров к следующему виду:

user = apache
group = apache

listen = /var/run/php-fpm.sock

listen.owner = nginx
listen.group = nginx
listen.mode = 0660

Перезапустим php-fpm:

service php-fpm restart

Для взаимодействия Nginx с php-fpm создайте следующую конфигурацию:

vi /etc/nginx/conf.d/default.conf

Замените содержимое файла на:

server {
    listen       80;
    server_name  test.net;

    root   /usr/share/nginx/html;
    index  index.php index.html;

    location ~ .php$ {
        try_files $uri = 404;
        fastcgi_pass unix:/var/run/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Применяем значение параметров:

service nginx restart

Установка Percona в CentOS

Устанавливать PerconaDB, MySQL или MariaDB — дело личного предпочтения. В данной статье речь пойдет о установке PerconaDB на CentOS, для этого добавим в систему официальный репозиторий пакетов:

yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm

Устанавливаем Percona Server:

yum install Percona-Server-server-57

Запускаем и добавляем Percona в атозапуск при старте системы:

systemctl start mysql

Наверно, у вас возникнет вопрос: где взять пароль root для доступа к Percona Server? В этом плане Percona проявит самостоятельность, вместо нас придумает пароль и запишет его в лог.Что бы узнать пароль root в Percona выполните команду:

cat /var/log/mysqld.log |grep generated
2017-08-13T15:25:44.331443Z 1 [Note] A temporary password is generated for root@localhost: ************

В целях безопасности, необходимо сменить этот пароль и дополнительно запретить удаленный доступ к базе. Для этого выполните команду:

# mysql_secure_installation

Securing the MySQL server deployment.

Enter password for user root:
The 'validate_password' plugin is installed on the server.
The subsequent steps will run with the existing configuration
of the plugin.
Using existing password for root.

Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : y

New password:

Re-enter new password:

Estimated strength of the password: 100
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Success.


Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Success.

By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.


Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
 - Dropping test database...
Success.

 - Removing privileges on test database...
Success.

Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
Success.

All done!

Предупреждаю сразу, что перед изменением пароля, он будет проверен на соответствия правилам безопасности. Мне удалось поменять пароль не с первого раза, для его создания я использовал сервис. В процесс отметим галками все 4 пункта и выбрал длину пароля 12 символов. Пробовал по очереди созданные пароли до тех пор пока один из них не подошел критериям безопасности. Да, теперь так все сложно.

По поводу начальной настройки Percona. Нужно отметить, что по умолчанию Percona уже пригодна для использования. Нам остается только внести финальные штрихи.

Открываем следующий файл:

vi /etc/percona-server.conf.d/mysqld.cnf

В секцию [mysqld] добавляем следующие параметры:

bind-address=127.0.0.1
# Вредный параметр, но иногда необходимо отключить проверку пароля условиям безопасности
# validate-password=off
innodb_buffer_pool_size=24G
innodb_log_file_size=256M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method=O_DIRECT
max_connections=300

Что означают и для чего используются некоторые из этих параметров вы можете прочитать в статье MySQL 5.7 Performance Tuning Immediately After Installation на официальном сайте.

Самый важный параметр — innodb_buffer_pool_size. Устанавливаем равным 50%-80% от оперативной памяти, но не более размера вашей базы. Если у вас база на 100Mb устанавливаем значение параметра 200M с запасом. Для базы на 100Gb, при условии недостатка нужного количества оперативной памяти на сервере, значение параметра устанавливаем в пределах 50%-80% от оперативной памяти.

Установить свой сертификат в Proxmox

Дата: 13.08.2017Метки:

По умолчанию во время установки Proxmox устанавливается самоподписанный сертификат. В данной записи я расскажу, как установить собственный сертификат в Proxmox. Перед заменой сертификата, я советую сделать резервную копию следующих файлов:

/etc/pve/nodes/<node>/pve-ssl.pem
/etc/pve/nodes/<node>/pve-ssl.key

После заменяем файлы сертификата и ключа на свои:

cp private.ssl /etc/pve/nodes/<node>/pveproxy-ssl.pem
cp private.key /etc/pve/nodes/<node>/pveproxy-ssl.key

Перезапустим web-интерфейс Proxmox:

systemctl restart pveproxy