HidX *nix Log — It Republic

Дилетант не пройдёт! – Делаем бронированный файловый сервер.

Posted in FreeBSD, SAMBA by Максим HidX on Март 6, 2009

 

sambafreebsd2new

Собственно озадачился на днях защитой нашего корпоративного файлового сервера, тобишь файлопомойки. То ли мусор начал лезть туда, то ли что то ещё. Вообщем, сказано – сделано. Раньше у нас стоял сервер с голой FreeBSD 6, ну и самба сервер которая через winbind общалась с юзерами. На этот раз я решил капнуть глубоко, и по самое «не хочу» обезопасить сам сервер и шары с данными.  А крутиться всё это будет уже на FreeBSD 7.1-RELEASE 

Автор статьи — Максим HidX
Последнее редактирование — 17.03.09

В данной статье я как можно подробнее опишу сам процесс, от установки фряхи, до настройки фаервола (о да!). Итак, вот что будет с нашим сервером:

 ·      Samba сервер, с поддержкой юзеров Active Directory, acl и изменением прав на шары через Windows.

·      ClamAV антивирус с регулярным сканированием шар самбы на вирусы.

·      Антируткит. От злосных недоброжелатилей.

·      PF портированый из OpenBSD фаервол, для защиты входящих соединений.


Старт!.

 Конфигурация:

Сеть: 192.168.1.0/24
Сервер с AD:  Windows 2003 SP2 R2 RUS
IP сервера  с AD: 192.168.1.237
Имя домена: ADS.COM
Имя рабочей группы: ADS (Не путать с параметром security в самбе)
Имя моего тестового администратора домена (с правами на добавления машин): epo

Ip Сервера с фряхой: 192.168.1.222 
Имя компьютера с фряхой: FW 

Установка и настройка FreeBSD.

Вообщем под рукой у меня оказался свежий релиз FreeBSD, его и ставлю.

FreeBSD fw.ads.com 7.1-RELEASE FreeBSD 7.1-RELEASE #0: Thu Jan 1 14:37:25 UTC 2009 root@logan.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC i386

Собственно установка у нас будет немного спецефическая. Ставим по минимуму, нам же не нужны куча лишних наворотов.

В программе установке выбираем Custom и выходим в меню инсталяции.

freesmb1

Меню инсталяции поделено на несколько частей.

freesmb2

Выбираем Partition, тут впринципе всё будет стандартно, жмём «a» , программа автоматом разобьёт диск на партиции и создаст геометрию. После этого выходим кнопкой «q». Выбираем загрузку без boot manager – тобишь Standart.

freesmb3

Далее идём в Label. Тут необходимо разбить диск на разделы (слайсы). Сам диск у меня 160 gb + ещё скоро прибавится. Собственно делаем автоматическую разбивку, а потом удаляем /var, /tmp и /usr разделы (до swap’a), что бы потом их создать с новым обьёмом. Логирование у меня будет приличное, поэтому я создаю раздел var с 15 гигами, tmp даю один гиг, usr получил от меня 45 гиг достаточно что бы туда поместились устанавливаемые программы. Ну и создам ка раздел /shares на котором будет весь файловый массив, вся файловая-помойка и дам ему 100 гиг для начала.

freesmb4

Закончили разметку, переходим к компонентам установки – раздел Discributions. В этом разделе выбираем Custum. Далее ставим следующие компоненты:

freesmb5

Выходим из раздела Discributions и попадаем в раздел Media. В нём выбираем носитель установки, тобишь CD\DVD Выходим и жмём Commit. Установка началась.

После установки мы попадаем в раздел базовой настройки системы. В нём обязательно! задаём пароль рута, создаём нового пользователя, настраиваем Time Zone, русские шрифты в Console.

freesmb6

В разделе Networking настраиваем сеть и включаем поддержку ssh.

freesmb7

Выходим из программы установки и Перезагружаемся в новую чистую систему.

