Установка и настройка IRC сервера — ircd-irc2

На тесте запущу IRC (Internet Relay Chat) сервер ircd-irc2 в Ubuntu Server 14.04.

Первой командой выполним установку IRC сервера в Ubuntu:

sudo apt-get install ircd-irc2

В директории /etc/ircd/ находится несколько конфигурационных файлов: /etc/ircd/ircd.conf (основной), /etc/ircd/ircd.motd (сообщение пользователям при подключении), /etc/ircd/iauth.conf (параметры подключения).
В директории /usr/share/doc/ircd-irc2/ можно увидеть примеры конфигурационных файлов.

После изменений в конфигурационных файлах необходимо перезагрузить IRC сервер:

sudo /etc/init.d/ircd-irc2 restart

Пользователи могут создавать и подключаться к каналам такой командой:

/join #channel_name

Как изменить кодировку MySQL базы данных и её таблиц

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

mysqldump -u ПОЛЬЗОВАТЕЛЬ -h localhost -p БАЗА | gzip -c > backup_base_`date +%Y-%m-%d`.sql.gz

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

mysql -u root -p
CREATE DATABASE test_db1;
CREATE DATABASE test_db2 CHARACTER SET utf8 COLLATE utf8_general_ci;

Создадим тестовую таблицу в первой базе и посмотрим её кодировку:

USE test_db1;

CREATE TABLE users (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP
);

show table status like 'users';

Создадим тестовую таблицу во второй базе и посмотрим её кодировку:

USE test_db2;

CREATE TABLE users (
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
firstname VARCHAR(30) NOT NULL,
lastname VARCHAR(30) NOT NULL,
email VARCHAR(50),
reg_date TIMESTAMP
);

show table status;

Посмотрим также кодировку обеих баз данных:

SELECT default_character_set_name FROM information_schema.SCHEMATA WHERE schema_name = "test_db1";
SELECT default_character_set_name FROM information_schema.SCHEMATA WHERE schema_name = "test_db2";

Посмотреть кодировку колонки в конкретной таблице можно так:

SELECT character_set_name FROM information_schema.`COLUMNS`
WHERE table_schema = "test_db1"
AND table_name = "users"
AND column_name = "firstname";

В моём случае таблица в первой базе была с кодировкой latin1_swedish_ci, так как она является стандартной, а во второй utf8_general_ci так как я её заранее указал.

Посмотреть таблицу возможных кодировок можно такими запросами:

show collation;
show collation like 'utf8%';
show collation like 'latin1%';

Посмотреть существующие базы данных можно так:

show databases;

Посмотреть существующие таблицы в базе:

USE test_db1;
show tables;

Теперь сменим кодировку первой базы и её таблицы на utf8 и сразу проверим:

ALTER DATABASE `test_db1` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
USE test_db1;
ALTER TABLE `test_db1`.`users` CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
show table status;

Если нужно изменить кодировку в sql файле, то откроем его в редакторе Notepad++ преобразуем например в UTF-8/без BOM, а также если в начале файла указана кодировка в SET NAMES, изменим её там, после этого можно импортировать файл в базу.

Решение ошибки запуска unable to execute ./database_installer.sh: No such file or directory

Когда-то давно отображалась следующая ошибка запуска установщика:

sudo ./database_installer.sh
sudo: unable to execute ./database_installer.sh: No such file or directory

Решил её так:

sudo apt-get install dos2unix
sudo dos2unix database_installer.sh

Установка phpIPAM

phpIPAM — веб приложение для учета IP, VLAN адресов и т.д. Работает на PHP с использованием MySQL, jQuery, ajax и HTML5.

На тесте установлю phpIPAM в Ubuntu Server 14.04.

Первым делом обновим источники и установим необходимые компоненты:

sudo apt-get update
sudo apt-get install apache2 mysql-server php5 php5-gmp php-pear php5-mysql php5-ldap

Посмотрим какая есть самая новая версия на официальном сайте https://phpipam.net/download/ и скопируем на неё ссылку.

Перейдем в директорию веб сервера, скачаем архив с phpIPAM по скопированной ранее ссылке и распакуем его:

cd /var/www/
sudo wget http://freefr.dl.sourceforge.net/project/phpipam/phpipam-1.3.tar
sudo tar -xvf phpipam-1.3.tar
sudo rm phpipam-1.3.tar
cd phpipam

Создадим MySQL базу данных и пользователя с полными правами на неё»

mysql -u root -p
CREATE DATABASE phpipam;
GRANT ALL PRIVILEGES ON phpipam.* TO phpipam@localhost IDENTIFIED BY 'PASSWORD';
flush privileges;
exit

Переименуем стандартный файл конфигурации и откроем в текстовом редакторе, например nano (CTRL+X для выхода, y/n для сохранения иди отмены изменений):

sudo mv config.dist.php config.php
sudo nano config.php

Пропишем параметры подключения к базе данных:

$db['host'] = "localhost";
$db['user'] = "phpipam";
$db['pass'] = "password";
$db['name'] = "phpipam";

Если phpIPAM находится не в корневой директории веб сервера, то также укажем путь:

define('BASE', "/phpipam/");

