Контакты
email:
skype:
© 2008 – 2015

mysqltuner.pl - скрипт на perl проанализирует ваш mysql и предложит что можно улучшить в вашей настройке


#!/usr/bin/env perl
# mysqltuner.pl - Version 1.6.4
# High Performance MySQL Tuning Script
# Copyright (C) 2006-2015 Major Hayden - [email protected]
#
# For the latest updates, please visit http://mysqltuner.com/
# Git repository available at http://github.com/major/MySQLTuner-perl
#
# Inspired by Matthew Montgomery's tuning-primer.sh script:
# http://forge.mysql.com/projects/view.php?id=44

http://mysqltuner.pl/

14 - Готовим CentOS 7. Установка и настройка дополнительного софта




Rkhunter — это сканер различных видов локальных (потенциальных) уязвимостей (бэкдоров, эксплоитов и руткитов) со своей регулярно обновляемой базой.
yum install rkhunter -y
rkhunter --versioncheck
rkhunter --update

Вторым шагом будет создание снимка состояния установленной системы для rkhunter командой:
rkhunter --propupd
rkhunter --check

Настройка rkhunter
Файл конфигурации /etc/rkhunter.conf
После редактирования конфигурационного файла сохраните его и проверьте на наличие проблем, запустив
rkhunter -C

Запустим rkhunter для проверки системы, но добавим ключ -rwo, чтобы выводились только предупреждения:
rkhunter -c --enable all --disable none --rwo


ClamAV - это антивирус
yum -y install clamav-server clamav-data clamav-update clamav-filesystem clamav clamav-scanner-systemd clamav-devel clamav-lib clamav-server-systemd

nano -w  /etc/freshclam.conf

Закомментируем строчку Example
# Example

И добавим зеркал
DatabaseMirror db.us.clamav.net
DatabaseMirror db.de.clamav.net
DatabaseMirror db.jp.clamav.net

Обновим
freshclam

clamscan -ri /var/www/test.dev/


Malware Detect - программа для поиска и отлова malware
cd /tmp
wget http://www.rfxn.com/downloads/maldetect-current.tar.gz
tar xfz maldetect-current.tar.gz
cd maldetect-*
./install.sh

Настройки nano /usr/local/maldetect/conf.maldet
Что бы просканировать директорию
maldet -a /var/www

Обновить программу
maldet -u


inxi - программа показывает железо на котором крутится
yum install inxi -y
inxi -F


Посмотреть список подключенных репозиториев в вашей системе
yum repolist        


Получить список процессов упорядоченных по используемой памяти, в мегабайтах (MB) :
ps axo rss,comm,pid \
| awk '{ proc_list[]++; proc_list[ "," 1] += ; } \
END { for (proc in proc_list) { printf("%d\t%s\n", \
proc_list[proc "," 1],proc); }}' | sort -n | tail -n 10 | sort -rn \
| awk '{/=1024;printf "%.0fMB\t",}{print }'


