Борьба со спамом средствами Postfix

/etc/postfix/main.cf
  1. Проверка приветствия (HELO)
    smtpd_helo_required = yes
    smtpd_helo_restrictions =
            permit_mynetworks,
            permit_sasl_authenticated,
            reject_unknown_reverse_client_hostname,
            reject_invalid_helo_hostname,
            reject_non_fqdn_helo_hostname,
            reject_unknown_helo_hostname
    
  2. Проверка отправителя
    smtpd_sender_restrictions =
            permit_sasl_authenticated,
            permit_mynetworks,
            check_sender_access hash:/etc/mail/access,
            reject_non_fqdn_sender,
            reject_unknown_sender_domain,
            reject_unverified_sender
    
  3. Проверка получателя
    smtpd_recipient_restrictions =
            permit_sasl_authenticated,
            check_recipient_access hash:/etc/mail/access,
            permit_mynetworks,
            reject_non_fqdn_recipient,
            reject_unauth_pipelining,
            reject_unauth_destination,
            check_policy_service unix:private/policy-spf,
            reject_unlisted_recipient,
            reject_unverified_recipient,
            check_policy_service inet:127.0.0.1:60000
    
  4. Проверка существования адреса отправителя
    address_verify_sender = $double_bounce_sender
    

ispmanager 4.4.9 bug

После обновления ISPManager до версии 4.4.9, если не был установлен procmail, пропадают почтовые ящики и домены , причем откат на более ранние версии ISPManager не помогает, почтовые ящики появляются, можно создавать новые, но письма до новых пользователей не доходят, в лог ispmanager падало следующее

ERROR Unable to detect LDA.

Багфикс обещают в ближайшем будущем. На данный момент можно вылечить установкой procmail

aptitude install procmail

и перезапуском ISPManager

killall ispmgr

GNU screen

GNU Screen — свободная консольная утилита-мультиплексор, предоставляющая пользователю доступ к нескольким сессиям в рамках одной сессии. Это полезно для работы с несколькими программами из командной строки, а также для запуска программ на удаленном сервере.

aptitude install screen

Запускаем новую сессию

screen

Теперь шелл запущен в screen сессии.
Команды screen

    1. Создать новое окно screen
      Ctrl+a c
      Ctrl+a Ctrl+c

Читать далее GNU screen

RCVD_ILLEGAL_IP Received: contains illegal IP address

3.4 RCVD_ILLEGAL_IP Received: contains illegal IP address
Баг в spamassassin версии 3.3.1, связанный с использованием IP адреса из диапазона 5.0.0.0/8 (их сейчас Hetzner раздает)
Лечится установкой spamassassin из testing

  1. Добавляем репозиторий testing в /etc/apt/sources.list
    deb http://http.us.debian.org/debian testing main contrib non-free
  2. Далее в /etc/apt/apt.conf
    APT::Default-Release "stable";
  3. Обновляем список репозиториев
    aptitude update
  4. Обновляем spamassassin
    aptitude -t testing install spamassassin
  5. Проверяем
    spamassassin -V

     3.4 RCVD_ILLEGAL_IP Received: contains illegal IP address

django virtualenvs nginx uwsgi supervisor debian

Предполагается, что у нас уже есть настроенное виртуальное окружение virtualenv debian
nginx в стандартном репозитории Debian Squeeze старый, поэтому ставить будем из backports
/etc/apt/sources.list

deb http://backports.debian.org/debian-backports squeeze-backports main contrib non-free
deb http://ftp.ru.debian.org/debian testing main non-free contrib
deb http://ftp.ru.debian.org/debian unstable main non-free contrib

/etc/apt/preferences

Package: *
Pin: release a=stable
Pin-Priority: 700
Package: *
Pin: release a=squeeze-backports
Pin-Priority: 675
Package: *
Pin: release a=testing
Pin-Priority: 650
Package: *
Pin: release a=unstable
Pin-Priority: 600

Указываем использовать stable по умолчанию

echo 'APT::Default-Release "stable";' > /etc/apt/apt.conf.d/default

Обновляем список репозиториев

aptitude update

Читать далее django virtualenvs nginx uwsgi supervisor debian

Создать базу данных и пользователя mysql с правами на эту базу данных

  1. Логинимся с правами суперпользователя
    mysql -uroot -p
  2. Создаем ДБ
    CREATE DATABASE `my_db` CHARACTER SET utf8 COLLATE utf8_general_ci;
  3. Создаем пользователя с полными правами на только что созданную ДБ и с возможностью входа с localhost
    mysql> GRANT ALL PRIVILEGES ON .* TO new_user@localhost
        ->     IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
  4. Если необходим удаленный вход, вместо @localhost необходимо выполнить @»%»
    mysql> GRANT ALL PRIVILEGES ON .* TO new_user@"%"
        ->     IDENTIFIED BY 'some_pass' WITH GRANT OPTION;

    Также необходимо в настройках /etc/mysql/my.cnf изменить строку bind-address с 127.0.0.1 на 0.0.0.0 и перезапустить демон mysql

    bind-address = 0.0.0.0

iptables DNAT Проброс порта за NAT

Для проброса порта сервера, находящегося за NAT средствами iptables

iptables -t nat -A PREROUTING -p tcp -d $EXT_R_IP --dport $PORT1 -j DNAT --to-destination $LOCAL_IP:$PORT2
iptables -A FORWARD -i eth0 -d $LOCAL_IP -p tcp --dport $PORT2 -j ACCEPT

Смотрим

iptables -t nat -L -v -b
iptables -L -v -n

No space left on device

Что делать если при попытке создать файл появляется ошибка No space left on device, но

  1. свободного места навалом
    df -h
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/sda1             145G   53G   84G  39% /
    tmpfs                1006M     0 1006M   0% /lib/init/rw
    udev                   10M  648K  9.4M   7% /dev
    tmpfs                1006M     0 1006M   0% /dev/shm
  2. Смотрим вывод df -i. Если видим что-то вроде такого
     df -i
    Filesystem            Inodes   IUsed   IFree IUse% Mounted on
    /dev/sda1            9609216 9609216       0  100% /
    tmpfs                 224212       4  224208    1% /lib/init/rw
    udev                  224212    1208  223004    1% /dev
    tmpfs                 224212       1  224211    1% /dev/shm

    значит не осталось свободных индексных дескрипторов — INODES. Вероятнее всего у вас скопилось большое количество маленьких файлов, например системных журналов или каких-либо логов.

  3. Ищем эти файлы. Спасибо Ивану Кузнецову за метод
    for i in /*; do echo $i; find $i |wc -l; done

    И удаляем их.

    rm -rf /var/www/squid-reports/many_little_logs

Копирование файлов с Windows на Linux

Копирование файлов с Windows на Linux.

#! /bin/bash
WAY=`date --date= +%F`
mkdir /mnt/backup/$WAY #создаем директорию с текущей датой
mount -t cifs ///path/to/folder /mnt/temp -o iocharset=utf8,username=Guest,passwd="guest",nounix #монтируем папку Windows директорию
cp -Rv /mnt/temp/* /mnt/backup/temp #копируем во временную папку
umount /mnt/temp
tar -cvzf /mnt/backup/$WAY/$WAY.tar.gz /mnt/backup/temp/* #архивируем
rm -rf /mnt/backup/temp/* #удаляем временные файлы
exit 0

Теперь можно добавить расписание cron

00 20   * * 1-5  backup-user   /usr/local/sbin/backup.sh > /var/log/backup.log

Это расписание будет работать ежесуточно в 20:00 с понедельника по пятницу. И записывать результат выполнения в файл backup.log