The Abusive Hosts Blocking List
![]()
The AHBL is a database of hosts that have been known to cause various forms of abuse on the Internet which includes UCE/UBE/spam, Denial Of Service attacks, cracking attempts, and much more.
The AHBL is built from various sources of data, which includes other spam fighting services that we work with, as well as our own custom and exclusive data sources to create a powerful and effective combination of abuse fighting tools.
Website: www.ahbl.org
Lookup: dnsbl.ahbl.org
We are unable to remove you from any blacklist. You need to visit the blacklist directly for removal.
If any information concerning this DNSBL is incorrect, missing, or out of date, please contact us.
© 2002-2023 CGP Holdings, Inc. All rights reserved.
Мониторинг IP в блэклистах с помощью Zabbix
dnsbl.ahbl.org, tor.ahbl.org
вот эти два думаю можно убрать из списка спам листов т.к на любой ip они возвращают результат.
This comment wasn’t rated yet 0
Reply Add to bookmarks More
Show previous comment
Спасибо, исправил.
This comment wasn’t rated yet 0
Reply Add to bookmarks More
Почти тоже самое, но на bash
#!/usr/bin/env bash if [ -z $1 ]; then echo -e "IP is unset\nrun \"$0 ip\""; exit 1 ; fi IFS='.' read -ra ADDR "; do echo $.$.$.$.$i ; done | xargs -L1 -P$ host -W5 | grep -v 'not found\|connection timed out' | wc -l
- В исходном скрипте упоминается blacklist.csv, но не раскрыто его содержимое, я так понимаю там находиться список ip-адресов. То есть что бы добавить новый ip нужно занести его в blacklist.csv, и создать айтем+триггер в заббиксе. По моему это не очень удобно.
- Zabbix-server доступен только под UNIX, не понимаю зачем часть его «функционала» уносить на windows-платформу превращаю задачу «Администрирование мониторинга» в «Следить за 2мя машинами с принципиально разными ОС»
- На вход первым аргументом принимает ip-адрес, то есть вам не нужно больше держать cvs
- Все запросы выполняются параллельно. Время работы скрипта зависит от времени ответа самого медленного из серверов, и не сильно превышает 5 секунд (параметр -W у host, последняя строка).
- Windows не нужен, все работает прям на машине с zabbix-server.
- Учтено замечаниеToxoT’а
- Кладем скрипт в директорию, указанную в конфиге zabbix-server в параметре ExternalScripts, например в «/usr/lib/zabbix/externalscripts/ip_blacklist»
- Даем права на запуск, например «chmod +x /usr/lib/zabbix/externalscripts/ip_blacklist»
- Проверяем что на сервере установлены все используемые утилиты (xargs, host, grep, wc), например запустив ручками «/usr/lib/zabbix/externalscripts/ip_blacklist 127.0.0.1»
- Создаем нужные айтемы, например «ip_blacklist[192.168.0.1]», тип «Внешняя проверка», и триггер на «.last > 0»
- При необходимости, айтемы с триггером кладем в шаблон и привязываем его к хостам.
- Подробней тут: www.zabbix.com/documentation/2.2/manual/config/items/itemtypes/external
Total votes 3: ↑3 and ↓0 +3
Reply Add to bookmarks More
Show previous comment
Я вспомнил за что я не люблю баш, и почему я обычно не пишу на нем больше 5 строк. Вариант выше я тестировал на убунте, а zabbix-server у меня на centos6, и там все сломалось в районе 3тей строки кода.
Исправленный вариант, проверенный на Centos6(bash 4.1.2) и mint17.1(bash 4.3.11)
#!/usr/bin/env bash if [ -z $1 ]; then echo -e "IP is unset\nrun \"$0 ip\""; exit 1 ; fi IFS='.' ADDR=($1) IFS=' ' Blacklist=("b.barracudacentral.org" \ "bl.deadbeef.com" \ "bl.emailbasura.org" \ "bl.spamcannibal.org" \ "bl.spamcop.net" \ "blackholes.five-ten-sg.com" \ "blacklist.woody.ch" \ "bogons.cymru.com" \ "cbl.abuseat.org" \ "cdl.anti-spam.org.cn" \ "combined.abuse.ch" \ "combined.rbl.msrbl.net" \ "db.wpbl.info" \ "dnsbl-1.uceprotect.net" \ "dnsbl-2.uceprotect.net" \ "dnsbl-3.uceprotect.net" \ "dnsbl.cyberlogic.net" \ "dnsbl.inps.de" \ "dnsbl.njabl.org" \ "dnsbl.sorbs.net" \ "drone.abuse.ch" \ "drone.abuse.ch" \ "duinv.aupads.org" \ "dul.dnsbl.sorbs.net" \ "dul.ru" \ "dyna.spamrats.com" \ "dynip.rothen.com" \ "http.dnsbl.sorbs.net" \ "images.rbl.msrbl.net" \ "ips.backscatterer.org" \ "ix.dnsbl.manitu.net" \ "korea.services.net" \ "misc.dnsbl.sorbs.net" \ "noptr.spamrats.com" \ "ohps.dnsbl.net.au" \ "omrs.dnsbl.net.au" \ "orvedb.aupads.org" \ "osps.dnsbl.net.au" \ "osrs.dnsbl.net.au" \ "owfs.dnsbl.net.au" \ "owps.dnsbl.net.au" \ "pbl.spamhaus.org" \ "phishing.rbl.msrbl.net" \ "probes.dnsbl.net.au" \ "proxy.bl.gweep.ca" \ "proxy.block.transip.nl" \ "psbl.surriel.com" \ "rbl.interserver.net" \ "rdts.dnsbl.net.au" \ "relays.bl.gweep.ca" \ "relays.bl.kundenserver.de" \ "relays.nether.net" \ "residential.block.transip.nl" \ "ricn.dnsbl.net.au" \ "rmst.dnsbl.net.au" \ "sbl.spamhaus.org" \ "short.rbl.jp" \ "smtp.dnsbl.sorbs.net" \ "socks.dnsbl.sorbs.net" \ "spam.abuse.ch" \ "spam.dnsbl.sorbs.net" \ "spam.rbl.msrbl.net" \ "spam.spamrats.com" \ "spamlist.or.kr" \ "spamrbl.imp.ch" \ "t3direct.dnsbl.net.au" \ "tor.dnsbl.sectoor.de" \ "torserver.tor.dnsbl.sectoor.de" \ "ubl.lashback.com" \ "ubl.unsubscore.com" \ "virbl.bit.nl" \ "virus.rbl.jp" \ "virus.rbl.msrbl.net" \ "web.dnsbl.sorbs.net" \ "wormrbl.imp.ch" \ "xbl.spamhaus.org" \ "zen.spamhaus.org" \ "zombie.dnsbl.sorbs.net") for i in "$"; do echo $.$.$.$.$i ; done | xargs -L1 -P$ host -W5 | grep -v 'not found\|connection timed out' | wc -l
Total votes 1: ↑1 and ↓0 +1
Reply Add to bookmarks More
Show previous comment
Не забывайте менять Timeout для Внешних проверок, по умолчанию 3 секунды.
Total votes 2: ↑2 and ↓0 +2
Reply Add to bookmarks More
Show previous comment
Вариант написанный на bash так же есть, ваш метод немного элегантней. Почему оставили у себя на powershell есть несколько причин:
1. Огромное количество ресурсов которые мониторятся в zabbix, дополнительной нагрузки решили по возможности избегать
2. Есть пара компьютеров которые выполняют систематические работы и находятся под наблюдением, выполняют данный скрипт и отправляют данные в zabbix
3. Банальная любовь к powershell.
Так же опубликовали метод с PS для простого и понятного принципа работы трапера.
This comment wasn’t rated yet 0
Reply Add to bookmarks More
Show previous comment
- Там 80 dns-запросов на 1 проверяемый ip. Допустим у нас стоит проверка каждого ip раз в час, а адресов у нас всего 1000, тогда это вызовет дополнительно ~22 dns-запроса в секунду, причем не рекурсивых, а к локальному резолверу. Если это создаст заметную нагрузку на zabbix-server, то где то раньше что то пошло не так и оптимизировать нужно «там», а не «тут»
- К сожалению не у всех владельцев zabbix’а есть дополнительный windows сервере, на который можно было бы повесить эту проверку.
This comment wasn’t rated yet 0
Reply Add to bookmarks More
Полноценный скрипт, с автодискавери и прочими плюшками, должно работать на всём где есть bash
Опрашивает 100500 хостов, можно руками указывать у какого DNS спрашивать, встроенный balance RR по DNS серверам и т.п.
Шаблон в заббиксе придумать можно самому
Заголовок спойлера
blacklist_servers_fast=(
zen.spamhaus.org dnsbl-0.uceprotect.net
dnsbl-1.uceprotect.net dnsbl-2.uceprotect.net
dnsbl-3.uceprotect.net bl.blocklist.de
)
blacklist_servers_full=(
$
0spam.fusionzero.com 0spam-killlist.fusionzero.com
0spamtrust.fusionzero.com 0spamurl.fusionzero.com
abuse.rfc-clueless.org access.redhawk.org
accredit.habeas.com all.dnsbl.bit.nl
all.rbl.jp all.s5h.net
all.spamrats.com aspews.ext.sorbs.net
backscatter.spameatingmonkey.net badconf.rhsbl.sorbs.net
badhost.stopspam.org badnets.spameatingmonkey.net
bad.psky.me b.barracudacentral.org bb.barracudacentral.org
bitonly.dnsbl.bit.nl blacklist.sci.kun.nl
bl.drmx.org bl.emailbasura.org
bl.konstant.no bl.mailspike.net
bl.mav.com.br bl.nszones.com
block.dnsbl.sorbs.net block.stopspam.org
bl.scientificspam.net bl.score.senderscore.com
bl.spamcannibal.org bl.spamcop.net
bl.spameatingmonkey.net bl.spamstinks.com
bl.suomispam.net bogons.cymru.com
bogusmx.rfc-clueless.org bsb.empty.us
bsb.spamlookup.net cbl.abuseat.org
cbl.anti-spam.org.cn cblless.anti-spam.org.cn
cblplus.anti-spam.org.cn cdl.anti-spam.org.cn
cidr.bl.mcafee.com cml.anti-spam.org.cn
combined.rbl.msrbl.net contacts.abuse.net
dnsbl.anticaptcha.net dnsbl.aspnet.hu
dnsblchile.org dnsbl.cobion.com
dnsbl.dronebl.org dnsbl.inps.de
dnsbl.justspam.org dnsbl.kempt.net
dnsbl.madavi.de dnsbl.net.ua
dnsbl.openresolvers.org dnsbl.othello.ch
dnsbl.proxybl.org dnsbl.rizon.net
dnsbl.rv-soft.info dnsbl.rymsho.ru
dnsbl.sorbs.net dnsbl.spam-champuru.livedoor.com
dnsbl.stopspam.org dnsbl.tornevall.org
dnsbl.webequipped.com dnsbl.zapbl.net
dnsrbl.org dnsrbl.swinog.ch
dnswl.inps.de dob.sibl.support-intelligence.net
dsn.rfc-clueless.org dul.dnsbl.sorbs.net
dul.pacifier.net dyna.spamrats.com
dyndns.rbl.jp dynip.rothen.com
dyn.nszones.com elitist.rfc-clueless.org
escalations.dnsbl.sorbs.net eswlrev.dnsbl.rediris.es
ex.dnsbl.org exitnodes.tor.dnsbl.sectoor.de
feb.spamlab.com fnrbl.fast.net forbidden.icm.edu.pl
free.v4bl.org fresh10.spameatingmonkey.net
fresh15.spameatingmonkey.net fresh.spameatingmonkey.net
fulldom.rfc-clueless.org gl.suomispam.net
hil.habeas.com blacklist.woody.ch
http.dnsbl.sorbs.net hul.habeas.com
iadb2.isipp.com iadb.isipp.com
iddb.isipp.com images.rbl.msrbl.net
in.dnsbl.org ipbl.zeustracker.abuse.ch
ips.backscatterer.org ips.whitelisted.org
ip.v4bl.org ispmx.pofon.foobar.hu
ix.dnsbl.manitu.net korea.services.net
l1.apews.org l1.bbfh.ext.sorbs.net
l2.bbfh.ext.sorbs.net l3.bbfh.ext.sorbs.net
l4.bbfh.ext.sorbs.net list.anonwhois.net list.bbfh.org
list.blogspambl.com list.dnswl.org list.quorum.to
lookup.dnsbl.iip.lu mail-abuse.blacklist.jippg.org
misc.dnsbl.sorbs.net mtawlrev.dnsbl.rediris.es
netblockbl.spamgrouper.to netbl.spameatingmonkey.net
netscan.rbl.blockedservers.com new.spam.dnsbl.sorbs.net
nobl.junkemailfilter.com nomail.rhsbl.sorbs.net
no-more-funn.moensted.dk noptr.spamrats.com
old.spam.dnsbl.sorbs.net orvedb.aupads.org
phishing.rbl.msrbl.net db.wpbl.info
plus.bondedsender.org pofon.foobar.hu
postmaster.rfc-clueless.org problems.dnsbl.sorbs.net
proxies.dnsbl.sorbs.net psbl.surriel.com
public.sarbl.org query.bondedsender.org
rbl2.triumf.ca rbl.abuse.ro rbl.blockedservers.com
rbl.dns-servicios.com rbl.efnet.org rbl.efnetrbl.org
rbl.fasthosts.co.uk rbl.interserver.net
rbl.iprange.net rbl.lugh.ch
rbl.megarbl.net rbl.rbldns.ru
rbl.schulte.org rbl.spamlab.com
rbl.talkactive.net recent.spam.dnsbl.sorbs.net
relays.bl.kundenserver.de multi.surbl.org
relays.dnsbl.sorbs.net relays.nether.net
rep.mailspike.net reputation-domain.rbl.scrolloutf1.com
reputation-ip.rbl.scrolloutf1.com reputation-ns.rbl.scrolloutf1.com
rhsbl.rymsho.ru rhsbl.scientificspam.net
rhsbl.sorbs.net rhsbl.zapbl.net
rsbl.aupads.org sa-accredit.habeas.com
safe.dnsbl.sorbs.net sbl.nszones.com
service.mailblacklist.com whitelist.surriel.com
service.mailwhitelist.com short.rbl.jp singlebl.spamgrouper.com
singular.ttk.pte.hu smtp.dnsbl.sorbs.net
socks.dnsbl.sorbs.net sohul.habeas.com
spam.dnsbl.anonmails.de spam.dnsbl.sorbs.net
spamguard.leadmon.net spamlist.or.kr
spam.pedantic.org spam.rbl.blockedservers.com
spamrbl.imp.ch spam.rbl.msrbl.net
spamsources.fabel.dk spam.spamrats.com
srn.surgate.net st.technovision.dk
tor.dan.me.uk tor.dnsbl.sectoor.de
tor.efnet.org torexit.dan.me.uk
truncate.gbudb.net trusted.nether.net
ubl.nszones.com ubl.unsubscore.com
unsure.nether.net uribl.abuse.ro
uri.blacklist.woody.ch uribl.pofon.foobar.hu
uribl.spameatingmonkey.net uribl.swinog.ch
uribl.zeustracker.abuse.ch urired.spameatingmonkey.net
url.rbl.jp v4.fullbogons.cymru.com
virbl.dnsbl.bit.nl virus.rbl.jp
virus.rbl.msrbl.net vote.drbl.caravan.ru
vote.drbldf.dsbl.ru vote.drbl.gremlin.ru
wadb.isipp.com wbl.triumf.ca
web.dnsbl.sorbs.net zombie.dnsbl.sorbs.net
web.rbl.msrbl.net whitelist.sci.kun.nl
whois.rfc-clueless.org wl.mailspike.net
wl.nszones.com work.drbl.caravan.ru
work.drbldf.dsbl.ru work.drbl.gremlin.ru
wormrbl.imp.ch z.mailspike.net
)
# Initialization
export action=$1
export ip=$2
# Use random DNS server, or use 4th arg as dns
DNS=(8.8.8.8 8.8.4.4)
num=$[$RANDOM%$]
export DNS=$>
a=$(echo $ip | cut -d’.’ -f4) b=$(echo $ip | cut -d’.’ -f3)
c=$(echo $ip | cut -d’.’ -f2) d=$(echo $ip | cut -d’.’ -f1)
export rev_ip=»$a.$b.$c.$d»
mkdir -p $WORK_DIR
# 0 — server not in blacklist, 1 — if listened
in_blacklist() rev_ip=$1
blacklist_server=$2
ns_answer=$WORK_DIR/$rev_ip.$blacklist_server
host -W1 $rev_ip.$blacklist_server $DNS &> $ns_answer
echo $blacklist_server 0 > $ns_answer.status
grep 127.0.0.0 $ns_answer > /dev/null && return
grep 127. $ns_answer > /dev/null &&
echo $blacklist_server 1 > $ns_answer.status
>
get_alerted_blacklist_servers() for i in $; do
grep ‘ 1′ $WORK_DIR/$rev_ip.$i.status | cut -d’ ‘ -f1
done
>
if [ $action == «discovery» ]; then
mode=$
blacklist_servers=($(foreach $ | sort -u))
cleanup_workdir
for blacklist_server in $; do
in_blacklist $rev_ip $blacklist_server &
done
wait
echo < \«data\»:[
for i in $(get_alerted_blacklist_servers); do
echo echo \»\»:\»$i\»
echo -n >,
done
echo ]>
> | sed ‘s\>,]\>]\g’
touch $DISCOVERY_STATUS
fi
if [ $action == «check» ]; then
blacklist_server=$3
in_blacklist $rev_ip $blacklist_server
cut -d’ ‘ -f2 $WORK_DIR/$rev_ip.$blacklist_server.status
fi
if [ $action == «stats» ]; then
if [ -f $DISCOVERY_STATUS ]; then
SUM=0
for i in $/$*.status; do
[ -f «$i» ] && SUM=$[$SUM+$(grep -c ‘ 1’ $i)]
done
echo $SUM
fi
fi
# Score/Carma statuses
score_servers=(score.senderscore.com)
in_scoreserver() rev_ip=$1
score_server=$2
ns_answer=$WORK_DIR/$rev_ip.$score_server
host -W1 $1.$2 $DNS > $ns_answer
grep ‘address 127’ $ns_answer > $ns_answer.score &&
echo $score_server
>
get_answered_scoreservers() for i in $; do
score_server=$i
in_scoreserver $rev_ip $score_server
done
>
if [ $action == «discovery_scores» ]; then
echo < \«data\»:[
for i in $(get_answered_scoreservers); do
echo echo \»\»:\»$i\»
echo -n >,
done
echo ]>
> | sed ‘s\>,]\>]\g’
fi
if [ $action == «check_score» ]; then
score_server=$3
ns_answer=$WORK_DIR/$1.$score_server
in_scoreserver $rev_ip $score_server > /dev/null
cut -d’.’ -f4 $ns_answer.score
fi
Must remove dnsbl.ahbl.org from external spamlist
If anyone has this entry at EDIT#41 AND EDIT#42 please note that you need to delete or comment the dnsbl.ahbl.org AND rhsbl.ahbl.org.
Info on their website:
As promised, on Jan 1st, 2015, i’ll be wildcarding all zones no longer in operation — this includes rhsbl.ahbl.org, dnsbl.ahbl.org, and ircbl.ahbl.org. This means that these services will return positive responses for any queries.
The query load is still high enough that I can not justify allocating the resources necessary to support queries from people who refuse to properly maintain their mail servers.
If you are still using these services, this may cause you to incorrectly tag e-mail as spam, or create other unintended consequences. Fix and maintain your servers, now.
Last edited: Jan 7, 2015
northtones
Verified User
Joined May 2, 2013 Messages 25
Found out the hard way on this one. Pretty ugly as it was blocking almost everything. Little panic fun this morning.
Dennis
Verified User
Joined Nov 13, 2004 Messages 135 Location The Netherlands
Yep, same here. Do not forget to comment EDIT#42 too (rhsbl.ahbl.org). It is the same server.
zEitEr
Super Moderator
Joined Apr 11, 2005 Messages 15,084 Location GMT +7.00
It’s also reported here http://forum.directadmin.com/showthread.php?t=48774
If you have exim.conf 4.x from Custombuild 2.x there is nothing to worry about, as it is already removed:
# New version 4.2.1 removes obsolete dnsbl.njabl.org blocklist
# and two ahbl blocklists; see: # http://forum.directadmin.com/showthread.php?t=48774
# Edit#42 : entire section now commented out as there is no other
Dennis
Verified User
Joined Nov 13, 2004 Messages 135 Location The Netherlands
Sorry, did not see that thread, I searched the forum on «ahbl» but it did not show in the results.
Thanks for pointing to it.
northtones
Verified User
Joined May 2, 2013 Messages 25
I am still having things from dnsbl.ahbl.org flagged in a lot of messages. I plan on upgrading all our servers, but we are talking about 30+ of them. For the time being is there a way to shut score for «* 2.4 DNS_FROM_AHBL_RHSBL RBL: Envelope sender listed in dnsbl.ahbl.org» off? Or am I just missing something?
X-Spam-Report:
* 2.4 DNS_FROM_AHBL_RHSBL RBL: Envelope sender listed in dnsbl.ahbl.org
* -0.0 SPF_PASS SPF: sender matches SPF record
* 0.0 HTML_IMAGE_ONLY_32 BODY: HTML: images with 2800-3200 bytes of words
* 0.0 HTML_MESSAGE BODY: HTML included in message
* 1.1 MIME_HTML_ONLY BODY: Message only has text/html MIME parts
* 0.6 HTML_MIME_NO_HTML_TAG HTML-only message, but there is no HTML tag
* 2.0 MIME_HEADER_CTYPE_ONLY ‘Content-Type’ found without required MIME
* headers
Here is what I have in my exim.conf
#EDIT#41:
deny message = Email blocked by $dnslist_domain
hosts = !+relay_hosts
domains = +use_rbl_domains
domains = !+skip_rbl_domains
!authenticated = *
dnslists = \
cbl.abuseat.org : \
bl.spamcop.net : \
# combined.rbl.msrbl.net : \
b.barracudacentral.org : \
zen.spamhaus.org
# hostkarma.junkemailfilter.com=127.0.0.2
#EDIT#42:
#deny message = Email blocked by $dnslist_domain
# hosts = !+relay_hosts
# domains = +use_rbl_domains
# domains = !+skip_rbl_domains
# !authenticated = *
# dnslists = \
# rhsbl.ahbl.org/$sender_address_domain
Как мы поднимали сервер или создание веб-сервера для большой нагрузки (осторожно, с юмором)
Начну немного с истории… Предлогом для написания этой статьи послужили две вещи. Во-первых, умеренная DDoS атака на gibs0n.name/, из-за которой сервер был недоступен аж несколько дней, а одна из попыток побороть атаку завершилась нашей ошибкой – был заблокирован доступ к серверу со всех адресов. Пришлось ехать в датацентр и разбираться с этой адской машиной под названием сервер… Во-вторых, недавний сбой по питанию в датацентре, после которого мы однозначно решили: будем менять железо. С этого всё и началось… На этом этапе, хочется сказать огромное спасибо моему лучшему другу – gibson’у за предоставленное железо для сервера. Среди этого железа – материнская плата MSI P965 Neo. Было решено установить процессор Intel Core2Duo и 8ГБ памяти DDRII-800. Как потом оказалось, на этой материнке жутко нестандартные контроллеры дисков. Обнаружилось это, когда я подключил к ней 2 винчестера, чтобы перенести полностью настроенную и готовую к работе ОС с испытательного винчестера на действующий… Тут-то и начались танцы с бубном. Master-винчестер, подключенный к единственному IDE каналу, оказался /dev/ad6, вместо ожидаемого /dev/ad0, а Slave-винчестер — /dev/ad7. Находящийся рядом с ним «отделённый» SATA порт оказался /dev/ad4 (как, в общем, первый SATA порт практически на любых материнках). А сгруппированные сбоку 4 SATA порта имели названия /dev/ad8, /dev/ad10, /dev/ad12, /dev/ad14 и были расположены «змейкой».
Все винчестеры, порты на материнке и шлейфы, а так же, слоты на материнке и сетевые карты (их у меня две) были помечены наклейками.
Вот так выглядит сервер изнутри:

