iptables полезные команды

Посмотреть все правила
# iptables -L -n -v
(я предпочитаю iptables-save)

Посмотреть правила с нумерацией строк 
# iptables -L INPUT -n --line-numbers

Вставить правило между 1 и 2 строкой: 
# iptables -I INPUT 2 -s 120.155.16.23 -j DROP

Удалить строку 3
# iptables -D INPUT 3

Удалить все правила
# iptables -P INPUT ACCEPT
# iptables -P OUTPUT ACCEPT
# iptables -P FORWARD ACCEPT

# iptables -F
# iptables -X
# iptables -t nat -F
# iptables -t nat -X
# iptables -t mangle -F
# iptables -t mangle -X


Где:
-F - Удалить (flush) правила
-X - Удалить цепочку
-t table_name - Выбрать таблицу (nat или mangle) и удалить все правила.
-P - Выбрать действия по умолчанию (такие, как DROP, REJECT, или ACCEPT).

Ограничить количество параллельных соединений к серверу для одного адреса.

Для ограничений используется модуль connlimit. Чтобы разрешить только 5 ssh соединений на одного клиента
# iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 5 -j REJECT

Установить количество запросов HTTP до 10
# iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 --connlimit-mask 24 -j DROP

Открыть диапазон портов
# iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 8000:8888 -j ACCEPT

Также полезная информация http://blog.ispsystem.info/search?q=iptables
Куда пишет ISPmanager правила iptables https://doc.ispsystem.ru/index.php/Алгоритм_работы_модуля_"Брандмауэр"

Восстанавливаем пакет bitrix окружения после ручного downgrade php CentOS 6


Если на CentOS 6 сделать downgrade php с 7 до 5.3, то пакет bitrix-env удалится из системы и не будет работать ./menu.sh и вообще ничего в целом (конфиги apache/nginx)

А поставить yum install bitrix-env не получится так как в зависимостях php7

Поэтому после downgrade качаем

wget http://repos.1c-bitrix.ru/yum/el/6/x86_64/bitrix-env-7.0-1.el6.noarch.rpm

и распаковываем в /
rpm2cpio package.rpm | cpio -idmuv

ну или в mc
цель поста - ссылка на  bitrix-env-7.0-1.el6.noarch.rpm

Как делать downgrade (примерно надо руками доделывать) и другая информация http://blog.ispsystem.info/search/label/bitrix-env

Установка sphinx sphinxsearch на Debian 8

wget http://sphinxsearch.com/files/sphinxsearch_2.2.11-release-1~jessie_amd64.deb
apt-get install libodbc1
dpkg -i sphinxsearch_2.2.11-release-1~jessie_amd64.deb

vi /etc/sphinxsearch/sphinx.conf

Главно не забыть создать индексы, без команды ниже ничего не работает!
indexer --all --verbose

service sphinxsearch restart

postfix управление очередью

Прочитать письмо
postcat -b 4E62A1C0493

Посмотреть активные настройки Postfix:
postconf -d

Посмотреть сколько сообщений в очереди:
mailq | grep Requests 

Посмотреть конкретно что в очереди:
mailq

Пнуть очередь на немедленную доставку:
postsuper -r ALL; postfix flush

Пнуть конкретное письмо по ID:
postsuper -r ID

Удалить письмо по ID:
postsuper -d ID

Удалить всю очередь:
postsuper -d ALL

Заблокировать поисковые боты в Nginx по User-Agent

Прописываем вначале server

if ($http_user_agent ~ WordPress|SemrushBot|SputnikBot|Crowsnest|PaperLiBot|peerindex|ia_archiver|Slurp|Aport|NING|JSKit|rogerbot|BLEXBot|MJ12bot|Twiceler|Baiduspider|Java|CommentReader|Yeti|discobot|BTWebClient|Tagoobot|Ezooms|igdeSpyder|AhrefsBot|Teleport|Offline|DISCo|netvampire|Copier|HTTrack|WebCopier|GrapeshotCrawler|coccocbotweb|HybridBot|magpiecrawlerHostTracker|Riddler|SentiBot|HostTracker) {

return 403;
}

cPanel не работает phpmyadmin


Cannot start session without errors, please check errors given in your PHP and/or webserver log file and configure your PHP installation properly. Also ensure that cookies are enabled in your browser.