Просмотреть конфигурационный Файл без комментариев
grep ^[^#] somefile.conf

ну или например если это php.ini и там комментарий не через # а через ; то так
grep ^[^\;] /etc/opt/remi/php70/php.ini


SELinux
Проверить статус
getenforce
Enforcing (включен), Permissive (включен в режиме уведомлений), или Disabled (отключен)
Временно отключить
setenforce 0

Временно включить
setenforce 1

Отключение selinux
nano -w /etc/selinux/config

Измените строку SELINUX= в файле /etc/selinux/config на
SELINUX=disabled


ТЕСТ Скорости ЗАПИСИ Жесткого Диска
sync; dd if=/dev/zero of=tempfile bs=1M count=1024; sync


ТЕСТ Скорости ЧТЕНИЯ Жесткого Диска
dd if=tempfile of=/dev/null bs=1M count=1024


Проверка Производительности HDD
yum install hdparm -y  
hdparm -Tt /dev/sda


Набор примеров испльзования nmap
Сканировать Один Порт :
nmap -p 80 192.168.1.1

Сканировать Несколько Портов :
nmap -p 80,443 192.168.1.1

Сканировать Диапазон Портов :
nmap -p 80-1000 192.168.1.1

Сканировать несколько самых Распространенных Портов :
nmap --top-ports 10 192.168.1.1

Активировать Быстрый Режим сканирования :
nmap -F 192.168.1.1

Показать Только Открытые Порты (либо возможно открытые) :
nmap --open 192.168.1.1

Включить Определение ОС :
nmap -O 192.168.1.1

Сканирование Фаервола на Уязвимости
TCP Null сканирование :
nmap -sN 192.168.1.1

TCP Fin сканирование :
nmap -sF 192.168.1.1

TCP Xmas сканирование :
nmap -sX 192.168.1.1

Сохранить результат сканирования Nmap в Текстовый Файл :
nmap 192.168.1.1 > output.txt


Пример удобного запуска виртуальной машины с помощью бат файла start.bat
запускаем нашу виртуальную машину в тихом режиме
start c:/"Program Files"/Oracle/VirtualBox/VBoxManage startvm test.dev --type headless

переходим в директорию нашего проекта
CD d:/htdocs/test.dev

запускаем сборщик gulp
start C:/"Program Files"/Git/bin/sh.exe --login -i -e gulp

ждем 35 секунд пока виртуалка загрузится
ping -n 35 localhost > null
DEL null

запускаем программы
start c:/"Program Files (x86)"/portSoft/putty.exe -ssh test.dev
start c:/"Program Files (x86)"/Robomongo/Robomongo.exe
start c:/"Program Files (x86)"/RedisDesktopManager/rdm.exe


Создание бэкапа системы
Создаем файл
nano /home/utz0r2/backup.sh

Записуем в него
#!/bin/bash
destination_folder=/home/utz0r2/backup/`date +%F`
archive_file="backup-`date +%H%M`.tar.gz"
mkdir -p $destination_folder
/bin/tar -czvf $destination_folder/$archive_file / --exclude=/proc --exclude=/dev --exclude=/home/utz0r2/backup

Делаем исполняемым
chmod +x /home/USERNAME/backup/backup.sh

Запускаем
/home/utz0r2/backup.sh

В /home/utz0r2/backup/дата/ будет лежать бекап.

13 - Готовим CentOS 7. Установка и настройка firewalld




Установка
yum -y install firewalld

Запуск
systemctl start firewalld

Статус
systemctl status firewalld

Зоны
- drop – входящие сетевые пакеты сбрасываются, без ответа, допускаются только исходящие соединения
- block – входящие сетевые соединения отклоняются с сообщением icmp-host-prohibited, допускаются только сетевые соединения инициированные внутри нашей системы.
- public – при недоверии к компьютерам, разрешается устанавливать только конкретные входящие соединения.
- external – для использования во внешних сетях с разрешенным маскарадингом, особенно для роутеров, разрешается устанавливать только конкретные входящие соединения
- dmz – для компьютеров собственной demilitarized zone которые публично доступны с ограниченным доступом к нашей внутренней сети, разрешается устанавливать только конкретные входящие соединения.
- work/home/internal – максимальное доверие к компьютерам, уверенность в том, что они не приченят вреда нашему компьютеру, разрешается устанавливать только конкретные входящие соединения
- trusted – все сетевые соединения разрешены.

Посмотреть текущую зону
firewall-cmd --get-default-zone

Для смены зоны например на home
firewall-cmd --set-default-zone=home

Либо непосредсвтенно в конфиге
nano /etc/firewalld/firewalld.conf

Получить текущую конфигурацию для нашей зоны public
firewall-cmd --zone=public --list-all     

После внесение изменений перезагрузить FirewallD можно так
firewall-cmd --reload     

режим паники, блокирующий все сетевые соединения
firewall-cmd --panic-on     

отмена режима паники
firewall-cmd --panic-off        

добавить порт к зоне
firewall-cmd [--zone=] --add-port=[-]/ [--timeout=]

удалить порт из зоны
firewall-cmd [--zone=] --remove-port=[-]/ [--timeout=]


Добавим 80 порт в доверенные
firewall-cmd --permanent --add-port=80/tcp

Посмотреть список сервисов
firewall-cmd --list-services

Добавим ssh в доверенные
firewall-cmd --permanent --add-port=2222/tcp

firewall-cmd --reload  

Посмотрим что получилось
firewall-cmd --list-all     

Ставим в автозагрузку
systemctl enable firewalld

Вот в принципе и все, пока нам нужен только 80 порт (отображается сайт) и 2222 (наш ssh). Ко всем гуи типа робомонго конектитмся через ssh тунель.

12 - Готовим CentOS 7. Установка и настройка supervisord на воркер




Утсановка
yum install python-setuptools -y
easy_install pip
pip install supervisor
supervisord --version
mkdir -p /etc/supervisord
echo_supervisord_conf > /etc/supervisord/supervisord.conf

Создаем файл автозагрузки
nano -w /usr/lib/systemd/system/supervisord.service

С таким содержимым
[Unit]
Description=supervisord - Supervisor process control system for UNIX
Documentation=http://supervisord.org
After=network.target

[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisord/supervisord.conf
ExecReload=/usr/bin/supervisorctl reload
ExecStop=/usr/bin/supervisorctl shutdown
User=nginx

[Install]
WantedBy=multi-user.target

Стартуем, смотрим статус, добавляем в автозагрузку
systemctl start supervisord
systemctl status supervisord
systemctl enable supervisord

Сконфигурируем
nano -w /etc/supervisord/supervisord.conf

в самом низу добавляем настройки для нужного воркера:
[program:worker]
command=/opt/remi/php70/root/bin/php /var/www/test.dev/worker.php
numprocs=1
directory=/var/www/test.dev
autostart=true
autorestart=true
stopsignal=KILL

Для запуска нескольких копий одного процесса необходимо также указать параметр process_name для определения уникального имени процесса
[program:worker]
command=/opt/remi/php70/root/bin/php /var/www/test.dev/worker.php
process_name=%(program_name)s_%(process_num)02d
numprocs=10
directory=/var/www/test.dev
autostart=true
autorestart=true
stopsignal=KILL

Запустит 10 одновременных процессов указанного скрипта

Исправляем пути на абсолютные в нашем producer.php и worker.php
require_once '/var/www/test.dev/vendor/autoload.php';
$file = '/var/www/test.dev/data.txt';

Перезапускаем
systemctl restart supervisord

Дополнительно
для supervisord есть плагин Superlance
Включает в себя набор утилит
httpok - отправляет гет запрос по урлу, если запрос не приходит или отваливается по таймауту то перезапускает процесс
crashmail - отправляет на поучту письмо в случае неполадки
memmon - мониторит использование памяти, и перезапускает процесс если привышает лимит указаный в конфиге
crashmailbatch - аналогичный crashmail, разница только в том что уведамления группируются за определенный период и отправляется пучком.
fatalmailbatch - отправляет уведомление когда супервизор много раз фейлится при запуске, так же уведомления группируются перед отправкой письма
crashsms - аналогично crashmailbatch, отправляет смс через email шлюз.
Документация https://superlance.readthedocs.org/en/latest/
Установить
easy_install superlance

11 - Готовим CentOS 7. Установка сервера очередей beanstalkd




Устанавливаем git
yum install git -y
cd /tmp

Клонируем репозиторий
git clone git://github.com/kr/beanstalkd.git
cd beanstalkd
make
cp beanstalkd /usr/bin/beanstalkd
mkdir /var/lib/beanstalkd

Создаем скрипт автозапуска
nano -w /etc/systemd/system/beanstalkd.service

[Unit]
Description=Beanstalkd is a simple, fast work queue

[Service]
User=root
ExecStart=/usr/bin/beanstalkd -b /var/lib/beanstalkd

[Install]
WantedBy=multi-user.target

Запускаем и добавляем в автозагрузку
systemctl start beanstalkd
systemctl enable beanstalkd

Проверяем
systemctl status beanstalkd
ps ax | grep beanstalkd

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

Установим композер
cd /tmp
curl -sS https://getcomposer.org/installer | php70
mv composer.phar /usr/local/bin/composer

Установим pheanstalk
cd /var/www/test.dev
php70 /usr/local/bin/composer require pda/pheanstalk

Создадим клиента
nano -w /var/www/test.dev/producer.php

 'data',
                'msg' => "job 7 payload goes here\n"
        )
);
$pheanstalk->useTube('default')->put($data);
echo 'added';

