Что можно сделать для защиты Ubuntu Server?

35

У меня есть проект по обеспечению безопасности Ubuntu Server, насколько я могу. Сервер является сервером веб-хостинга. На сервере будут работать LAMP, Mail и DNS.

Один ноль
источник
Какие сервисы будут запущены?
Wojox
ЛАМПА, Почта, DNS
один ноль
Я сделал Шпаргалку по Ubuntu Server, и я хотел бы поделиться ею с вами. Первые несколько страниц - это общие команды linux, затем конкретные серверные пакеты, а последняя страница - контрольный список безопасности сервера. Контрольный список объединяет советы и рекомендации со многих веб-сайтов. Я надеюсь, что это поможет вам! Лицензировано по лицензии WTFPL . Вы можете просмотреть / скачать / любой контрольный список здесь . Я обновляю это время от времени.
Ной

Ответы:

43

Вот список того, что я делаю для защиты своего сервера.

  1. Включите UFW ( sudo ufw enable) и разрешите только те порты, которые действительно используются. ( sudo ufw allow 80)
  2. Убедитесь, что MySQL разрешает соединения только с localhost.
  3. Включить TLS на почтовых сервисах. Даже если это самоподписанный сертификат. Вы не хотите, чтобы пароли отправлялись в открытом виде.
  4. Установите блокировщики ssh bruteforce, такие как denyhosts или fail2ban. ( sudo apt-get install denyhosts)
  5. Посмотрите на создание только логинов на основе ключей ssh.
  6. Изучите AppArmor. Если вы используете довольно ванильные конфигурации, то это чрезвычайно просто. Просто убедитесь, что он включен. Это поможет уменьшить эксплойты нулевого дня.
  7. В зависимости от физического доступа к серверу вы можете даже захотеть посмотреть на шифрование данных на жестком диске.
  8. Следуйте другим рекомендациям в этой ссылке. РЕДАКТИРОВАТЬ: я забыл отредактировать это, когда у меня не было достаточно репутации, чтобы добавить больше ссылок. Ссылка, указанная здесь, является последней ссылкой ниже.
  9. Никогда не доверяйте своим пользователям. Если у вас есть несколько пользователей с доступом к системе, заблокируйте их. Если вам нужно предоставить им доступ к sudo, дайте им только то, что им нужно.
  10. Используй здравый смысл. Подумайте очень серьезно о том, как вы попали бы, если бы вы были когда-либо заблокированы. Затем закройте эти отверстия.

Еще несколько вещей, чтобы рассмотреть. Большинство людей забывают о физическом доступе. Все конфигурации программного обеспечения в мире ничего не значат, если я смогу физически войти с LiveCD и украсть ваши данные. Остерегайтесь социальной инженерии. Задайте вопросы, чтобы проверить, кто разговаривает по телефону, и убедитесь, что у них есть разрешение на выполнение запроса, который они делают.

Поскольку я все еще «новый» пользователь, я не могу опубликовать более 2 ссылок. Вы можете прочитать больше об этой теме здесь: https://help.ubuntu.com/12.04/serverguide/index.html и обратить особое внимание на https://help.ubuntu.com/12.04/serverguide/security.html.

Патрик Риган
источник
2
Альтернативой использованию UFW (хотя в Ubuntu по-прежнему используются встроенные встроенные брандмауэры) является блокировка вашей системы с очень специфическими iptablesправилами, чтобы запретить внешний доступ к любой службе, которую вы не собираетесь использовать, если у вас Настройка мяча, которая требует продвинутых маршрутов и прочее.
Томас Уорд
2
@LordofTime Согласен. На самом деле я сам использую iptables, но ufw подходит для большинства основных установок. Кроме того, UFW в любом случае является более или менее просто оболочкой для наиболее распространенных конфигураций iptables. Базовая система все та же.
Патрик Риган
2
+1 для ufw, вы не новый пользователь, вы являетесь участником в течение 1 года: p
Tachyons
1
В самом деле, я просто хотел указать, что в некоторых случаях iptables будет лучше использоваться по сравнению с UFW в некоторых случаях
Томас Уорд
1
Рассмотрим BastilleLinux, это также хороший набор мер безопасности.
pl1nk
13

Безопасная общая память

/ dev / shm может использоваться для атаки на работающий сервис, такой как httpd. Измените / etc / fstab, чтобы сделать его более безопасным.