В параметрах веб-сервера для директории с phpIPAM укажем Options FollowSymLinks и AllowOverride all:

sudo nano /etc/apache2/sites-enabled/000-default

Активируем модуль rewrite и перезапустим apache2 чтобы применить изменения:

sudo a2enmod rewrite
sudo service apache2 restart

Для завершения установки откроем в браузере ссылку http://server/phpipam/ нажмем установить и ответим на заданные вопросы.

Решение ошибки Table ‘name’ is marked as crashed and last (automatic?) repair failed

Заметил однажды в логах FreeRADIUS ошибку MySQL:

Table ‘./radius/radacct’ is marked as crashed and last (automatic?) repair failed

Как оказалось была повреждена таблица radacct, так как данные там были не особо важны, то помогла очистка всей таблицы.
Очистить можно через phpMyAdmin или SQL запросом:

truncate table TableName

Чуть позднее для эксперимента решил поломать целую базу, взял другую большую таблицу вообще от другого приложения, размером около 8 гигабайт и 80 млн. строк.
Выполнил к ней SQL запрос на очистку старых строк до указанной в запросе даты и перезагрузил в этот момент MySQL, запрос прервался, база осталась цела, выполнил запрос на оптимизацию базы и еще раз перезагрузил MySQL, в итоге получил поврежденную базу и аналогичную ошибку:

#144 — Table ‘name’ is marked as crashed and last (automatic?) repair failed

Чтобы восстановить базу необходимо остановить MySQL сервер (если таблица ничем не используется, то можно не останавливать):

sudo service mysql stop

Перейдем в директорию с базой:

cd /var/lib/mysql/$DATABASE_NAME

Выполним команду восстановления указанной таблицы:

myisamchk -r -o -f -v $TABLE_NAME

По завершению если останавливали MySQL сервер, то запустим его:

sudo service mysql start

Аналогичным образом на тесте также для ускорения процесса восстановил таблицу скопировав её на другой более мощный сервер, а именно три файла /var/lib/mysql/$DATABASE_NAME/ ($TABLE_NAME.MYD, $TABLE_NAME.MYI, $TABLE_NAME.frm).

Полный сброс настроек на Samsung GT-I9505 Galaxy S4

Опишу по пунктам процесс полного сброса настроек на Samsung GT-I9505 Galaxy S4:

1) Выключите телефон

2) Одновременно нажмите и держите три кнопки: «Громкость +», «Home» и «Включение»

3) После вибрации отпустите кнопку «Включения», когда появится меню, отпустите остальные

4) По меню можно передвигаться вверх/вниз кнопками регулировки громкости, таким образом выберите «wipe data/factory reset»

5) Подтвердите выбор кнопкой «Включение»

6) Далее аналогичным образов выберите «Yes — delete all user data»

7) Подождите завершения очистки пользовательских данных и сброса настроек, когда появится меню выберите «reboot system now» для перезагрузки телефона.

Все.

Предотвращение атак на WordPress xmlrpc.php и wp-login.php

Заметил однажды на некоторых серверах с WordPress сайтами большое количество обращений к файлу xmlrpc.php и wp-login.php

Как оказалось кто-то пытался подобрать пароль и получить доступ к сайту, обычно такие вещи блокирует Jetpack, ограничивается доступ по IP в админку средствами веб-сервера, но на этих почему-то никакой защиты не было.

Посчитать количество обращений к файлу в логах можно командой:

grep 'xmlrpc.php' /var/log/apache2/access.log | wc -l

Кстати команду выше можно выполнять например из системы мониторинга Zabbix, рисовать по полученным данным график, а также уведомлять о увеличении количества обращений.

Посчитать количество по каждому IP и вывести список:

grep 'xmlrpc.php' /var/log/apache2/access.log | cut -d' ' -f1 | sort | uniq -c | sort -r

Посчитать количество по каждому IP и вывести список для файла wp-login.php:

grep 'wp-login.php' /var/log/apache2/access.log | cut -d' ' -f1 | sort | uniq -c | sort -r
grep 'wp-login.php' /var/log/apache2/access.log | awk '{print $1}' | sort -n | uniq -c | sort -nr | head -20

В конфигурации apache2 или через файл .htaccess можно ограничить доступ к директории /wp-admin/ по IP, например так:

<Directory /var/www/site/wp-admin/>
  Options -Indexes
  AllowOverride All
  Order allow,deny
  allow from 127.0.0.1 192.168.11.25
</Directory>

Полностью запретить доступ к файлам так:

<Files wp-login.php>
Order Deny,Allow
Deny from all
</Files>
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
</Files>

Если используется например Jetpack, то к wp-login.php лучше не ограничивать, так как могут возникнуть ошибки при обновлении плагина и отразится на его работе.
В этом случае можно активировать защиту от подбора пароля в параметрах Jetpack.

Если Jetpack не используется можно установить другие плагины, например «WP Limit Login Attempts», который отображает капчу при авторизации, а также блокирует неверные попытки входа.
Например плагином «Disable XML-RPC Pingback» можно отключить функции XML-RPC если они не нужны.

Также в файле robots.txt можно запретить индексирование поисковиками этих файлов:

User-agent: *
Disallow: /xmlrpc.php
Disallow: /wp-login.php