Андрей Смирнов
Время чтения: ~24 мин.
Просмотров: 15

Настройка безопасности Ubuntu 16.04

Без сомнения, только что установленная система Linux намного устойчивее к различным вредоносным программам, шпионскому программному обеспечению и действиям хакеров, чем такая же версия Windows. Но тем не менее большинство систем Linux используют настройки по умолчанию, которые не совсем безопасны по своей сути.

Некоторые дистрибутивы Linux рассчитаны на то, чтобы быть максимально безопасными из коробки, но, как правило, они вызывают очень много трудностей у новичков, особенно не специалистов в сфере компьютерной безопасности.

Первым делом вы должны знать, что нужно держать свою систему постоянно обновленной и в самом актуальном состоянии. Постоянно обнаруживаются новые уязвимости в ядре и программном обеспечении, примером может послужить та же Drity COW. Разработчики закрывают эти баги очень быстро, но чтобы применить эти исправления на своей системе вам нужно ее своевременно обновлять.

Другое важное замечание — это пароль пользователя. Не используйте пользователя без пароля. Если вам нужно давать доступ к компьютеру другим людям, создайте новый аккаунт, например, гостевой. Но всегда используйте пароли. Операционная система Linux была изначально построена как многопользовательская система с учетом обеспечения безопасности для всех пользователей, поэтому не стоит упускать эту возможность. Но это все советы, которые вы и так, наверное уже знаете, давайте рассмотрим действительно полезные способы увеличить безопасность ubuntu.

По умолчанию весь объем общей памяти /run/shm доступен для чтения и записи с возможностью выполнения программ. Это считается брешью в безопасности и многие эксплойты используют /run/shm для атак на запущенные сервисы. Для большинства настольных, а особенно серверных устройств рекомендуется монтировать этот файл в режиме только для чтения. Для этого нужно добавить такую строчку в /etc/fstab:

none /run/shm tmpfs defaults,ro 0 0

Но, тем не менее, некоторые программы не будут работать, если /run/shm доступен только для чтения, одна из них — это Google Chrome. Если вы используете Google Chrome, то мы должны сохранить возможность записи, но можем запретить выполнение программ, для этого добавьте такую строчку вместо предложенной выше:

none /run/shm tmpfs rw,noexec,nosuid,nodev 0 0

Помимо вашего аккаунта, в Ubuntu есть еще гостевая учетная запись, которую вы можете использовать чтобы дать попользоваться вашим ноутбуком другу. Утилита su позволяет выполнять программы от имени другого пользователя. Это очень полезно при администрировании системы и жизненно важно при правильном применении. Но, тем не менее, к этой утилите могут получить доступ все пользователи Linux, а это уже злоупотребление. Чтобы запретить гостевому аккаунту доступ к команде su выполните:

Ваш домашний каталог по умолчанию будет доступен каждому пользователю в системе. Так что если у вас есть гостевая учетная запись, то гость сможет получить полный доступ ко всем вашим личным файлам и документам. Но вы можете сделать его доступным только вам. Откройте терминал и выполните следующую команду:

Она устанавливает права таким образом, чтобы владельцу папки, то есть вам было доступно все, а другие пользователи даже не могли посмотреть содержимое. В качестве альтернативы можно установить разрешения 750, которые предоставят доступ на чтение в вашей папке для пользователей из той же группы, что и вы:

Теперь безопасность Ubuntu 16.04, а особенно ваших личных данных будет немного выше.

По умолчанию в Ubuntu вы можете войти в систему по SSH от имени суперпользователя Несмотря на то, что вы устанавливаете пароль для пользователя root, это может быть потенциально опасно, поскольку если пароль очень простой, то злоумышленник сможет его перебрать и получить полный контроль над компьютером. Возможно, в вашей системе не установлена служба sshd. Чтобы проверить выполните:

Если вы получите сообщение connection refused, то это будет значить, что SSH сервер не установлен и вы можете пропустить этот шаг. Но если он установлен, то его нужно настроить с помощью конфигурационного файла /etc/ssh/sshd_config. Откройте этот файл и замените строку:

PermitRootLogin yes

На:

PermitRootLogin no

Готово, теперь по ssh в вашу систему будет сложнее прорваться, но настройка безопасности в ubuntu 16.04 еще не завершена.

