Skip to content

By Тодор in Linux

Много е удобно да се ползват виртуални потребители за пощенски сървър, а е и много по-сигурно.
В тази конфигурация ще ползвам операционна система CentOS 5.5 и демоните dovecot, postfix, postgresql. Косвено участва и Apache, като уеб сървър за уеб интерфейса postfixadmin.

1. Инсталиране на postgresql server:
#yum -y install postgresql-server

След стартиране на postgresql – продължаваме.
Създаване на потребител и база за postfix:

#su postgres
$psql
postgres=# create user postfix with password 'password';
postgres=# create database postfix owner postfix;
postgres=# \q
$exit

2. Инсталиране на Postfix с поддръжка на база данни.
Ако до сега сте имали инсталиран Postfix, той трябва да бъде деинсталиран:
#yum erase postfix

Редактира се /etc/yum.repos.d/CentOS-Base.repo:
В раздел [base] и [updates] се добавя реда:
exclude=postfix
В раздел [centosplus]:
enabled=1

Проверка дали пакета на Postfix с поддръжката на бази данни се „вижда“:

#yum list postfix
...
...
postfix.x86_64  2:2.3.3-2.1.centos.mysql_pgsql

Това, което ни трябва се вижда на края – „…mysql_pgsql“.
Инсталираме:
#yum -y install postfix

Това, което ни трбява в /etc/postfix/main.cf:

myhostname = mail.mydomain.tld
inet_interfaces = all
transport_maps = pgsql:/etc/postfix/transport.cf
virtual_alias_maps = pgsql:/etc/postfix/virtual.cf
virtual_uid_maps = static:5000
virtual_gid_maps = static:5000
virtual_minimum_uid = 5000
virtual_minimum_gid = 5000
virtual_mailbox_domains = pgsql:/etc/postfix/transport.cf
virtual_mailbox_base = /home/mail
virtual_mailbox_maps = pgsql:/etc/postfix/mailboxes.cf
virtual_mailbox_limit = 1073741824

Последния ред означава, че имаме лимит от 1GB на пощенска кутия.

/etc/postfix/transport.cf:

hosts = localhost
user = postfix
password = password
dbname = postfix
table = domain
select_field = transport
where_field = domain

/etc/postfix/virtual.cf

hosts = localhost
user = postfix
password = password
dbname = postfix
table = alias
select_field = goto
where_field = address

/etc/postfix/mailboxes.cf

hosts = localhost
user = postfix
password = password
dbname = postfix
table = mailbox
select_field = maildir
where_field = username

След като всички конфигурационни файлове са готови, стартираме демона:
#/etc/init.d/postfix start

3. Инсталиране на dovecot:
#yum -y install dovecot

В /etc/dovecot.conf:

auth default {
    mechanisms = plain
    passdb sql {
        args = /etc/dovecot-pgsql.conf
    }
    userdb sql {
        args = /etc/dovecot-pgsql.conf
    }
    socket listen {
        client {
            path = /var/run/dovecot/auth-client
            mode = 0660
            user = postfix
            group = postfix
        }
    }
}
first_valid_uid = 5000
first_valid_gid = 5000

/etc/dovecot-pgsql.conf:

driver = pgsql
connect = host=localhost dbname=postfix user=postfix password=password
default_pass_scheme = crypt
password_query = SELECT password FROM mailbox WHERE username='%u' AND active='1'
user_query = SELECT '/home/mail/'||maildir AS home, '/home/mail/'||maildir AS mail, 5000 as uid, 5000 as gid FROM mailbox WHERE username='%u' AND active='1'

Стартиране на dovecot:
#/etc/init.d/dovecot start

Поглеждаме в /var/log/maillog за евентуални грешки. Ако всичко е наред може би дори ще се вижда и поток от спам към несъществуващи пощенски кутии.

4. Postfixadmin
Инсталацията му се свежда до разархивирането на архива в папка достъпна през уеб и редакцията на config.inc.php, като в него единствено трябва да са попълни конфигурацията за достъп до базата данни.

След като създадем потребители чрез postfixadmin, те вече ще могат да получават поща, както и ще имат достъп до пощенските си кутии чрез IMAP/POP3.

5. Изпращане на електронна поща – SMTP
Елементарен начин това да стане е като се опишат мрежите, които е разрешено да релейват през този пощенски сървър в /etc/postfix/main.cf:
mynetworks = 127.0.0.0/8 192.168.0.0/24

