Показаны сообщения с ярлыком ISPmanager. Показать все сообщения
Показаны сообщения с ярлыком ISPmanager. Показать все сообщения

пятница, 2 декабря 2011 г.

Миграция с Bind на PowerDNS на серверах с ISPmanager - часть 2

Первая часть http://paperknight.blogspot.com/2011/12/bind-powerdns.html

Создание slave зон доменов на slave сервере.

Два пути, выполняем экспорт базы данных PowerDNS (только таблицу domains) на master сервере. Импортируем ее в базу данных Mysql на Slave сервере PowerDNS, меняем тип зон на slave (mysql> update domains set type = 'SLAVE' where type = 'MASTER';) и ждем пока по AXFR пройдут все трансферы записей в зонах с master сервера на slave сервер.

Второй вариант это использовать дополнительный функционал PowerDNS под названием supermaster. При его использовании не понадобится создавать зоны на slave сервере для трансфера, просто указывается т.н. supermaster сервер в базе данных на slave сервере и отправляется notify с master сервера.

На slave сервере:

mysql> show tables;
+----------------+
| Tables_in_pdns |
+----------------+
| domains        |
| records        |
| supermasters   |
+----------------+
3 rows in set (0.00 sec)

mysql> desc supermasters;
+------------+--------------+------+-----+---------+-------+
| Field      | Type         | Null | Key | Default | Extra |
+------------+--------------+------+-----+---------+-------+
| ip         | varchar(25)  | NO   |     | NULL    |       |
| nameserver | varchar(255) | NO   |     | NULL    |       |
| account    | varchar(40)  | YES  |     | NULL    |       |
+------------+--------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

mysql> insert into supermasters (ip, nameserver, account) values ('85.10.234.195', 'ns1.local.lan', 'test');
Query OK, 1 row affected (0.00 sec)

Теперь с master сервера отправляем notify на slave сервер и целевая зона автоматически создается на slave сервере со всем ее содержимым.

srv-01:/usr/local/ispmgr/etc# pdns_control notify-host domain1.local 78.47.130.43
Added to queue

Смотрим создался ли домен на slave сервере:

root@srv-02:~# mysql -u root -p -e 'select * from pdns.domains'
Enter password:
+----+---------------+---------------+------------+-------+-----------------+---------+
| id | name          | master        | last_check | type  | notified_serial | account |
+----+---------------+---------------+------------+-------+-----------------+---------+
| 13 | domain1.local | 85.10.234.195 | 1322843394 | SLAVE |            NULL | test    |
+----+---------------+---------------+------------+-------+-----------------+---------+

root@srv-02:~# mysql -u root -p -e 'select * from pdns.records'
Enter password:
+-----+-----------+--------------------+------+-------------------------------------------------------------------+------+------+-------------+
| id  | domain_id | name               | type | content                                                           | ttl  | prio | change_date |
+-----+-----------+--------------------+------+-------------------------------------------------------------------+------+------+-------------+
|  95 |        13 | domain1.local      | SOA  | ns1.local.lan. root.local.lan. 2011120200 10800 3600 604800 86400 | 3600 |    0 |        NULL |
|  96 |        13 | domain1.local      | NS   | ns1.local.lan                                                     | 3600 |    0 |        NULL |
|  97 |        13 | domain1.local      | NS   | ns2.local.lan                                                     | 3600 |    0 |        NULL |
|  98 |        13 | domain1.local      | MX   | mail.domain1.local                                                | 3600 |   10 |        NULL |
|  99 |        13 | domain1.local      | MX   | mail.domain1.local                                                | 3600 |   20 |        NULL |
| 100 |        13 | domain1.local      | A    | 85.10.234.195                                                     | 3600 |   20 |        NULL |
| 101 |        13 | ftp.domain1.local  | A    | 85.10.234.195                                                     | 3600 |   20 |        NULL |
| 102 |        13 | mail.domain1.local | A    | 85.10.234.195                                                     | 3600 |   20 |        NULL |
| 103 |        13 | pop.domain1.local  | A    | 85.10.234.195                                                     | 3600 |   20 |        NULL |
| 104 |        13 | smtp.domain1.local | A    | 85.10.234.195                                                     | 3600 |   20 |        NULL |
| 105 |        13 | www.domain1.local  | A    | 85.10.234.195                                                     | 3600 |   20 |        NULL |
| 106 |        13 | domain1.local      | TXT  | "v=spf1 ip4:85.10.234.195 a mx ~all"                              | 3600 |   20 |        NULL |
+-----+-----------+--------------------+------+-------------------------------------------------------------------+------+------+-------------+

