Exim, spam trap, RBL швидкого реагування

Якщо хост надіслав лист на ханіпот – додати до локального RBL, після того, як він з’явився у публічному DNSBL – видалити з локальної бази нафіг.

# Шлях до БД локального RBL
RBL_DB = /var/db/exim/spam-source.db

# Список публічних поштових сервісів
hostlist public_services = net-iplsearch;/etc/exim/public-services
# Список негідників, які не дотримуються основних положень RFC5321
hostlist rfc_ignorants = net-iplsearch;/etc/exim/rfc-ignorants
# Список спамерів
hostlist spam_source = net-iplsearch;/etc/exim/spam-source : \
                       ${lookup sqlite{RBL_DB \
                           SELECT ip_address \
                               FROM banned_hosts \
                               WHERE ip_address='$sender_host_address';}}
<...>
warn
    set acl_m_dnsbl    = 0
    set acl_m_localrbl = 0
 
 
# Перевіряємо нявність хосту у публічних DNSBL-ах
warn dnslists    = dnsbl.foobar.net : \
                   dul.foobar.net
    !hosts       = +relay_from_hosts : \
                   +public_services
    !recipients  = : soft_recipients
    set acl_m_dnsbl       = 1
 
 
# Перевіряємо нявність хосту у локальному RBL
warn hosts       =  +spam_source
    !hosts       =  +relay_from_hosts : \
                    +public_services
    !recipients  = : soft_recipients
     set acl_m_localrbl = 1
 
 
# Видаляємо з локального RBL, якщо хост знайдено у публічних DNSBL
warn log_message     = "IP address found in public DNSBL: $dnslist_domain. Removing from local RBL."
       condition     = ${if and { \
                                    {eq {$acl_m_dnsbl}{1}} \
                                    {eq {$acl_m_localrbl}{1}} \
                                } {yes}{no}}
       set acl_m_junk = ${lookup sqlite{RBL_DB \
                                    DELETE FROM banned_hosts \
                                    WHERE ip_address='$sender_host_address';}{$value}}
       set acl_m_localrbl = 0
 
 
# Деферимо, якщо "пасажир" у публічному DNSBL
defer message    = "Your IP address is listed in the DNSBL $dnslist_domain: dnslist_text ($dnslist_value)."
 log_message     = DEFERRED: Listed in $dnslist_domain.
 condition       = ${if eq{$acl_m_dnsbl}{1} {yes}{no}}
 delay           = 30s
 
 
# Локальний RBL
defer message    = "Your IP address is listed in the local RBL as the spam source."
 log_message     = DEFERRED: Listed in local RBL
 condition       = ${if eq{$acl_m_localrbl}{1} {yes}{no}}
 set acl_m_junk  = ${lookup sqlite{RBL_DB \
                                    UPDATE banned_hosts SET hit_count=hit_count+1, \
                                                            last_hit=datetime('now','localtime') \
                                                      WHERE ip_address='$sender_host_address';}{$value}}
 delay           = 30s
 
 
# Додаємо до локального RBL
 warn log_message = "Gotcha! Spam trap: $local_part@$domain."
      domains    = myspamtrap.com : \
                   myspamtrap.net : \
                   myspamtrap.org
      !hosts     = +relay_from_hosts : +public_services
      set acl_m_junk = ${lookup sqlite{RBL_DB \
                                       INSERT INTO banned_hosts(ip_address, ptr, added) \
                                           VALUES ('$sender_host_address', '$sender_host_name', datetime('now','localtime'));}{$value}}
<...>

База даних:

CREATE TABLE banned_hosts(
      ip_address varchar(64),
      ptr varchar(64),
      added datetime,
      last_hit datetime,
      hit_count int default 0
);

The file /boot/grub/stage1 not read correctly.

root@pxe:~# chroot /mnt /bin/bash
root@pxe:~# grub-install --no-floppy --recheck /dev/sda
Probing devices to guess BIOS drives. This may take a long time.
The file /boot/grub/stage1 not read correctly.

 
Окей, хуй з тобою. Спробуємо через консоль GRUB-у:

root@pxe:~# grub
Probing devices to guess BIOS drives. This may take a long time.


    GNU GRUB  version 0.97  (640K lower / 3072K upper memory)

 [ Minimal BASH-like line editing is supported.  For the first word, TAB
   lists possible command completions.  Anywhere else TAB lists the possible
   completions of a device/filename.]
grub> root (hd0,0)
root (hd0,0)
 Filesystem type is ext2fs, partition type 0xfd
grub> setup (hd0)
setup (hd0)
 Checking if "/boot/grub/stage1" exists... no
 Checking if "/grub/stage1" exists... no

Error 2: Bad file or directory type
grub>

»Читати усьо

SlackwareARM, Raspberry Pi та підводне каміння

Те, на що я нарвався після встановлення SlackwareARM на Raspberry Pi. Встановлював згідно HOWTO.
 
Довелося трохи обробити tag-файли напилком та додати втрачені залежності. Власне, tag-файли лежать тут. Після встановлення система займає ~460МБ.

root@slackberry:~# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/mmcblk0p3  7.0G  459M  6.2G   7% /
/dev/mmcblk0p1   48M   44M  4.0M  92% /boot
tmpfs           110M     0  110M   0% /dev/shm

»Читати усьо

Запуск HiB7: The Binding of Isaac

