Get Social

Как разблокировать ip-адрес, заблокированый Fail2ban

Как разблокировать ip-адрес, заблокированый Fail2ban, картинка

Как системному администратору, мне трудно себе представить спокойную жизнь без Fail2ban.

Этот сервис отслеживает логи многих служб, таких как веб-сервер, почтовый сервер, openssh-сервер и так далее. В случае подозрительной активности (как правило, много неудачных авторизаций), он автоматически блокирует (используя правила iptables) на заданное время ip-адрес, с которого были эти авторизации. Настройка Fail2ban – это отдельная тема.

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

1. Нужно залогиниться по ssh под другим ip-адресом на сервер под root (либо под другим пользователем, но потом выполнить процедуру “su -“, чтобы получить root-права).

2. Чтобы увидеть, какие IP-адреса заблокированы, набрать следующую команду:
iptables -L -n
если вывод команды очень длинный, то можно так:
iptables -L -n | less

3. Далее найти цепочку fail2ban-ssh (мы говорим о блокировке по ssh, если другая служба – искать соответствующую цепочку), где и должен быть наш IP:
Chain fail2ban-ssh (1 references)
target prot opt source destination
RETURN all -- 0.0.0.0/0 0.0.0.0/0

4. Чтобы удалить IP адрес из блокировки Fail2ban, нужно выполнить следующую команду (aa.bb.cc.dd – IP, который нужно разблокировать):
iptables -D fail2ban-ssh -s aa.bb.cc.dd -j DROP

После этого пользователь сможет вновь подключиться к серверу по ssh.

Как поменять адрес веб-интерфейса почты Vesta CP на поддомен

Не всегда удобно, чтобы почта располагалась по адресу /webmail , как это идёт по-умолчанию в Vesta CP. Пока разработчики панели не сделали того же, что мы дальше собираемся сделать, это придётся повторять при каждой новой установке сервера.

Итак, приступим:

1. Создаём в Vesta CP веб-домен: mail.your-domain.com (его можно сразу настроить на https с помощью новой, встроенной возможности генерировать сертификаты lets encrypt).

2. Удаляем в /etc/apache2 (в подпапках conf.d, sites-available, sites-enabled) и /etc/nginx (в подпапке conf.d) ссылки на roundcube и / или roundcube.inc

3. Правим конфигурационный файл Nginx (для простоты используем /home/admin – папка стандартного пользователя в vesta):

/home/admin/conf/web/nginx.conf
/home/admin/conf/web/snginx.conf

заменить
root /home/admin/web/your-domain/public_html;
на
root /var/lib/roundcube;

4. Правим конфигурационный файл Apache:

/home/admin/conf/web/apache.conf
/home/admin/conf/web/sapache.conf

заменить
DocumentRoot /home/admin/web/mail.nebulonis.com/public_html
на
DocumentRoot /var/lib/roundcube/

и добавить:

# Access to tinymce files
<Directory "/usr/share/tinymce/www/">
    Options Indexes MultiViews FollowSymLinks
    AllowOverride None
    Order allow,deny
    allow from all
</Directory>

<Directory /var/lib/roundcube/>
    Options +FollowSymLinks
    # This is needed to parse /var/lib/roundcube/.htaccess. See its
    # content before setting AllowOverride to None.
    AllowOverride All
    order allow,deny
    allow from all
</Directory>

# Protecting basic directories:
<Directory /var/lib/roundcube/config>
    Options -FollowSymLinks
    AllowOverride None
</Directory>

<Directory /var/lib/roundcube/temp>
    Options -FollowSymLinks
    AllowOverride None
    Order allow,deny
    Deny from all
</Directory>

<Directory /var/lib/roundcube/logs>
    Options -FollowSymLinks
    AllowOverride None
    Order allow,deny
    Deny from all
</Directory>

5. Проверим синтаксис:
apachectl configtest
nginx -t

6. Перезапускаем:
apachectl graceful
service nginx restart