Миграция с Bind на PowerDNS на серверах с ISPmanager

На сервере используется панель ISPmanager и задача выполняется с учетом данного факта.

Миграция мастер-зон доменов Bind'а в Mysql базу данных PowerDNS, в данном примере используются тестовые домены domain1.local, domain1.local, domain1.local. Сам DNS сервер содержит только мастер зоны.

zone2sql - это утилита для конвертирования Bind зон в sql

srv-01:~# zone2sql --named-conf=/etc/bind/named.conf --gmysql > domains_from_bind.sql
100% done
Parsed 79 records

srv-01:~# mysql -u root -p pdns < domains_from_bind.sql

Бэкапим конфиг панели ISPmanager /usr/local/ispmgr/etc/ispmgr.conf (можно не весь, а только строчки где определяются пользователи и их владением, теми или иными доменами)

Проверяем результат:

srv-01:/opt/backup# mysql -u root -p -e 'select * from pdns.domains'
Enter password:
+----+------------------+--------+------------+--------+-----------------+---------+
| id | name             | master | last_check | type   | notified_serial | account |
+----+------------------+--------+------------+--------+-----------------+---------+
| 20 | 127.in-addr.arpa | NULL   |       NULL | NATIVE |            NULL | NULL    |
| 18 |                  | NULL   |       NULL | NATIVE |            NULL | NULL    |
| 19 | localhost        | NULL   |       NULL | NATIVE |            NULL | NULL    |
| 21 | 0.in-addr.arpa   | NULL   |       NULL | NATIVE |            NULL | NULL    |
| 22 | 255.in-addr.arpa | NULL   |       NULL | NATIVE |            NULL | NULL    |
| 23 | domain1.local    | NULL   |       NULL | NATIVE |            NULL | NULL    |
| 24 | domain2.local    | NULL   |       NULL | NATIVE |            NULL | NULL    |
| 25 | domain3.local    | NULL   |       NULL | NATIVE |            NULL | NULL    |
+----+------------------+--------+------------+--------+-----------------+---------+