Откройте окно терминала и введите следующее:

sudo vi /etc/fstab

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

tmpfs     /dev/shm     tmpfs     defaults,noexec,nosuid     0     0

Harden сеть с настройками sysctl

Файл /etc/sysctl.conf содержит все настройки sysctl. Для предотвращения маршрутизации исходящих входящих пакетов и регистрации неверных IP-адресов введите следующее в окне терминала

sudo vi /etc/sysctl.conf

Отредактируйте файл /etc/sysctl.conf и откомментируйте или добавьте следующие строки:

# IP Spoofing protection
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# Ignore ICMP broadcast requests
net.ipv4.icmp_echo_ignore_broadcasts = 1

# Disable source packet routing
net.ipv4.conf.all.accept_source_route = 0
net.ipv6.conf.all.accept_source_route = 0 
net.ipv4.conf.default.accept_source_route = 0
net.ipv6.conf.default.accept_source_route = 0

# Ignore send redirects
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0

# Block SYN attacks
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_synack_retries = 2
net.ipv4.tcp_syn_retries = 5

# Log Martians
net.ipv4.conf.all.log_martians = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1

# Ignore ICMP redirects
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0 
net.ipv6.conf.default.accept_redirects = 0

# Ignore Directed pings
net.ipv4.icmp_echo_ignore_all = 1

Чтобы перезагрузить sysctl с последними изменениями, введите:

sudo sysctl -p

Предотвратить IP-спуфинг

Откройте Терминал и введите следующее:

sudo vi /etc/host.conf

Добавьте или отредактируйте следующие строки:

order bind,hosts
nospoof on

Harden PHP для безопасности

Отредактируйте файл php.ini:

sudo vi /etc/php5/apache2/php.ini

Добавьте или отредактируйте следующие строки:

disable_functions = exec,system,shell_exec,passthru
register_globals = Off
expose_php = Off
magic_quotes_gpc = On

Брандмауэр веб-приложений - ModSecurity

http://www.thefanclub.co.za/how-to/how-install-apache2-modsecurity-and-modevasive-ubuntu-1204-lts-server

Защита от DDOS-атак (отказ в обслуживании) - ModEvasive

http://www.thefanclub.co.za/how-to/how-install-apache2-modsecurity-and-modevasive-ubuntu-1204-lts-server

Сканирование журналов и бан подозрительных хостов - DenyHosts и Fail2Ban

@DenyHosts

DenyHosts - это программа на python, которая автоматически блокирует атаки SSH, добавляя записи в /etc/hosts.deny. DenyHosts также проинформирует администраторов Linux о нарушающих работу хостах, атакованных пользователях и подозрительных входах в систему.

Откройте Терминал и введите следующее:

sudo apt-get install denyhosts

После установки отредактируйте файл конфигурации /etc/denyhosts.conf и измените адрес электронной почты и другие параметры, если это необходимо.

Чтобы изменить настройки электронной почты администратора, откройте окно терминала и введите:

sudo vi /etc/denyhosts.conf

Измените следующие значения, как требуется на вашем сервере:

ADMIN_EMAIL = root@localhost
SMTP_HOST = localhost
SMTP_PORT = 25
#SMTP_USERNAME=foo
#SMTP_PASSWORD=bar
SMTP_FROM = DenyHosts nobody@localhost
#SYSLOG_REPORT=YES 

@ Fail2Ban

Fail2ban более продвинут, чем DenyHosts, так как он расширяет мониторинг журналов для других служб, включая SSH, Apache, Courier, FTP и многие другие.

Fail2ban сканирует файлы журналов и блокирует IP-адреса, которые показывают вредоносные признаки - слишком много сбоев паролей, поиск эксплойтов и т. Д.

Обычно Fail2Ban затем используется для обновления правил брандмауэра, чтобы отклонять IP-адреса в течение заданного промежутка времени, хотя любое другое произвольное действие также может быть настроено. Из коробки Fail2Ban поставляется с фильтрами для различных сервисов (apache, courier, ftp, ssh и т. Д.).

Откройте Терминал и введите следующее:

sudo apt-get install fail2ban

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

Для редактирования настроек откройте окно терминала и введите:

sudo vi /etc/fail2ban/jail.conf

Активируйте все службы, которые вы хотите, чтобы fail2ban отслеживал, изменив enabled = false на * enabled = true *

