среда, 30 июля 2008 г.

Бедный relay...

Давненько я не писал...

Вобщем такая задача:
Есть почтовый релей на sendmail, на нем идет сканирование через spamassassint, clamav. Среднее количество писем в секунду - 7. Очередь писем очень большая, увеличиваеться на 10 писем в минуту. Эффективные при данной проблеме спамлисты делают reject еще и нужным пользователям.

Разобрки проблемы:
1) 98% писем идущих через релей - спам
2) 90% спама - сканирующий спам (случайная переборка пользователей с целью получить список рассылки)
3) очередь большая именно из-за попытки седмайла отправить нотайс на отсутсвующего пользователя (серверов или нет, или там нет пользователя)

Решение проблемы:
1) настройка smf-spf на релее. Описание настройки - смотри /usr/share/doc
2) создание базы данных зарегестрированных пользователей на релее.
Этого можно достичь за счет включения недокументированной функции:
FEATURE(`access_db', `',`relaytofulladdress')
define(`_RELAY_FULL_ADDR_',`1')
После этого собираете на сервере или серверах на которые релеиться почта список всех допустимых пользователей (не забудьте про алиасы). Далее 2 решения:
I) вносите адреса в access в формате:
To:user@domain RELAY
II) вносите адреса в mailertable в формате описанном выше, в конце пишете:
To:domain ERROR:5.1.1:550 Unknown user
Конечно вместо "550 Unknown user" можете вписать все что угодно. Собственно это единственное различие второго метода от первого - в первом reject в ошибкой "Relaying denied" и фиг что с этим сделаешь :)

Далее - вопрос Вам на смекалку - синхронизация пользователей на почтовых серверах и на релееях.

среда, 14 мая 2008 г.

Games! Games!! Games!!! Tux!!!!

В далеком 2003 году когда я по сути окончательно переполз на линукс я будучи подростком остро ощущал нехватку игрушек. Позднее я понял что игры под эту ось есть и я вам скажу очень даже неплохие. Если позволите, дамы и господа, я вам покажу часть современного мира игр по таксом :)
Я опишу часть игр в которые я играл, нативно запускающиеся в linux и которые я считаю хорошим времяпрепровождением :)
Писать много о каждой игрушке не буду , просто мои краткие знания и впечатления о них- это не lor, можно и по ссылке сходить если заинтересовались.

WarZone2100
Кто помнит игру "WarZone"? Если честно то почти никто. А жаль - игра была увлекательная. Благо я не один думаю так и поэтому существует ее бесплатная версия с исходным кодом - WarZone2100.
Концепция игры - вы сами собираете юнитов: вам даются детали из которых вы делаете своих воинов соблюдая баланс цена\качество. В игре жизненно необходимо исследовать новые технологии с целью получения новых деталей. В игру включены довольно неплохие миссии - от простого к сложному (иногда реально сложному).
Если честно то игра сложна когда играешь локально (режим Skimish) - очень тяжело под натиском противника добывать ресурсы, обороняться или атаковать и при этом не упустить первенство в исследованиях. Но она правда интересна и ни на что не похожа.

OpenTDD (ru)
Самой большой ошибкой моих друзей - принести ее на работу. Игра просто затягивает на часы. Хотели в детстве железную дорогу? Хотели аэропорт? Играли в машинки? Тут все! Сразу и под GPL да еще столько что вы этим просто захлебнетесь :)
В игре вы строите свою транспортную империю, есть сетевой режим (да еще и какой!) который позволяет играть нескольким игрокам под одной фирмой. Графика из старой доброй TDD (и требует файлы от ее dos или win версии) не чуть не портит процесс игры - она просто отлично смориться не мешая наслаждаться возведением новой ж.д. ветки. Советую ее если вы любите не спешные расслабляющие игрушки, но только если будете в нее играть перед запуском от рута сделайте "sleep 2h && shutdown -h now" ,а то рискуете на долго в ней пропасть