Това не е най-сигурният метод, понеже не използва никаква идентификация на ниво потребител.
По-добрият вариант е потребителят да трябва да се идентифицира, за да изпрати успешно писмо.
Добавяме в /etc/postfix/main.cf следните няколко реда:

smtpd_sasl_type = dovecot
smtpd_sasl_path = /var/run/dovecot/auth-client
smtpd_sasl_auth_enable = yes
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination

Вече можете и да изпращате през този сървър 😉

Добре ще е да сложим и елементарна спам-защита. Необхоримо е да преработим smtpd_recipient_restrictions записа в main.cf, така, че да се получи следното:

smtpd_recipient_restrictions =
    reject_non_fqdn_sender,
    reject_non_fqdn_recipient,
    permit_mynetworks,
    permit_sasl_authenticated,
    check_client_access hash:/etc/postfix/whitelist,
    reject_rbl_client zen.spamhaus.org,
    reject_rbl_client bl.spamcop.net,
    reject_rbl_client 0spam.fusionzero.com,
    reject_rbl_client bl.spamcannibal.org,
    reject_rbl_client blackholes.five-ten-sg.com,
    reject_rbl_client blackholes.intersil.net,
    reject_rbl_client dnsbl.sorbs.net,
    reject_rbl_client dnsbl-0.uceprotect.net,
    reject_rbl_client dnsbl-1.uceprotect.net,
    reject_unauth_destination

Като файлът /etc/postfix/whitelist съдържа хостове изпращащи поща, които не желаете да преминат през спам-филтрите. Обикновено това са пощенски сървъри на мързеливи администратори, които не отговарят на някое или всички изисквания за легитимно изпращане на поща. Ето примерно съдържание на файла:

212.39.90.88  OK
mbox.contact.bg  OK
sts-tech.com  OK
87.121.24.7  OK

Това е всичко необходимо за напълно работещ сървър с виртуални потребители. За въпроси – ползвайте коментарите. Скоро ще пусна статия как да подсигурим същият този сървър с помощта на SSL.

Tags: , , , , , ,

By Тодор in Linux

Digital Living Network Alliance – Нещо модерно и удобно, което набира популярност с доста голяма скорост 😉
Телевизорът ни има DLNA клиент, та трябваше да му спретна и съответен сървър от където да идва и видеото.
Операционна система CentOS 5.5 32bit.
Задължително е да сте добавили rpmforge хранилищата за yum!

# yum -y install ushare

Следва бърза редакция на /etc/ushare.conf:

USHARE_NAME=My_Server
USHARE_IFACE=
USHARE_PORT=
USHARE_TELNET_PORT=
USHARE_DIR=/mnt/md1/files/Movies
USHARE_OVERRIDE_ICONV_ERR=
ENABLE_WEB=
ENABLE_TELNET=
ENABLE_XBOX=
ENABLE_DLNA=yes

И стартиране на услугата:
# /etc/init.d/ushare start

Tags: , , , ,

By Тодор in Linux

Ето как можете да приложите chmod само върху директориите:
find . -type d -exec chmod 755 {} \;

А ето така върху файловете:
find . -type f -exec chmod 644 {} \;

Tags: , , , , ,

By Тодор in FreeBSD, Linux, Solaris, Windows

Налагало ли ви се е да достъпите адрес, който не е достъпен от мрежата в която се намирате, но да е напълно достъпен от друга мрежа (в която имате разположен Apache сървър)?
Ето как:

ProxyRequests Off
ProxyPass / http://foo.example.com/
ProxyPassReverse / http://foo.example.com/

или

ProxyRequests Off
ProxyPass / http://100.110.120.130/
ProxyPassReverse / http://100.110.120.130/

или

ProxyRequests Off
ProxyPass /foo http://foo.example.com/bar
ProxyPassReverse /foo http://foo.example.com/bar

Така, когато се обърнете към http://IP-адреса-на-Apache-сървъра/, той ще препрати заявката ви към крайната точка. По желание може да се ползва запис в HOSTS файла на локалния компютър, за да не се обръщате към Apache сървъра с IP адрес, а с името на недостъпния сайт.

Tags: , , , , ,

By Тодор in Windows