Для запуску знадобиться 2 пакети з Mulitilb від AlienBob, а саме:
1. l-compat32/seamonkey-solibs-compat32;
2. ap-compat32/sqlite-compat32.

Після встановлення виконтаи наступне:

for L in 'libssl3.so'     \
         'libsmime3.so'   \
         'libnss3.so'     \
         'libnssutil3.so' \
         'libplds4.so'    \
         'libplc4.so'     \
         'libnspr4.so';   \
do \
    ln -sf /usr/lib/seamonkey-2.13.2/${L} /usr/lib/${L}; \
done

Увага! Шлях /usr/lib/seamonkey-2.13.2 дійсний для Slackware(64)-14.0, тому замініть його на відповідний для вашої версії дистрибутиву Slackware GNU/Linux.

KDE 4.8.5, Device notifier

Невтримався та оновив SalixOS на ноуті до 14.0. Але, оскільки, ще немає навіть бети 14.0 з KDE, то вилізло декілька дрібних глюків пов’язаних з втраченими залежностями. Самий неоднозначний – пов’язаний зі сповіщеннями про змінні носії. Виявилося, що просто не запускався udisks.

udisks --monitor
udisks: error while loading shared libraries: libatasmart.so.4: cannot open shared object file: No such file or directory

 
Власне, вирішення проблеми:

slapt-get -i libatasmart

Малиновий Пиріг

Rasberry Pi logoВчорашній ранок почався з прекрасної новини – моя Paspberry Pi нарешті добралася до України і її доставлять мені о першій половині дня. Тепер буду гратися з GPIO. :) Залишилося придбати для неї алюмінієвий корпус, який буде слугувати ще й хітсинком, тому що гріється як скажена. Хоча, оригінальний пластиковий теж нічого, але у ньому немає отвору для шлейфу (ribbon cable) GPIO та тих самих тепловідводів. На цю честь ставлю на синк дзеркало ArmedSlack (Slackware ARM).

X509_check_private_key:key values mismatch

Клієнт надіслав ключі та сертифікати для огранізації HTTP+SSL (HTTPS), але Apache відмовлявся в запускатися та матюкався до errorlog-у:

[Tue Dec 11 03:23:33 2012] [error] SSL Library Error: 185073780 error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch

Це означає, що пубічна та приватна частини не збігаются.

Перевіряємо (стисло):

openssl rsa -noout -modulus -in private.key | md5sum
948906118274715c7fcf9cea54d4975e
openssl x509 -noout -modulus -in certificate.crt | md5sum
f9a7c4719cc419b82ad7962eb3227c95

md5sum у прикладі використовується для: по-перше, сек’юрності (не світити ж у Інтернеті частинами сертифікатів :D); по-дргуе, для читабельності. Тому що md5-дайджест, ІМХО, читабельніший ніж “портянка” секції Modulus.

Перевіряємо (розгорнуто):

openssl rsa -noout -in private.key
openssl x509 -noout -in certificate.crt

Розгонутий варіант виплюне нам багато літер, але нас цікавлять лише частини “modulus” та “publicExponent” у ключах. Вони обов’язково повинні бути ідентичними у private.key та certificate.crt.

Debian Squeeze та PHP 5.2

Під’єднуємо репозиторій OldStable (Lenny):

echo 'deb http://archive.debian.org/debian/ lenny main contrib non-free' >> /etc/apt/sources.list

Виставляємо приорітети для пакетів:

cat >> /etc/apt/preferences << EOF
Package: php5*
Pin: release a=oldstable
Pin-Priority: 700

Package: *
Pin: release a=stable
Pin-Priority: 600
EOF

Робимо перелік встановлених пакетів php* на всяк випадок:

dpkg -l | grep php | awk '{print $2}' | tr "\n" " " > ~/php5_pkgs.list

Видаляємо php 5.3 якщо встановлено:

aptitude remove `cat ~/php5_pkgs.list`

Встановлюємо php 5.2:

apt-get -t oldstable install `cat ~/php5_pkgs.list`

Чи руцями вказуємо потрібні пакети. :)

Дзеркало Slackware 14.0

Скільки часу чекав і все одно проґавив. Відпустка, блін. :)
Засинкалися дзеркала нового стабільного релізу слаки разом з iso-шками.

x86_32:
http://mirrors.nix.org.ua/linux/slackware/slackware-14.0
ftp://mirrors.nix.org.ua/linux/slackware/slackware-14.0
rsync://mirrors.nix.org.ua/slackware/slackware-14.0

x86_64:
http://mirrors.nix.org.ua/linux/slackware/slackware64-14.0
ftp://mirrors.nix.org.ua/linux/slackware/slackware64-14.0
rsync://mirrors.nix.org.ua/slackware/slackware64-14.0

UPD 09.10.2012:
mirrors.nix.org.ua (mirrors.mithril.org.ua) додано до списку офіційних:
http://mirrors.slackware.com/mirrorlist/

CentOS 6, PHP 5.4, PostgreSQL 9.1, MariaDB 5.5

PHP

Підключаємо репозиторій webtatic:

rpm -Uvh http://repo.webtatic.com/yum/el6/latest.rpm

Встановлюємо PHP:

yum install php54w-pdo php54w-cli php54w-xml \
            php54w-mbstring php54w-dba php54w-common \
            php54w-pgsql php54w-mysql php54w-pear \
            php54w-gd php54w php54w-embedded php54w-bcmath \
            php54w-pecl-memcached php54w-pecl-memcache

»Читати усьо