Мы — долго запрягаем, быстро ездим, и сильно тормозим.

FreeBSD
  настройка
  подсчёт трафика
  программы
  почтовые системы
  Шелезяки
  Мелочи
  Файловая система
  WWW
  Security
  немного о безопасности
  VPN (PoPToP)
  PortSentry
  sysctl
  vtund
  ipfwcount
  FreeBSD & DSA
  mpd – легко и просто!
  mpd + freeradius + mysql
  Бронированный FreeBSD
  sshit
  DSL-G804V и FreeBSD 6.2
  portaudit
  OpenVPN
  Bluetooth proximity monitor
  ESET NOD32
  GEOM-ELI
  stunnel для pop3,smtp
  NOD32 mirror
  mpd5 + ipfw-nat
  Openvpn 2 офиса
  Hotspot
  OpenVPN+авторизация
  termlog
  mpd5 + сжатие и шифрование
  ipsec_vpnc
  TOR Сервер
  Snort на FreeBSD
  Arpwatch
  Установка и настройка OpenVPN
  NOD32_mirror_v2
  Fail2ban
  IPSec
  Перенос OpenVPN сервера
  Wpa/WPA2-Radius+EAP-TLS/EAP-PEAP
  nod32 mirror script
  MAC + apache
  system
  Games Servers
  X11
  Programming
Очумелые Ручки
OpenBSD
Cisco


www.lissyara.su —> статьи —> FreeBSD —> Security —> немного о безопасности

Вопросы безопасности при работе во внешних сетях (INTERNET)

Автор: lissyara.


    Собственно вопрос встал ребром по одной причине - у меня на мониторе вечно бегут логи серваков, на всякий случай, мало ли чё упадёт, или случится. Полдня наблюдал как какой-то придурок пытался найти пользователей и пароль к серваку. От нечего делать просканил его машину 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

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



размещено: 2005-11-22,
последнее обновление: 2010-02-04,
автор: lissyara

оценить статью:

trubb, 2005-12-09 в 13:13:36

усигда сщитал чё пишицца пральна - безопасность....

Spider, 2005-12-28 в 5:12:22

А не проще в демон системны лога вписать скрипт который будет при не правильно обращении в количестве 3-5 раз блокировать фаервол, при том можно вести (на мускуле) журнал тех кто заходил или незашел (по причине провала авторизации) а также журнал кого забанили.
При загрузке журнал бана можно подымать генерировать правила фаервола и следить дальше.
При таком подходе у можно сделать Веб морду и вести накопительный журнал бан адресов (который в свою очередь можно будет перекладывать на другие сервера)
и мониторить всё происходящее через веб - интерфейс

Spider, 2005-12-28 в 5:16:12

А по поводу скаирования, есть такая прога portsentry
которая слущает назначенные порты и в случае обращения (скажем 10 раз) к разным портам с одного ай пи меняет роутинг к хосту заводя его на локалхост

хуй, 2007-04-02 в 17:49:01

вместо того, чтобы городить какие-то кошмарные скрипты с правилами в фаерволе, достаточно поставить некоммерческую версию ssh: /usr/ports/security/ssh2-nox11 и добавить в конфиг 2 параметра:
LoginGraceTime                  60
AuthInteractiveFailureTimeout   10

этого достаточно, чтобы весьма неплохо обламывать роботов: перебор пароля вырождается в одиночную попытку, что делает другие способы борьбы неактуальными ;)

Непонятно, почему в openssh такого не могут заимплементить :-(

res, 2007-06-13 в 10:58:52

По поводу SSH - рулит авторизация по ключам с отключенной авторизацией по паролю. В этом случае и ssh2-nox11 не понадобится.
Кроме AllowUsers есть еще параметр AllowGroups.
В случае авторизации по ключам имеет смысл завести юзера для захода по SSH и для захода через консоль по логину/паролю, но без права заходить по SSH.

E_K, 2007-07-02 в 10:17:23

Добавляю AllowUsers, но почему делаю рестарт демона, но почему-то продолжает пускать всех. фря 6-2.

E_K, 2007-07-02 в 10:18:31

Сорри, пальцы заблудились!Добавляю AllowUsers, делаю рестарт демона, но почему-то продолжает пускать всех. фря 6-2.

dan, 2007-08-18 в 16:57:16

Давно использую PF
sshd_config:
MaxAuthTries 2
VersionAddendum
будучи извращенцем пересобрал ssh системы чтоб не показывал версию (где-то в сырцах libssh)

в pf

table <sshbrute> persist
...
block drop in log quick from <sshbrute>
...
pass in proto tcp from any to { ($ext_if) , ($int_if) } port ssh flags S/SA keep state  \
( max-src-conn 7, max-src-conn-rate 3/50, overload <sshbrute> flush global )

в кронтабе каждые 5 мин
/usr/local/sbin/expiretable -v -v -t 600 sshbrute > /dev/null 2>&1

expiretable лежит в портах удаляет записи в таблице старше заданного времени

ну у меня там скрипт другой немного он ещё мне отдельный лог "неверных" собирает

таким образом имеем что после двух неверных попыток ввода пароля чел теряет tcp сессию если этих сессий  3 или больше за 50 секунд он улетает в таблицу и курит в сторонке как повезёт от 10 до 15 минут, от брутфорса вполне спасает

Alex_, 2007-09-07 в 13:44:19

Кроме того можно SSH заставить слушать порт отличный от 22.
в sshda-config указать например такое
Port 333
Доступ потом получаем так:
ssh -l user my.server.ip.address -p 333

артур, 2007-11-19 в 20:30:32

сам недавно столкнулся, до этого 22 тока в локалке был. в основном похоже боты, один долбился с часу ночи чуть не до трех. (или кулхацкер терпеливый попался %). гугл как всегда посоветовал все варианты: allowusers, другой порт, конкретные хосты,
потом нашел denyhosts (http://denyhosts.sourceforge.net)

слушает логи (у меня /var/log/auth.log) и в соотв. с некоторыми правилами заносит подозрительные ip в /etc/hosts.deny, т.е. не трогает фаервол. только sshd должен поддерживать tcp wrappers.
собссно правила настраиваются в конфиге.

у меня поставлено, проверено и работает.
зы. странно, но еще никто не ломился в рута.

koffu, 2008-01-27 в 10:56:56

Есть хорошая утилитка в портах sshguard, слушает auth.log, и по заданным параметрам (кол-во неправильных логинов, время блокировки, время снятия подозрения) добавляет в файервол "deny ip from %IP% to me". Если запускать через tail -n0 -F /var/log/auth.log | /usr/local/sbin/sshguard & , то не нужно ничего изменять в конфигах.

Dmitry Stremkouski, 2008-02-18 в 21:17:40

res прав. Надо просто сгенерировать ключи. Включить аутентификацию по ключам.

jonia, 2009-05-06 в 20:53:43

Спасибо lissyara, а также артур-у!
У меня дом. сеть, а с PF/ipwf  все еще не разобрался...
Поставил denyhosts, инструкция на сайте не очень понятная, но помогла статя Preventing SSH Dictionary Attacks With DenyHosts, спасобо еще раз...

прохожий, 2009-05-25 в 10:07:20

Правильно пишется: безопасность, дибил. Так позориться, это пиздец, конечно.

lissyara, 2009-05-25 в 11:37:34

та мне покласть как правильно =))
так же как и тебе на смысл текста =)