Например, если вы хотите включить мониторинг SSH и запретить тюрьму, найдите строку ниже и измените значение с false на true . Это оно.

[ssh]

enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 3

Если вы хотите получать электронные письма от Fail2Ban, если хосты заблокированы, измените следующую строку на свой адрес электронной почты.

destemail = root@localhost

и измените следующую строку с:

action = %(action_)s

чтобы:

action = %(action_mwl)s

Вы также можете создать фильтры правил для различных сервисов, которые вы хотите, чтобы fail2ban отслеживал, которые не поставляются по умолчанию.

sudo vi /etc/fail2ban/jail.local

Хорошие инструкции о том, как настроить fail2ban и создать различные фильтры, можно найти в HowtoForge - нажмите здесь для примера

Когда закончите с настройкой Fail2Ban, перезапустите сервис с:

sudo /etc/init.d/fail2ban restart

Вы также можете проверить статус с помощью.

sudo fail2ban-client status

Проверьте наличие руткитов - RKHunter и CHKRootKit.

И RKHunter, и CHKRootkit в основном делают одно и то же - проверяют вашу систему на наличие руткитов. Нет вреда в использовании обоих.

Откройте Терминал и введите следующее:

sudo apt-get install rkhunter chkrootkit

Для запуска chkrootkit откройте окно терминала и введите:

sudo chkrootkit

Для обновления и запуска RKHunter. Откройте Терминал и введите следующее

sudo rkhunter --update
sudo rkhunter --propupd
sudo rkhunter --check

Сканирование открытых портов - Nmap

Nmap («Network Mapper») - бесплатная утилита с открытым исходным кодом для обнаружения сети и аудита безопасности.

Откройте Терминал и введите следующее:

sudo apt-get install nmap

Сканирование вашей системы на наличие открытых портов с помощью:

nmap -v -sT localhost

SYN сканирование со следующим:

sudo nmap -v -sS localhost

Анализ файлов системного журнала - LogWatch

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

Откройте Терминал и введите следующее:

sudo apt-get install logwatch libdate-manip-perl

Для просмотра вывода logwatch используйте less:

sudo logwatch | less

Чтобы отправить отчет по журналу за последние 7 дней на адрес электронной почты, введите следующее и замените mail@domain.com требуемым адресом электронной почты. :

sudo logwatch --mailto mail@domain.com --output mail --format html --range 'between -7 days and today' 

Аудит вашей системы безопасности - Тигр.

Tiger - это инструмент безопасности, который можно использовать как для аудита безопасности, так и для обнаружения вторжений.

Откройте Терминал и введите следующее:

sudo apt-get install tiger

Для запуска тигра введите:

sudo tiger

Весь вывод Tiger можно найти в / var / log / tiger

Чтобы просмотреть отчеты о безопасности тигра, откройте Терминал и введите следующее:

sudo less /var/log/tiger/security.report.*

Для получения дополнительной помощи

Один ноль
источник
PHP: magic_quotes_gpc = On. Магические кавычки были объявлены устаревшими, а затем удалены: php.net/manual/en/security.magicquotes.whynot.php
Тим
13

Так как вы сказали, что это веб-хостинг-сервер ... Я хотел бы поделиться своим лучшим опытом и 5-летним опытом работы в сфере веб-хостинга.

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

  2. Поскольку у вас есть LAMP, вы должны быть очень осторожны с PHP и его настройками php.ini. Это хорошая ссылка для защиты PHP. PHP обладает сверхспособностями, которые могут стать петлей безопасности, если не настроены должным образом.

  3. Вы можете использовать задание cron для проверки того, когда ваши файлы были изменены без вашего разрешения и, возможно, взломаны; используя эту работу cron . Я предпочитаю Notepad ++ для сравнения результатов cron (непосредственно загрузите электронную почту cron с вашего веб-сервера и откройте в Notepad ++).

  4. Если вы хотите установить SEM, то лучше всего выбрать cPanel (однако платный). Webmin и zpanel - очень хорошие бесплатные альтернативы. Webmin лучше для этого, по крайней мере, использует самозаверяющие сертификаты и добавляет безопасность.

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

  6. Если вы начинаете с нуля, вы также можете установить ISPconfig3. Инструкция здесь .

  7. Вы можете проверить свою безопасность, пытаясь проникнуть в нее с помощью Back-Track-Linux .

  8. хранить сложные длинные и случайные пароли. Не храните их на ПК. Запишите их. Используйте live CD для доступа к этим логинам.

  9. получить программное обеспечение для защиты от перебора, как fail2ban.

  10. Не запускайте тех демонов, которые вам не нужны.

  11. Заблокируйте все ненужные порты . Будьте предельно осторожны с портом SSH (22).

  12. Получите статический IP-адрес в системе, через которую вы будете управлять сервером. Сделайте большую часть IP-блока и разрешите только вашему конкретному IP-адресу доступ к таким местам конфигурации, как порт 22.