S.C.O.U.R.G.E.
Игра явно незаконно-рождена от союза NetHack и Baldurs Gates. В ней есть все черты обоих. Тоже брождение про пещерам из первой и таже группа людей и возможность паузы из второй. Очень похоже на Newerwinter Nights. Но не думайте что пещерами едиными сыт игрок в нее - в последних версиях сделали открытые пространства что сильно радует. Часто играюсь в нее с одним из своих бывших сослуживцев... Эхх :) Игра для скучающих по AD&D.

Enemy Territory: Quake Wars
Единственная игра которая платная. Но она стоит своих денег если у вас много друзей. Вот как звали расу против которой вы играете в 1,2,4 квейке? Ответ - Строги. Игра повествует о вторжении строгов на землю и войне с местными аборигенами.
Карт всего 12(по 4 миссии), но они правда ОГРОМНЫЕ (я не преувеличиваю, они действительно такие). Игра сильно похожа на BT2400 (название уже плохо помню, скорее всего ошибся в цифрах). Играть с ботам интересно, но скучно. Самое страшное - когда 8 на8 живых игроков. Тогда тактика - ваше страшное оружие, перед ним не устоит даже артиллерия противника.
К слову - в игре до недавней версии фиговый баланс - в угоду истории строги сильнее.
P.S. Strogs, strogs, strogs!!! (хотя я играю за людей из принципа :) )



Warsow
Игра... Ну как вам объяснить? Представьте очень быстрый квейк с акробатикой. Это и будет варсоу. В игре скорость решает все. Вы медленны? Тогда вы мертвы.
Игру отличает грамотная физика, система движений помогающая быстрее преодолевать быстрее препятствия, довольно приятная графика.
На последок - кто в нее играет тот знает что рокетджамп не самый быстрый способ...



Tremulous
Игра из серии тактического командного шутера. Я не загнул с тем как ее назвал - так и есть. Все просто - стоишь базу, атакуешь противника или обороняешься. Противники - люди и пришельцы. Каждые могут совершенствоваться. Есть 3 глобальных обновления амуниции и построек которые даются каждой команде за фраги. Каждый игрок может обновить свою амуницию за очки которые он получает за фраги или за то что он просто оставался долго живым. Игру в деталях описывать долго так что я вам скажу просто - смотри на потолок - там тоже может быть пришелец и не забывай что твоя смерть - что нож в спину для товарища.
P.S. при хороших игроках на сервере начинается правда неплохая игра способная утянуть в среднем на 40 минут (длина одного раунда). И за это я ее люблю :)

Nexuiz
Игра сделана игроками для игроков. Это классический FPS вобравший лучшее от Quake и UT. Базируется на сильно измененном движке Quake I. Об этой игре нельзя сказать ничего плохого - хорошо сбалансированное оружие, хорошая поддержка сообщества, большое количество серверов в интернете. Всем старым квакерам понравиться.



Vegastrike
Вы не поверите - современное поколение не помнит Elite!!! Во что превращаются люди... Слава богу что есть VegaStrike! Это игра по классическим традициям Elite, она даже иногда до жути на нее похожа. Игра не имеет сюжета, но имеет множество рандомных миссий. Вселенные и галактики в VS просто огромны! Играть в нее можно бесконечно... Вобщем сказать можно только одно - играли в Elite? Значит эта игра вам приодеться по душе! Если не играли то выберете - пират, спаситель, торговец, контрабандист и играйте. Приятной новостью для тех кто в нее уже играл||играет будет то что в нее уже постепенно приходит мультиплеер.

понедельник, 12 мая 2008 г.

Зачем нужен ActiveDirectory когда есть Samba & OpenLDAP?

Задача - сетевое хранилище корпоративных данных и управление доступом.
Пока линукс на все машины ставить ставить не позволили, стоит WinXP.

Решение - Samba в режиме контроллера домена, OpenLDAP для управления пользователями.

Решение в деталях:
1) ставим систему (я работал с Gentoo отличия в других дистрибутивах только в путях и установке пакетов), лишние пользователи не нужны, есть только root