Создадим воркер который будет зписывать в файлик наши задачи
nano -w /var/www/test.dev/worker.php

watch('default')->reserve();
        if ( $job->getData() ) {
                $data = unserialize($job->getData());
                if ( $data['do'] == 'data' ) {
                        $file = 'data.txt';
                        $current = file_get_contents($file);
                        $current .= $data['msg'];
                        file_put_contents($file, $current);
                        echo 'Log: add data'. PHP_EOL;              
                }
                $pheanstalk->delete($job);           
        }
}

Запустим наш воркер
cd /var/www/test.dev
php70 worker.php

Заходим через наш бразуер на http://test.dev/producer.php и клацаем обновить можно менять job-ы, что бы удостовериться что в очередь попадают разные задачи а не одна и та же, и в нашем файлике data.txt проверяем, что все что передано, отправлено в файлик.

Почему Beanstalkd - это сервер очередей, написаный на С, он маленький и простой. И мониторятся очереди.

Сервер — это сам Beanstalkd, который принимает job-ы от клиента
Продюсер(клиент) — это основное PHP приложение, которое отправляет job-ы на сервер
Воркер — это PHP скрипт, который получает сообщение с сервера задач и выполняет какие-то действия

Что за job? Job (задание) — это любая информация, которую клиент отправляет на сервер очередей. Потом эта же информация передается на обработчик (воркер). К примеру, мы хотим отправить почту на сервер очередей, то создаем для него задачу: отправка почты - адрес получаетля, заголовок письма, тело письма.