В конце дня ... работайте с полной отдачей, не теряйте эмоций при установке, а здравый смысл выводит вас далеко за пределы.

**My heartiest best wishes to you. good luck.**
Бхавеш Диван
источник
1
PHP также может быть опасным, когда доверяете вводу пользователя (например, инъекция SQL).
NoBugs
@ NoBugs Я абсолютно согласен с этим пунктом. Невозможно сжать все в одном ответе. Мой ответ содержит много гиперссылок, и эти сайты, содержащие эти страницы, действительно очень полезны. Надеюсь, мой ответ и включенные ссылки помогут сообществу :)
Bhavesh Diwan
2
# 9: Нет, ramdom passowrds плохие, ключ в длине , т.е. «D0g .....................» сильнее, чем «PrXyc.N (n4k77 # L! EVdAfp9». Объяснение на объяснение xkcd.com/2011/08/10 /
Надежность
2
@papukaija Я предлагаю вам погуглить brute force attacksи dictionary attacks.. Случайный длинный пароль - единственный способ обезопасить себя от таких атак.
Бхавеш Диван
6

Воспользуйтесь проектом Bastille Linux.

Он предоставляет интерактивный инструмент для выполнения дополнительных мер по усилению безопасности, чтобы повысить общую безопасность и уменьшить вероятность компрометации вашей системы Ubuntu (от Bastille Linux ).

Он предлагает функции оценки и отчетности, так что он может сказать вам, какие части системы не заблокированы. Он проверяет систему только для чтения, сообщая о состоянии каждого из ее элементов защиты. Например, Бастилия может проверить, заблокирован ли DNS-сервер в тюрьме chroot, отключен ли telnet, или даже если пароли должны быть большой длины. Вы можете посмотреть на веб-только демо это через эту ссылку (более можете информацию ).

Предварительный просмотр демо-версии в Интернете можно получить здесь .

BastillleLinux

pl1nk
источник
1
Я могу поддержать эту рекомендацию. Для запуска незащищенных хостов (например, веб-серверов) Bastille имеет большое значение для защиты системы.
Флойд
Это похоже на систему SELinux, которую вы найдете в CentOS / Redhat, но я уверен, что SELinux более современный.
Джангофан
3

Используйте nmapна всех интерфейсах на машине, чтобы вы знали, какие сервисы вы используете на своей машине. Это важный инструмент для безопасности.

Удалите все службы, которые вам не нужны, на внешних интерфейсах. Вы можете настроить MySQL для прослушивания только на определенных интерфейсах, таких как localhost.

Используйте ufw для защиты вашей службы SSH (и, возможно, других), чтобы она не допускала слишком много (неудачных) соединений в минуту с одной и той же машины. Это усложнит атаки методом грубой силы. Менять номер порта не так уж и полезно, просто неизвестность, нет безопасности.

Будьте ограничены с количеством учетных записей на вашем компьютере. Также не устанавливайте больше пакетов / программ, чем вы на самом деле используете. Устанавливайте только X11-клиенты, но не X11-сервер.

Разрешить ssh-вход в систему только с цифровыми сертификатами, без пароля. Это также сделает атаки грубой силы трудными / невозможными.

Андерс
источник
2

Я также обратился бы к документу Debian Benchmarks, в котором содержится значительное количество процедур и процессов для усиления защиты операционной системы, которые будут применяться к Ubuntu, поскольку он является производным от Debian. Я бы также проконсультировался:

Джастин Андруск
источник
0

Безопасность всегда идет с ценой. Установка реалистичных границ поможет вам в достижении ваших целей. Я хотел бы рассмотреть следующие аспекты:

  • От чего ты себя защищаешь (какой злодей, какой у него бюджет)?
  • Каковы ваши векторы атаки?

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

Защита веб-сервера Ubuntu на Xenial 16.04

Даан
источник