2) ставил следующие пакеты (гентушники: USE="ldap acl ldapsam pam gdbm samba ssl tcpd winbind"):
samba openldap acl nss_ldap pam_ldap smbldap-tools

3) придумываем имя домена, в моем случае это "taxi.local". Придумываем системный пароль домена

4) редактируем
/etc/openldap/slapd.conf (а тут приколы: в части дистрибутивов папка /etc/openldap на самом деле /etc/ldap, это важно для настроек. Второй прикол в том что надо соблюдать в параметрах "acces to" разделители, это похоже на форматирование в питоне. Они просто не показывались в тексте но перед каждым by в начале строки стоит пробел или табуляция):
include /etc/openldap/schema/core.schema
include /etc/openldap/schema/cosine.schema
include /etc/openldap/schema/nis.schema
include /etc/openldap/schema/inetorgperson.schema
include /etc/openldap/schema/samba.schema
pidfile /var/run/openldap/slapd.pid
argsfile /var/run/openldap/slapd.args
database ldbm
suffix "dc=taxi,dc=local"
rootdn "cn=Manager,dc=taxi,dc=local"
rootpw <а здесь вводиться системный пароль домена>
directory /var/lib/openldap-data
lastmod on
access to attrs=userPassword,sambaLMPassword,sambaNTPassword,sambaPwdLastSet,sambaPwdMustChange
by dn="cn=Manager,dc=taxi,dc=local" write
by self write
by anonymous auth
by * none
access to attrs=objectClass,entry,homeDirectory,uid,uidNumber,gidNumber,memberUid
by dn="cn=Manager,dc=taxi,dc=local" write
by * read
access to attrs=description,telephoneNumber,roomNumber,homePhone,loginShell,gecos,cn,sn,givenname
by dn="cn=Manager,dc=taxi,dc=local" write
by self write
by * read
access to attrs=cn,sambaLMPassword,sambaNTPassword,sambaPwdLastSet,sambaLogonTime,sambaLogoffTime,sambaKickoffTime,sambaPwdCanChange,sambaPwdMustChange,sambaAcctFlags,displayName,sambaHomePath,sambaHomeDrive,sambaLogonScript,sambaProfilePath,description,sambaUserWorkstations,sambaPrimaryGroupSID,sambaDomainName,sambaMungedDial,sambaBadPasswordCount,sambaBadPasswordTime,sambaPasswordHistory,sambaLogonHours,sambaSID,sambaSIDList,sambaTrustFlags,sambaGroupType,sambaNextRid,sambaNextGroupRid,sambaNextUserRid,sambaAlgorithmicRidBase,sambaShareName,sambaOptionName,sambaBoolOption,sambaIntegerOption,sambaStringOption,sambaStringListoption
by dn="cn=Manager,dc=taxi,dc=local" write
by self read
by * none
access to dn.base="dc=taxi,dc=local"
by dn="cn=Manager,dc=taxi,dc=local" write
by * none
access to dn="ou=Users,dc=taxi,dc=local"
by dn="cn=Manager,dc=taxi,dc=local" write
by * none
access to dn="ou=Groups,dc=taxi,dc=local"
by dn="cn=Manager,dc=taxi,dc=local" write
by * none
access to dn="ou=Computers,dc=taxi,dc=local"
by dn="cn=Manager,dc=taxi,dc=local" write
by * none
access to *
by self read
by * none
access to *
by dn="ou=Domain Admins,dc=taxi,dc=local" write
by * read

5) редактируем
/etc/openldap/ldap.conf:
HOST 127.0.0.1
BASE dc=taxi,dc=local

6) Проверяем права доступа:
storage home # ls -lda /var/lib/openldap-*
drwx------ 2 ldap ldap 4096 Apr 27 13:58 /var/lib/openldap-data
drwx------ 2 ldap ldap 4096 Apr 17 19:48 /var/lib/openldap-ldbm
drwx------ 2 ldap ldap 4096 Apr 17 19:48 /var/lib/openldap-slurp

7) проверяем настройки OpenLdap:
storage home # slaptest