LEAD, 2009-09-03 в 5:07:51

дЕбил тоже по другому пишется.
Только это сайт по правописанию.

За статью огромное спасибо. И за комменты тоже. Мне пригодилось)

LEAD, 2009-09-03 в 5:08:59

хы.. очепятка..

НЕ по правописанию

Michael /780, 2009-11-02 в 8:30:10

ChallengeResponseAuthentication no

1. После добавления вот этого - openssh вообще отказывается работать с PAM.
2. Failed password
Это в auth.log не появляется совсем, даже после применения запрещенных приемов.
Может кто разъяснит?

z, 2010-07-01 в 22:13:04

ну если челенжреспонауфикешин - но то генери ключи.
вход только по ним а не по паблик ключу в known_hosts

Йа, 2010-08-18 в 11:40:30

Ёпаный насос! Жора, где ты был?!!

Зануда, 2011-05-23 в 17:32:50

Что моглобы это значить? Syntax error: "do" unexpected (expecting "}")

Жорег, 2012-02-07 в 14:25:03

Лисяра, а кака ты сделал, чтобы у тебя на твоем компе отображались логи серваков? Тоже хочу так сделать :)

Буратино, 2014-10-04 в 13:02:37

У меня тоже были траблы - лезли все кому не лень, судя по диапазаону в основном Китай. Перенес на нестандартный порт - пол-года ничего. Даже скучно.


Оставьте свой комментарий:
Ваше имя:   *
e-mail:  
жирный
наклонный
подчёркнутый
ссылка
цвет
Нынешний год:   *
 


Хостинг HOST-FOOD

2014-07-27, lissyara
gmirror

Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9

Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту

Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis

Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS

Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT

В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat

Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp

Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration

Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster

HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS

История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire

Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
2011-01-28, Капитан
Температура в серверной

Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
2011-01-21, m4rkell
Syslog server

Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
2011-01-07, lissyara
Canon/gphotofs

Монтирование цифровых фотоаппаратов Canon (PTP) как файловой системы, автоматизация этого процесса через события devd и внешние скрипты.
2010-12-13, Al
IPSec

Описание принципов работы IPSEC и способов аутентификации.
2010-12-07, manefesto
FreeBSD on flash

Было принято решении переехать на USB Flash и установить минимальный джентельменский набор для работы своего роутера. Делаем =)
2010-12-05, Fomalhaut
root ZFS, GPT

Инструкция по установке FreeBSD с использованием в качестве таблицы разделов GPT и в качестве основной файловой системы - ZFS
2010-09-05, Cancer
Настройка аудиоплеера на ximp3

Цели: Простенький аудиоплеер, для того что бы тетя продавец в магазине утром пришла нажала на кнопку Power и заиграла в зале музыка, так же был доступ по сети, общая шара куда можно заливать музыку, к
2010-08-31, Cancer
Установка и настройка OpenVPN

На днях появилась задача - объединить головной офис и 3 филиала в одну сеть через интернет посредством OpenVPN, чтобы люди могли подключаться через RDP к базам 1С на серверах.
подписка

    вверх      
Статистика сайта
Сейчас на сайте находится: 3 чел.
За последние 30 мин было: 13 человек
За сегодня было
690 показов,
84 уникальных IP
 

  Этот информационный блок появился по той простой причине, что многие считают нормальным, брать чужую информацию не уведомляя автора (что не так страшно), и не оставляя линк на оригинал и автора — что более существенно. Я не против распространения информации — только за. Только условие простое — извольте подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой, незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
  Если соизволите поставить автора в известность — то вообще почёт вам и уважение.

© lissyara 2006-10-24 08:47 MSK

Время генерации страницы 0.0446 секунд
Из них PHP: 36%; SQL: 64%; Число SQL-запросов: 77 шт.
Исходный размер: 134550; Сжатая: 26361