Документация по ОС FreeBSD Пятница, 19.04.2024, 07:12
Приветствую Вас Гость | RSS
Меню сайта

Категории каталога
Мои статьи [0]
Установка и настройка [281]
X Window [25]
Man pages [30]
Ports & Packages [26]
cvs [18]
Multimedia [20]
Нововсти в мире Unix [0]
RFC [4]
RFC (Request for Comments, Запрос на комментарии) - серия документов, публикуемая сообществом исследователей и разработчиков, руководствующихся практическими интересами, в которой описывается набор протоколов и обобщается опыт функционирования Интернет.
Безопасность [52]
Работа с железом [58]
Книги по FreeBSD [17]
Сеть [505]
Программирование [40]
FireWall [58]
Темы экзамена BSDA [14]
Официальные темы экзамена BSDA, включая подробноые описания и советы по обучению.

Главная » Статьи » Безопасность

Вопросы безопасности при работе во внешних сетях (INTERNET) [2010]
Собственно вопрос встал ребром по одной причине - у меня на мониторе вечно бегут логи серваков, на всякий случай, мало ли чё упадёт, или случится. Полдня наблюдал как какой-то придурок пытался найти пользователей и пароль к серваку. От нечего делать просканил его машину nmap`ом, посмотрел, что за ось, какие порты открыты, какие приложения их слушают....
/usr/home/lissyara/>nmap -A 203.124.250.113

Starting nmap 3.93 ( http://www.insecure.org/nmap/ ) at 2005-11-22 16:00 MSK
sendto in send_ip_packet: sendto(3, packet, 328, 0, 203.124.250.113, 16) =>
 Permission denied
send_ip_packet in send_closedupd_probe: Permission denied
sendto in send_ip_packet: sendto(3, packet, 328, 0, 203.124.250.113, 16) =>
 Permission denied
send_ip_packet in send_closedupd_probe: Permission denied
Interesting ports on 203.124.250.113:
(The 1665 ports scanned but not shown below are in state: closed)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 3.4p1 (protocol 1.99)
111/tcp open rpcbind 2 (rpc #100000)
6000/tcp open X11 (access denied)
Device type: general purpose|broadband router
Running: Linux 2.4.X|2.5.X|2.6.X, D-Link embedded
OS details: Linux 2.4.0 - 2.5.20, Linux 2.4.18 - 2.4.20, 
Linux 2.4.26, Linux 2.4.27 or D-Link DSL-500T (running linux 2.4), 
Linux 2.4.7 - 2.6.11, Linux 2.6.0 - 2.6.11
Service Info: OS: Unix

Nmap finished: 1 IP address (1 host up) scanned in 34.421 seconds
/usr/home/lissyara/>

Это был шлюз, на линухе, а сам чувак сидел за шлюзом. Причём шлюз не на обычном PC а d-link`овский роутер - железяка с операционкой. Вначале это меня веселило, как и обычно, но этот, оказался толи упрямым, толи тупым - к вечеру его сканер уже нарезал третий круг по одним и тем же пользователям. Мне это надоело, и я добавил в файрволл правило:
/usr/>ipfw add 1 deny ip from 203.124.250.113 to me
00001 deny ip from 203.124.250.113 to me
/usr/>

Всё. Мудазвон был свободен как ветер до первой перезагрузки, или до того как я вспомню про это правило, и уберу его. Вероятность второго была исчезающе мала, по причине моей короткой памяти, а первое произойдёт нескоро, самое частое я его перезагружаю раз в три месяца. Когда случайно провод питания ногой зацеплю :)))
   В общем-то на этом моменте про происшествие можно было забыть, но, не давало покоя то, что методы вроде примитивные, но могут и сработать - мало ли, я пользователя заведу без пароля, или со слишком простым, да забуду у него поставить /sbin/nologin... Чего тока не бывает спьяну-то :) Короче, было принято решение о прмитивном, но усилении безопастности. Файрволл стоял давно, а вот ssh прикрыть снаружи я не мог - пару раз сталкивался, что что-то забыл из конфига, и чтобы посмотреть на рабочем серваке приходилось заходить на него с самых неожиданных IP. Если б не это то задача бы свелась к закрыванию ssh снаружи, или к разрешению ходить по нему определённому набору хостов.
   Для начала решил поковырять конфиг sshd - может там что есть? Конфиг sshd живёт в/etc/ssh/sshd_config Удалось нарыть следующую опцию:
AllowUsers lissyara

- что означает, что по ssh можно ходить тока мне. Внёс эту строку, сделал
killall -1 sshd

и проверил - и вправду, других пользователей не пускал. Это было уже неплохо. Но - душа хотела большего. Тогда вспомнилось, что существуют скрипты, которые добавляют в файрволл запрещающие правила, в случае, если с какого-то IP сканят порты, или ещё как развлекаются. Скрипты эти я даже искать не стал, порты меня не волновали, это забота файрволла и приложений, что их слушают, зато это воспоминание подтолкнуло мысль в верном направлении - надо написать свой скрипт, который будет лопатить логи авторизации в /var/log/auth.log
   Сказано - сделано. Написал.
