вторник, 21 октября 2008 г.

Самый добрый сайт на свете!!!

Зайдите на Самый добрый сайт на свете!!!. Зачетно - поднимает настроение :)

среда, 15 октября 2008 г.

Скрипт на perl для создания паролей

  1. #!/usr/bin/perl -w
  2. my @a=("a".."z","A".."Z","0".."9");
  3. for (1..32) { print $a[int rand @a]; };
  4. print "\n";'

вторник, 14 октября 2008 г.

Dovecot: Шифруем IMAP и POP3

  1. Первым делом создаем сертификат и секретный ключ. На вопрос о CN (Common Name) вписываем имя сервера – например «mail.pupkin.ru». В противном случае почтовый клиент может отказаться работать с сервером
    $ openssl req -new -outform PEM -out dovecot.crt -newkey rsa:2048 -nodes -keyout dovecot.key -keyform PEM -days 9999 -x509
    Вывод будет примерно таким
    Generating a 2048 bit RSA private key
    ..........................................................................+++
    ................................+++
    unable to write 'random state'
    writing new private key to 'dovecot.key'
    -----
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [AU]:RU
    State or Province Name (full name) [Some-State]:Moscow Region
    Locality Name (eg, city) []:Moscow
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:Pupkin & Co.
    Organizational Unit Name (eg, section) []:IT Department
    Common Name (eg, YOUR name) []:mail.pupkin.ru
    Email Address []:vasya@pupkin.ru
    Жирным шрифтом отмечены ответы.

  2. Перемещаем созданные ключи в папку Dovecot и устанавливаем права доступа к ним
    $ sudo -s
    # mkdir /etc/dovecot/ssl
    # mv dovecot.crt /etc/dovecot/ssl/dovecot.crt
    # mv dovecot.key /etc/dovecot/ssl/dovecot.key
    # chown root /etc/dovecot/ssl/dovecot.*
    # chmod 0600 /etc/dovecot/ssl/dovecot.key

  3. Правим конфигурационный файл «/etc/dovecot/dovecot.conf»
    1. protocols = imaps pop3s
    2. ssl_disable = no
    3. ssl_cert_file = /etc/dovecot/ssl/dovecot.crt
    4. ssl_key_file = /etc/dovecot/ssl/dovecot.key

  4. Перезапускаем Dovecot
    # /etc/init.d/dovecot restart
  5. Проверяем работу сервера с сертификатом
    $ openssl s_client -connect mail.pupkin.ru:imaps -debug
    Если все корректно настроили в ответ выйдет куча текста с диагностикой устанавливаемого защищенного соединения.
    В конце у меня вышло
    -----END CERTIFICATE-----
    subject=/C=RU/ST=Moscow Region/L=Moscow/O=Pupkin & Co./OU=IT Department/CN=mail.pupkin.ru/emailAddress=vasya@pupkin.ru
    issuer=/C=RU/ST=Moscow Region/L=Moscow/O=Pupkin & Co./OU=IT Department/CN=mail.pupkin.ru/emailAddress=vasya@pupkin.ru
    ---
    No client certificate CA names sent
    ---
    SSL handshake has read 1684 bytes and written 316 bytes
    ---
    New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
    Server public key is 1024 bit
    Compression: NONE
    Expansion: NONE
    SSL-Session:
    Protocol : TLSv1
    Cipher : DHE-RSA-AES256-SHA
    Session-ID: 13053ADF84C8157032B21A241E46398D4837A38F9AAA86095E32F1FDB55B704A
    Session-ID-ctx:
    Master-Key: 5CFEF98B3BF13B13C0D8BD98EDD74D827847FE2D6B2240F4BE083C54B696681901829BFC35D838FB7F64D96CA815C7AA
    Key-Arg : None
    Start Time: 1224018874
    Timeout : 300 (sec)
    Verify return code: 18 (self signed certificate)
    ---
  6. Настраиваем почтовый клиент на работу по pop3s/imaps (порты 995 и 993 соответственно)

четверг, 2 октября 2008 г.