За въведем настройки за прокси на всички потребители в Windows XP/2003/3008/7 е необходимо следното:

Start > Run > gpedit.msc

Като се отвори, в него избираме:

User Configuration > Windows Settings > Internet Explorer Maintenance > Connection

И от дясната страна грейва опцийката Proxy Settings.

Tags: , , ,

By Димо Димов in Windows
  1. Инсталираме Windows server 2008 R2 (виж ръководство за инсталация на Windows 2008 R2)
  2. От мениджмънта на сървъра избираме Add Roles –> Next –> Print and Documents Service

От опцията Add Roles Services можем да избираме какви функции ще изпълнява нашият сървър. В нашият случай ще инсталираме само Print Server  ролята.

  1. Вече имаме работещ сървър сега ще трябва да инсталираме принтери .

За всеки принтер ползваме два вида драйвери 32-битови и 64-битови, които обикновено идват в един пакет с универсални драйвери. Някой ще попита защо 64 и защо  32- битови , защото  R2 е 64-битова ОС а повечето ПК са 32-битови и ще ни трябват драйвери за тях.

Пример :

-Ще  инсталираме принтер HP LaserJet M1522n , който се намира на  IP адрес 192.168.2.8

а) стартираме Print Management от Start menu  на сървъра от появилият се прозорец избираме :

Print Servers –> Print Server (local) –>Printers

Десен бутон с мишката и се отваря меню от което избираме :

Add Printer…

б) Следваме следните стъпки :

Search the  network for printers

От изкочилото меню избираме принтера който желаем

Променяме името на принтера според нашите желания (HPLaserJet8)

В следващите два прозореца  избираме  Next  и след това  Finish

в) Сега трябва да се промрни  64-битовия драйвер от универсалният пакет,   който сме свалили предварително от страницата на НР .

Посочваме новият драйвер  като следваме  менюто (десен бутон в/у принтера –> свойства) НЕ го избираме от листа а избираме опцията Have Disk и избираме съответния драйвер  за 64 битова ОС

г) От менюто (десен бутон в/у принтера –> свойства) избираме плаващият бутон Sharing >  Additional Drivers  и избираме същият драйвер но за 32 битова ОС . Завършваме с инсталацията ОК.

2. Сега трябва да добавим принтера към предварително създадено правило .

а) създаване на правило

Group Policy Management –> Forest –> Domains –> Домейна.на.фирмата –> Droup Policy Objects десен бутон  NEW кръщаваме политиката  Printer Policy

–  след като сме я създали десен бутон и избираме Edit

– избираме Computer configuration –> Windows settings –> Scripts –> Startup

– от появилото се меню избираме Add и добавяме Pushprinterconnections.exe можете да го свалите от тук.

!!! Можем да го направим по същият начин и за User Configuration

б) добавяме  GPO Обекта към  компютъра , групата или към каквото решим.

Рестартираме ПК на , които очакваме да се добавят принтерите

Tags: , ,

By Тодор in Фун

Tags: , ,

By Тодор in Uncategorized, Windows, Мрън-мрън

Та освен, че са доста неудобни за работа с една ръка HTC телефоните с тъч скрийн (Windows mobile) имат и друг ОГРОМЕН пропуск – сортират телефонния указател по „Фамилия, Име“ – доста непрактично според мен.
Единият вариант е да се редактират всички контакти един по един, като за всеки се посочи в опцията „File as“ как желаем да го виждаме.
Имало и малко по-лесенв ариант как да „преобразим“ всички – Contact Changer.
Прикачам и копие на програмчето, за да пробвате.

Contact_changer_v1.3

(Конкретно се възмущавам от HTC Diamond)

Tags: , , , , ,

By Тодор in Linux

За линукс рутери е много добра идея да се следи състоянието на ip_conntrack_count таблциата. Препълни ли се – повече не се препращат заявки. А и чисто статистически е добре да имате идея колко се товари рутера.
Най удобния инструмент за отдалечен мониторинг е SNMP, да но ip_conntrack_count по подразбиране го няма там.
Ето как да си го направим:

Пишем едноредово скриптче, което ще проверява колко конекции са заети (ip_conntrack_count):

#!/bin/bash
cat /proc/sys/net/ipv4/netfilter/ip_conntrack_count

Записваме скрипта в /root/ctrack.sh
Правим го изпълним:
chmod +x /root/ctrack.sh

