Скрипт добавления IP адресов из файла в ipset

Понадобилось однажды написать скрипт чтобы добавить в ipset все IP для которых били подняты сессии на сервере доступа, использовался биллинг Abills, поэтому я решил взять IP адреса из MySQL таблицы биллинга.

Первым делом создадим тестовый ipset:

ipset create test iphash

Читать далее «Скрипт добавления IP адресов из файла в ipset»

Решение ошибки «Another app is currently holding the xtables lock»

Недавно заметил на одном сервере с биллинговой системой ABillS, что при массовом выполнении скрипта /etc/ppp/ip-up возникает ошибка:

Another app is currently holding the xtables lock. Perhaps you want to use the -w option?

Посмотрев код скрипта обнаружил, что среди iptables правил есть два, которые могут тормозить работу, а именно выполнялся поиск ipoe интерфейсов двумя командами:

IPTABLES="/sbin/iptables"
EXIST=`${IPTABLES} -t nat -L PREROUTING -v | grep "${IFNAME} ";  ${IPTABLES} -L -v | grep DROP | grep "${IFNAME} "`

Для поднятия 3000 сессий, уходило более 30 минут и часть правил могла вовсе не добавится или не удалится скриптом.
По умолчанию если используется ключ -L то iptables резолвит IP адреса и пытается отобразить вместо них DNS имена, что занимает много времени, и чтобы это не происходило, нужно добавить еще ключ -n, а также на всякий случай я добавил ключ -w 20, который заставит отложить выполнение новых правил до 20 секунд если iptables уже занят выполнение другой команды:

IPTABLES="/sbin/iptables"
IPTABLES_WAIT="-w 20"
EXIST=`${IPTABLES} $IPTABLES_WAIT -t nat -n -L PREROUTING -v | grep "${IFNAME} ";  ${IPTABLES} $IPTABLES_WAIT -n -L -v | grep DROP | grep "${IFNAME} "`

После этого скрипт с iptables правилами начал отрабатывать мгновенно.
Так как старые правила не все выполнились, я проверил это посчитав некоторые командой:

iptables -n -L -t nat -v | grep DNAT | wc -l

И сверил с количеством сессий, правил явно было меньше, поэтому пришлось очистить все правила и перезапустить сессии чтобы скрипт /etc/ppp/ip-up отработал правильно, на этот раз при 3000 сессиях он сделал свою работу менее чем за минуту.
Замечу что в скриптах /etc/ppp/ лучше не использовать правила iptables.

Как изменить hostname в Linux

Приведу пример смены hostname в Linux.

Сначала переключимся на root пользователя или добавим «sudo» перед командами.
Посмотрим текущий hostname:

Читать далее «Как изменить hostname в Linux»

Решение «Internal Server Error» при открытии Nextcloud

Недавно переносил Nextcloud с одного сервера на другой и при его открытии, заметил в браузере следующую ошибку:

Internal Server Error

The server encountered an internal error and was unable to complete your request.
Please contact the server administrator if this error reappears multiple times, please include the technical details below in your report.
More details can be found in the server log.

В моем случае ошибка возникла из-за поврежденной MySQL базы данных, поэтому я восстановил её из другой резервной копии и Nextcloud открылся.
Предполагаю что такая же ошибка может возникнуть когда база данных Nextcloud существует, но пуста.

Смотрите мою статью:
Установка Nextcloud в Ubuntu

Настройка Fail2Ban под Bind9

Допустим Fail2Ban уже установлен, если нет, то смотрите мою статью — Установка и настройка Fail2ban.

По умолчанию Bind9 пишет логи в /var/log/syslog, поэтому чтобы писать в отдельный файл, откроем файл конфигурации в любом текстовом редакторе:

Читать далее «Настройка Fail2Ban под Bind9»

Перенос /boot с отдельного раздела на общий

На тесте установил чистый Ubuntu Server 18.04, во время установки система автоматически разбила диск на один основной /dev/sda1, на котором уже были файлы /boot.
Так как под рукой не было системы с /boot на отдельном разделе, то я сам перенес на отдельный и описал процесс в этой статье — Перенос /boot с общего раздела на отдельный

Теперь приступим к переносу /boot раздела на основной /.

Посмотрим информацию о дисках:

sudo fdisk -l
df -h

Читать далее «Перенос /boot с отдельного раздела на общий»

Перенос /boot с общего раздела на отдельный

Сегодня приведу пример переноса /boot с общего раздела на отдельный.
Для теста можно подключить новый диск или использовать первый раздел на любом диске, например с размером 512Мб.

Посмотрим информацию о дисках:

sudo fdisk -l
sudo ls -l /boot
sudo du -hs /boot

Читать далее «Перенос /boot с общего раздела на отдельный»

Повышение версии PHP в Ubuntu 14.04

Понадобилось однажды на Ubuntu Server 14.04 LTS повысить версию PHP 5.5.9 до 5.6, обычное обновление компонентов системы не помогло:

sudo apt-get update
sudo apt-get upgrade

Можно попробовать обновить систему до 16.04 или выше как я описывал в статье Обновление Ubuntu 14.04 до 16.04. Вместе с системой будет обновлен и PHP.

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

sudo add-apt-repository ppa:ondrej/php
sudo apt-get update

И установить из него нужную версию, например PHP 5.6:

sudo apt-get install php5.6 php5.6-mbstring php5.6-mcrypt php5.6-mysql php5.6-xml

Так как установленных версий может быть несколько, отключим старую и активируем установленную:

sudo a2dismod php5
sudo a2enmod php5.6
sudo service apache2 restart

Аналогично можно установить PHP 7.2:

sudo apt-get install php7.2
sudo a2dismod php5.6
sudo a2enmod php7.2
sudo service apache2 restart

Или PHP 7.0:

sudo apt-get install php7.0
sudo a2dismod php7.2
sudo a2enmod php7.0
sudo service apache2 restart