srv-01:/opt/backup# mysql -u root -p -e 'select * from pdns.records'
Enter password:
+-----+-----------+------------------------+------+-----------------------------------------------------------------+---------+------+-------------+
| id  | domain_id | name                   | type | content                                                         | ttl     | prio | change_date |
+-----+-----------+------------------------+------+-----------------------------------------------------------------+---------+------+-------------+
| 283 |        22 | 255.in-addr.arpa       | SOA  | localhost root.localhost 1 604800 86400 2419200 604800          |  604800 |    0 |        NULL |
| 282 |        21 | 0.in-addr.arpa         | NS   | localhost                                                       |  604800 |    0 |        NULL |
| 281 |        21 | 0.in-addr.arpa         | SOA  | localhost root.localhost 1 604800 86400 2419200 604800          |  604800 |    0 |        NULL |
| 279 |        20 | 127.in-addr.arpa       | NS   | localhost                                                       |  604800 |    0 |        NULL |
| 280 |        20 | 1.0.0.127.in-addr.arpa | PTR  | localhost                                                       |  604800 |    0 |        NULL |
| 277 |        19 | localhost              | AAAA | ::1                                                             |  604800 |    0 |        NULL |
| 278 |        20 | 127.in-addr.arpa       | SOA  | localhost root.localhost 1 604800 86400 2419200 604800          |  604800 |    0 |        NULL |
| 276 |        19 | localhost              | A    | 127.0.0.1                                                       |  604800 |    0 |        NULL |
| 275 |        19 | localhost              | NS   | localhost                                                       |  604800 |    0 |        NULL |
| 274 |        19 | localhost              | SOA  | localhost root.localhost 2 604800 86400 2419200 604800          |  604800 |    0 |        NULL |
| 273 |        18 | m.root-servers.net     | AAAA | 2001:dc3::35                                                    | 3600000 |    0 |        NULL |
| 272 |        18 | m.root-servers.net     | A    | 202.12.27.33                                                    | 3600000 |    0 |        NULL |
| 270 |        18 | l.root-servers.net     | A    | 199.7.83.42                                                     | 3600000 |    0 |        NULL |
| 271 |        18 |                        | NS   | M.ROOT-SERVERS.NET                                              | 3600000 |    0 |        NULL |
| 269 |        18 |                        | NS   | L.ROOT-SERVERS.NET                                              | 3600000 |    0 |        NULL |
| 268 |        18 | k.root-servers.net     | AAAA | 2001:7fd::1                                                     | 3600000 |    0 |        NULL |
| 267 |        18 | k.root-servers.net     | A    | 193.0.14.129                                                    | 3600000 |    0 |        NULL |
| 266 |        18 |                        | NS   | K.ROOT-SERVERS.NET                                              | 3600000 |    0 |        NULL |
| 265 |        18 | j.root-servers.net     | AAAA | 2001:503:C27::2:30                                              | 3600000 |    0 |        NULL |
| 264 |        18 | j.root-servers.net     | A    | 192.58.128.30                                                   | 3600000 |    0 |        NULL |
| 263 |        18 |                        | NS   | J.ROOT-SERVERS.NET                                              | 3600000 |    0 |        NULL |
| 262 |        18 | i.root-servers.net     | A    | 192.36.148.17                                                   | 3600000 |    0 |        NULL |
| 261 |        18 |                        | NS   | I.ROOT-SERVERS.NET                                              | 3600000 |    0 |        NULL |
| 260 |        18 | h.root-servers.net     | AAAA | 2001:500:1::803f:235                                            | 3600000 |    0 |        NULL |
| 242 |        18 |                        | NS   | A.ROOT-SERVERS.NET                                              | 3600000 |    0 |        NULL |
| 243 |        18 | a.root-servers.net     | A    | 198.41.0.4                                                      | 3600000 |    0 |        NULL |
| 244 |        18 | a.root-servers.net     | AAAA | 2001:503:BA3E::2:30                                             | 3600000 |    0 |        NULL |
| 245 |        18 |                        | NS   | B.ROOT-SERVERS.NET                                              | 3600000 |    0 |        NULL |
| 246 |        18 | b.root-servers.net     | A    | 192.228.79.201                                                  | 3600000 |    0 |        NULL |
| 247 |        18 |                        | NS   | C.ROOT-SERVERS.NET                                              | 3600000 |    0 |        NULL |
| 248 |        18 | c.root-servers.net     | A    | 192.33.4.12                                                     | 3600000 |    0 |        NULL |
| 249 |        18 |                        | NS   | D.ROOT-SERVERS.NET                                              | 3600000 |    0 |        NULL |
| 250 |        18 | d.root-servers.net     | A    | 128.8.10.90                                                     | 3600000 |    0 |        NULL |
| 251 |        18 |                        | NS   | E.ROOT-SERVERS.NET                                              | 3600000 |    0 |        NULL |
| 252 |        18 | e.root-servers.net     | A    | 192.203.230.10                                                  | 3600000 |    0 |        NULL |
| 253 |        18 |                        | NS   | F.ROOT-SERVERS.NET                                              | 3600000 |    0 |        NULL |
| 254 |        18 | f.root-servers.net     | A    | 192.5.5.241                                                     | 3600000 |    0 |        NULL |
| 255 |        18 | f.root-servers.net     | AAAA | 2001:500:2f::f                                                  | 3600000 |    0 |        NULL |
| 256 |        18 |                        | NS   | G.ROOT-SERVERS.NET                                              | 3600000 |    0 |        NULL |
| 257 |        18 | g.root-servers.net     | A    | 192.112.36.4                                                    | 3600000 |    0 |        NULL |
| 258 |        18 |                        | NS   | H.ROOT-SERVERS.NET                                              | 3600000 |    0 |        NULL |
| 259 |        18 | h.root-servers.net     | A    | 128.63.2.53                                                     | 3600000 |    0 |        NULL |
| 284 |        22 | 255.in-addr.arpa       | NS   | localhost                                                       |  604800 |    0 |        NULL |
| 285 |        23 | domain1.local          | SOA  | ns1.local.lan root.local.lan 2011120200 10800 3600 604800 86400 |    3600 |    0 |        NULL |
| 286 |        23 | domain1.local          | NS   | ns1.local.lan                                                   |    3600 |    0 |        NULL |
| 287 |        23 | domain1.local          | NS   | ns2.local.lan                                                   |    3600 |    0 |        NULL |
| 288 |        23 | domain1.local          | MX   | mail.domain1.local                                              |    3600 |   10 |        NULL |
| 289 |        23 | domain1.local          | MX   | mail.domain1.local                                              |    3600 |   20 |        NULL |
| 290 |        23 | domain1.local          | A    | 85.10.234.195                                                   |    3600 |    0 |        NULL |
| 291 |        23 | ftp.domain1.local      | A    | 85.10.234.195                                                   |    3600 |    0 |        NULL |
| 292 |        23 | mail.domain1.local     | A    | 85.10.234.195                                                   |    3600 |    0 |        NULL |
| 293 |        23 | pop.domain1.local      | A    | 85.10.234.195                                                   |    3600 |    0 |        NULL |
| 294 |        23 | smtp.domain1.local     | A    | 85.10.234.195                                                   |    3600 |    0 |        NULL |
| 295 |        23 | www.domain1.local      | A    | 85.10.234.195                                                   |    3600 |    0 |        NULL |
| 296 |        23 | domain1.local          | TXT  | "v=spf1 ip4:85.10.234.195 a mx ~all"                            |    3600 |    0 |        NULL |
| 297 |        24 | domain2.local          | SOA  | ns1.local.lan root.local.lan 2011120200 10800 3600 604800 86400 |    3600 |    0 |        NULL |
| 298 |        24 | domain2.local          | NS   | ns1.local.lan                                                   |    3600 |    0 |        NULL |
| 299 |        24 | domain2.local          | NS   | ns2.local.lan                                                   |    3600 |    0 |        NULL |
| 300 |        24 | domain2.local          | MX   | mail.domain2.local                                              |    3600 |   10 |        NULL |
| 301 |        24 | domain2.local          | MX   | mail.domain2.local                                              |    3600 |   20 |        NULL |
| 302 |        24 | domain2.local          | A    | 85.10.234.195                                                   |    3600 |    0 |        NULL |
| 303 |        24 | ftp.domain2.local      | A    | 85.10.234.195                                                   |    3600 |    0 |        NULL |
| 304 |        24 | mail.domain2.local     | A    | 85.10.234.195                                                   |    3600 |    0 |        NULL |
| 305 |        24 | pop.domain2.local      | A    | 85.10.234.195                                                   |    3600 |    0 |        NULL |
| 306 |        24 | smtp.domain2.local     | A    | 85.10.234.195                                                   |    3600 |    0 |        NULL |
| 307 |        24 | www.domain2.local      | A    | 85.10.234.195                                                   |    3600 |    0 |        NULL |
| 308 |        24 | domain2.local          | TXT  | "v=spf1 ip4:85.10.234.195 a mx ~all"                            |    3600 |    0 |        NULL |
| 309 |        25 | domain3.local          | SOA  | ns1.local.lan root.local.lan 2011120200 10800 3600 604800 86400 |    3600 |    0 |        NULL |
| 310 |        25 | domain3.local          | NS   | ns1.local.lan                                                   |    3600 |    0 |        NULL |
| 311 |        25 | domain3.local          | NS   | ns2.local.lan                                                   |    3600 |    0 |        NULL |
| 312 |        25 | domain3.local          | MX   | mail.domain3.local                                              |    3600 |   10 |        NULL |
| 313 |        25 | domain3.local          | MX   | mail.domain3.local                                              |    3600 |   20 |        NULL |
| 314 |        25 | domain3.local          | A    | 85.10.234.195                                                   |    3600 |    0 |        NULL |
| 315 |        25 | ftp.domain3.local      | A    | 85.10.234.195                                                   |    3600 |    0 |        NULL |
| 316 |        25 | mail.domain3.local     | A    | 85.10.234.195                                                   |    3600 |    0 |        NULL |
| 317 |        25 | pop.domain3.local      | A    | 85.10.234.195                                                   |    3600 |    0 |        NULL |
| 318 |        25 | smtp.domain3.local     | A    | 85.10.234.195                                                   |    3600 |    0 |        NULL |
| 319 |        25 | www.domain3.local      | A    | 85.10.234.195                                                   |    3600 |    0 |        NULL |
| 320 |        25 | domain3.local          | TXT  | "v=spf1 ip4:85.10.234.195 a mx ~all"                            |    3600 |    0 |        NULL |
+-----+-----------+------------------------+------+-----------------------------------------------------------------+---------+------+-------------+