Някъде към края на snmpd.conf се добавя:
exec conntrac_count /root/ctrack.sh

Правим проверка:

# snmpwalk -v2c -c public localhost .1.3.6.1.4.1.2021.8
UCD-SNMP-MIB::extIndex.1 = INTEGER: 1
UCD-SNMP-MIB::extNames.1 = STRING: conntrac_count
UCD-SNMP-MIB::extCommand.1 = STRING: /root/ctrack.sh
UCD-SNMP-MIB::extResult.1 = INTEGER: 0
UCD-SNMP-MIB::extOutput.1 = STRING: 44234
UCD-SNMP-MIB::extErrFix.1 = INTEGER: 0
UCD-SNMP-MIB::extErrFixCmd.1 = STRING:

Изхода от скриптчето вече се вижда в UCD-SNMP-MIB::extOutput.1.

Сигурно стопляте колко мощен е този инструмент. Може да се добави и роботче за проверка на температурата на хард дисковете с нещо от сорта на:
/usr/sbin/smartctl -A /dev/hdа | grep -i temperaturе | awk '{print  $10}'

Въпрос на фантастика 😉
Честито на успелите!

Tags: , , , , ,

By Тодор in Мрън-мрън

Tags: ,

By Тодор in Linux

Това е елементарна защита на хост с отворен достъп по SSH. Налага се поради огромния брой сканиращи роботчета и злонамерени персонажи, които опитват да налучкат пароли за достъп.
Логиката на тази защита е – следи се лог файла /var/log/secure и при наличие на повече от 5 грешни опита за влизане през SSH блокира достъпа на IP адреса чрез iptables правило.

Изваждане на списъка с „провинилите“ се адреси:

# cat /var/log/secure | grep "]: Failed " | awk -F "from " '{print $2}' | awk '{print $1}' | sort | uniq -d -c | awk '{if ($1 > 5) print $2}' > /ssh-banned.txt
(всичко е на един ред)

Всички адреси, които са правили повече от 5 неуспешни опита да влязат през SSH ще се запишат в /ssh-banned.txt.

Следва да се блокира достъпа на тези адреси.
Добавя се това в началото на firewall скрипта, който ползвате:

#!/bin/bash
SSHBAN=/ssh-banned.txt
if [ -f $SSHBAN ]; then
    for BAN_IP in `cat $SSHBAN`
        do
            iptables -A INPUT -s $BAN_IP -j DROP
        done
fi

Скрипта парсва файла с адресите и добавя блокиращо iptables правило за всеки адрес от него.

За автоматизиране се добавя в cron:

*/10 * * * * cat /var/log/secure | grep "]: Failed " | awk -F "from " '{print $2}' | awk '{print $1}' | sort | uniq -d -c | awk '{if ($1 > 5) print $2}' > /ssh-banned.txt && /etc/rc.d/rc.fw

Приемам че firewall-ът е в /etc/rc.d/rc.fw, необходимо е дой да се стартира винаги след като списъка с баннатите адреси се опредни. Променете го с пътя до вашия.

(Примерът е за Red Hat базирани дистрибуции)

Tags: , , , , ,

By Тодор in FreeBSD, Linux, Solaris, Windows

Наистина могат да се намерят 49582638 причини да ползвате прокси – няма да изброявам нито една.
Бърз, лесен и най-вече сигурен начин е ползването на SSH прокси. Т.е. трафикът ви се прекарва през SSH тунел до „точката за достъп до Интернет“ (проксито).

Конфигурира се PuTTY да направи тунел до отстрешната страна:
PuTTY Tunnel setup

PuTTY Tunnel setup

По желание може да се ползва и компресиране на трафика:
PuTTY Tunnel setup - compression

Закачайки се за отсрещния хост с SSH вече имате изграден тунел през локален TCP порт 45678. Не е задължително да ползвате root за да се логнете, всъщност най-добре да е ограничен акаунт с лимитиран шел – вместо bash, променете го на lynx да кажем.

Конфигурация на браузъра да ползва тунела:
Firefox SOCKS using SSH tunnel

Почти всяко мрежово програмче включително skype може да ползва SOCKS проксиране – настройва се елементарно, както виждате 🙂

Можете да споделите въпросите си в коментарите.

Tags: , , , , ,