Для начала проведём базовую настройку системы.
Руссифицируем консоль для всех юзеров. Это впринципе не обязательно. (user- имя пользователя которого мы создали при установки.)

pw usermod user –L russian
pw usermod root –L russian

Обновим порты. Мы же ходтим устанавливать только свежие программы и службы:

portsnap fetch

Looking up portsnap.FreeBSD.org mirrors… 2 mirrors found.
Fetching snapshot tag from portsnap2.freebsd.org… done.
Fetching snapshot metadata… done.
………

portsnap extract

Теперь включим поддержку ACL на разделе где будет шара. Это нужно для того что бы правильно наследовались права на папки и можно было править эти самые права на Windows машинах.
Для этого отмонтируем наш раздел shares включим ACL и примонтируем обратно.

umount /share
s
tunefs -a enable /share
s
tunefs: ACLs set
mount /shares


Проверяем:

mount -l


/dev/ad0s1g on /share (ufs, local, soft-updates, acls)

SAMBA и Ко — Установка и настройка

Пришло время поставить samba сервер.
Идём в порты:

cd /usr/ports/net/samba3/
make install clean

В окне с опциями выбираем следующее:

freesmb8

Если вылезит окошко “Options for heimdal” убираем все крестики и жмём ОК

Собственно у меня самба за собой потянула следующее:

===> Cleaning for autoconf-2.62
===> Cleaning for libexecinfo-1.1_3
===> Cleaning for popt-1.7_5
===> Cleaning for openldap-client-2.4.15_1
===> Cleaning for libiconv-1.11_1
===> Cleaning for perl-5.8.9_2
===> Cleaning for m4-1.4.12,1
===> Cleaning for help2man-1.36.4_2
===> Cleaning for gmake-3.81_3
===> Cleaning for autoconf-wrapper-20071109
===> Cleaning for libtool-1.5.26
===> Cleaning for gettext-0.17_1
===> Cleaning for p5-gettext-1.05_2
===> Cleaning for samba-3.0.34,1

После установки делаем rehash идём в reboot.

rehash
reboot 

Очищаем и пишем новый самба конфиг:

echo > /usr/local/etc/smb.conf
ee /usr/local/etc/smb.conf

# SMB Config 05.03.09 HidX edt.

[global]
workgroup = ADS
security = ADS
password server = ADS.LOCAL
realm = ADS.LOCAL
netbios name = FW
server string = User file archive
log file = /var/log/samba/%m.%U.log
max log size = 50000
idmap uid = 10000-20000
idmap gid = 10000-20000
winbind use default domain = yes
display charset = koi8-r
unix charset = koi8-r
dos charset = 866
defer sharing violations = false
winbind enum users = yes
winbind enum groups = yes

[Logs]

comment = logs
path = /var/log
browseable = No
read list = «@ADS\Администраторы домена»

[data]
comment = Shares for Documents
path = /shares/data
read list = «@ADS\Пользователи домена»
write list = «@ADS\Пользователи домена»
admin users = «@ADS\Администраторы домена», AIN\epo
read only = No
create mask = 0660
directory mask = 0770
inherit owner = yes
inherit acls = yes
inherit permissions = yes
map acl inherit = yes
locking = no
# Запрещенные типы файлов. Будут удаляться.
# veto files = /*.bat/*.cc/*.wav/
# delete veto files = Yes

Создаём папку для нашей шары в разделе shares:

mkdir /shares/data

Настраиваем /etc/nsswitch.conf

ee /etc/nsswitch.conf

group: files winbind
passwd: files winbind
group_compat: nis
passwd_compat: nis
hosts: files dns
networks: files
shells: files

Синхронизируем время с AD:

ntpdate 192.168.1.237

Теперь нужно ввести наш сервер в домен AD. 

net join -U epo

Joined ‘FW’ to realm ‘ADS.COM’

Собственно теперь нужно проверить, корректно ли зашёл наш сервер общается с доменом. Для этого выполняем комманды.