Задача 1 - он должен запускаться только из консоли
Задача 2 - должен выключаться если сам воркер изменился ( запускать его будет супервизор (об этом будет позже) )
Задача 3 - собственно обрабатывать наши задачи из очереди
Используется https://github.com/pda/pheanstalk
watch('default')->reserve();
        if ( !isset($job) OR !$job ) {
                // return FALSE;
        } else {
                // распаковываем ранее запакованные данные
                $data = unserialize($job->getData());
                // и тд и тп =)
        }
} 

Beanstalk console - Административная консоль для сервера очередей Beanstalk, написанная на PHP
Возможности
- Общий список серверов в конфиге для всех пользователей
- Глобальный список серверов может быть установлен через переменную окружения BEANSTALK_SERVERS
- Каждый пользователь может добавить свой персональный сервер
- Полный список доступных труб
- Полная статистика тасков в трубах
- Realtime-обновление с подсветкой изменившихся значений
- Вы можете просматривать таски в каждой трубе (ready/delayed/buried)
- Вы можете выполнять операции с тасками в каждой трубе (add/kick/delete)
https://github.com/ptrofimov/beanstalk_console

10 - Готовим CentOS 7. Cоздание заглушки для писем




- создаем shell-скрипт:
nano -w /usr/bin/fakesendmail.sh

со следующим содержимым:
#!/bin/sh 
prefix="/var/mail/sendmail/new"
numPath="/var/mail/sendmail"
if [ ! -f $numPath/num ]; then 
echo "0" > $numPath/num 
fi 
num=`cat $numPath/num` 
num=$(($num + 1)) 
echo $num > $numPath/num 
name="$prefix/letter_$num.txt"
while read line 
do 
echo $line >> $name
done 
chmod 777 $name
/bin/true

- делаем файл исполняемым
chmod +x /usr/bin/fakesendmail.sh
chmod 755 /usr/bin/fakesendmail.sh

mkdir /var/mail/sendmail
cd /var/mail/sendmail
mkdir cur && mkdir new && mkdir tmp
chmod -R 777 /var/mail/sendmail 

Найдем где храняться наши настройки для php7
php70 -i | grep "Loaded Configuration File"

- настраиваем php на работу с заглушкой в /etc/opt/remi/php70/php.ini ставим параметр
nano -w /etc/opt/remi/php70/php.ini
sendmail_path = /usr/bin/fakesendmail.sh

- перезапускаем php
systemctl restart php70-php-fpm

sestatus -b | grep -i sendmail
setsebool -P httpd_can_sendmail 1

- cоздадим файл /var/www/test.dev/3.php и дописываем функцию отправки письма
nano -w /var/www/test.dev/3.php


- обновляем страницу http://test.dev/3.php и проверяем каталог с письмом
/var/mail/sendmail/new создался letter_1.txt с отправленым нами письмом
ls /var/mail/sendmail/new
grep mail /var/log/audit/audit.log

Запускаем эти команды для selinux (в моем случае это 5 раз пока не начали отправляться заполненые письма)
grep mail /var/log/audit/audit.log | audit2allow -m mail > mail.te 
grep mail /var/log/audit/audit.log | audit2allow -M mail 
semodule -i mail.pp

Заглушка готова.
Вверх