Локальное зеркало обновлений NOD32 в Ubuntu

  • Ставим wget, bsdmainutils, unrar, apache2
    $ sudo apt-get install wget bsdmainutils unrar apache2
  • Скачиваем архив со скриптами тут.
  • Создаем директорию веб-зеркала и пользователя www-nod32
    $ sudo mkdir -p /www/nod32-updates
    $ sudo adduser --home /scripts/NOD32 --no-create-home --shell /bin/bash --disabled-password www-nod32
    $ sudo chown -R www-nod32:www-nod32 /www/nod32-updates
  • Распакуем скачанный архив в /scripts (должна появиться директория NOD32)
  • Меняем владельца директории
    $ sudo chown -R www-nod32:www-nod32 /scripts/NOD32/mirror
  • Правим updates3.sh
    1. # Путь к скриптам
    2. path_prog=/scripts/NOD32
    3. # Путь до баз на веб
    4. path_html=/www/nod32-updates
  • Правим NOD32_3UPDATE.sh
    1. # Путь к базам данных
    2. PATHN=/scripts/NOD32/mirror
    3. # Имя пользователя (для беcплатных серверов - пусто)
    4. login_name=
    5. # Пароль (для беcплатных серверов - пусто)
    6. password=
    7. # Адреса платных серверов обновлений (адреса дб без /nod_upd)
    8. #URLN=http://89.202.157.136
    9. #URLN=http://89.202.157.137
    10. #URLN=http://89.202.157.138
    11. #URLN=http://89.202.157.139
    12. #URLN=http://www.nod32.com
    13. #URLN=http://u20.eset.com
    14. #URLN=http://89.202.157.139
    15. #URLN=http://u20.eset.com
    16. # Адреса бесплатных серверов обновлений
    17. # Оставляю без изменения, т.к. не знаю на каких серверах будут
    18. # лежать обновления
    19. URLN=http://ved.metroland.ru/updates/nod32/
  • Проверим работу скрипта
    $ sudo -u www-nod32 /scripts/NOD32/update3.sh
Настраиваем Apache
  • Создадим новый VirtualHost
    # cat > /etc/apache2/sites-available/nod32-updates
    1. <VirtualHost *>
    2. DocumentRoot /www/nod32-updates
    3. ServerName nod32-updates.your.domain.ru
    4. CacheNegotiatedDocs On
    5. ErrorLog /var/log/apache2/nod32-updates.your.domain.ru-error_log
    6. CustomLog /var/log/apache2/nod32-updates.your.domain.ru-access_log common
    7. <Directory "/www/nod32-updates">
    8. Options FollowSymLinks -Indexes
    9. AllowOverride None
    10. </Directory>
    11. </VirtualHost>
    # ln -s ../sites-available/nod32-updates /etc/apache2/sites-enabled/050-nod32-updates
  • Перезагрузим Apache с новыми настройками
    $ /etc/init.d/apache2 restart

Настроим crontab
$ sudo crontab -u www-nod32 -e
Добавим строку
  1. 0 8,13,17 * * * /scripts/NOD32/update3.sh
По мотивам статьи на сайте www.volmed.org.ru

пятница, 12 сентября 2008 г.

Доступ к серверу, прикрытому неподконтрольным брандмауером.

Вызвался настроить школьный сервер своему другу. В сельскую школу, где он работает, в рамках общероссийской программы провели интернет и там встал вопрос, как проконтролировать сетевую активность новоявленных интернет-пользователей (в лице школьников). Заодно привести в порядок локальную сеть школы.
Под сервер оперативно выделили компьютер. В выборе операционной системы остановились на Ubuntu. Но я, так как находился в километрах двухстах, нуждался в удаленном доступе. Проконсультировал через аську установку ОС и настройку удаленного доступа по ssh. Дальше меня ждал неприятный сюрприз – невозможность прямого соединения с сервером.
Решение было найдено в man-странице ssh. Спасением стали ключ «-R», создающий туннель c порта удаленной машины на локальный порт, и подконтрольный мне сервер («MY»), доступный со школы («SCHOOL»).

  • На «MY» создаем пользователя «user_my» и задаем ему пароль.