#!/bin/sh

# если два часа ночи - удаляем предыдущие правила
if [ `date +%H` -eq 02 ]
then
/sbin/ipfw delete 1 >/dev/null 2>&1
fi

#
day=`date +%d`
month=`date +%m`
year=`date +%Y`
log_dir="/var/old_log/${year}/${month}"
# создаём папку для логов
mkdir -p ${log_dir}
log_file="${log_dir}/${day}_auth.log"

# переносим логи
cat /var/log/auth.log > /tmp/auth.log
cat /dev/null > /var/log/auth.log
cat /tmp/auth.log >> ${log_file}

# Вначале отлавливаем IP с которых пытаются залогинится
# под несуществующими пользователями
cat /tmp/auth.log | \
grep Illegal | awk '{print $10}' | sort | uniq -c | sort |
{
while read count_IP
do
count_deny=`echo ${count_IP} | awk '{print $1}'`
IP=`echo ${count_IP} | awk '{print $2}'`
if [ ${count_deny} -ge 10 ]
then
#echo "IP address = ${IP} deny count = ${count_deny}"
/sbin/ipfw add 1 deny ip from ${IP} to me >/dev/null 2>&1
fi
done
}

# отлавливаем IP c которых лезут под системными
# пользователями (с учётом того, что сделали раньше,
# ходить разрешили только описанным в sshd_conf)
cat /tmp/auth.log | \
grep "Failed password" | awk '{print $11}' | sort | uniq -c | sort |
{
while read count_IP
do
count_deny=`echo ${count_IP} | awk '{print $1}'`
IP=`echo ${count_IP} | awk '{print $2}'`
if [ ${count_deny} -ge 5 ]
then
#echo "IP address = ${IP} deny count = ${count_deny}"
/sbin/ipfw add 1 deny ip from ${IP} to me >/dev/null 2>&1
fi
done
}

Такой вот несложный скриптик, который заодно переносит логи в другое место. Можно сделать и лучше, но, лучшее - враг хорошего. Заносим его запуск в рутовый crontab, на запуск раз в 10 минут.
   Заодно решил обновить sshd - больно уж у меня старая и версия стояла.
/usr/home/lissyara/>/usr/ports/security/openssh-portable/>sshd -v
sshd: illegal option -- v
sshd version OpenSSH_3.5p1 FreeBSD-20030924
Usage: sshd [options]
Options:
 -f file Configuration file (default /etc/ssh/sshd_config)
 -d Debugging mode (multiple -d means more debugging)
 -i Started from inetd
 -D Do not fork into daemon mode
 -t Only test configuration file and keys
 -q Quiet (no logging)
....................................
/usr/home/lissyara/>cd /usr/ports/security/openssh-portable/
/usr/ports/security/openssh-portable/>make && make install && make clean
....................................
....................................
===> Compressing manual pages for openssh-portable-4.2.0.0,1
===> Registering installation for openssh-portable-4.2.0.0,1
===> SECURITY REPORT:
 This port has installed the following binaries which execute with
 increased privileges.
/usr/local/libexec/ssh-keysign

 This port has installed the following files which may act as network
 servers and may therefore pose a remote security risk to the system.
/usr/local/bin/ssh-keyscan
/usr/local/bin/ssh
/usr/local/sbin/sshd
/usr/local/libexec/ssh-keysign
/usr/local/bin/ssh-agent

 This port has installed the following startup scripts which may cause
 these network services to be started at boot time.
/usr/local/etc/rc.d/sshd.sh.sample
.........................................

Из опций, что предлагались при установке я не выбрал ничего. Итак, всё инсталлировано, но согласно секьюрити репорту, установился он не вместо системного, а сам по себе. Ладно. Не страшно. Для начала копируем скрипт запуска:
/usr/ports/security/openssh-portable/>cd /usr/local/etc/rc.d/
/usr/local/etc/rc.d/>cp sshd.sh.sample sshd.sh
/usr/local/etc/rc.d/>

Удаляем строку sshd_enable="YES" из файла /etc/rc.conf. Если есть локальный доступ к машине - убиваем sshd и запускаем скрипт /usr/local/etc/rc.d/sshd.sh Должно работать. У меня локального доступа ко всем машинам нет (вернее он есть, но до некоторых добираться по часу - некогда), потому я перезагружаюсь.
   Всё работает. Конфиг у меня получился такой
PermitRootLogin no
MaxAuthTries 2
ChallengeResponseAuthentication no
MaxStartups 2
Subsystem sftp /usr/local/libexec/sftp-server
AllowUsers lissyara

Всё остальное соответственно - по умолчанию.



Источник: http://www.lissyara.su/articles/freebsd/security/some_security_aspects/
Категория: Безопасность | Добавил: oleg (03.03.2010) | Автор: lissyara
Просмотров: 758 | Рейтинг: 0.0/0 |
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Форма входа

Beastie

Друзья сайта

Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0
links

Copyright MyCorp © 2024