8) настраиваем сервер OpenLdap, в Gentoo это файл
/etc/conf.d/slapd:
OPTS="-h 'ldap://127.0.0.1'"

9) запускаем OpenLdap:
storage home # /etc/init.d/slapd start

10) настраиваем Samba (/etc/samba/smb.conf) (примечание - конфиг "живой" так что его придеться править под свои нужды):
[global]
workgroup = taxi
netbios name = domain
realm = taxi.local
nt acl support = yes
acl compatibility = win2k
map acl inherit = yes
server string = Samba Server %v
interfaces = eth0
bind interfaces only = yes
hosts allow = 192.168.0. 127.
log file = /var/log/samba/log.%m
debug level = 9
max log size = 500
socket options = TCP_NODELAY SO_SNDBUF=8192 SO_RCVBUF=8192
security = user
os level = 250
passdb backend = ldapsam:"ldap://127.0.0.1/"
enable privileges = yes
passwd program = /usr/sbin/smbldap-passwd "%u"
passwd chat = *new*password* %n\n *new*password* %n\n *successfully*
passdb expand explicit = no
unix password sync = no
ldap passwd sync = no
ldap suffix = dc=taxi,dc=local
ldap admin dn = cn=Manager,dc=taxi,dc=local
ldap user suffix = ou=Users
ldap group suffix = ou=Groups
ldap machine suffix = ou=Users
ldap idmap suffix = ou=Idmap
idmap backend = ldapsam:ldap://127.0.0.1/
idmap uid = 10000-20000
idmap gid = 10000-20000
ldap delete dn = Yes
ldap ssl = no
add user script = /usr/sbin/smbldap-useradd -n -a "%u"
delete user script = /usr/sbin/smbldap-userdel "%u"
add group script = /usr/sbin/smbldap-groupadd -p "%g"
delete group script = /usr/sbin/smbldap-userdel "%g"
add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g"
delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g"
set primary group script = /usr/sbin/smbldap-usermod -g "%g" "%u"
add machine script = /usr/sbin/smbldap-useradd -i -w "%u"
domain master = yes
preferred master = yes
domain logons = Yes
logon script = logon.bat
logon path = \%L\%U\.profile
logon drive = U:
logon home = \\%L\%U
restrict anonymous = 1

[netlogon]
comment = Network Logon Service
path = /home/netlogon
browseable = yes
guest ok = yes
writable = no
share modes = no

[homes]
comment = Home Directories
browseable = no
read only = no

[public]
path = /home/global
guest ok = yes
read only = no

[users]
path = /home/users
writable = yes
printable = no

11) даем системный пароль домена самбе:
storage ~ # smbpasswd -w <системный пароль домена>