Возможно, на вашем компьютере установлен не только сервер ssh, но и служба баз данных и веб-сервер apache или nginx. Если это домашний компьютер, то, скорее всего, вы бы не хотели чтобы кто-то еще мог подключиться к вашему локальному сайту или базе данных. Чтобы это предотвратить нужно установить фаервол. В Ubuntu рекомендуется использовать gufw, так как он разработан специально для этой системы.

Для установки выполните:

gufw8.png

Затем нужно открыть программу, включить защиту и заблокировать все входящие соединения. Разрешить только нужные порты для браузера и других известных программ. Подробнее читайте в инструкции настройка Gufw.

Суть MITM атаки или атаки «Человек посередине» в том, что другой человек перехватывает все пакеты, которые вы  передаете серверу, таким образом, может получить все ваши пароли и личные данные. Не ото всех атак подобного рода мы можем защититься, но довольно популярна в публичных локальных сетях разновидность MITM атак — ARP атака. С помощью особенностей протокола ARP злоумышленник выдает перед вашим компьютером себя за роутер и вы отправляете все свои пакеты с данными ему. От этого можно очень просто защититься с помощью утилиты TuxCut.

В официальных репозиториях программы нет, поэтому для ее установки нужно скачать пакет с GitHub:

Затем установите полученный пакет:

Перед тем, как запускать программу, запустите ее сервис:

Главное окно утилиты выглядит вот так:

tuxcut_orig.png

Здесь отображены IP адреса всех пользователей, подключенных к сети, а также соответствующий каждому из них MAC адрес. Если отметить галочку Protection Mode, то программа будет защищать от ARP атак. Вы можете использовать ее в публичных сетях, например, в общественном wifi, где опасаетесь за свою безопасность.

Ну вот и все, теперь настройка безопасности Ubuntu 16.04 завершена и ваша система стала намного безопаснее. Мы перекрыли самые распространенные векторы атак и методов проникновения в систему используемых хакерами. Если вы знаете другие полезные способы улучшить безопасность в Ubuntu пишите в комментариях!

Никто из нас не хочет, чтобы личная информация попала в чужие руки. Но как защитить систему от атак и хищений данных? Неужели придется читать километровые мануалы по настройке и алгоритмам шифрования? Совсем не обязательно. В этой статье я расскажу, как сделать Linux-систему безопасной буквально за 30 минут.

Введение

Мы живем в век мобильных устройств и постоянного онлайна. Мы ходим в кафе с ноутбуком и запускаем на домашних машинах веб-серверы, выставленные в интернет. Мы регистрируемся на сотнях сайтов и используем одинаковые пароли для веб-сервисов. В наших карманах всегда лежит смартфон, в который забиты десятки паролей, и хранятся ключи от нескольких SSH-серверов. Мы настолько привыкли к тому, что сторонние сервисы заботятся о нашей конфиденциальности, что уже перестали уделять ей внимание.

Когда я потерял смартфон, мне сильно повезло, что установленный на него антивор оказался работоспособным и позволил удаленно стереть все данные из памяти девайса. Когда я по невнимательности открыл SSH-порт на домашней машине с юзером без пароля (!) во внешний мир (!!), мне сильно повезло, что на машину пробрались скрипт-кидди, которые кроме смешной истории шелла не оставили никаких серьезных следов своего пребывания в системе. Когда я случайно опубликовал в интернете листинг со своим паролем от Gmail, мне сильно повезло, что нашелся добрый человек, который предупредил меня об этом.

Может быть, я и раздолбай, но я твердо уверен, что подобные казусы случались со многими, кто читает эти строки. И хорошо, если эти люди, в отличие от меня, серьезно позаботились о защите своей машины. Ведь антивор мог бы и не сработать, и вместо скрипт-кидди в машину могли пробраться серьезные люди, и потерять я мог не смартфон, а ноутбук, на котором кроме пароля пользователя не было никакой другой защиты. Нет, полагаться на одну двухфакторную аутентификацию Google и дурацкие пароли в наш век определенно не стоит, нужно что-то более серьезное.