Корректируем тип зон (так как утилита zone2sql в процессе конвертирования, задает тип зон как NATIVE)

mysql> select * from domains;
+----+------------------+--------+------------+--------+-----------------+---------+
| id | name             | master | last_check | type   | notified_serial | account |
+----+------------------+--------+------------+--------+-----------------+---------+
| 20 | 127.in-addr.arpa | NULL   |       NULL | NATIVE |            NULL | NULL    |
| 18 |                  | NULL   |       NULL | NATIVE |            NULL | NULL    |
| 19 | localhost        | NULL   |       NULL | NATIVE |            NULL | NULL    |
| 21 | 0.in-addr.arpa   | NULL   |       NULL | NATIVE |            NULL | NULL    |
| 22 | 255.in-addr.arpa | NULL   |       NULL | NATIVE |            NULL | NULL    |
| 23 | domain1.local    | NULL   |       NULL | NATIVE |            NULL | NULL    |
| 24 | domain2.local    | NULL   |       NULL | NATIVE |            NULL | NULL    |
| 25 | domain3.local    | NULL   |       NULL | NATIVE |            NULL | NULL    |
+----+------------------+--------+------------+--------+-----------------+---------+
8 rows in set (0.00 sec)

mysql> update domains set type = 'MASTER' where type = 'NATIVE';
Query OK, 8 rows affected (0.00 sec)
Rows matched: 8  Changed: 8  Warnings: 0

