|
|
www.lissyara.su
—> статьи
—> FreeBSD
—> Security
—> PortSentry
PortSentry - средство противодействия сканированию портов
Автор: lissyara.
Достали всякие малолетние придурки, сканящие порты да радостно
брутфорсящие ssh... Ну правда достали. Порылся в инете нашёл пару
решений. Самым толковым, на мой взгляд, оказалось PortSentry (сайт, к
сожалению сдох - http://www.psionic.com/ ). Правда, в портах, оно водится.
/usr/home/lissyara/>cd /usr/ports /usr/ports/>make search name='PortSentry' Port: portsentry-1.1 Path: /usr/ports/security/portsentry Info: Port scan detection and active defense Maint: ports@FreeBSD.org B-deps: R-deps: WWW:
/usr/ports/>cd /usr/ports/security/portsentry /usr/ports/security/portsentry/>make && make install && make clean
|
После установки идём править конфиги:
/usr/ports/security/portsentry/>cd /usr/local/etc/ /usr/local/etc/>ls | grep portsentry portsentry.conf.default portsentry.ignore.default /usr/local/etc/> /usr/local/etc/>cp portsentry.conf.default portsentry.conf /usr/local/etc/>cp portsentry.ignore.default portsentry.ignore /usr/local/etc/>
|
Приводим конфиг программы - /usr/local/etc/portsentry.conf - к такому виду:
# TCP-порты которые должен слушать PortSentry - тут нельзя указывать # порты, которые заняты приложениями - тока свободные. Проверить, # что занято можно примерно так: # sockstat | grep udp | grep -v 127.0.0.1 | awk '{print $6}' | sort | uniq -c # или так, для tcp: # sockstat | grep tcp | grep -v 127.0.0.1 | awk '{print $6}' | sort | uniq -c TCP_PORTS="1,11,15,23,79,81,111,119,540,635,1080,1524,2000,5742,6667,8080,8085" # UDP-порты для прослушивания UDP_PORTS="1,7,9,69,513,635,640,641,700"
# Верхний порт диапазона, если используется метод # Advanced Stealth Scan Detection Options - но я его не юзаю, # по причине, что снаружи можно подключаться тока к # ограниченному списку портов - поэтому слушать весь # диапазон от 1 до 1024 просто бесполезно.... ADVANCED_PORTS_TCP="1024" ADVANCED_PORTS_UDP="1024" # порты исключаемые из прослушивания при работе в Адванцед моде ADVANCED_EXCLUDE_TCP="113,139" ADVANCED_EXCLUDE_UDP="520,138,137,67"
# Список игнорируемых хостов (как бы они себя не вели, # и какие б действия не предпринимали, к ним не будут # применяться меры противодействия) IGNORE_FILE="/usr/local/etc/portsentry.ignore" # Список хостов, которые были внесены в блэклист # (история работы программы) HISTORY_FILE="/usr/local/etc/portsentry.history" # строка по которой строится имя файла куда писать # заблокированные хосты BLOCKED_FILE="/usr/local/etc/portsentry.blocked"
# резольвить IP хостов в имена, или нет. Рекомендуется не # резольвить - лишняя нагрузка на сервер... RESOLVE_HOST = "1"
# Какие телодвижения предпринимать при обнаружении сканирования: # 0 = ничё не делать - некатит, такая опция :) # 1 = заблокировать хост и запустить внешнюю команду # 2 = только запустить внешнюю команду BLOCK_UDP="1" BLOCK_TCP="1"
# команда на блокирование хоста. я использую IPFW поэтому им и блокирую. # а вообще рекомендую посмотреть пример конфига, котороый идёт с программой # там есть и другие варианы, в частностью с помощью роутинга... KILL_ROUTE="/sbin/ipfw add 2 deny all from $TARGET$:255.255.255.255 to any"
# Если поставить 1 то вначале запускается KILL_RUN_CMD а потом # уже KILL_ROUTE, ну и наоборот если 0 KILL_RUN_CMD_FIRST = "0" # Внешняя команда выполняемая при обнаружении сканирования портов, # я написал скриптик, шлющий мне письмо... KILL_RUN_CMD="/usr/script/work/scan_port_mail.sh $TARGET$ $PORT$"
# Сколько портов будет позволено отсканить прежде чем будет выполнено # действие. 0 - реагирует сразу после первого же порта, 1 - на втором, # 2 - на третьем, 3 - .... SCAN_TRIGGER="0"
# Какой `баннер` вешать на порты слушаемые PortSentry. Вообще, это делать не # рекомендуется, т.к. может разозлить нападающего... #PORT_BANNER="*** YOUR CONNECTION ATTEMPT HAS BEEN LOGGED..."
|
И файл со списком игнорируемых хостов и сетей - /usr/local/etc/portsentry.ignore:
# Файл с игнорируемыми хостами для PortSentry # Забиваются либо хосты, либо сеть/маска # по одному на строчку.
127.0.0.1/32 0.0.0.0 192.168.20.0/24
|
Затем создаём директорию, где хранится указанный в конфиге скрипт
/usr/local/etc/>mkdir -p /usr/script/work/ /usr/local/etc/>cd /usr/script/work/ /usr/script/work/>touch scan_port_mail.sh /usr/script/work/>chmod +x scan_port_mail.sh
|
Ну и пишем сам скрипт:
#!/bin/sh -xv # оповещение по почте о попытках сканирования хостов
# вводим переменные: main_e_mail="admin@lissyara.su" attak_date="`date +%Y-%m-%d`" attak_time="`date +%H:%M:%S`" local_mashine="`uname -n`"
# достаём хост с которого сканили hacker_IP=$1 scanned_port=$2
# определяем DNS-имя мудака hacker_DNS=`host ${hacker_IP} | awk '{print $5}'`
# стругаем себе письмо echo " какой-то придурок пытался сканить порты. Имя машины: ${local_mashine} Отсканеные порты: ${scanned_port}
Данные кулхацкера: IP: ${hacker_IP} DNS: ${hacker_DNS}
======= Мудак заблокирован. " | mail -s port_scanned_on_${local_mashine} ${main_e_mail}
|
Теперь надо в файрволле открыть снаружи порты, которые слушает PortSentry, это кусок моего файрволла:
# для сканируемых портов правила. Для TCP разбиты на # две группы по причине, что ipfw не позволяет перечислять # больше 10 портов за раз. ${FwCMD} add allow tcp from any to ${IpOut} \ 1,11,15,23,79,81,111,119,540,635 via ${LanOut} ${FwCMD} add allow tcp from any to ${IpOut} \ 1080,1524,2000,5742,6667,8080,8085 via ${LanOut} ${FwCMD} add allow udp from any to ${IpOut} \ 1,7,9,69,513,635,640,641,700 via ${LanOut}
|
Перезапускаем файрволл командой:
Запускаем PortSentry:
/usr/local/etc/>/usr/local/etc/rc.d/portsentry.sh start portsentry (tcp udp) /usr/local/etc/>
|
Сморим открытые порты:
/usr/local/etc/>sockstat | grep ports root portsent 439 0 udp4 *:1 *:* root portsent 439 1 udp4 *:7 *:* root portsent 439 2 udp4 *:9 *:* root portsent 439 3 udp4 *:69 *:* root portsent 439 4 udp4 *:513 *:* root portsent 439 5 udp4 *:635 *:* root portsent 439 6 udp4 *:640 *:* root portsent 439 7 udp4 *:641 *:* root portsent 439 8 udp4 *:700 *:* root portsent 437 0 tcp4 *:1 *:* root portsent 437 1 tcp4 *:11 *:* root portsent 437 2 tcp4 *:15 *:* root portsent 437 3 tcp4 *:23 *:* root portsent 437 4 tcp4 *:79 *:* root portsent 437 5 tcp4 *:81 *:* root portsent 437 6 tcp4 *:111 *:* root portsent 437 7 tcp4 *:119 *:* root portsent 437 8 tcp4 *:540 *:* root portsent 437 9 tcp4 *:635 *:* root portsent 437 10 tcp4 *:1080 *:* root portsent 437 11 tcp4 *:1524 *:* root portsent 437 12 tcp4 *:2000 *:* root portsent 437 13 tcp4 *:5742 *:* root portsent 437 14 tcp4 *:6667 *:* root portsent 437 15 tcp4 *:8080 *:* root portsent 437 16 tcp4 *:8085 *:* /usr/local/etc/>
|
Ну
и всё. Если есть возможность пробуем снаружи, если нету, то изнутри,
предвартельно убрав свою сеть из списка игнорируемых (на крайний случай
с локалхоста, убрав его из этого списка, и презапустив прогу), и
наблюдаем в /var/log/messages такие сообщения:
Feb 20 12:17:52 bsd-411 portsentry[288]: adminalert: PortSentry is now active and listening.
Feb 20 12:19:02 bsd-411 portsentry[286]: attackalert: Connect from host: 192.168.20.254/192.168.20.254 to TCP port: 1
Feb 20 12:19:02 bsd-411 portsentry[286]: attackalert: Host
192.168.20.254 has been blocked via dropped route using command:
"/sbin/ipfw add 1 deny all from 192.168.20.254:255.255.255.255 to any"
Feb 20 12:19:02 mail2 portsentry[286]: attackalert: External command
run for host: 192.168.20.254 using command:
"/usr/script/work/scan_port_mail.sh 192.168.20.254 1" |
Правила в файрволле так и будут висеть до
перезагрузки или перезапуска файрволла. При этом если их убрать, но
программу не перезапустить, то снова для этого хоста правило не
добавится:
Feb 20 12:19:55 bsd-411 portsentry[286]: attackalert: Connect from host: 192.168.20.254/192.168.20.254 to TCP port: 1
Feb 20 12:19:55 bsd-411 portsentry[286]: attackalert: Host: 192.168.20.254 is already blocked. Ignoring
|
Советую внимательно сверить списки открытых портов и слушаемых portSentry, наличие таких строк
sockstat | grep "*.*" root portsent 58212 3 udp4 *:* *:*
|
говорит о вашей попытке повесить прослушку на занятый порт.
|
размещено: 2006-02-20,
последнее обновление: 2006-02-24,
автор: lissyara
|
|
|
|
-
Статьи, примеры, форум, demo. Бесплатно! Подробнее на сайте
www.ibm.com
-
Готовый Интернет шлюз: NAT, Firewall, Сервер Почты и многое другое!
www.ideco-software.ru
-
FreeBSD Guru начинают у нас. Возьми на заметку!!!
firstvds.ru
-
MDaemon - почтовый сервер с антивирусом и антиспамом.
altn.ru
-
Регистрация доменов по низкой цене Удобная панель администрирования
pooqle.com
|
Статистика сайта
|
Сейчас на сайте находится: 11 чел.
|
За последние 30 мин было: 78 человек
|
За сегодня было
22147 показов,
3043 уникальных IP
|
|
|
|
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK
|
|
авто
|
Комментарии пользователей [18 шт.]