Эта статья — гайд параноидального юниксоида, посвященный тотальной защите Linux-машины от всего и вся. Я не решусь сказать, что все описанное здесь обязательно к применению. Совсем наоборот, это сборник рецептов, информацию из которого можно использовать для защиты себя и данных на тех рубежах, где это нужно именно в твоей конкретной ситуации.

Пароль!

Все начинается с паролей. Они везде: в окне логина в Linux-дистрибутиве, в формах регистрации на интернет-сайтах, на FTP- и SSH-серверах и на экране блокировки смартфона. Стандарт для паролей сегодня — это 8–12 символов в разном регистре с включением цифр. Генерировать такие пароли своим собственным умом довольно утомительно, но есть простой способ сделать это автоматически:

$ openssl rand -base64 6  

Никаких внешних приложений, никаких расширений для веб-браузеров, OpenSSL есть на любой машине. Хотя, если кому-то будет удобней, он может установить и использовать для этих целей pwgen (поговаривают, пароль получится более стойким):

$ pwgen -Bs 8 1  

Где хранить пароли? Сегодня у каждого юзера их так много, что хранить все в голове просто невозможно. Довериться системе автосохранения браузера? Можно, но кто знает, как Google или Mozilla будет к ним относиться. Сноуден рассказывал, что не очень хорошо. Поэтому пароли надо хранить на самой машине в зашифрованном контейнере. Отцы-основатели рекомендуют использовать для этого KeePassX. Штука графическая, что не сильно нравится самим отцам-основателям, но зато работает везде, включая известный гугль-зонд Android (KeePassDroid). Останется лишь перекинуть базу с паролями куда надо.

cover-217x280.jpg

Хакер #176. Анонимность в интернете

Шифруемся

Шифрование — как много в этом слове… Сегодня шифрование везде и нигде одновременно. Нас заставляют пользоваться HTTPS-версиями сайтов, а нам все равно. Нам говорят: «Шифруй домашний каталог», а мы говорим: «Потом настрою». Нам говорят: «Любимое занятие сотрудников Dropbox — это ржать над личными фотками юзеров», а мы: «Пусть ржут». Между тем шифрование — это единственное абсолютное средство защиты на сегодняшний день. А еще оно очень доступно и сглаживает морщины.

В Linux можно найти тонны средств шифрования всего и вся, от разделов на жестком диске до одиночных файлов. Три наиболее известных и проверенных временем инструмента — это dm-crypt/LUKS, ecryptfs и encfs. Первый шифрует целые диски и разделы, второй и третий — каталоги с важной информацией, каждый файл в отдельности, что очень удобно, если потребуется делать инкрементальные бэкапы или использовать в связке с Dropbox. Также есть несколько менее известных инструментов, включая TrueCrypt например.

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

$ sudo apt-get install ecryptfs-utils  

И, собственно, включить шифрование:

$ sudo ecryptfs-setup-swap  $ ecryptfs-setup-private  

Далее достаточно ввести свой пароль, используемый для логина, и перезайти в систему. Да, все действительно так просто. Первая команда зашифрует и перемонтирует своп, изменив нужные строки в /etc/fstab. Вторая — создаст каталоги ~/.Private и ~/Private, в которых будут храниться зашифрованные и расшифрованные файлы соответственно. При входе в систему будет срабатывать PAM-модуль pam_ecryptfs.so, который смонтирует первый каталог на второй с прозрачным шифрованием данных. После размонтирования ~/Private окажется пуст, а ~/.Private будет содержать все файлы в зашифрованном виде.

Не возбраняется шифровать и весь домашний каталог целиком. Производительность при этом упадет не сильно, зато под защитой окажутся вообще все файлы, включая тот же сетевой каталог ~/Dropbox. Делается это так:

# ecryptfs-migrate-home -u vasya

Кстати, места на диске должно быть в 2,5 раза больше, чем данных у vasya, так что рекомендую заранее почиститься. После завершения операции следует сразу войти под юзером vasya и проверить работоспособность:

$ mount | grep Private  /home/vasya/.Private on /home/vasya type ecryptfs ...  

Если все ок, незашифрованную копию данных можно затереть:

$ sudo rm -r /home/vasya.*  
Ecryptfs предупреждает нас
Ecryptfs предупреждает нас

Заметаем следы