А так – снаружи:

А теперь – в датацентре:

(по понятным причинам, телефон, написанный на верхнем сервере, стёрт)
Наша широкая душа занимает аж три юнита в стойке… 🙂
Ну а теперь – хватит. Насмотрелись мы уже подобных картин:

Будем поднимать сервер самостоятельно и экономить на тушОнке 🙂
В качестве ОС была выбрана FreeBSD 6.4 amd64. Такой выбор связан с тем, что, во-первых, я большой любитель FreeBSD, во-вторых, нужна 64-битная система для нормальной работы с 8ГБ памяти, ну а в-третьих, на момент всех моих действий, более новые версии системы имели известные уязвимости.
Итак, начнём с установки системы. Процесс установки хорошо описан в одной из моих предыдущих статей. Но на том, что там описано, мы не остановимся.
Устанавливаем систему, доходим до выбора компонентов (а конкретнее – src) и выбираем там все исходники, кроме games. Почему так – а потому, что мы будем перестраивать абсолютно всё, чтобы добиться максимальной производительности. После установки – обновляем порты и устанавливаем deco и le, это наши рабочие инструменты. mc пока можно не ставить (хотя, кому он удобнее, может и поставить).
С chflags прийдётся повременить, т.к. он нам будет мешать перестроить «мир». Точно так же и с удалением ненужных файлов и папок, потому как перестройка «мира» восстановит всю файловую структуру. Так же, не вижу особого смысла настраивать rc.conf на этом этапе.
Теперь у нас две задачи – сначала перестроить ядро системы, потом перестроить «мир». Начнём с конфигурации /etc/make.conf перед всем этим… Приводим вышеуказанный файл к такому виду:
CPUTYPE?=core2 NO_PROFILE=yes NO_GAMES=yes DOC_LANG=en_US.ISO8859-1 ru_RU.KOI8-R WITHOUT_X11=yes NO_X11=yes WITH_IDEA=yes MAKE_IDEA=yes WITHOUT_GAMES=yes WITHOUT_INET6=yes WITHOUT_INET6_SUPPORT=yes WITHOUT_PROFILE=yes WITHOUT_IPV6=yes NO_BLUETOOTH=yes NO_AUDIT=yes NO_USB=yes NO_NIS=yes SENDMAIL_CFLAGS=-I/usr/local/include/sasl -DSASL SENDMAIL_LDFLAGS=-L/usr/local/lib SENDMAIL_LDADD=-lsasl2 PORTSDIR?=/ports DEFAULT_MYSQL_VER=51 .if $ == $/databases/mysql$-client WITH_CHARSET=utf8 WITH_COLLATION=utf8_general_ci BUILD_OPTIMIZED=yes BUILD_STATIC=yes .endif .if $ == $/databases/mysql$-server WITH_CHARSET=utf8 WITH_XCHARSET=all WITH_COLLATION=utf8_general_ci WITHOUT_OPENSSL=yes WITHOUT_LINUXTHREADS=yes BUILD_STATIC=yes WITH_INNODB=yes WITHOUT_NDB=yes .endif
CPUTYPE – тип процессора. Указываем свой из:
AMD: opteron, athlon64, athlon-mp, athlon-xp, athlon-4, athlon-tbird, athlon, k8, k6-3, k6-2, k6, k5
Intel: nocona, pentium4[m], prescott, pentium3[m], pentium-m, pentium2, pentiumpro, pentium-mmx, pentium, i486, i386, core2
Via: c3, c3-2
Alpha/AXP: ev67, ev6, pca56, ev56, ev5, ev45, ev4
Intel ia64: itanium2, itanium
Заменяем 51 на свою версию MySQL (если она вообще будет на этом сервере). Если MySQL устанавливаться не будет – можно удалить эту строку и всё, что идёт после неё.
PORTSDIR – РЕАЛЬНЫЙ путь к папке с портами. Обычно /usr/ports, но у меня это /ports, а /usr/ports – символьная ссылка на /ports.
Опции для Sendmail – в данной конфигурации включают поддержку SASL (для SMTP авторизации на сервере). Если сервер не будет использоваться как SMTP сервер (или если не нужна авторизация) – эти строки следует убрать. Если же будет – тогда ещё и SASL поставить прийдётся. Как – расскажу чуть позже.
Ах, да… По поводу NO_USB погорячился. Если на сервере используются USB устройства, следует удалить эту строку 🙂 У меня USB устройств нет, поэтому usbd мне не нужен 🙂
Далее – приводим /etc/src.conf к такому виду:
WITHOUT_INET6=yes WITHOUT_INET6_SUPPORT=yes WITHOUT_PROFILE=yes
Тут, как мне кажется, всё должно быть понятно.
Далее – идём в /usr/src/sys/amd64/conf (у кого i386 – будут всего два отличия в конфигурации) и приводим файл нашего ядра к такому виду (не забываем про hints):
ident TEM # у кого i386 – пишем здесь i386 вместо amd64 machine amd64 # И тип процессора – соответственно I686_CPU cpu HAMMER maxusers 0 options SCHED_4BSD # Если у вас только одно ядро – SMP делать не нужно – убираем эту строку. options SMP options ADAPTIVE_GIANT options PREEMPTION options COMPAT_43 options COMPAT_FREEBSD4 options COMPAT_FREEBSD5 options SYSVSHM options SYSVSEM options DEVICE_POLLING options SYSVMSG options INET device acpi device ether device loop device bpf options IPFIREWALL options IPFIREWALL_VERBOSE options DUMMYNET options ZERO_COPY_SOCKETS options FFS options SOFTUPDATES options UFS_DIRHASH device random device mem options _KPOSIX_PRIORITY_SCHEDULING options HZ=5000 options PPS_SYNC device pty options LIBICONV device atkbdc device atkbd options ATKBD_DFLT_KEYMAP makeoptions ATKBD_DFLT_KEYMAP=ru.koi8-r options KBD_DISABLE_KEYMAP_LOAD options KBD_INSTALL_CDEV device vga device sc options MAXCONS=8 options SC_DFLT_FONT makeoptions SC_DFLT_FONT=cp866 options SC_DISABLE_KDBKEY options SC_DISABLE_REBOOT options SC_HISTORY_SIZE=100 options SC_MOUSE_CHAR=0x3 options SC_PIXEL_MODE options SC_NO_CUTPASTE options SC_NO_SYSMOUSE device ata device atadisk options ATA_STATIC_ID device miibus device pci device crypto device cryptodev options INIT_PATH=/sbin/init options PANIC_REBOOT_WAIT_TIME=10 options DIRECTIO device pf # У меня обе сетевые карты в сервере Intel PRO/100 # У кого другая карта – соответственно пишем здесь её название # Небольшой выигрыш в производительности можно получить, если вшить драйвер в ядро device fxp options ACCEPT_FILTER_HTTP options ACCEPT_FILTER_DATA options ALTQ options ALTQ_CBQ options ALTQ_RED options ALTQ_RIO options ALTQ_HFSC options ALTQ_CDNR options ALTQ_PRIQ options ALTQ_NOPCC options ALTQ_DEBUG device pflog device pfsync
Компилируем и устанавливаем ядро, как это было описано в моей предыдущей статье 🙂 Это моя рабочая конфигурация ядра.
Перезагружаем сервер. Если всё нормально загрузилось – папку /boot/kernel.old можно удалить (если вам старое ядро, конечно, не нужно сохранять на память).
Теперь будем пересобирать «мир». Для этого идём в /usr/src и делаем там make buildworld
Далее создаём файл, к примеру, /update.sh такого содержания:
#!/bin/sh fsck -p mount -u / mount -a cd /usr/src mergemaster -p make installworld && make delete-old && mergemaster -i
Выставляем файлу права 0755 и запускаем команду shutdown now, чтобы перейти в однопользовательский режим (подразумевается, что сервер находится перед вами, а не в километрах от вас и по SSH доступу). Соглашаемся с тем, что наш шелл будет /bin/sh, запускаем /update.sh и ждём. Ждать придется некоторое, весьма продолжительное время, которое зависит от вашего железа… После всех этих действий, перезагружаем сервер (нас reboot, а мы крепчаем. ) и радуемся, если всё получилось правильно. Не забываем удалить этот скрипт после перезагрузки 🙂
Дальше, пока не забыли, выполняем такую команду (только если наш сервер будет отдавать почту через POP3 протокол!):
chmod o-x /usr/bin/mail /usr/bin/Mail /usr/bin/mailx /usr/bin/biff
Это нужно, чтобы запретить пользователям пользоваться этими командами. В противном случае, использование этих команд вместе с POP3 сервером, в некоторых случаях, может привести к повреждению почтовых ящиков.
Теперь можно и продолжить с удалением ненужных папок, переносом папок на другие винчестеры и установкой schg флагов. Очень советую поставить schg ещё и на всё в папке /boot, кроме loader.conf
Сделать это можно, например, так (подразумевается, что loader.conf уже есть в папке /boot):
chflags -R schg *
chflags noschg loader.conf
cd /куда/нам/дальше/надо 🙂
Дальше создаём (или перезаписываем) файл /etc/sysctl.conf таким вот образом:
net.inet.tcp.blackhole=2 net.inet.udp.blackhole=1 net.inet.tcp.always_keepalive=0 net.inet.tcp.keepidle=60000 net.inet.tcp.recvspace=8192 net.inet.tcp.sendspace=16384 kern.ipc.nmbclusters=65536 kern.ipc.somaxconn=32768 kern.ipc.maxsockets=204800 kern.maxfiles=256000 kern.maxfilesperproc=230400 net.inet.ip.portrange.first=1024 net.inet.ip.portrange.last=65535 net.inet.ip.portrange.randomized=0 net.inet.tcp.maxtcptw=40960 net.inet.tcp.msl=15000 net.inet.tcp.syncookies=1 net.inet.tcp.sack.enable=1 net.inet.tcp.nolocaltimewait=1 net.inet.icmp.drop_redirect=1 net.inet.icmp.log_redirect=1 net.inet.ip.redirect=0 kern.polling.enable=1 kern.polling.burst_max=1000 kern.polling.each_burst=50 net.inet.icmp.icmplim=5000 security.bsd.see_other_gids=0 security.bsd.see_other_uids=0
Это увеличивает производительность всего, что работает с сетью, увеличивает максимальное количество одновременно открытых файлов и запрещает пользователям видеть чужие процессы. Зачем нужно последнее – расскажу позже (если конечно нужно).
Так же, в /boot/loader.conf можно добавить такие строки:
net.inet.tcp.syncache.hashsize=1024 net.inet.tcp.syncache.bucketlimit=100 net.inet.tcp.tcbhashsize=4096
Дальше можно настроить ttys и rc.conf 🙂 Не забываем включить ipfw и pf, они нам будут нужны. Для ftpd задаём единственный флаг – -R. Он нужен, чтобы разрешить режим fxp. А вот стандартный sshd не будем включать. Поставим альтернативный из портов.
Теперь расскажу про firewall’ы:
Файл /etc/pf.conf у меня выглядит таким образом:
ext_if="fxp0" tablepersist block in log quick from pass in on $ext_if proto tcp to $ext_if port www flags S/SA keep state ( max-src-conn-rate 100/10, overload flush)
Это простой Anti-DDoS, который блокирует адрес, если с него идут более 100 подключений на 80-й TCP порт за 10 секунд.
Теперь ipfw (в принципе, можно обойтись и без ipfw, просто, как по мне, он гораздо легче воспринимается). /etc/rc.firewall (у меня он выглядит так):
#!/bin/sh - # Some config. fwcmd="ipfw" # ipfw command ext_if="fxp0" # external interface int_if="fxp1" # internal interface my_net_ext="193.34.96.112/28" # my external network my_net_int="192.168.0.0/24" # my internal network # Delete all rules $ -f flush # Block all traffic while rules are loading $ add 00001 deny all from any to any # Allow all local connections $ add 00002 allow all from any to any via lo0 # Reset all IDENT connections to make SSH faster $ add 00003 reset tcp from any to any ident # Allow all from my (trusted) networks $ add 00004 allow all from $ to me # incoming, external $ add 00004 allow all from me to $ # outgoing, external $ add 00005 allow all from $ to me # incoming, internal $ add 00005 allow all from me to $ # outgoing, internal # Deny smartd and mbmon traffic from all except trusted networks described above $ add 00006 deny tcp from any to me smartd $ add 00007 deny tcp from any to me mbmon # Allow all other traffic $ add 65534 allow all from any to any # Delete the first all-blocking rule $ delete 00001
Теперь поехали разбираться… Есть два интерфейса, один внешний и один внутренний (аварийный). Первым делом, мы блокируем весь трафик, до тех пор, пока все правила не загрузятся. Далее, мы разрешаем весь локальный трафик. Потом сбрасываем IDENT соединения (чтобы ssh работал быстрее). Потом я разрешаю весь трафик из своих сетей. Дальше – запрещаю доступ к smartd (программа для контроля состояния винчестеров) и mbmon (мониторинг состояния материнки). Кстати, последняя с новой материнкой работать не захотела… Дальше – разрешаем всё, что не попало под другие правила. Так же, если 6 и 7 правила вам нужны (и на сервере таки будут эти программы), то в файл /etc/services нужно добавить mbmon и smartd. Для mbmon – стандартный порт 12999. Для smartd я сделал порт 13000. Обе программы будут запускаться через inetd.
Теперь несколько слов про /etc/crontab и /etc/newsyslog.conf
Кронтаб у меня выглядит таким образом:
SHELL=/bin/sh PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin HOME=/var/log #minute hour mday month wday who command #*/5 * * * * root /usr/libexec/atrun */11 * * * * operator /usr/libexec/save-entropy 0 * * * * root newsyslog #1 3 * * * root periodic daily #15 4 * * 6 root periodic weekly #30 5 1 * * root periodic monthly 0 * * * * root pfctl -t ddos -T flush > /dev/null 2>&1 0 * * * * root /root/bashorg > /dev/null 2>&1 0 0 * * * root /root/backup > /dev/null 2>&1 0 0 * * * root portsnap fetch update > /dev/null 2>&1 0 0 * * 1 root fetch –q –p –o /etc/namedb/named.root ftp://ftp.internic.net/domain/named.root > /dev/null 2>&1 0 0 * * 2 root rndc reload > /dev/null 2>&1
1) at я использовать не собираюсь.
2) Периодические отчёты я всё равно не читаю. Зачем их генерировать?
3) Очищаем таблицу заблокированных адресов каждый час.
4) Обновляем приветствие в системе. (этот скрипт я опишу чуть позже)
5) Создаём автоматические бэкапы. (этот скрипт тоже не останется за кадром)
6) Каждую неделю обновляем named.root и перезапускаем named
newsyslog.conf у меня выглядит так:
# logfilename [owner:group] mode count size when flags [/pid_file] [sig_num] /var/log/all.log 600 7 * @T00 J /var/log/amd.log 644 7 100 * J /var/log/auth.log 600 7 100 * JC /var/log/console.log 600 5 100 * J /var/log/cron 600 3 100 * JC #/var/log/daily.log 640 7 * @T00 JN /var/log/debug.log 600 7 100 * JC /var/log/kerberos.log 600 7 100 * J /var/log/lpd-errs 644 7 100 * JC /var/log/maillog 640 7 * @T00 JC /var/log/messages 644 5 100 * JC #/var/log/monthly.log 640 12 * $M1D0 JN /var/log/pflog 600 3 100 * JB /var/run/pflogd.pid #/var/log/ppp.log root:network 640 3 100 * JC /var/log/security 600 10 100 * JC /var/log/sendmail.st 640 10 * 168 B /var/log/slip.log root:network 640 3 100 * JC #/var/log/weekly.log 640 5 1 $W6D0 JN /var/log/wtmp 644 3 * @01T05 B /var/log/xferlog 600 7 100 * JC /var/log/httpd.access.log www:www 644 7 * $D0 B /var/run/lighttpd.pid /var/log/httpd.error.log www:www 644 7 * $D0 B /var/run/lighttpd.pid
Заметим последние две строки – они нужны для ротации логов lighttpd (именно такой сервер мы используем. ). Остальное – вроде стандартное 🙂
/etc/ftpusers в моём случае выглядит так (/etc/ftpchroot описан в прошлой статье):
root toor daemon operator bin tty kmem games news man sshd bind proxy _pflogd _dhcp uucp pop www nobody mailnull smmsp mysql _sphinx cyrus @wheel @mailuser
Создаём группу mailuser:
pw groupadd mailuser
Дальше командой adduser создаём пользователя с UID=1000 и группой www (шелл – csh, домашний каталог, например, /home/web). Этот пользователь будет иметь доступ к ftp и от его имени должен будет работать lighttpd. Очень советую пользователю www сделать такой же UID (в нашей конфигурации 3 пользователя с одинаковым UID’ом, в их числе и www).
Точно так же, можно добавлять почтовых пользователей с шеллом nologin и домашним каталогом /nonexistent
Настройка ntp была описана в прошлой статье, поэтому на этом месте я не останавливаюсь. А вот с named (DNS демон) и sendmail’ом прийдётся немножко поковыряться… И начнём с named.
Первым делом, приведу листинг его рабочей папки (где видны владелец, группа и права):
/usr/var/named/etc/namedb$ ls -al total 22 drwxr-xr-x 5 root wheel 512 Feb 9 20:16 . drwxr-xr-x 3 root wheel 512 Feb 9 00:44 .. drwxr-xr-x 2 bind wheel 512 Nov 26 2008 dynamic drwxr-xr-x 2 root wheel 512 Feb 9 20:11 master -rw-r----- 1 bind wheel 4035 Feb 9 20:19 named.conf -rw-r--r-- 1 bind wheel 2969 Nov 26 2008 named.root -rw-r----- 1 bind wheel 163 Feb 9 20:14 rndc.conf -rw-r----- 1 bind wheel 97 Feb 9 00:44 rndc.key drwxr-xr-x 2 bind wheel 512 Nov 26 2008 slave
Как генерировать ключ я уже рассказывал. Приведу пример named.conf (прямо с нашего сервера):
options < directory "/etc/namedb"; pid-file "/var/run/named/pid"; listen-on < any; >; version "Forget it! :)"; forwarders < // DNS серверы провайдера (так будет быстрее, всё-таки) 193.34.96.113; 193.34.96.1; >; >; key "rndc-key" < algorithm hmac-md5; secret "здесь ключ из rndc.key"; >; controls < inet 127.0.0.1 port 953 allow < 127.0.0.1; >keys < "rndc-key"; >; >; //zone "." < // type hint; // file "named.root"; //>; // Вместо named.root просто делаем slave для всех зон, это будет быстрее // . при условии, что в /etc/resolv.conf записан 127.0.0.1 на первом месте zone "." < type slave; file "slave/root.slave"; masters < 192.5.5.241; // F.ROOT-SERVERS.NET. >; notify no; >; zone "arpa" < type slave; file "slave/arpa.slave"; masters < 192.5.5.241; // F.ROOT-SERVERS.NET. >; notify no; >; zone "in-addr.arpa" < type slave; file "slave/in-addr.arpa.slave"; masters < 192.5.5.241; // F.ROOT-SERVERS.NET. >; notify no; >; zone "localhost" < type master; file "master/localhost-forward.db"; >; zone "127.in-addr.arpa" < type master; file "master/localhost-reverse.db"; >; zone "255.in-addr.arpa" < type master; file "master/empty.db"; >; zone "0.in-addr.arpa" < type master; file "master/empty.db"; >; zone "10.in-addr.arpa" < type master; file "master/empty.db"; >; zone "16.172.in-addr.arpa" < type master; file "master/empty.db"; >; zone "17.172.in-addr.arpa" < type master; file "master/empty.db"; >; zone "18.172.in-addr.arpa" < type master; file "master/empty.db"; >; zone "19.172.in-addr.arpa" < type master; file "master/empty.db"; >; zone "20.172.in-addr.arpa" < type master; file "master/empty.db"; >; zone "21.172.in-addr.arpa" < type master; file "master/empty.db"; >; zone "22.172.in-addr.arpa" < type master; file "master/empty.db"; >; zone "23.172.in-addr.arpa" < type master; file "master/empty.db"; >; zone "24.172.in-addr.arpa" < type master; file "master/empty.db"; >; zone "25.172.in-addr.arpa" < type master; file "master/empty.db"; >; zone "26.172.in-addr.arpa" < type master; file "master/empty.db"; >; zone "27.172.in-addr.arpa" < type master; file "master/empty.db"; >; zone "28.172.in-addr.arpa" < type master; file "master/empty.db"; >; zone "29.172.in-addr.arpa" < type master; file "master/empty.db"; >; zone "30.172.in-addr.arpa" < type master; file "master/empty.db"; >; zone "31.172.in-addr.arpa" < type master; file "master/empty.db"; >; zone "168.192.in-addr.arpa" < type master; file "master/empty.db"; >; zone "254.169.in-addr.arpa" < type master; file "master/empty.db"; >; zone "2.0.192.in-addr.arpa" < type master; file "master/empty.db"; >; zone "18.198.in-addr.arpa" < type master; file "master/empty.db"; >; zone "19.198.in-addr.arpa" < type master; file "master/empty.db"; >; zone "240.in-addr.arpa" < type master; file "master/empty.db"; >; zone "241.in-addr.arpa" < type master; file "master/empty.db"; >; zone "242.in-addr.arpa" < type master; file "master/empty.db"; >; zone "243.in-addr.arpa" < type master; file "master/empty.db"; >; zone "244.in-addr.arpa" < type master; file "master/empty.db"; >; zone "245.in-addr.arpa" < type master; file "master/empty.db"; >; zone "246.in-addr.arpa" < type master; file "master/empty.db"; >; zone "247.in-addr.arpa" < type master; file "master/empty.db"; >; zone "248.in-addr.arpa" < type master; file "master/empty.db"; >; zone "249.in-addr.arpa" < type master; file "master/empty.db"; >; zone "250.in-addr.arpa" < type master; file "master/empty.db"; >; zone "251.in-addr.arpa" < type master; file "master/empty.db"; >; zone "252.in-addr.arpa" < type master; file "master/empty.db"; >; zone "253.in-addr.arpa" < type master; file "master/empty.db"; >; zone "254.in-addr.arpa" < type master; file "master/empty.db"; >; // Our zones // Наши зоны (как пример) zone "eugen.su" < type master; file "master/eugen.su"; >; zone "gibs0n.name" < type master; file "master/gibs0n.name"; >; zone "symfony.info" < type master; file "master/symfony.info"; >;
Приведу пример одного файла зоны (в нашем случае, они все одинаковые):
$TTL 3600 @ IN SOA ns1.tem.dp.ua. tem.tem.dp.ua. ( 2010011001 ; Serial 3600 ; Refresh 900 ; Retry 1209600 ; Expire 3600 ) ; Minimum @ IN NS ns1.tem.dp.ua. @ IN NS ns2.tem.dp.ua. @ IN NS ns.iti.dp.ua. @ IN MX 10 smtp.tem.dp.ua. @ IN MX 20 smtp.iti.dp.ua. @ IN A 193.34.96.114 @ IN A 193.34.96.115 * IN A 193.34.96.114 * IN A 193.34.96.115
Ничего военного. Все эти данные можно получить из DNS 🙂
Теперь будем настраивать sendmail. Как бы все его не ругали за сложность настройки и т.п. – я его предпочитаю другим MTA.
Первым делом, идём в /etc/mail, где находятся все конфигурационные файлы от sendmail’а.
Настраиваем access. У меня этот файл выглядит вот так:
# local 127.0.0.1 RELAY # our external IPs 193.34.96.114 RELAY 193.34.96.115 RELAY # trusted external network 193.34.96.116 RELAY 193.34.96.117 RELAY 193.34.96.118 RELAY 193.34.96.119 RELAY 193.34.96.120 RELAY 193.34.96.121 RELAY 193.34.96.122 RELAY 193.34.96.123 RELAY 193.34.96.124 RELAY 193.34.96.125 RELAY 193.34.96.126 RELAY # trusted internal (emergency) network 192.168.0 RELAY
Для чего служит этот файл я уже рассказывал 🙂
Далее редактируем aliases:
root : мой_логин abuse : мой_логин MAILER-DAEMON : /dev/null postmaster : /dev/null _dhcp : /dev/null _pflogd : /dev/null bin : /dev/null bind : /dev/null daemon : /dev/null games : /dev/null kmem : /dev/null mailnull : /dev/null man : /dev/null news : /dev/null nobody : /dev/null operator : /dev/null pop : /dev/null proxy : /dev/null smmsp : /dev/null sshd : /dev/null system : /dev/null toor : /dev/null tty : /dev/null usenet : /dev/null uucp : /dev/null security : /dev/null ftp : /dev/null ftp-bugs : /dev/null hostmaster : /dev/null webmaster : /dev/null www : /dev/null _sphinx : /dev/null mysql : /dev/null cyrus : /dev/null
В нашей системе этот файл выглядит таким образом… Лишнюю почту нам получать не нужно 🙂 Список пользователей можно брать из /etc/ftpusers, например.
Далее создаём пустой файл default-auth-info и local-host-names. В local-host-names записываем все домены нашего сервера, по одному на строку. Например, так:
tem.dp.ua eugen.su gibs0n.name symfony.info
Далее можно создать файл virtusertable и записать в него строки вида:
Если добавить сюда все домены, то это даёт возможность рассылать почту, приходящую на адреса admin@ <любой_домен_сервера>реальным пользователям – администраторам этих сайтов, например 🙂любой_домен_сервера>
Далее можно выполнить команду rm freebsd* submit* sendmail* (находясь в /etc/mail), чтобы удалить ненужные файлы. Следующим этапом будет редактирование файла, который называется <имя_домена>.mc (в моём случае это eugen.su.mc). В него мы будем добавлять dnsbl серверы, чтобы блокировать спамеров по адресам. Да и ещё некоторые полезные настройки.имя_домена>
Приведу в качестве примера файл eugen.su.mc с нашей системы:
divert(-1) divert(0) VERSIONID(`$FreeBSD: src/etc/sendmail/freebsd.mc,v 1.30.2.6.2.1 2008/10/02 02:57:24 kensmith Exp $') OSTYPE(freebsd6) DOMAIN(generic) FEATURE(access_db, `hash -o -T/etc/mail/access') FEATURE(blacklist_recipients) FEATURE(local_lmtp) FEATURE(mailertable, `hash -o /etc/mail/mailertable') FEATURE(virtusertable, `hash -o /etc/mail/virtusertable') FEATURE(delay_checks) FEATURE(dnsbl, `abuse.rfc-ignorant.org', `550 Spam - abuse.rfc-ignorant.org.') FEATURE(dnsbl, `aspews.ext.sorbs.net', `550 Spam - aspews.ext.sorbs.net.') FEATURE(dnsbl, `b.barracudacentral.org', `550 Spam - b.barracudacentral.org .') FEATURE(dnsbl, `bl.csma.biz', `550 Spam - bl.csma.biz.') FEATURE(dnsbl, `bl.deadbeef.com', `550 Spam - bl.deadbeef.com .') FEATURE(dnsbl, `bl.spamcannibal.org', `550 Spam - bl.spamcannibal.org.') FEATURE(dnsbl, `bl.spamcop.net', `550 Spam - bl.spamcop.net .') FEATURE(dnsbl, `bl.spamcop.net', `550 Spam - bl.spamcop.net.') FEATURE(dnsbl, `blackholes.brainerd.net', `550 Spam - blackholes.brainerd.net.') FEATURE(dnsbl, `blackholes.five-ten-sg.com', `550 Spam - blackholes.five-ten-sg.com.') FEATURE(dnsbl, `blackholes.mail-abuse.org', `550 Spam - blackholes.mail-abuse.org.') FEATURE(dnsbl, `blackholes.uceb.org', `550 Spam - blackholes.uceb.org.') FEATURE(dnsbl, `blackholes.wirehub.net', `550 Spam - blackholes.wirehub.net .') FEATURE(dnsbl, `blacklist.junkemailfilter.com', `550 Spam - blacklist.junkemailfilter.com.') FEATURE(dnsbl, `blacklist.sci.kun.nl', `550 Spam - blacklist.sci.kun.nl.') FEATURE(dnsbl, `blacklist.woody.ch', `550 Spam - blacklist.woody.ch.') FEATURE(dnsbl, `block.dnsbl.sorbs.net', `550 Spam - block.dnsbl.sorbs.net.') FEATURE(dnsbl, `cbl.abuseat.org', `550 Spam - cbl.abuseat.org.') FEATURE(dnsbl, `cbl.anti-spam.org.cn', `550 Spam - cbl.anti-spam.org.cn.') FEATURE(dnsbl, `cblless.anti-spam.org.cn', `550 Spam - cblless.anti-spam.org.cn .') FEATURE(dnsbl, `cblplus.anti-spam.org.cn', `550 Spam - cblplus.anti-spam.org.cn.') FEATURE(dnsbl, `combined.njabl.org', `550 Spam - combined.njabl.org.') FEATURE(dnsbl, `db.wpbl.info', `550 Spam - db.wpbl.info .') FEATURE(dnsbl, `dialups.mail-abuse.org', `550 Spam - dialups.mail-abuse.org.') FEATURE(dnsbl, `dialups.visi.com', `550 Spam - dialups.visi.com.') FEATURE(dnsbl, `dnsbl-0.uceprotect.net', `550 Spam - dnsbl-0.uceprotect.net .') FEATURE(dnsbl, `dnsbl-1.uceprotect.net', `550 Spam - dnsbl-1.uceprotect.net.') FEATURE(dnsbl, `dnsbl-2.uceprotect.net', `550 Spam - dnsbl-2.uceprotect.net.') FEATURE(dnsbl, `dnsbl-3.uceprotect.net', `550 Spam - dnsbl-3.uceprotect.net .') FEATURE(dnsbl, `dnsbl.ahbl.org', `550 Spam - dnsbl.ahbl.org.') FEATURE(dnsbl, `dnsbl.njabl.org', `550 Spam - dnsbl.njabl.org.') FEATURE(dnsbl, `dnsbl.sorbs.net', `550 Spam - dnsbl.sorbs.net .') FEATURE(dnsbl, `dnsbl.sorbs.net', `550 Spam - dnsbl.sorbs.net.') FEATURE(dnsbl, `duinv.aupads.org', `550 Spam - duinv.aupads.org.') FEATURE(dnsbl, `dul.dnsbl.sorbs.net', `550 Spam - dul.dnsbl.sorbs.net.') FEATURE(dnsbl, `dul.ru', `550 Spam - dul.ru.') FEATURE(dnsbl, `dun.dnsrbl.net', `550 Spam - dun.dnsrbl.net.') FEATURE(dnsbl, `ex.dnsbl.org', `550 Spam - ex.dnsbl.org.') FEATURE(dnsbl, `http.dnsbl.sorbs.net', `550 Spam - http.dnsbl.sorbs.net .') FEATURE(dnsbl, `ips.backscatterer.org', `550 Spam - ips.backscatterer.org.') FEATURE(dnsbl, `ircbl.ahbl.org', `550 Spam - ircbl.ahbl.org.') FEATURE(dnsbl, `ix.dnsbl.manitu.net', `550 Spam - ix.dnsbl.manitu.net .') FEATURE(dnsbl, `korea.services.net', `550 Spam - korea.services.net.') FEATURE(dnsbl, `l2.bbfh.ext.sorbs.net', `550 Spam - l2.bbfh.ext.sorbs.net.') FEATURE(dnsbl, `list.dsbl.org', `550 Spam - list.dsbl.org.') FEATURE(dnsbl, `mail-abuse.blacklist.jippg.org', `550 Spam - mail-abuse.blacklist.jippg.org .') FEATURE(dnsbl, `misc.dnsbl.sorbs.net', `550 Spam - misc.dnsbl.sorbs.net.') FEATURE(dnsbl, `msgid.bl.gweep.ca', `550 Spam - msgid.bl.gweep.ca.') FEATURE(dnsbl, `multi.surbl.org', `550 Spam - multi.surbl.org .') FEATURE(dnsbl, `multi.uribl.com', `550 Spam - multi.uribl.com.') FEATURE(dnsbl, `no-more-funn.moensted.dk', `550 Spam - no-more-funn.moensted.dk.') FEATURE(dnsbl, `overdb.aupads.org', `550 Spam - overdb.aupads.org.') FEATURE(dnsbl, `pbl.spamhaus.org', `550 Spam - pbl.spamhaus.org .') FEATURE(dnsbl, `phishing.rbl.msrbl.net', `550 Spam - phishing.rbl.msrbl.net.') FEATURE(dnsbl, `probes.dnsbl.net.au', `550 Spam - probes.dnsbl.net.au.') FEATURE(dnsbl, `proxy.bl.gweep.ca', `550 Spam - proxy.bl.gweep.ca .') FEATURE(dnsbl, `psbl.surriel.com', `550 Spam - psbl.surriel.com.') FEATURE(dnsbl, `rbl-plus.mail-abuse.org', `550 Spam - rbl-plus.mail-abuse.org.') FEATURE(dnsbl, `rbl.snark.net', `550 Spam - rbl.snark.net .') FEATURE(dnsbl, `rdts.dnsbl.net.au', `550 Spam - rdts.dnsbl.net.au.') FEATURE(dnsbl, `relays.bl.gweep.ca', `550 Spam - relays.bl.gweep.ca.') FEATURE(dnsbl, `relays.bl.kundenserver.de', `550 Spam - relays.bl.kundenserver.de .') FEATURE(dnsbl, `relays.mail-abuse.org', `550 Spam - relays.mail-abuse.org.') FEATURE(dnsbl, `relays.nether.net', `550 Spam - relays.nether.net.') FEATURE(dnsbl, `relays.ordb.org', `550 Spam - relays.ordb.org.') FEATURE(dnsbl, `ricn.dnsbl.net.au', `550 Spam - ricn.dnsbl.net.au .') FEATURE(dnsbl, `rsbl.aupads.org', `550 Spam - rsbl.aupads.org.') FEATURE(dnsbl, `sbl-xbl.spamhaus.org', `550 Spam - sbl-xbl.spamhaus.org.') FEATURE(dnsbl, `sbl.spamhaus.org', `550 Spam - sbl.spamhaus.org.') FEATURE(dnsbl, `smtp.dnsbl.sorbs.net', `550 Spam - smtp.dnsbl.sorbs.net .') FEATURE(dnsbl, `socks.dnsbl.sorbs.net', `550 Spam - socks.dnsbl.sorbs.net.') FEATURE(dnsbl, `socks.opm.blitzed.org', `550 Spam - socks.opm.blitzed.org.') FEATURE(dnsbl, `sorbs.dnsbl.net.au', `550 Spam - sorbs.dnsbl.net.au .') FEATURE(dnsbl, `spam.dnsbl.sorbs.net', `550 Spam - spam.dnsbl.sorbs.net.') FEATURE(dnsbl, `spam.olsentech.net', `550 Spam - spam.olsentech.net .') FEATURE(dnsbl, `spamguard.leadmon.net', `550 Spam - spamguard.leadmon.net.') FEATURE(dnsbl, `spamrbl.imp.ch', `550 Spam - spamrbl.imp.ch.') FEATURE(dnsbl, `spamsites.dnsbl.net.au', `550 Spam - spamsites.dnsbl.net.au.') FEATURE(dnsbl, `spamsources.dnsbl.info', `550 Spam - spamsources.dnsbl.info .') FEATURE(dnsbl, `spamsources.fabel.dk', `550 Spam - spamsources.fabel.dk.') FEATURE(dnsbl, `t1.dnsbl.net.au', `550 Spam - t1.dnsbl.net.au.') FEATURE(dnsbl, `ubl.unsubscore.com', `550 Spam - ubl.unsubscore.com.') FEATURE(dnsbl, `ucepn.dnsbl.net.au', `550 Spam - ucepn.dnsbl.net.au .') FEATURE(dnsbl, `virbl.bit.nl', `550 Spam - virbl.bit.nl.') FEATURE(dnsbl, `virbl.dnsbl.bit.nl', `550 Spam - virbl.dnsbl.bit.nl.') FEATURE(dnsbl, `virus.rbl.jp', `550 Spam - virus.rbl.jp .') FEATURE(dnsbl, `virus.rbl.msrbl.net', `550 Spam - virus.rbl.msrbl.net.') FEATURE(dnsbl, `web.dnsbl.sorbs.net', `550 Spam - web.dnsbl.sorbs.net.') FEATURE(dnsbl, `whois.rfc-ignorant.org', `550 Spam - whois.rfc-ignorant.org .') FEATURE(dnsbl, `xbl.spamhaus.org', `550 Spam - xbl.spamhaus.org.') FEATURE(dnsbl, `zen.spamhaus.org', `550 Spam - zen.spamhaus.org.') FEATURE(dnsbl, `zombie.dnsbl.sorbs.net', `550 Spam - zombie.dnsbl.sorbs.net.') define(`confCW_FILE', `-o /etc/mail/local-host-names') dnl set SASL options TRUST_AUTH_MECH(`GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN') define(`confAUTH_MECHANISMS', `GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN') DAEMON_OPTIONS(`Name=IPv4, Family=inet') define(`confBIND_OPTS', `WorkAroundBrokenAAAA') define(`confNO_RCPT_ACTION', `add-to-undisclosed') define(`confPRIVACY_FLAGS', `authwarnings,noexpn,novrfy') MAILER(local) MAILER(smtp) LOCAL_RULESETS HX-Mailer: $>CheckMailer HX-Server: $>CheckMailer SCheckMailer RAdvanced Direct Remailer $* $#error $@ 5.7.1 $: "554 Spam." RAdvanced Mass Sender $* $#error $@ 5.7.1 $: "554 Spam." RSpammer $* $#error $@ 5.7.1 $: "554 Spam." R$* Bomber $* $#error $@ 5.7.1 $: "554 Spam." RMega-Mailer $* $#error $@ 5.7.1 $: "554 Spam." RMMailer $* $#error $@ 5.7.1 $: "554 Spam." RMailer $* $#error $@ 5.7.1 $: "554 Spam." RLigra Mailer $* $#error $@ 5.7.1 $: "554 Spam." RDynamic Opt-In Emailer $* $#error $@ 5.7.1 $: "554 Spam." R$* Group Spamer $#error $@ 5.7.1 $: "554 Spam." RMail Sender $* $#error $@ 5.7.1 $: "554 Spam." RMail Service $* $#error $@ 5.7.1 $: "554 Spam." RMailloop $* $#error $@ 5.7.1 $: "554 Spam." RPersMail $* $#error $@ 5.7.1 $: "554 Spam." RLK SendIt $* $#error $@ 5.7.1 $: "554 Spam." RWC Mail $* $#error $@ 5.7.1 $: "554 Spam." RZUBA ZUB $* $#error $@ 5.7.1 $: "554 Spam." RMailList Express $* $#error $@ 5.7.1 $: "554 Spam." RCaretop $* $#error $@ 5.7.1 $: "554 Spam." RMailer Signature $#error $@ 5.7.1 $: "554 Spam." Rnone $#error $@ 5.7.1 $: "554 Spam." RPG-MAILINGLIST $#error $@ 5.7.1 $: "554 Spam." R$* advcomtest $* $#error $@ 5.7.1 $: "554 Spam." Ryo yo mail $#error $@ 5.7.1 $: "554 Spam." RZanziMailer $* $#error $@ 5.7.1 $: "554 Spam." RMicrosoft Outlook Express 5.0 $#error $@ 5.7.1 $: "554 Spam." RVersion 5.0 $#error $@ 5.7.1 $: "554 Spam." Rnethack $@ OK RZ-Mail-SGI $@ OK RDipost $@ OK R$* $: < $1 >R < >$#error $@ 5.7.1 $: "554 Spam." R$* $@ OK HTo: $>CheckTo HCC: $>CheckTo HMessage-ID: $>CheckMessageID SCheckTo R$*Recipient$* $#error $@ 5.7.1 $: "554 Spam." R$*Undisclosed$* $#error $@ 5.7.1 $: "554 Spam." SCheckMessageID R $@ < $1 @ $2 >R$* $#error $@ 5.5.2 $: "553 Spam." Kdnsname dns -R PTR Kfrmail regex -aFRRRMAIL ^(.*-.*-.*-.*|.*adsl.*|.*dhcp.*)$
Сохраняем этот файл и делаем команду make (находясь в /etc/mail). После этого прийдётся подредактировать файл <имя_домена>.cf:имя_домена>