23 декабря 201800:47

Иногда на сервере бывает система управления сайтами ISPConfig 3 (это штука типа CPanel или Plesk, только бесплатная). И с ней бывает надо сделать некоторые штуки, например.

  • Как быстро узнать версию ISPConfig 3

Бывает, внезапно надо узнать его версию, а есть только shell-доступ на сервер и нет доступа в ISPConfig. Быстро посмотреть его версию тогда можно прямо в его файле конфигурации.

[root@ololo.ru ~]# grep APP_VERSION /usr/local/ispconfig/server/lib/config.inc.php
define('ISPC_APP_VERSION', '3.0.3.3');
$conf['app_version'] = ISPC_APP_VERSION;

Разумеется, это работает если ISPConfig 3 установлен в дефолтный каталог /usr/local/ispconfig. Поменяйте этот путь на путь, в котором ISPConfigустановлен у вас.

  • Включение интернациональных доменов (punycode)

В ISPConfig до версии 3.0.3 не было поддержки интернациональных доменов. Точнее, всё, куда вводились доменные имена, проверялось regex-пом вида /^[\w\.\-\/]{2,255}\.[a-zA-Z]{2,10}[\.]{0,1}$/, который отсекал, например .рф (.xn--p1ai). Замена предпоследних скобочек на [a-zA-Z0-9\-]{2,30} решает проблему. Например, разрешить интернациональные домены в настройках DNS можно, поправив в файле /usr/local/ispconfig/interface/web/dns/form/dns_soa.tform.php:

2 => array (    'type'  => 'REGEX',
        'regex' => '/^[\w\.\-\/]{2,255}\.[a-zA-Z]{2,10}[\.]{0,1}$/',
        'errmsg'=> 'origin_error_regex'),

на

        'regex' => '/^[\w\.\-\/]{2,255}\.[a-zA-Z0-9\-]{2,30}[\.]{0,1}$/',

Список файлов, где находятся такие проверки можно получить командой

[root@ololo.ru ~]# cd /usr/local/ispconfig
[root@ololo.ru ispconfig]# grep -r '\[a-zA-Z\]' .
./interface/web/mail/form/mail_aliasdomain.tform.php: 'regex' => '/^\@[\w\.\-]{2,64}\.[a-zA-Z]{2,10}$/',
./interface/web/mail/form/mail_domain_catchall.tform.php: 'regex' => '/^\@[\w\.\-]{2,255}\.[a-zA-Z]{2,10}$/',
./interface/web/mail/form/mail_get.tform.php: 'regex' => '/^[\w\.\-]{2,64}\.[a-zA-Z]{2,10}$/',
...skip...

  • ISPConfig 3 и флаг active в MyDNS

В ISPConfig и MyDNS есть прикольный прикол – они описывают флаг active в таблице описаний DNS-зон разными типами и значениями. Соответственно, при включении зоны из ISPConfig-а всё равно MyDNS думает, что она выключена.

Вот код функции check_xfer из axfr.c. Эта функция содержит следующий запрос:

querylen = snprintf(query, sizeof(query), "SELECT xfer FROM %s WHERE id=%u%s",
        mydns_soa_table_name, soa->id, mydns_rr_use_active ? " AND active=1" : "");

Проблема в том, что запрос ищет active=1 в таблице dns_soa. В ISPConfig-е поле active в таблице dns_soa имеет тип enum(‘N’, ‘Y’), поэтому запрос всегда обламывается. Чтобы заставить работать ISPConfig и MyDNS вместе, есть два решения:
1) Поменять запрос в axfr.c чтобы он проверял active=’Y’ вместо active=1 и пересобрать MyDNS.
2) Поменять тип поля active в таблице dns_soa на тип int или tinyint:

mysql> alter table dns_soa modify active tinyint(4) NOT NULL default '1';

поменять около строки 178 в файле /usr/local/ispconfig/interface/web/dns/form/dns_soa.tform.php следующее:

        'default'       => '1',
        'value'         => array(0, 1)

и поменять около строки 92 файла /usr/local/ispconfig/interface/lib/classes/listform_actions.inc.php следующее:

        if(strtolower($rec[$key]) == '1' or strtolower($rec[$key]) == '0') {
                // Set a additional image variable for boolean fields
                $rec['_'.$key.'_'] = (strtolower($rec[$key]) == '1')?'x16/tick_circle.png':'x16/cross_circle.png';

После этих изменений всё внезапно работает.

  • Добавление 301-го редиректа

По умолчанию в панельке AliasDomain ISPConfig делает редирект с кодом «302 Found». Иногда же надо чтобы код был «301 Moved Permanently». Для этого в файл /usr/local/ispconfig/interface/web/sites/form/web_aliasdomain.tform.php добавляем помеченное красным:

'value'         => array('' => 'No redirect', 'no' => 'No flag', 'R' => 'R', 'L' => 'L', 'R,L' => 'R,L', 'R=301,L' => 'R=301,L')

И всё внезапно работает.

Удалить информацию с серверов letsenrypt:

certbot revoke --cert-path /etc/letsencrypt/live/CERTNAME/cert.pem

Удалить сертификаты и все симлинки на локальном сервере:

certbot delete --cert-name example.com

Если скачанный certbot,то в папке certbot:

./certbot-auto revoke --cert-path /etc/letsencrypt/live/CERTNAME/cert.pem
./certbot-auto delete --cert-name example.com
0 комментариев
Написать комментарий