ОK, пароли в надежном месте, личные файлы тоже, что теперь? А теперь мы должны позаботиться о том, чтобы какие-то куски наших личных данных не попали в чужие руки. Ни для кого не секрет, что при удалении файла его актуальное содержимое остается на носителе даже в том случае, если после этого произвести форматирование. Наши зашифрованные данные будут в сохранности даже после стирания, но как быть с флешками и прочими картами памяти? Здесь нам пригодится утилита srm, которая не просто удаляет файл, но и заполняет оставшиеся после него блоки данных мусором:

$ sudo apt-get install secure-delete  $ srm секретный-файл.txt home-video.mpg  

Как всегда, все просто до безобразия. Далее, если речь идет о всем носителе, то можно воспользоваться старым добрым dd:

# dd if=/dev/zero of=/dev/sdb  

Эта команда сотрет все данные на флешке sdb. Далее останется создать таблицу разделов (с одним разделом) и отформатировать в нужную ФС. Использовать для этого рекомендуется fdisk и mkfs.vfat, но можно обойтись и графическим gparted.

Предотвращение BruteForce-атак

Fail2ban — демон, который просматривает логи на предмет попыток подобрать пароли к сетевым сервисам. Если такие попытки найдены, то подозрительный IP-адрес блокируется средствами iptables или TCP Wrappers. Сервис способен оповещать владельца хоста об инциденте по email и сбрасывать блокировку через заданное время. Изначально Fail2ban разрабатывался для защиты SSH, сегодня предлагаются готовые примеры для Apache, lighttpd, Postfix, exim, Cyrus IMAP, named и так далее. Причем один процесс Fail2ban может защищать сразу несколько сервисов.

В Ubuntu/Debian для установки набираем:

# apt-get install fail2ban  

Конфиги находятся в каталоге /etc/fail2ban. После изменения конфигурации следует перезапускать fail2ban командой:

# /etc/init.d/fail2ban restart  

Угроза извне

Теперь позаботимся об угрозах, исходящих из недр всемирной паутины. Здесь я должен был бы начать рассказ об iptables и pf, запущенном на выделенной машине под управлением OpenBSD, но все это излишне, когда есть ipkungfu. Что это такое? Это скрипт, который произведет за нас всю грязную работу по конфигурированию брандмауэра, без необходимости составлять километровые списки правил. Устанавливаем:

$ sudo apt-get install ipkungfu  

Правим конфиг:

$ sudo vi /etc/ipkungfu/ipkungfu.conf  # Локальная сеть, если есть — пишем адрес сети вместе с маской, нет — пишем loopback-адрес  LOCAL_NET="127.0.0.1"    # Наша машина не является шлюзом  GATEWAY=0    # Закрываем нужные порты  FORBIDDEN_PORTS="135 137 139"    # Блокируем пинги, 90% киддисов отвалится на этом этапе  BLOCK_PINGS=1    # Дропаем подозрительные пакеты (разного рода флуд)  SUSPECT="DROP"    # Дропаем «неправильные» пакеты (некоторые типы DoS)  KNOWN_BAD="DROP"    # Сканирование портов? В трэш!  PORT_SCAN="DROP"  

Для включения ipkungfu открываем файл /etc/default/ipkungfu и меняем строку IPKFSTART = 0 на IPKFSTART = 1. Запускаем:

$ sudo ipkungfu  

Дополнительно внесем правки в /etc/sysctl.conf:

$ sudo vi /etc/systcl.conf  # Дропаем ICMP-редиректы (против атак типа MITM)  net.ipv4.conf.all.accept_redirects=0  net.ipv6.conf.all.accept_redirects=0  # Включаем механизм TCP syncookies  net.ipv4.tcp_syncookies=1  # Различные твики (защита от спуфинга, увеличение очереди «полуоткрытых» TCP-соединений и так далее)  net.ipv4.tcp_timestamps=0  net.ipv4.conf.all.rp_filter=1  net.ipv4.tcp_max_syn_backlog=1280  kernel.core_uses_pid=1  

Активируем изменения:

$ sudo sysctl -p  

Выявляем вторжения

Snort — один из любимейших инструментов админов и главный фигурант всех руководств по безопасности. Штука с долгой историей и колоссальными возможностями, которой посвящены целые книги. Что он делает в нашем гайде по быстрой настройке безопасной системы? А здесь ему самое место, Snort можно и не конфигурировать:

$ sudo apt-get install snort  $ snort -D  

Все! Я не шучу, стандартных настроек Snort более чем достаточно для защиты типовых сетевых сервисов, если, конечно, они у тебя есть. Нужно только время от времени просматривать лог. А в нем можно обнаружить строки типа этих:

[**] [1:2329:6] MS-SQL probe response overflow attempt [**]  [Classification: Attempted User Privilege Gain] [Priority: 1]  [Xref => [url]http://www.securityfocus.com/bid/9407][/url]  

Упс. Кто-то пытался вызвать переполнение буфера в MySQL. Тут сразу есть и ссылочка на страницу с детальным описанием проблемы. Красота.

Кто-то наследил…

Кто-то особенно умный смог обойти наш брандмауэр, пройти мимо Snort, получить права root в системе и теперь ходит в систему регулярно, используя установленный бэкдор. Нехорошо, бэкдор надо найти, удалить, а систему обновить. Для поиска руткитов и бэкдоров используем rkhunter:

$ sudo apt-get install rkhunter  

Запускаем:

$ sudo rkhunter -c --sk  

Софтина проверит всю систему на наличие руткитов и выведет на экран результаты. Если зловред все-таки найдется, rkhunter укажет на место и его можно будет затереть. Более детальный лог располагается здесь: /var/log/rkhunter.log. Запускать rkhunter лучше в качестве cron-задания ежедневно:

$ sudo vi /etc/cron.daily/rkhunter.sh  #!/bin/bash  /usr/bin/rkhunter -c --cronjob 2>&1 | mail -s "RKhunter Scan Results" vasya@email.com  

Заменяем email-адрес Васи на свой и делаем скрипт исполняемым:

$ sudo chmod +x /etc/cron.daily/rkhunter.sh  

Базу rkhunter рекомендуется время от времени обновлять с помощью такой команды:

$ sudo rkhunter --update  

Ее, кстати, можно добавить перед командой проверки в cron-сценарий. Еще два инструмента поиска руткитов:

$ sudo apt-get install tiger  $ sudo tiger  $ sudo apt-get install lynis  $ sudo lynis -c  

По сути, те же яйца Фаберже с высоты птичьего полета, но базы у них различные. Возможно, с их помощью удастся выявить то, что пропустил rkhunter. Ну и на закуску debsums — инструмент для сверки контрольных сумм файлов, установленных пакетов с эталоном. Ставим:

$ sudo apt-get install debsums  

Запускаем проверку:

$ sudo debsums -ac  

Как всегда? запуск можно добавить в задания cron.

rkhunter за работой
rkhunter за работой
В моей системе руткитов нет
В моей системе руткитов нет

</p>

За пределами

Теперь поговорим о том, как сохранить свою анонимность в Сети и получить доступ к сайтам и страницам, заблокированным по требованию различных организаций-правообладателей и прочих Мизулиных. Самый простой способ сделать это — воспользоваться одним из тысяч прокси-серверов по всему миру. Многие из них бесплатны, но зачастую обрезают канал до скорости древнего аналогового модема.

Чтобы спокойно ходить по сайтам и только в случае необходимости включать прокси, можно воспользоваться одним из множества расширений для Chrome и Firefox, которые легко находятся в каталоге по запросу proxy switcher. Устанавливаем, вбиваем список нужных прокси и переключаемся на нужный, увидев вместо страницы табличку «Доступ к странице ограничен по требованию господина Скумбриевича».

В тех ситуациях, когда под фильтр попал весь сайт и его адрес внесли в черный список на стороне DNS-серверов провайдеров, можно воспользоваться свободными DNS-серверами, адреса которых опубликованы здесь. Просто берем два любых понравившихся адреса и добавляем в /etc/resolv.conf:

nameserver 156.154.70.22  nameserver 156.154.71.22  

Чтобы разного рода DHCP-клиенты и NetworkManager’ы не перезаписали файл адресами, полученными от провайдера или роутера, делаем файл неперезаписываемым с помощью расширенных атрибутов:

$ sudo chattr +i /etc/resolv.conf  

После этого файл станет защищен от записи для всех, включая root.

Чтобы еще более анонимизировать свое пребывание в Сети, можно воспользоваться также демоном dnscrypt, который будет шифровать все запросы к DNS-серверу в дополнение к прокси-серверу, используемому для соединения с самим сайтом. Устанавливаем:

$ wget http://download.dnscrypt.org/dnscrypt-proxy/dnscrypt-proxy-1.3.2.tar.bz2  $ bunzip2 -cd dnscrypt-proxy-*.tar.bz2 | tar xvf -  $ cd dnscrypt-proxy-*  $ sudo apt-get install build-essential  $ ./configure && make -j2  $ sudo make install  

Указываем в /etc/resolv.conf loopback-адрес:

$ vi /etc/resolv.conf  nameserver 127.0.0.1  

Запускаем демон:

$ sudo dnscrypt-proxy --daemonize  

Кстати, версии dnscrypt есть для Windows, iOS и Android.

Луковая маршрутизация

Что такое луковая маршрутизация? Это Tor. А Tor, в свою очередь, — это система, которая позволяет создать полностью анонимную сеть с выходом в интернет. Термин «луковый» здесь применен относительно модели работы, при которой любой сетевой пакет будет «обернут» в три слоя шифрования и пройдет на пути к адресату через три ноды, каждая из которых будет снимать свой слой и передавать результат дальше. Все, конечно, сложнее, но для нас важно только то, что это один из немногих типов организации сети, который позволяет сохранить полную анонимность.

Тем не менее, где есть анонимность, там есть и проблемы соединения. И у Tor их как минимум три: он чудовищно медленный (спасибо шифрованию и передаче через цепочку нод), он будет создавать нагрузку на твою сеть (потому что ты сам будешь одной из нод), и он уязвим для перехвата трафика. Последнее — естественное следствие возможности выхода в интернет из Tor-сети: последняя нода (выходная) будет снимать последний слой шифрования и может получить доступ к данным.

Тем не менее Tor очень легко установить и использовать:

$ sudo apt-get install tor  

Все, теперь на локальной машине будет прокси-сервер, ведущий в сеть Tor. Адрес: 127.0.0.1:9050, вбить в браузер можно с помощью все того же расширения, ну или добавить через настройки. Имей в виду, что это SOCKS, а не HTTP-прокси.

Tor говорит, что он не HTTP-прокси
Tor говорит, что он не HTTP-прокси

info-icon.jpg#26759185

INFO

Версия Tor для Android называется Orbot.

Чтобы введенный в командной строке пароль не был сохранен в истории, можно использовать хитрый трюк под названием «добавь в начале команды пробел».

Именно ecryptfs используется для шифрования домашнего каталога в Ubuntu.

Борьба с флудом

Приведу несколько команд, которые могут помочь при флуде твоего хоста.

Подсчет количества коннектов на определенный порт:

$ netstat -na | grep ":порт " | wc -l  

Подсчет числа «полуоткрытых» TCP-соединений:

$ netstat -na | grep ":порт " | grep SYN_RCVD | wc -l  

Просмотр списка IP-адресов, с которых идут запросы на подключение:

$ netstat -na | grep ":порт " | sort | uniq -c | sort -nr | less  

Анализ подозрительных пакетов с помощью tcpdump:

# tcpdump -n -i eth0 -s 0 -w output.txt dst port порт and host IP-сервера  

Дропаем подключения атакующего:

# iptables -A INPUT -s IP-атакующего -p tcp --destination-port порт -j DROP  

Ограничиваем максимальное число «полуоткрытых» соединений с одного IP к конкретному порту:

# iptables -I INPUT -p tcp --syn --dport порт -m iplimit --iplimit-above 10 -j DROP  

Отключаем ответы на запросы ICMP ECHO:

# iptables -A INPUT -p icmp -j DROP --icmp-type 8  

Выводы

Вот и все. Не вдаваясь в детали и без необходимости изучения мануалов мы создали Linux-box, который защищен от вторжения извне, от руткитов и прочей заразы, от непосредственно вмешательства человека, от перехвата трафика и слежки. Остается лишь регулярно обновлять систему, запретить парольный вход по SSH, убрать лишние сервисы и не допускать ошибок конфигурирования.

</pre></pre></pre></pre></pre></pre></pre></pre></pre></pre></pre></pre></pre></pre></pre>

ubuntu-security-000.png

Существует распространенное заблуждение, что сервера под управлением ОС Linux являются наиболее безопасными и защищенными от вторжений извне. К сожалению это не так, безопасность любого сервера зависит от ряда факторов и мероприятий по ее обеспечению и практически не зависит от применяемой операционной системы. 

Мы решили начать цикл статей посвященных сетевой безопасности с Ubuntu Server, так как решения на данной платформе вызывают большой интерес у наших читателей и так как многие считают, что Linux решения безопасны сами по себе.

В тоже время роутер с выделенным IP-адресом является «воротами» к локальной сети и только от администратора будет зависеть будут эти ворота надежной преградой или окажутся дачной калиткой закрытой на гвоздик.

Еще одно частое заблуждение, рассуждения в стиле: «да кому он нужен, наш сервер, у нас ничего интересного нет». Действительно, ваша локальная сеть может не представлять для злоумышленников никакого интереса, однако они могут использовать взломанный сервер для рассылки спама, атак на другие сервера, анонимный прокси, короче говоря как отправную точку для своих темных делишек.

А это уже неприятно и может послужить источником разнообразных проблем: начиная от провайдера и заканчивая правоохранительными органами. Да и про распространение вирусов, кражу и уничтожение важной информации тоже забывать не стоит, как и о том, что простой предприятия приводит к вполне ощутимым убыткам.

Несмотря на то, что статья посвящена Ubuntu Server, вначале мы рассмотрим общие вопросы безопасности, которые в равной степени относятся к любой платформе и являются азами, без усвоения которых нет смысла обсуждать вопрос более детально.

С чего начинается безопасность?

Нет, безопасность не начинается с брандмауэра, она вообще не начинается с технических средств, безопасность начинается с пользователя. Ведь что толку от самой-самой крутой металлической двери установленной самыми лучшими специалистами если хозяин оставит ключ под ковриком?

Поэтому первое, что вы должны сделать — это провести аудит безопасности. Не пугайтесь этого слова, все не так сложно: начертите схематический план сети, на котором отметьте безопасную зону, зону потенциальной опасности и зону повышенной опасности, а также составьте список пользователей которые имеют (должны иметь доступ) к этим зонам.

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

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

К опасной зоне следует отнести устройства непосредственно доступные извне, в идеальном случае это должен быть один роутер.

По возможности потенциально опасную зону следует вынести в отдельную подсеть — демилитаризованную зону (DMZ), которая отделена от основной сети дополнительным брандмауэром.

ubuntu-security-001-thumb-450x141-1777.png

Устройства локальной сети должны иметь доступ только к тем службам в DMZ, которые им необходимы, например SMTP, POP3, HTTP, остальные соединения должны блокироваться. Это позволит надежно изолировать злоумышленника или вредоносное ПО, воспользовавшихся уязвимостью в отдельном сервисе, демилитаризованной зоной, закрыв им доступ к основной сети.

Физически DMZ можно организовать поставив отдельный сервер / аппаратный брандмауэр или добавив дополнительную сетевую карту в роутер, однако в последнем случае придется уделить пристальное внимание безопасности роутера. Но в любом случае обеспечить безопасность одного сервера гораздо проще, чем группы серверов.

Следующим шагом должен стать анализ списка пользователей, всем ли им нужен доступ в DMZ и к роутеру (за исключением общедоступных служб), отдельное внимание следует уделить пользователям подключающимся извне.

Как правило, здесь требуется очень непопулярный шаг — введение в действие политики паролей. Все пароли пользователей имеющих доступ к критически важным сервисам и имеющих возможность подключаться извне должны содержать не менее 6 символов и иметь в составе, кроме строчных букв, символы двух категорий из трех: прописные буквы, цифры, неалфавитные символы.

Кроме того пароль не должен включать логин пользователя или его часть, не содержать дат и имен, которые можно связать с пользователем и, желательно, не являться словарным словом.

Неплохо завести практику менять пароли раз в 30-40 дней. Понятно, что подобная политика способна вызвать неприятие со стороны пользователей, но вы должны всегда помнить, что пароли типа 123 или qwerty равносильны ключу оставленному под ковриком.

Безопасность сервера — ничего лишнего.

Теперь, имея представление, что мы хотим защитить и от чего, перейдем к самому серверу. Составьте список всех служб и сервисов, затем подумайте, все ли они необходимы именно на этом сервере, либо их можно куда-либо вынести.

Чем меньше служб, тем проще обеспечить безопасность, тем меньше шанс компрометации сервера через критическую уязвимость в одной из них.

Сконфигурируйте службы, обслуживающие локальную сеть (например squid), таким образом, чтобы они принимали запросы исключительно с локального интерфейса. Чем меньше служб доступно извне, тем лучше.

По возможности подпишитесь на рассылки безопасности для используемого серверного ПО и поддерживайте его в актуальном состоянии, устанавливая все необходимые обновления.

Хорошим помощником в деле обеспечения безопасности будет сканер уязвимостей, которым следует просканировать внешний интерфейс сервера. Мы использовали демо-версию одного из самых известных продуктов — XSpider 7.7.

ubuntu-security-002-thumb-450x222-1780.png

Сканер показывает открытые порты, пытается определить тип работающей службы и, если это удалось, уязвимости для нее. Как видим — правильно сконфигурированная система вполне безопасна, однако не стоит оставлять ключ под ковриком, наличие на роутере открытых портов 1723 (VPN) и 3389 (RDP, проброшен на терминальный сервер) хороший повод подумать о политике паролей.

Отдельно стоит поговорить о безопасности SSH, данная служба обычно используется администраторами для удаленного управления сервером и представляет повышенный интерес для злоумышленников. Настройки SSH хранятся в файле /etc/ssh/sshd_config, все описываемые ниже изменения вносятся в него. В первую очередь следует запретить авторизацию под пользователем root, для этого добавьте опцию:

PermitRootLogin no

Теперь злоумышленнику придется подбирать не только пароль, но еще и логин, при этом ему все равно будет неизвестен пароль суперпользователя (надеемся он не совпадает с вашим паролем). Все административные задачи при подключении извне стоит выполнять из-под sudo, входя в систему непривилегированным пользователем.

Стоит явно указать список разрешенных пользователей, при этом можно использовать записи типа user@host, которая разрешает указанному пользователю подключаться только с указанного хоста. Например чтобы разрешить пользователю ivanov подключаться из дома (IP 1.2.3.4) следует добавить следующую запись:

AllowUser ivanov@1.2.3.4

Также запретите использование устаревшего и менее безопасного протокола SSH1, разрешив только вторую версию протокола, для этого приведите следующую строку к виду:

Protocol 2

Несмотря на все принятые меры попытки подключится к SSH и иным публичным сервисам все равно будут, чтобы предотвратить подбор паролей воспользуйтесь утилитой fail2ban, которая позволяет автоматически банить пользователя после нескольких неудачных попыток авторизации. Установить ее можно командой:

sudo apt-get install fail2ban

Данная утилита готова к работе сразу после установки, однако мы бы советовали сразу изменить некоторые параметры, для этого внесите изменения в файл /etc/fail2ban/jail.conf. По умолчанию контролируется только доступ к SSH и время бана составляет 10 минут (600 секунд), на наш взгляд стоит его увеличить, изменив следующую опцию:

bantime = 6000

После чего пролистайте файл и включите секции для работающих в вашей системе служб, установив после имени соответствующей секции параметр enabled в состояние true, например для службы proftpd это будет выглядеть так:

[proftpd]enabled = true

Еще один важный параметр maxretry, который отвечает за максимальное количество попыток подключения. После изменения настроек не забудьте перезапустить сервис:

sudo /etc/init.d/fail2ban restart

Лог работы утилиты вы можете посмотреть в /var/log/fail2ban.log.

Надеемся, что приведенные рекомендации помогут вам сделать ваш сервер действительно неприступной крепостью.

Используемые источники:

  • https://losst.ru/nastrojka-bezopasnosti-ubuntu-16-04
  • https://xakep.ru/2014/10/02/paranoid-linuxoid/
  • https://interface31.ru/tech_it/2011/09/setevaya-bezopasnost-chast-1-ubuntu-server.html

Рейтинг автора
5
Подборку подготовил
Максим Уваров
Наш эксперт
Написано статей
171
Ссылка на основную публикацию
Похожие публикации