На сервере «SCHOOL»
  • Создаем пользователя «user_school» и добавляем его в список пользователей sudo.
  • Устанавливаем openssh-server и screen
    $ sudo aptitude install openssh-server screen
  • Запускаем сервер SSH
    $ sudo /etc/init.d/ssh start
  • В домашней папке нового пользователя создаем скрипт «~/bin/remote-access.sh»
    1. #!/bin/sh
    2. screen -d -m -S remote-access -- \
    3. sh -c 'while true; \
    4. do ssh -R 2222:localhost:22 -C \
    5. user_my@my.server.ru; done'
    Сделаем скрипт исполняемым
    $ chmod +x ~/bin/remote-access.sh
    Данный скрипт создаёт фоновую сессию screen и устанавливает ssh-соединение с «MY».
  • Создаем ключ беспарольной аутентификации. Пароль (passphrase) для ключа не задается. Нужен для скрипта «remote-access.sh»
    $ ssh-keygen -b 2048
    Копируем ключ с «SCHOOL» на «MY»
    $ ssh-copy-id user_my@my.server.ru
  • Добавляем задание для cron, чтобы соединение с «MY» устанавливалось сразу после включения «SCHOOL»
    $ crontab -e
    1. @reboot /home/user_school/bin/remote-access.sh
  • Запустим наш скрипт на «SCHOOL»
    $ /home/user_school/bin/remote-access.sh
    $ screen -ls
    There are screens on:
    5140.remote-access (Detached)
    1 Socket in /var/run/screen/S-user_school.
  • На стороне «MY» должен появиться новый порт
    $ netstat -tln | grep :2222
    tcp 0 0 127.0.0.1:2222 0.0.0.0:* LISTEN
  • Теперь мы можем соединиться с сервером «SCHOOL» по созданному туннелю
    $ ssh -p 2222 user_school@localhost

Удаленное управление сервером имён BIND9

Управление сервером имён BIND9 производится с помощью команды rndc. С его помощью можно удаленно обновить (или принудительно перезагрузить) зоны, сбросить кеш сервера или заморозить обновление динамических зон.

Сперва настраиваем BIND9

  • Сгенерируем ключ «/etc/namedb/rndc.key»
    # rndc-confgen -u bind -a -b 256
  • Создадим конфигурационный файл «/etc/namedb/rndc.conf»
    1. include "/etc/namedb/rndc.key";
    2. options {
    3. default-key "rndc-key";
    4. default-server 127.0.0.1;
    5. default-port 953;
    6. };
  • Отредактируем файл «/etc/namedb/named.conf» и добавим
    1. include "/etc/namedb/rndc.key";
    2. controls {
    3. inet 127.0.0.1 port 953 allow { 127.0.0.1; } keys { "rndc-key"; };
    4. inet 192.168.0.xxx port 953 allow { 192.168.0.yyy; } keys { "rndc-key"; };
    5. };
    где «192.168.0.xxx» – ip-адрес сервера в сети, а «192.168.0.yyy» – ip-адрес компьютера администратора.
  • Перезагружаем сервер имён
    # /etc/rc.d/named restart
  • Проверяем
    # rndc reload
    server reload successful
Теперь настроим на стороне администратора
  • Копируем с сервера файлы для rndc
    $ sudo scp -p admin@192.168.0.xxx:/etc/namedb/rndc.'*' /etc/namedb/
  • Отредактируем файл «/etc/namedb/rndc.conf»
    1. include "/etc/namedb/rndc.key";
    2. options {
    3. default-key "rndc-key";
    4. # default-server 127.0.0.1;
    5. default-server 192.168.0.xxx;
    6. default-port 953;
    7. };
  • Проверяем
    # rndc reload
    server reload successful
Если у вас несколько серверов, то они настраиваются похожим образом.
  • На стороне администратора сохраняем ключи с именами вроде «/etc/namedb/server-name.key» и редактируем
    1. key "rndc-server-name-key" {
    2. algorithm hmac-md5;
    3. secret "super-secret-password-hash=";
    4. };
  • В файл «/etc/namedb/rndc.conf» добавим строки для каждого сервера
    1. include "/etc/namedb/server-name.key";
    2. server "server-name" {
    3. key "rndc-server-name-key";
    4. };
    «server-name» может быть именем сервера или его ip-адресом.
  • Проверяем
    # rndc -s server-name reload
    server reload successful
    Если опустить параметр «-s» то будем «рулить» сервером, заданным по умолчанию в секции «options»