wbinfo -t
wbinfo -u
wbinfo -g
wbinfo -p

Если все команды выполнились без ошибок и вы увидели юезров и группы домена, то идём дальше. Если же нет, то перезагружаемся…. должно помочь.

Кидаем самбу в автозагрузку:

ee /etc/rc.conf

Добавляем туда:

samba_enable=»YES»

Стартуем самбу:

/usr/local/etc/rc.d/samba start

Вобщем то всё. Теперь советую потестить всё это дело. Берёте любую доменную машину с Windows, заходите от администратора на шару, создаёте папку…или переносите что нибудь на шару. Входите в свойства папки, далее Безопасность и пробуете дать права на чтение какому нибудь пользователю. Как видите права сохранились. Юзер домена имеет доступ к папке только для чтения. так же и с группами. Важно не забыть что права у нас наследуются.

Антивирусная проверка. ClamAV

Самба работает и функционирует. Теперь пришло время прикрутить к самбе проверку некоторых шар на вирусы. Я сказал некоторых, потому что у меня есть несколько шар где лежат базы 1С, и крайне не желательно проверять их на вирусы, думаю обьяснять не надо.
Антивирусом у нас будет служить ClamAV. А для связи ClamAV и Samba установим модуль samba-vscan. Приступим!

Ставим из портов ClamAV:

cd /usr/ports/security/clamav
make install clean

Я не заморачивался и в окошке опций выбрал стандартные значения.
После установки добавляем ClamAV в автозагрузку, желательно перез самбой, делаем rehash и ребутим сервер.

ee /etc/rc.conf

Добавляем туда:

clamav_clamd_enable=»YES»

rehash
reboot

После перезагрузки обновляем антивирусные базы:

freshclam

Переходим к samba-vscan. Хоть порт очень старый и не обновлялся буквально года 4. Но всё таки им пользуются и он справляется с работой. В Linux будет попроще… там есть несколько иных пакетов для связи антивируса с самбой. Итак, Ставим из портов samba-vscan:

cd /usr/ports/security/samba-vscan
make install clean

В конце установки вылезит небольшая инструкция для дальнейших действий для самбы 2* и 3*. Собственно по ней и cделаем всё.

Для начала правим конфиг samba-vscan и приводим его к такому виду.

ee /usr/local/etc/samba-vscan/vscan-clamav.conf

[samba-vscan]

max file size = 0
verbose file logging = no
scan on open = yes
scan on close = yes
deny access on error = no
deny access on minor error = no
send warning message = yes
infected file action = delete
quarantine directory = /tmp/infected_file
quarantine prefix = vir-
max lru files entries = 100
lru file entry lifetime = 5
exclude file types =
exclude file regexp =
clamd socket name = /var/run/clamav/clamd.sock
libclamav max files in archive = 1000
libclamav max archived file size = 10485760
libclamav max recursion level = 5

Создаём папку, которую мы указали в конфиге, для карантинов. Карантины правда у меня не пашут почему то, я даже ставил полные права на папку. Но думаю что создать её нужно:

mkdir /tmp/infected_file

Открываем конфиг самбы и на любой шаре ставим следующие надстройки:

ee /usr/local/etc/smb.conf

[data]
comment = Shares for Documents
path = /tmp/data
# AVP
vfs object = vscan-clamav
vscan-clamav: config-file = /usr/local/etc/samba-vscan/vscan-clamav.conf

read list = «@ADS\Пользователи домена»
write list = «@ADS\Пользователи домена»
admin users = «@ADS\Администраторы домена», AIN\epo
read only = No
create mask = 0660
directory mask = 0770
inherit owner = yes
inherit acls = yes
inherit permissions = yes
map acl inherit = yes
locking = no
# Запрещенные типы файлов. Будут удаляться.
# veto files = /*.bat/*.cc/*.wav/
# delete veto files = Yes