Переходим в каталог /usr/local/cpanel/base/3rdparty/phpMyAdmin/

Там есть файл .php.ini - это symlink на /usr/local/cpanel/3rdparty/php/56/etc/phpmyadmin/php.ini

Открываем его в редакторе и раскоментируем

session.save_path = "/tmp"

Перезапускаем cpsrvd (поскольку он "слушает" порт 2083 ssl на котором работает cpanel и по которому вы получаете данную ошибку по ссылке вида https://example.com:2083/cpsess3131291/3rdparty/phpMyAdmin/....) и обрабатывает php-скрипты как fastcgi (если в директории phpmyadmin разместить phpinfo это видно равно как пустой путь для сохранения сессий)

service cpanel restart

Проблема должна быть решена

"Закрыть доступ по IP" nginx bitrix окружение

vi /etc/nginx/bx/site_enabled/s1.conf

if ($http_host ~ "\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}") {
return 444;
}

Борьба с DDOS атаками вида synflood

Подсчет числа полуоткрытых TCP-соединений:
$ netstat -na | grep ":порт\ " | grep SYN_RCVD | wc -l

Просмотр списка IP-адресов, с которых идут запросы на подключение:

$ netstat -na | grep ":порт\ " | sort | uniq -c | sort -nr

Анализ подозрительных пакетов с помощью tcpdump:

# tcpdump -n -i eth0 -s 0 -w output.txt dst port порт and host IP-сервера

Блокируем подключения атакующего:

# iptables -A INPUT -s IP-атакующего -p tcp --destination-port порт -j DROP

Ограничиваем максимальное число полуоткрытых соединений с одного IP к конкретному порту:

# iptables -I INPUT -p tcp --syn --dport порт -m iplimit --iplimit-above 8 -j DROP

Отключаем ответы на запросы ICMP ECHO:

# iptables -A INPUT -p icmp -j DROP --icmp-type 8

Устанавливаем netstat в CentOS 7:

# yum install net-tools

Разметка диска под gpt и gmirror FreeBSD

Когда в системе только один диск достаточно сделать

Очищаем диск от старой таблицы разметки

gpart destroy -F /dev/ada0
dd if=/dev/zero of=/dev/ada0 count=1 bs=1024

Создаем разметку gpt с 3 партициями, записываем в первую загрузочный bootcode

gpart create -s gpt ada0
gpart add -t freebsd-boot -s 128k ada0

gpart bootcode -b /boot/pmbr -p /boot/gptboot -i 1 ada0
gpart add -t freebsd-swap -l swapada0 -s 16G ada0
gpart add -t freebsd-ufs -l rootfsada0 ada0


После чего создаем зеркало raid1

gmirror load
gmirror label -v rootfs /dev/gpt/rootfsada0
gmirror label -v swap /dev/gpt/swapada0


Далее форматируем файловую систему

newfs -U /dev/mirror/rootfs

И затем переносим нужную систему через rsync / pax / или чистую ОС

Копирование таблицы разделов на другой диск

gpart backup ada0 | gpart restore -F /dev/ada1

И потом добавление в зеркало

gmirror insert swap /dev/ada1p2
gmirror insert rootfs /dev/ada1p3


В /boot/loader.conf при этом должно быть

geom_mirror_load="YES"
ahci_load="YES"


И в /etc/fstab

/dev/mirror/swap    none        swap    sw    0    0
/dev/mirror/rootfs    /        ufs    rw    1    1



Смотри также: Зеркалирование дисков на выделенном сервере
Скрипт установки: http://dl.ispsystem.info/freebsd-hetzner-install.sh

Аналог strace во FreeBSD

truss -p PID

Перенос FreeBSD с диска на диск

Если нет rsync (привет hetzner rescue)

cd /mnt-old; pax -p e -X -rw . /mnt-new

MySQL server has gone away при импорте базы данных

[mysqld]
max_allowed_packet = 256M

bitrix получить доступ в админку сайта

В каталоге сайта создаете php файл pusti.php с секретным именем и содержимым ниже:

<?

require_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/prolog_before.php');

global $USER;
$USER->Authorize(1);

?>

<a href='/bitrix/admin/index.php'>ЖМИ СЮДА</a>


После работ обязательно удалите данный файл для избежания взлома сайта

дополнительная авторизация в phpmyadmin

# cat /usr/share/phpMyAdmin/.htaccess

AuthType Basic
AuthName "Private zone"
AuthUserFile /etc/phpMyAdmin/.htpass
require valid-user


# htpasswd -c /etc/phpMyAdmin/.htpass myadmin

# grep AllowOverride /etc/httpd/conf.d/phpmyadmin.conf

# AllowOverride None
AllowOverride AuthConfig

Тест скорости работы сайта

https://tools.pingdom.com
в последнее время часто ссылаются на него

Монтируем ftp как папку

curlftpfs user:pass@ftp.example.com /mnt/ftp

Открыть запись для остальных пользователей можно опцией allow_other
Например, открываем для пользователя с uid 1001

curlftpfs ftp://user:pass@ftp.example.com /mnt/ftp -o allow_other,uid=1001,gid=1001,umask=077,default_permissions

Монтируем через /etc/fstab

curlftpfs#ftp.example.com  /mnt/ftp  fuse  noauto,user=user:pass,allow_other,default_permissions,umask=022,_netdev   0 0

Отмонтируем

fusermount -u /mnt/ftp
Не рекомендую это решение в production, так как даже при тестирование наблюдаются проблемы с низкой скоростью и плохой загрузкой больших файлов

bitrix не меняется max_execution_time

В php.ini и phpinfo(); показывается max_execution_time=900, а в http://example.com/bitrix/admin/phpinfo.php (открывается после входа в админку) - 300

Открываем bitrix/php_interface/dbconn.php и правим  

@set_time_limit(900);

Там же можно править ini_set("memory_limit", "1024M");

Этот параметр реально влияет на всё в битриксе, скажем на время при импорте данных из 1С и другие скрипты

Проблема с загрузкой лицензии ISPmanager

Если ISPmanager 5 упорно не загружает лицензию, то стоит проверить работу https на сервере выполнив команду взяв url из licctl.log

# curl -v  -k  -o-  https://212.109.222.143/mgr5.45.state
* About to connect() to 212.109.222.143 port 443 (#0)
*   Trying 212.109.222.143...
* Connected to 212.109.222.143 (212.109.222.143) port 443 (#0)
* Initializing NSS with certpath: sql:/etc/pki/nssdb
* Unable to initialize NSS database
* Initializing NSS with certpath: none
* NSS error -5938 (PR_END_OF_FILE_ERROR)
* Encountered end of file
* Closing connection 0
curl: (35) Encountered end of file


В моем случае проблема была с битыми файлами в /etc/pki/nssdb/ и исправлено заменой файлов с исправной системы

Примечательно, что изначально я запускал wget --no-check-certificate и так делать нельзя, так как проверка не была пройдена и ошибка не была видна в отличии от curl, так как панель использует libcurl

debian 6.0 поставить rsync и другой старый софт

# tail -1 /etc/apt/sources.list
deb http://archive.debian.org/debian/ squeeze main contrib non-free


apt-get update
apt-get install rsync

не работает ssi в apache debian

Необходимо подключить модуль include_module

# ln -s /etc/apache2/mods-available/include.load /etc/apache2/mods-enabled/include.load
# apachectl restart

не работает поиск в phpmyadmin centos 7 из-за ошибки в php-gettext

Включаем отображение ошибок
vi /etc/httpd/conf.d/phpmyadmin.conf

php_admin_flag engine on
php_admin_value display_errors on
php_admin_value error_reporting 30711
php_admin_flag ini_set on


Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Select_string only accepts integers: 0' in /usr/share/php/gettext/gettext.php:354 Stack trace: #0 /usr/share/php/gettext/gettext.php(388): gettext_reader->select_string('0') #1 /usr/share/php/gettext/gettext.inc(293): gettext_reader->ngettext('%1$s match in <...', '%1$s matches in...', '0') #2 /usr/share/phpMyAdmin/libraries/DbSearch.class.php(337): _ngettext('%1$s match in <...', '%1$s matches in...', '0') #3 /usr/share/phpMyAdmin/libraries/DbSearch.class.php(289): PMA_DbSearch->_getResultsRow('wp_appointment_...', Array, true, '0') #4 /usr/share/phpMyAdmin/db_search.php(46): PMA_DbSearch->getSearchResults() #5 {main} thrown in /usr/share/php/gettext/gettext.php on line 354

Согласно http://bazaar.launchpad.net/~danilo/php-gettext/trunk/revision/61 проблема в php-gettext и правится в /usr/share/php/gettext/gettext.php на 435 строке комментированием кода

if (!is_int($n)) {
throw new InvalidArgumentException(
"Select_string only accepts integers: " . $n);
}

Использование утилиты ddrescue для восстановления данных

ddrescue - это утилита для восстановления данных с поврежденной поверхности диска
При выборе между dd_rescue и ddrescue используйте ddrescue - подробности https://habrahabr.ru/post/236977
Сравнивая с dd_rescue - умеет сохранять сбойные блоки в лог-файл и затем восстанавливать их отдельно и не умеет пересылать данные в pipe (скажем для копирования по сети через ssh-транспорт)

Сценарий восстановления с неисправного диска на исправный

Копируем с неисправного диска /dev/sda на исправный /dev/sdb сбойные блоки пропускаем и сохраняем о них информацию в log
ddrescue -f -n /dev/sda /dev/sdb ddrescue.log

Копируем только сбойные блоки согласно ddrescue.log делая 3 попытки их чтения
ddrescue -f -d -r3 /dev/sda /dev/sdb ddrescue.log

Как правило двух этих простых команд достаточно для восстановления данных с диска на котором появились сбойные блоки

Происходит остановка копирования при чтении с битого диска на позиции 12345
Перезапуск восстановления с байта 12345
ddrescue -f -n -i 12345 /dev/sda /dev/sdb ddrescue.log

Перезапуск восстановления с конца диска
ddrescue -f -n -R /dev/sda /dev/sdb ddrescue.log 
Не забываем после всего про опцию -dr3 для перечитывания битых блоков согласно log-файлу

Расшифровка опций

-f
Заставить ddrescue перезаписать диск outfile. Необходим, когда в качестве outfile используется устройство. Используется для защиты от ошибочного повреждения данных.

-n
Пропускает фазу scrape. Уменьшает время восстановления, снижает время на попытки чтения самых трудных частей файла.

-d
При указании данной опции, ddrescue использует прямой доступ к диску, обходя кэши ядра

-r n
Задает количество повторных попыток чтения поврежденных областей

-R
ddrescue читает данные в обратной последовательности

top в cron : простой мониторинг нагрузки сервера

# crontab -l
*/5 * * * * /bin/date >> /tmp/mon.log ; /usr/bin/top -b -n 1 >> /tmp/mon.log


В /tmp/mon.log можно будет посмотреть что было незадолго до падения сервера, как вариант

Установка Firefox ESR на Ubuntu 16.04

wget https://download-installer.cdn.mozilla.net/pub/firefox/releases/52.0esr/linux-x86_64/ru/firefox-52.0esr.tar.bz2

sudo -s

tar -xf firefox-52.0esr.tar.bz2 -C /opt/

dpkg-divert --divert /usr/bin/firefox.unuse --rename /usr/bin/firefox

ln -s /opt/firefox/firefox /usr/bin/firefox


Так как опция ui.use_unity_menubar true не работает (оно жестко вкопмиляно в /usr/lib/firefox/libxul.so (чтобы увидеть меню обычное нажмите alt) - ставим плагин https://addons.mozilla.org/ru/firefox/addon/compact-menu-2/

Немного не так привычно (к отдельной кнопке меню которую надо добавить через настройки панели можно привыкнуть), зато имеем целый год одну и ту же версию firefox в которой точно будет работать java-плагин

Для этого не забываем про about:config - plugin.load_flash_only = false

Обновлять эту версию придется вручную запустив с правами root и затем Справка - о Firefox
Также, как показала практика, данная версия firefox расходует в 1.5 раза меньше памяти и работает быстрее, чем из штатного репозитория

bitrix вебокружение downgrade php 7.0 до 5.6

Автоматический режим
Идем в меню битрикс окружения и меняем там

Ручной режим
vi /etc/yum.repos.d/remi-php70.repo
vi /etc/yum.repos.d/remi.repo

отключаем 7, включаем 56

yum remove php-*

yum install bitrix-env
yum install php-pecl-zendopcache

apachectl restart

Возвращаем поддержку NPAPI в Firefox - включаем поддержку Java

В Firefox 52 отключили поддержку всех NAPI плагинов включая Java, Acrobat, Silverlight и других кроме Flash
http://www.opennet.ru/opennews/art.shtml?num=46155

Вернуть обратно можно через
about:config и там создать параметр
plugin.load_flash_only = false

Однако, в версии 53 этот параметр отключат полностью и необходимо переходить на версию Firefox 52 ESR

MySQL создать пользователя и выдать доступ к базе данных

Как создать пользователя в MySQL сервере и выдать права пользователю на базу данных вручную


MariaDB [(none)]> CREATE USER 'username'@'localhost' IDENTIFIED BY 'pas$w0rd';

MariaDB [(none)]> GRANT ALL PRIVILEGES ON * . * TO 'username'@'localhost';

MariaDB [(none)]> FLUSH PRIVILEGES;

MariaDB [(none)]> GRANT ALL PRIVILEGES ON databasename.* TO 'username'@'localhost';

bitrix перевод на mysqli

Переводим битрикс на MySQLi с MySQL при переносе на PHP 7

# vi /home/bitrix/www/bitrix/php_interface/dbconn.php

define("BX_USE_MYSQLI", true);

# vi /home/bitrix/www/bitrix/.settings.php

array (
      'default' =>
      array (
        'className' => '\\Bitrix\\Main\\DB\\MysqliConnection',
        'host' => 'localhost',

bitrix включить debug сайта

https://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=2795

# vi /home/bitrix/www/bitrix/php_interface/dbconn.php

$DBDebug = true;
$DBDebugToFile = true;


# vi /home/bitrix/www/bitrix/.settings.php

  'exception_handling' => array (
    'value' => array (
      'debug' => true,
      'handled_errors_types' => E_ALL & ~E_NOTICE & ~E_STRICT & ~E_USER_NOTICE,
      'exception_errors_types' => E_ALL & ~E_NOTICE & ~E_WARNING & ~E_STRICT & ~E_USER_WARNING & ~E_USER_NOTICE & ~E_COMPILE_WARNING & ~E_DEPRECATED,
      'ignore_silence' => false,
      'assertion_throws_exception' => true,
      'assertion_error_type' => 256,
      'log' => array (
        'settings' => array (
          'file' => 'bitrix/modules/error.log',
          'log_size' => 1000000,
        ),
      ),
    ),
    'readonly' => false,
  ),

Firefox пишет много данных на SSD

about:config - browser.sessionstore.interval

По-умолчанию он равен 15 секундам (15000) и можно смело увеличивать аж до 30 минут
10 минут - это 600000

Источник: https://geektimes.ru/post/280792/

Расширения отображающие IP адрес сайта в realtime для браузера

Firefox - Server IP
https://addons.mozilla.org/ru/firefox/addon/server-ip/

Chrome - Website IP
https://chrome.google.com/webstore/detail/website-ip/ghbmhlgniedlklkpimlibbaoomlpacmk

Все остальные "лазят в интернет" к внешним сайтам и не отображают то, что реально отрезолвлено скажем на основании записи в /etc/hosts и тем самым непригодны для работы

Дополнительные возможности phpMyAdmin не настроены в полной мере, некоторые функции были отключены

# vi config.inc.php

$cfg['PmaNoRelation_DisableWarning'] = TRUE;

Поменять IP адрес в WWW домены в ISPmanager

После того как при помощи sed изменен IP адрес в файлах конфигурации apache/nginx/named чтобы не менять IP в WWW домены (и тем самым не портить конфиги) проще всего поменять в базе панели

# sqlite3 /usr/local/mgr5/etc/ispmgr.db

sqlite> update webdomain_ipaddr set value='188.120.234.73';

# killall core

ipmi reset сброс конфигурации на заводские настройки

wget ftp://ftp.supermicro.com/utility/IPMICFG/IPMICFG_1.26.0_20161227.zip(mirror)
wget http://dl.ispsystem.info/ipmi/IPMICFG_1.24.1_build.160222.zip

unzip IPMICFG_1.24.1_build.160222.zip

chmod +x IPMICFG_1.24.1_build.160222/Linux/32bit/IPMICFG-Linux.x86

IPMICFG_1.24.1_build.160222/Linux/32bit/IPMICFG-Linux.x86 -fd