mysql> select * from domains;
+----+------------------+--------+------------+--------+-----------------+---------+
| id | name             | master | last_check | type   | notified_serial | account |
+----+------------------+--------+------------+--------+-----------------+---------+
| 20 | 127.in-addr.arpa | NULL   |       NULL | MASTER |            NULL | NULL    |
| 18 |                  | NULL   |       NULL | MASTER |            NULL | NULL    |
| 19 | localhost        | NULL   |       NULL | MASTER |            NULL | NULL    |
| 21 | 0.in-addr.arpa   | NULL   |       NULL | MASTER |            NULL | NULL    |
| 22 | 255.in-addr.arpa | NULL   |       NULL | MASTER |            NULL | NULL    |
| 23 | domain1.local    | NULL   |       NULL | MASTER |            NULL | NULL    |
| 24 | domain2.local    | NULL   |       NULL | MASTER |            NULL | NULL    |
| 25 | domain3.local    | NULL   |       NULL | MASTER |            NULL | NULL    |
+----+------------------+--------+------------+--------+-----------------+---------+
8 rows in set (0.00 sec)

Проверяем корректность пользовательских аккаунтов в том плане, что каждый пользователь является владельцем именно своих доменов в ISPmanager

srv-01:/usr/local/ispmgr/etc# tail -n4 /usr/local/ispmgr/etc/ispmgr.conf
Domain domain1.local 500
Domain domain2.local 503
Domain domain3.local 504