После этого принимаем изменения и рестартим самбу:

/usr/local/etc/rc.d/samba restart

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

http://www.eicar.org/download/eicar.com.txt
http://www.eicar.org/download/eicar_com.zip
http://www.eicar.org/download/eicarcom2.zip

Если файл заблокировался, то всё пашет. Если же нет, будем отлаживать и читать логи, для этого в vscan-clamav.conf включим логирование:

ee /usr/local/etc/samba-vscan/vscan-clamav.conf

verbose file logging = yes

Опять попробуем залить вирус на шару. А дальше смотрим логи:

cat /var/log/messages

Ищем там то что не нравится модулю и фиксим это.

Так же, можно (это уж если совсем заморочиться)добавить в crontab файл, задание, что бы непосредственно ClamAV проверял к примеру файловый обменник пользователей каждый день, часов в 22 00.  Для этого в файл /etc/crontab добавляем следующее:

22 * * * root clamdscan /shares/UserArchive

Антируткит

Самба настроена и режет вирусню. Теперь пришло время позаботиться о самой системе. Иногда злоумышленник может использовать программу шпиона, которая будет следить за сервером, собирать информацию, или просто откроет злоумышленнику «дырку» в систему. Неприятно, правда? Собственно сейчас мы поставим программу, которая будет выявлять эти самые шпионские вредные программы, и в случае нахождения блокировать её и связываться с системным администратором. Программа называется chkrootkit.

* В качестве антируткита можно использовать и другие программы Lynis и т.п. но все они в принципе имеют одинаковый алгоритм работы. Кстати многие специалисты не рекомендуют постоянно хранить антируткит программы на серверах.

Chkrootkit нету в портах фряхи. Поэтому будет выкачивать архив с ней и ставить не из портов. Для выкачивания ставим GNU wget. Очень полезный менеджер закачек. Ищем его в портах фряхи и ставим:

cd /usr/ports
make search name=»wget»

Port: wget-1.11.4
Path: /usr/ports/ftp/wget
Info: Retrieve files from the Net via HTTP(S) and FTP
Maint: vd@FreeBSD.org
B-deps: gettext-0.17_1 gmake-3.81_3 libiconv-1.11_1 perl-5.8.9_1
R-deps: gettext-0.17_1 libiconv-1.11_1
WWW: http://www.gnu.org/software/wget/wget.html

cd /usr/ports/ftp/wget
make install clean

На сайте производителя chkrootkit копируем ссылку на последнюю версию программы
http://www.chkrootkit.org/download/

Создаём каталог для загрузки и закачиваем по ссылке программу. Затем разорзхивируем:

mkdir /usr/wget
wget ftp://ftp.pangeia.com.br/pub/seg/pac/chkrootkit.tar.gz

tar xvzf chkrootkit.tar.gz
cd chkrootkit-0.47

Компилим прогу и ставим на скрипт проверки права:

make sense
chmod 755 chkrootkit

Ну и запускаем проверку системы

./chkrootkit

Появится активный лог проверки системы. На всех пунктах должно стоять — not found not infected. А в конце он напишет:

chkutmp: nothing deleted

Собственно теперь ставим задание в крон, что бы оно выполняло проверку два раза в день:

ee /etc/crontab

Добавляем туда следующее:

13,23 * * * root ./chkrootkit

Стеночка — настраиваем Firewall

Ну и наконец, нам осталось настроить фаервол. Думаю это не менее важная часть файлового сервера, особенно для больших организаций. Фаервол позволит защититься от атак, сетевого флуда и много ещё от чего.
Я остановил свой выбор на PF, портированный из OpenBSD фаервол. Считаю его очень даже надёжным, да и синтаксис правил у него попроще.

Я решил обойтись без ковыряния ядра. Мы просто создадим файл с правилами фаервола и они будут подгружаться при загрузке системы.

Вобщем включаем в /etc/rc.conf сам фаервол, и указываем файл с правилами к нему:

ee /etc/rc.conf

Ставим туда, где ни будь выше служб, следующее:

pf_enable=»YES»
pf_rules=»/etc/pf.conf»

Теперь создаём файл с правилами. В конфиге я постарался в коментах расписать что и как мы открываем к серверу из вне.

ee /etc/pf.conf

int_if=»em0″ # внутренний интерфейс
dns_serv=»192.168.1.232″ # адрес нашего DNS сервера
int_net=»192.168.1.0/24″
admin=»192.168.1.16″ # Комп админа
allowed_icmp_types=»{ echoreq, unreach }»
set block-policy return
set skip on lo0
set timeout { frag 10, tcp.established 3600 }
scrub in all
block all
# antispoof log quick for { lo0, $int_if, }
block drop log quick from

# ICMP
pass in on $int_if inet proto icmp all icmp-type $allowed_icmp_types

# ssh
pass in on $int_if proto tcp from $int_if:network to $int_if port ssh queue \
( qssh, qack ) synproxy state ( max-src-conn-rate 1/60, overload flush global )

# Mail
pass in on $int_if proto tcp from $int_net to $int_if port pop3
pass in on $int_if proto tcp from any to $int_if port smtp

# Http/s
pass in on $int_if proto tcp from any to $int_if port { http, https }

# DNS
pass in on $int_if proto { tcp, udp } from any to $int_if port domain

# SAMBA
pass in on $int_if proto { tcp, udp } from any to $int_if port 137
pass in on $int_if proto { tcp, udp } from any to $int_if port 138
pass in on $int_if proto { tcp, udp } from any to $int_if port 139
pass in on $int_if proto { tcp, udp } from any to $int_if port 445

pass in on $int_if proto udp from { $admin } to any port ntp queue qntp keep state

pass in on $int_if proto tcp from $admin to any port nntp queue ( qadmin, qack ) modulate state

pass in on $int_if proto udp from $admin to any port domain queue qdns keep state

pass log inet proto icmp all icmp-type $allowed_icmp_types
pass out on $int_if proto { tcp, udp, icmp } all keep state

Включаем фаервол

/etc/rc.d/pf start

Проверяем наши правила

pfctl -nf /etc/pf.conf

Если всё без ошибок, то применяем на фаерволе (При этом у вас может отвалиться ssh, перезайдите):

pfctl -f /etc/pf.conf

Вот вроде и всё. Теперь вы имеете безопасный и стабильный файловый сервер на FreeBSD. Теперь вам остаётся наполнить обменник и если необходимо, редактировать правила для фаервола. Применять новые правила нужно опять же коммандой pfctl -f, но перед этим проверять их (pfctl -nf). При форс-мажорах можно выключить фаервол вообще /etc/rc.d/pf stop.
Дерзайте! Спасибо источникам которые мне помогли.  done

Источники которые мне помогли:

http://www.lissyara.su/
http://linux-ru.blogspot.com/
http://www.samba.org.ua/
http://www.linuxcenter.ru/ 

Реклама

комментариев 5

Subscribe to comments with RSS.

  1. […] Автор статьи – Максим HidX Последнее редактирование &… […]

  2. Алекксандр said, on Апрель 28, 2010 at 14:33

    По-моему, отличная статья! Спасибо!

  3. senatum said, on Июнь 10, 2011 at 16:31

    очень хорошее руководство, спасибо

  4. effesok said, on Декабрь 8, 2011 at 14:14

    лучшая гильдия WOW

  5. slancadiamins said, on Май 7, 2013 at 13:58

    Каникулы в СНГ в Июне — это первый шаг навстречу морю, солнцу
    Мини отель Виктория в Феодосии
    Туризм на Украине 2013
    Чёрное море крым отзывы


Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход /  Изменить )

Google photo

Для комментария используется ваша учётная запись Google. Выход /  Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход /  Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход /  Изменить )

Connecting to %s