12) создаем все небходимае папки и файлы описанные в smb.conf, папке netlogon и public полные права на всех, создаем автоотключение темы в винде и монтирование сетевыйх папок, для новых пользователей создаем хранилище профайла:
storage ~ # echo -e "net use w: \\domain\public /yes\nnet stop themes" > /home/netlogon/logon.bat
storage ~ # chmod 777 /home/global /home/netlogon
storage ~ # rm -rfv
/etc/skel/*
storage ~ # mkdir /etc/skel/.profile

13) настраиваем систему на работу в домене (надо для прав на папки и входа в систему), редактируем
/etc/ldap.conf
host 127.0.0.1
base dc=taxi,dc=local
rootbinddn cn=Manager,dc=taxi,dc=local
scope sub
nss_base_passwd ou=Users,dc=taxi,dc=local?one
nss_base_passwd ou=Computers,dc=taxi,dc=local?one
nss_base_group ou=Groups,dc=taxi,dc=local?one
ssl no
pam_password MD5
bind_timelimit 10
bind_policy soft

14) говорим системный пароль домена
storage ~ # echo <системный пароль домена> >
/etc/ldap.secret

15) Установим права на критические файлы для системы:
storage ~ # chmod 600 /etc/ldap.secret
storage ~ # chown root:wheel /etc/ldap.secret

16) Настроим pam, редактируем /etc/pam.d/system-auth:
auth required pam_env.so
auth sufficient pam_unix.so likeauth nullok
auth sufficient pam_ldap.so use_first_pass
auth required pam_deny.so
account sufficient pam_ldap.so
account required pam_unix.so
password required pam_cracklib.so difok=2 minlen=8 dcredit=2 ocredit=2 retry=3
password sufficient pam_unix.so nullok md5 shadow use_authtok
password sufficient pam_ldap.so use_authtok
password required pam_deny.so
session required pam_limits.so
session required pam_unix.so
session required pam_mkhomedir.so skel=/etc/skel/ umask=077
session optional pam_ldap.so

17) теперь редактируем /etc/nsswitch.conf:
passwd: files ldap
shadow: files ldap
group: files ldap
hosts: files dns
networks: files dns
services: db files
protocols: db files
rpc: ldap [NOTFOUND=return] db files
ethers: ldap [NOTFOUND=return] db files
netmasks: files
netgroup: ldap [NOTFOUND=return] files
bootparams: files
automount: files
aliases: files

19) запускаем самбу:
storage ~ # /etc/init.d/samba start

19) пришла очередь забить структуру домена, сначала заполним данные для работы с openldap (/etc/smbldap-tools/smbldap.conf, SID получить командой net getlocalsid)
SID="S-1-5-21-677320241-3780724581-4281765528"
sambaDomain="DOMAIN"
slaveLDAP="127.0.0.1"
slavePort="389"
masterLDAP="127.0.0.1"
masterPort="389"
ldapTLS="1"
verify="require"
cafile="/etc/smbldap-tools/ca.pem"
clientcert="/etc/smbldap-tools/smbldap-tools.pem"
clientkey="/etc/smbldap-tools/smbldap-tools.key"
suffix="dc=taxi,dc=local"
usersdn="ou=Users,${suffix}"
computersdn="ou=Computers,${suffix}"
groupsdn="ou=Groups,${suffix}"
idmapdn="ou=Idmap,${suffix}"
sambaUnixIdPooldn="sambaDomainName=DOMAIN,${suffix}"
scope="sub"
hash_encrypt="MD5"
crypt_salt_format="%s"
userLoginShell="/bin/bash"
userHome="/home/%U"
userHomeDirectoryMode="700"
userGecos="System User"
defaultUserGid="513"
defaultComputerGid="515"
skeletonDir="/etc/skel"
defaultMaxPasswordAge="45"
userSmbHome="\\DOMAIN\%U"
userProfile="\\DOMAIN\%U\.profile"
userHomeDrive="Z:"
userScript="logon.bat"
mailDomain="taxi.local"
with_smbpasswd="0"
smbpasswd="/usr/bin/smbpasswd"
with_slappasswd="0"
slappasswd="/usr/sbin/slappasswd"

20) редактируем /etc/smbldap-tools/smbldap_bind.conf:
slaveDN="cn=Manager,dc=taxi,dc=local"
slavePw="<системный пароль домена>"
masterDN="cn=Manager,dc=taxi,dc=local"
masterPw="<
системный пароль домена>"

21) записываем структуру домена
storage ~ # smbldap-populate

22) собственно все, работу с входом в систему делайте через smbldap-*, добавление машины в домен по логину рута, профайл лежит в домешней папке, если при входе нет домешней папки она создаеться. Еще есть замечательный пакет phpldapadmin :)

P.S. писалось все в не самом лучшем настроении от проблем в личной жизни - многое упустил и не описывал. Надеюсь что Вы сами не поленитесь почитать документацию. Также не могу вспомнить решение проблемы с отказом запуска самбы (не видит пользователя nobody или nologin) до заполнения базовой структуры домена (надо для SID), возможное решение - прописывание отсутсвия проверки на наличие пользователей и последующие ее включение. Так что гугл вам в помощь.
Источники: гугл, мэн, руководство из gentoo-wiki, документация от Айзятуллен Рамиля, неизвестное найденое гуглом (за нее отдельное человеческое спасибо)

Выбор - то что дано нам разнообразием

Недавно был на собрании (поинте) любителей posix и там прозвучала интересная и очень старая тема. Нет, смысл жизни не обсуждался (мало горячительного было). Был поднят другой но не менее философский вопрос - какая система хороша. Мой личный ответ - никакая. Каждая система posix делалась под свои нужды и свою философию. Я не буду касаться систем BSD семейства т.к. с ними знаком не очень хорошо и имею весьма поверхностные знания о них.
Я не буду писать историю дистрибутивов полностью, всегда есть викпедия.


Debian - основа большинства дистрибутивов linux. Имеет самый большой репозиторий пакетов, отличается хорошей продуманностью и стабильностью. Родился в августе 1993 года руками Яна Мердека. Этот дистрибутив для тех кто ценить надежность и готов жертвовать новизной (имеется ввиду stable ветка, а не экспериментальная)



Ubuntu (Kubuntu, Kubuntu) - первый релиз 20 октября 2004 года, основан на Debian. Имеет очень четкий план релизов - каждые полгода. Система позиционируется как UserFrenly. Ее задумка - линукс не должен быть сложен, он должен быть для пользователя. Система хорошо спонсируется и достаточно популярна. Ее ниша - новички в linux, десктопы. Хотя сервера на ней тоже неплохо живут... :)


Red_Hat - одноименная компания, производитель дистрибутива, начала своб работу в 1993 году. Сказать что RedHat сделала мало для linux сообщества - ни сказать ничего. Эта компания доказала что свободные продукты могут кормить своих разработчиков за счет поддержки и что свободен не значит не прибылен. Ее ниша - серверы. В основном это обусловлено наличием корпоративной поддержки и высокой стабильности.


Slackware - как и большинство дистрибутивов - рожден в 1993 году. Его смысл - простота и надежность. Как говориться - усложнение всегда приводит к увеличению количества поломок. Собственно именно с этим дистрибутивом я не работал но по отзывам ничего плохого о нем просто невозможно сказать. Он хорошо себя рекомендует в любой роли.




SuSe (openSuSe) - ранее разрабатывался в германии но сейчас его владелец Novell. Основан на SLS, первый CD релиз был в 1994 году. В 2003 году дистрибутив был куплен Новеллом и это дало ему толчек - основные компоненты вышли под GPL, появилась коммерческая поддержка. Дистрибутив по сути универсален - работает хорошо как и на десктопе так и на серверах (но там его популярность гораздо меньше)

Fedora - основан на RedHat, имеет с ним прямую связь. Имеет все преимужества RedHat в плне стабильности, но и все новшества новых программ. Его ниша десктопы. Частично существованием этого дистрибутива обьясняеться то что RedHat не покушается вне ниши серверов.




Gentoo - воистину мета дистрибутив - способен на многое. Вышел из Debian, вобрал многое от freeBSD. Первоначальное название Enoch, первый релиз в 2002 году. Его "изюминка" - компилирование пакетов под конкретную системы с целью выжать все что только можно. Его основной минус - долгая инсталляция пакетов, сложность для новичка, частые танцы с бубном. Честно - дистрибутив самый спорный из всех. Его ставят часто на десктопы как хобби (так сказать софт оверлокинг) и на серверы с нестандартной начинкой (прирост скорости gentoo на via c7 очень высок по сравнению с остальными дистрибутивами). Очень боиться рук из тазобедренного сустава :)

Итог (мое личное мнение):
-делаете сервер надежным - RedHat, Debian
-делаете рабочую машину - Ubuntu, Fedora
-делать нечего или надо выжать все - Gentoo

P.S. Тем что я написал не навязываю свое мнение - выбор дистрибутива это решение каждого - сколько людей - столько мнений. И сила linux в свободе выбора, в том что каждый решает что именно Его. Этой статьей я просто описал что я лично вижу в каждом дистрибутиве, а что выбирать - решаете вы.

В статье использовалась графика с викпедии, официального сайта ubuntu, официального сайта gentoo, а также данные с русской версии викпедии (ссылка выше).