Заходим в панель ISPmanager и проверяем все ли в порядке.

PowerDNS на серверах с ISPmanager

В новых версиях панель ISPmanager теперь штатно умеет поддерживать работу с PowerDNS, помимо BIND.

Имеем два сервера с DNS на базе PowerDNS и панелью ISPmanager. Первый master, второй slave в контексте DNS.

Некоторые заметки:

На мастер-сервере в панели ISPmanager настраиваем стандартную поддержку slave DNS серверов "Домены" -> "Вторичные серверы имен"

При создании на мастер-сервере нового домена на слейв-сервере в Mysql базу данных PowerDNS панелью ISPmanager добавляется новый домен, при удалении соответственно удаляется:

root@srv-02:/var/log/mysql# grep -i insert mysql.log | grep -i fastvps.local
                   44 Query     insert into domains (name, master, type) values ('fastvps.local', '85.10.234.195', 'SLAVE')

mysql> select * from domains;
+----+---------------+---------------+------------+-------+-----------------+---------+
| id | name          | master        | last_check | type  | notified_serial | account |
+----+---------------+---------------+------------+-------+-----------------+---------+
|  6 | fastvps.local | 85.10.234.195 |       NULL | SLAVE |            NULL | NULL    |
+----+---------------+---------------+------------+-------+-----------------+---------+
1 row in set (0.00 sec)

Для работы трансфера зон подправить дефолтные конфиги PowerDNS, те что кладет ISPmanager

На мастер-сервере

/etc/powerdns/pdns.conf

allow-axfr-ips=<IP_адрес_slave_сервера>
master=yes
disable-axfr=no

На слейв-сервере

/etc/powerdns/pdns.conf

slave=yes

четверг, 15 сентября 2011 г.

Настройка оповещений о наличии небезопасных паролей на серверах с ISPmanager

Написал скрипт, можно повесить его в крон, чтобы владельцу сервера приходил алерт письмом при обнаружении небезопасных паролей (подразумевается что администратор сервера не заводит учетные записи на сервере в  обход панели ISPmanager)

#!/usr/bin/perl

$data = `unshadow /etc/passwd /etc/shadow`;
for $str ( split ( "\n", $data ) )
{
        @data = split(/\:/, $str);
        $data2 = `id @data[0] -Gn`;
                if ($data2 =~ m/mgrsecure/)
                {
                splice (@data, 3,1, 'mgrsecure')
                }
        $data3 = join(":", @data);
        open(file, ">> /root/.john/datafile");
        print file "$data3\n";
        close (file);
}
$command = `john -single -groups:mgrsecure /root/.john/datafile 2>/dev/null`;
for $str2 ( split ( "\n", $command ) )
{
        if ($str2 !~ m/password hash/)
        {
        @command = split(/\s+/, $str2);
        @command[1] =~ s/[\(\)]//g;
        push(@newcomm, ['Логин:', @command[1], 'Пароль:', @command[0]]);
        }
}
$command2 = `john -single -groups:-mgrsecure /root/.john/datafile 2>/dev/null`;
for $str3 ( split ( "\n", $command2 ) )
{
        if (($str3 !~ m/password hash/) && ($str3 !~ m/\(virtuser_\d+\)/))
        {
        @command2 = split(/\s+/, $str3);
        @command2[1] =~ s/[\(\)]//g;
        chomp($owner = `id @command2[1] -gn`);
        push(@command2, $owner);
        push(@newcomm2, ['Логин:', @command2[1], 'Пароль:', @command2[0], 'Владелец_аккаунта:', @command2[2]]);
        }
}
$command3 = `john -single /etc/dovecot/dovecot.passwd 2>/dev/null`;
for $str4 ( split ( "\n", $command3 ) )
{
        if ($str4 !~ m/password hash/)
        {
        @command3 = split(/\s+/, $str4);
        @command3[1] =~ s/[\(\)]//g;
        push(@newcomm3, ['Почтовый_ящик:', @command3[1], 'Пароль:', @command3[0]]);
        }
}