By Тодор in FreeBSD, Linux, Solaris, Windows

Налага се някои сайтове да са защитени с парола ползвайки basic механизъма на Apache или друг подобен. Сайтовете са защитени наистина… докато някой не открадне паролата, а това е лесно – много хора ползват елементарни пароли от сорта на „12345“, името си, фамилията, ЕГН, телефонен номер и т.н. Паролата може да бъде записана на листче, някой може да види какво натискате по клавиатурата и пак да бъде открадната.
Един по-добър метод е ползването на клиентски сертификати. В баузъра на клиента има инсталиран сертификат, който го идентифицира пред сървъра при опит за отваряне на защитен сайт. Сървърът предоставя достъп само на валидни за него сертификати.
Казах „по-добър метод“, което означава, че кражбата на сертификата е по-трудна от кражбата на парола. Значително по-трудна.

Създаваме СА (Certificate Authority):

<strong># openssl genrsa -aes256 -out ca.key 2048</strong>
Generating RSA private key, 2048 bit long modulus
..............+++
...................................................................+++
e is 65537 (0x10001)
Enter pass phrase for ca.key:
Verifying - Enter pass phrase for ca.key:

Добре е да сложим парола на личният ключ – ако някой го докопа ще може да си вади колкото си иска сертификати с него.

<strong># openssl req -new -x509 -days 3650 -key ca.key -out ca.crt</strong>
Enter pass phrase for ca.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) [GB]:BG
State or Province Name (full name) [Berkshire]:Plovdiv
Locality Name (eg, city) [Newbury]:Plovdiv
Organization Name (eg, company) [My Company Ltd]:Kamenitza.ORG
Organizational Unit Name (eg, section) []:IT
Common Name (eg, your name or your server's hostname) []:Kamenitza.ORG
Email Address []:

Common Name: – името на организацията, която ще притежава сертификата, не е нужно да е интернет адрес.

Следва да се създаде потебителският сертификат:

<strong># openssl genrsa -out ivan.key 2048</strong>
Generating RSA private key, 2048 bit long modulus
.....................+++
..................................................................................+++
e is 65537 (0x10001)
<strong># openssl req -new -key ivan.key -out ivan.csr</strong>
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) [GB]:BG
State or Province Name (full name) [Berkshire]:Plovdiv
Locality Name (eg, city) [Newbury]:Plovdiv
Organization Name (eg, company) [My Company Ltd]:Kamenitza.org
Organizational Unit Name (eg, section) []:KO
Common Name (eg, your name or your server's hostname) []:Ivan Ivanov
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
<strong># openssl x509 -req -in ivan.csr -out ivan.crt -sha1 -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650</strong>
Signature ok
subject=/C=BG/ST=Plovdiv/L=Plovdiv/O=Kamenitza.org/OU=KO/CN=Ivan Ivanov
Getting CA Private Key
Enter pass phrase for ca.key:
<strong># openssl pkcs12 -export -in ivan.crt -inkey ivan.key -name "Ivan Ivanov Cert" -out ivan.p12</strong>
Enter Export Password:
Verifying - Enter Export Password:

Паролата сложена тук се ползва при инсталацията на сертификата. Без нея не може да бъде импортнат в браузъра.

ivan.p12 – е потребителският сертификат, който трябва да се внесе в браузъра на клиента.

За да ограничим достъпа до дадена директория от сайт слагаме това в .htaccess файла:

SSLVerifyClient require
SSLVerifyDepth 1

Или в <directory> на конфигурационния файл на Apache.

Но най-важното е да кажем на Apache, кои са „доверените“ сертификати и как да ги познава. За това трябва да се постави този ред в конфигурационният файл на Apache:

SSLCACertificateFile /ssl/ca/ca.crt

(естествено заменете пътя с вашия)

След рестартиране на Апача всичко би трябвало да работи.

(В статията приемам, че сайтът е вече конфигуриран успешно да работи с SSL сертификат през HTTPS)

Tags: , , , , , ,

By Тодор in FreeBSD, Linux, Solaris, Windows

IIS а и много други програми ползват сертификати в pkcs12 формат (и публичният и частният ключ се съхраняват в един файл – PFX).

openssl pkcs12 -export -in my.crt -inkey my.key -certfile my.bundle -out my.pfx

Tags: , , , , , , , ,