7. И, наконец, в настройках (https://your-ip-or-address:8083/edit/server/) панели SERVER -> CONFIGURE во вкладке MAIL -> Webmail URL  меняем на новый (https://mail.your-domain.com)

Установка и настройка Sphinx 2.2.11 (Yii и дельта-индексы) на Ubuntu / Debian и RHEL / CentOS 7

После перехода с версии 1 на 2 в sphinx много изменений. Больше не работают запросы в командной строке через searh, удалены многие директивы из конфигурационного файла и другое. Будем разбираться.

Установка Sphinx 2.2.11 на Ubuntu / Debian и RHEL / CentOS 7

Для начала нужно поставить пакет:

Ubuntu/Debian:
aptitude install sphinxsearch

RHEL/CentOS:
yum install -y postgresql-libs unixODBC
wget http://sphinxsearch.com/files/sphinx-2.2.11-1.rhel7.x86_64.rpm
yum install sphinx-2.2.11-1.rhel7.x86_64.rpm

Настройка Sphinx 2.2.11 на Ubuntu / Debian и RHEL / CentOS 7

Ubuntu/Debian:
nano /etc/sphinxsearch/sphinx.conf

RHEL/CentOS:
vi /etc/sphinx/sphinx.conf

Сам конфигурационный файл Sphinx состоит из блоков для source, indexer и searchd.
Вот пример конфигурации Sphinx + дельта-индексы:

# for db connect to include in other sources
source dbconnect
{
	type			= mysql
	sql_host		= localhost
	sql_user		= your_db_user
	sql_pass		= your_db_pass
	sql_db			= your_db_name
	sql_port		= 3306
}

# --------- products --------- #
# sources products
source sphinx_source_products : dbconnect
{
        sql_query_pre		= SET NAMES utf8mb4
	sql_query_pre = \
	        update sphinx_delta_counter \
	        set last_post_id = (select max(id) from tb_products) \
	        where index_name = 'sphinx_index_products';
	sql_query = \
		SELECT id, title, descr \
		FROM tb_products \
		WHERE status = 1 # or any your condition
#	sql_attr_uint = id
	sql_field_string = title
	sql_field_string = descr
}
source sphinx_source_products_delta : dbconnect
{
        sql_query_pre		= SET NAMES utf8mb4
        sql_query = \
		SELECT id, title, descr \
		FROM tb_products \
		WHERE status = 1 AND id > (select last_post_id from sphinx_delta_counter where index_name = 'sphinx_index_products');
#	sql_attr_uint = id
	sql_field_string = title
	sql_field_string = descr
}
# indexes products
index sphinx_index_products
{
	source			= sphinx_source_products
	path			= /home-path-to-web-dir/example.com/sphinx_data/sphinx_products
	dict			= keywords
	morphology		= stem_ru, stem_en
	min_word_len		= 2
	docinfo			= extern
}
index sphinx_index_products_delta
{
        source                  = sphinx_source_products_delta
        path                    = /home-path-to-web-dir/example.com/sphinx_data/sphinx_products_delta
        dict                    = keywords
        morphology              = stem_ru, stem_en
        min_word_len            = 2
        docinfo                 = extern
}
# --------- / products --------- #

# some tables
# what you need
# just as it is done section above

indexer
{
	mem_limit		= 32M
}

searchd
{
	listen			= 9312
	listen			= 9306:mysql41
	log			= /var/log/sphinx/searchd.log
	query_log		= /var/log/sphinx/query.log
	read_timeout		= 5
	max_children		= 30
	pid_file		= /var/run/sphinx/searchd.pid
#	max_matches		= 1000
	seamless_rotate		= 1
	preopen_indexes		= 1
	unlink_old		= 1
	workers			= threads # for RT to work
	binlog_path		= 
#	binlog_path		= /var/log/sphinx
 # use /var/log/sphinxsearch/ and  /var/run/sphinxsearch/ paths for ubuntu
}

Замените тут “your_db_user”, “your_db_pass”, “your_db_name”, “/home-path-to-web-dir/example.com/” на свои значения. Создайте папку для хранения индексов, например “sphinx_data”. Отредактируйте sql_query и sql_query_pre под свою базу. Для этого необходимо продумать запрос для поиска, а также выбрать колонку поиска и прописать её в sql_field_string (если несколько – значит несколько строк прописать соотвественно).

Sphinx delta index. Индексирование больших объёмов данных.

Для того, чтобы не переиндексировать в течение дня (если у вас большая база данных mysql) всю базу, используются дельта-индексы. Просто создаём в базе mysql таблицу “sphinx_delta_counter” с колонкой “last_post_id”. Из запроса в конфиге, думаю, понятно, что сюда записывается последний проиндексированный id. В поиск потом нужно будет включить оба индекса.

Для работы с русским языком нужно установить кодировку базы: SET NAMES utf8 (или SET NAMES utf8mb4), а также морфологию: параметр stem_ru . Строку “sql_query_pre = SET NAMES utf8mb4” обязательно нужно прописывать в каждый source отдельно, если в общий connect -> это не работает. Долго пришлось мучаться с ошибкой из-за того, что sphinx не индексировал русские слова.

Настройка Sphinx для Yii2

  1. Поставить расширение yii2-sphinx для Yii.
  2. Отредактировать config/main.php (секция components):
    'sphinx' => [
    'class' => 'yii\sphinx\Connection',
    'dsn' => 'mysql:host=127.0.0.1;port=9312;',
    'username' => '', # тут обычно не надо ничего указывать
    'password' => '', # тут обычно не надо ничего указывать
    ],
  3. Полнотекстовый поиск с морфологией и прочими плюшками:
    use yii\sphinx\Query;
    $query_search = new Query();
    $search_result = $query_search->from('siteSearch')->match($q)-all();

Индексация, запуск и проверка Sphinx

После настройки конфигурационного файла sphinx нужно проиндексировать все source, которые мы создали:
indexer --all

Потом прописать в крон (как тут видно – раз в сутки пересоздаётся полный индекс, а каждые 5 минут – дельта):
crontab -e
0 1 * * * /usr/bin/indexer --config /etc/sphinx/sphinx.conf sphinx_index_course --rotate > /dev/null
*/5 * * * * /usr/bin/indexer --config /etc/sphinx/sphinx.conf sphinx_index_course_delta --rotate > /dev/null

Перед запуском службы полезно будет сделать владельцем папки с индексами sphinxsearch (или sphinx):
chown sphinxsearch: /home-path-to-web-dir/example.com/sphinx_data

Запускаем Sphinx командой:
systemctl start searchd

В Ubuntu (или Debian), возможно получите сообщение:
Failed to start searchd.service: Unit searchd.service not found.
В этом случае – попробуйте такой вариант:
systemctl start sphinxsearch
Можно также включать sphinx альтернативной командой:
/etc/init.d/sphinxsearch start
Также, возможно, необходимо в файле /etc/default/sphinxsearch будет прописать START=yes (вместо START=no).

Чтобы проверить, можно воспользоваться такой командой:
systemctl status searchd
или
systemctl status sphinxsearch

Также, чтобы убедиться, что служба работает и слушает заданные порты:
ps aux | grep search
lsof -i tcp:9306
lsof -i tcp:9312

Раньше (в sphinx 1.x) можно было проверить поиск в консоли:
search -i название_индекса "слова поиска"

Теперь эту функцию убрали, но, всё равно есть возможность проверить, всё ли хорошо с индексацией и попадают ли нужные слова в индекс.

Вместо поиска в консоли sphinx можно использовать следующую команду:
indextool --dumphitlist sphinx_index_course "какое-нибудь слово" | more

Кроме того, можно проверить поиск с помощью MySQL-клиента, как предлагает разработчик Sphinx:

# To query search daemon using MySQL client:
mysql -h 0 -P 9306
mysql> SELECT * FROM test1 WHERE MATCH(‘test’);

Ошибки при запуске Sphinx

любые deprecated – это наследие от предыдущих версий – закомментируйте или удалите эти параметры

Страницы:12345678910...16