if (scalar@newcomm > 0)
{
unshift(@newcomm, ['']);
unshift(@newcomm, ['Пользователи ISPmanager:']);
unshift(@newcomm, ['']);
for ($row = 0; $row < scalar@newcomm; $row++)
{
open(file, ">> /root/.john/report");
        print file "$newcomm[$row][0] ";
        print file "$newcomm[$row][1] ";
        print file "$newcomm[$row][2] ";
        print file "$newcomm[$row][3]\n";
close (file);
}
}

if (scalar@newcomm2 > 0)
{
unshift(@newcomm2, ['']);
unshift(@newcomm2, ['FTP пользователи:']);
unshift(@newcomm2, ['']);
for ($row2 = 0; $row2 < scalar@newcomm2; $row2++)
{
open(file, ">> /root/.john/report");
        print file "$newcomm2[$row2][0] ";
        print file "$newcomm2[$row2][1] ";
        print file "$newcomm2[$row2][2] ";
        print file "$newcomm2[$row2][3] ";
        print file "$newcomm2[$row2][4] ";
        print file "$newcomm2[$row2][5]\n";
close (file);
}
}

if (scalar@newcomm3 > 0)
{
unshift(@newcomm3, ['']);
unshift(@newcomm3, ['Почтовые ящики:']);
unshift(@newcomm3, ['']);
for ($row3 = 0; $row3 < scalar@newcomm3; $row3++)
{
open(file, ">> /root/.john/report");
        print file "$newcomm3[$row3][0] ";
        print file "$newcomm3[$row3][1] ";
        print file "$newcomm3[$row3][2] ";
        print file "$newcomm3[$row3][3]\n";
close (file);
}
}

if (-e "/root/.john/report")
{
exec("echo -e 'Обнаружено использование небезопасных паролей. Пожалуйста, смените их на более надежные.\n' | \
cat - /root/.john/report | mail -s 'Отчет по безопасности сервера' $ARGV[0] & rm -f /root/.john/*");
}
else
{
exec("rm -f /root/.john/*");
}
Письмо будет выглядеть примерно вот так:
Обнаружено использование небезопасных паролей. Пожалуйста, смените их на более надежные.


Пользователи ISPmanager:

Логин: user_123 Пароль: user
Логин: smart_account Пароль: smart_account

FTP пользователи:

Логин: unsecure_ftp2 Пароль: unsecure Владелец_аккаунта: guest
Логин: unsecure_ftp Пароль: unsecure_ftp Владелец_аккаунта: sysadmin

Почтовые ящики:

Почтовый_ящик: box_02@local.lan Пароль: box_02
Почтовый_ящик: box_01@local.lan Пароль: box_01
Почтовый_ящик: mailbox@local.lan Пароль: mail
Установка
Устанавливаем JTR
apt-get install john
Вешаем в крон сам скрипт (параметром передаем в скрипт адрес почтового ящика администратора сервера, аккуратнее так как в письме будут фигурировать те самые некорректные пароли)
0 15 * * * password_checker.pl <email_адрес_администратора_сервера>
 На системах (Debian 6.0 (установленный с нуля, а не апгрейд с 5.0), последние версии Ubuntu), где пароли системных пользователей шифруются не md5, а sha512 (смотрим здесь /etc/pam.d/common-password), JTR установленный из штатного репозитория проверять безопасность паролей системных пользователей не сможет. Потребуется его сборка с Jumbo патчем.