трюки с ISPConfig 3
Иногда на сервере бывает система управления сайтами 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