Как обезопасить ваш сервер Linux |

Как обезопасить ваш сервер Linux

Мануал
Содержание
  1. 1. Безопасный удаленный доступ
  2. a. Отключите метод аутентификации по паролю SSH и включите метод аутентификации с открытым ключом
  3. b. Отключите прямой вход root’a в систему
  4. c. Измените порт по умолчанию для SSH (например: 8500)
  5. 2. Пароль на загрузчик GRUB
  6. 3. Порты сети
  7. 4. Снижение прав
  8. 5. Проверьте аккаунты на пустые пароли
  9. 6. Настройте параметры ядра
  10. 7. Отключите нежелательные службы
  11. 8. Требовать аутентификацию для однопользовательского режима
  12. 9. Улучшенная безопасность Linux (SELinux)
  13. 10. Установите брандмауэр с помощью iptables
  14. a. Закройте все нежелательные порты
  15. b. Заблокируйте плохие IP
  16. с. Блокировать подключения к сетевому интерфейсу
  17. d. Список правил iptables
  18. 11. Проверка файловой системы
  19. а. Определить нежелательные бинарники SUID и SGID
  20. b. Определение файлов, доступных для записи
  21. c. Определение сиротских файлов и папок
  22. 12. Держать каталог /boot как только для чтения
  23. 13. Отключить все TCP оболочки
  24. 14. Заблокируйте cronjobs для неавторизованных пользователей.
  25. 15. Защитите сервер от переполнения буфера
  26. а. Включите ExecShield
  27. b. Проверить / включить ASLR
  28. Бонус : использование готового решения

1. Безопасный удаленный доступ

Иногда мы получаем доступ к нашему серверу удаленными методами и если это никак  не защищено, мы можем подвергнуть наш сервер опасности.

Опциями OpenSSH управляют через конфигурационный файл /etc/ssh/sshd_config.

a. Отключите метод аутентификации по паролю SSH и включите метод аутентификации с открытым ключом

Измените значения ChallengeResponseAuthentication и PasswordAuthentication на ‘no’, чтобы деактивировать метод пароля.

PasswordAuthentication no
ChallengeResponseAuthentication no 

Авторизация по открытому ключу:

RSAAuthentication yes
PubkeyAuthentication yes

Теперь вы можете сгенерировать новую пару ключей:

 # ssh-keygen -t rsa

b. Отключите прямой вход root’a в систему

Риск безопасности существует, если  позволен  вход пользователя root непосредственно к серверу.

Вместо этого вы должны войти в систему под вашей учетной записью и затем сделать su – чтобы войти в систему как root.

Таким образом, вы должны изменить PermitRootLogin ‘yes’ на PermitRootLogin ‘no’.

PermitRootLogin no

c. Измените порт по умолчанию для SSH (например: 8500)

 port 8500

2. Пароль на загрузчик GRUB

Защищая загрузчик мы можем предотвратить доступ к однопользовательскому режиму, в котором пользователь входит в систему автоматически как root.

Для Debian:

# grub-mkpasswd-pbkdf2

Для Centos:

# grub2-mkpasswd-pbkdf2

3. Порты сети

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

# nmap -sT -O localhost

Starting Nmap 6.40 ( http://nmap.org ) at 2017-06-07 23:13 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000061s latency).
Other addresses for localhost (not scanned): 127.0.0.1
rDNS record for 127.0.0.1: centos-01
Not shown: 995 closed ports
PORT STATE SERVICE
22/tcp open ssh
25/tcp open smtp
80/tcp open http
111/tcp open rpcbind
2049/tcp open nfs 

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

# netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN

4. Снижение прав

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

# chmod 700 /root

# chmod 700 /var/log/audit

# chmod 740 /etc/rc.d/init.d/iptables

# chmod 740 /sbin/iptables

# chmod -R 700 /etc/skel

# chmod 600 /etc/rsyslog.conf

# chmod 640 /etc/security/access.conf

# chmod 600 /etc/sysctl.conf

5. Проверьте аккаунты на пустые пароли

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

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

# cat /etc/shadow | awk -F: '($2==""){print $1}'
paul

Заблокируйте пустые пароли:

# passwd -l paul

 Locking password for user paul.
passwd: Success

6. Настройте параметры ядра

Отредактируйте файл /etc/sysctl.conf, чтобы оптимизировать параметры ядра.

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

# sysctl -a

# sysctl -A

# sysctl net.ipv4.conf.all.rp_filter

Чтобы подгрузить настройки введите:

 # sysctl -p 

Скопируйте следующий контент в файл /etc/sysctl.conf:

# Turn on execshield
kernel.exec-shield=1
kernel.randomize_va_space=1

# Enable IP spoofing protection
net.ipv4.conf.all.rp_filter=1

# Disable IP source routing
net.ipv4.conf.all.accept_source_route=0

# Ignoring broadcasts request
net.ipv4.icmp_echo_ignore_broadcasts=1
net.ipv4.icmp_ignore_bogus_error_messages=1

# Make sure spoofed packets get logged
net.ipv4.conf.all.log_martians = 1
net.ipv4.conf.default.log_martians = 1

# Disable ICMP routing redirects
sysctl -w net.ipv4.conf.all.accept_redirects=0
sysctl -w net.ipv6.conf.all.accept_redirects=0
sysctl -w net.ipv4.conf.all.send_redirects=0
sysctl -w net.ipv6.conf.all.send_redirects=0

# Disables the magic-sysrq key
kernel.sysrq = 0

# Turn off the tcp_sack
net.ipv4.tcp_sack = 0

# Turn off the tcp_timestamps
net.ipv4.tcp_timestamps = 0

# Enable TCP SYN Cookie Protection
net.ipv4.tcp_syncookies = 1

# Enable bad error message Protection
net.ipv4.icmp_ignore_bogus_error_responses = 1 

7. Отключите нежелательные службы

Вам необходимо удалить все нежелательные службы и демоны (службы, выполняющиеся в фоновом режиме) из системы, которые запускаются во время загрузки на уровне запуска 3.

 # chkconfig --list | grep '3:on' 

Чтобы отключить службы, выполните:

 # service serviceName stop
# chkconfig serviceName off

8. Требовать аутентификацию для однопользовательского режима

При входе в однопользовательский режим рекомендуется вводить пароль root.

Откройте файл / etc / sysconfig / init и добавьте строку:

 SINGLE=/sbin/sulogin 

9. Улучшенная безопасность Linux (SELinux)

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

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

Контекст – это просто имя, которое используется политикой SELinux, чтобы определить, может ли процесс получить доступ к файлу, каталогу или порту.

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

Если правила разрешений отсутствуют, доступ запрещен.

Команда getenforce сообщает нам, в каком режиме находится SELinux.

Мы можем изменить режим SELinux в принудительном порядке, изменив SELINUX=enforcing в /etc/sysconfig/selinux

В этом файле есть три директивы, как описано ниже.    

  • Enforcing: политика безопасности SELinux применяется.
  • Permissive: SELinux печатает предупреждения
  • Disabled: SELinux полностью отключен.

Вы можете проверить статус SELinux командой:

# sestatus
SELinux status: disabled

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

 # setenforce enforcing 

10. Установите брандмауэр с помощью iptables

iptables – это прикладная программа, которая позволяет системному администратору настраивать таблицы, предоставленные брандмауэром ядра Linux, а также цепочки и правила, которые он хранит.

a. Закройте все нежелательные порты

 # iptables -A INPUT -p tcp --dport PORT_NUMBER -j DROP 

b. Заблокируйте плохие IP

 #  iptables -A INPUT -s IP_ADDRESS -j DROP 

с. Блокировать подключения к сетевому интерфейсу

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

 # iptables -A INPUT -i <span class="highlight">ens0</span> -s 6<span class="highlight">.6.6.6</span> -j DROP

d. Список правил iptables

Вы можете увидеть все правила iptables командой

 # iptables -L -n -v 

 

11. Проверка файловой системы

Все файлы с битами SUID / SGID могут использоваться для вредоносных действий, когда исполняемый файл SUID / SGID имеет проблему безопасности.

Любой локальный или удаленный пользователь может использовать такой файл.

а. Определить нежелательные бинарники SUID и SGID

# find / \( -perm -4000 -o -perm -2000 \) -print
# find / -path -prune -o -type f -perm +6000 -ls

b. Определение файлов, доступных для записи

 # find /dir -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print 

c. Определение сиротских файлов и папок

 # find /dir -xdev \( -nouser -o -nogroup \) -print

12. Держать каталог /boot как только для чтения

Ядро Linux и связанные с ним файлы находятся в каталоге / boot, который по умолчанию используется как и на чтение, так и на запись.

Изменение его на чтение снижает риск несанкционированной модификации важных загрузочных файлов.

Нам нужно отредактировать файл / etc / fstab и вставить строку ниже <

 LABEL=/boot /boot ext2 defaults,ro 1 2 

13. Отключить все TCP оболочки

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

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

Например, мы заблокируем все приложения, но санкционируем ssh


# echo"ALL:ALL" >> /etc/hosts.deny 
# echo "sshd:ALL" >> /etc/hosts.allow

14. Заблокируйте cronjobs для неавторизованных пользователей.

Cron используется для автоматизации заданий в определенное время.

Можно указать, кто может и не сможет выполнять задания.

Это контролируется с помощью файлов под названием /etc/cron.allow и /etc/cron.deny.

Чтобы заблокировать пользователя с помощью cron, просто добавьте имена пользователей в cron.deny и чтобы разрешите пользователю запускать cron add в файле cron.allow.

 # echo ALL >> / etc / cron.deny 

15. Защитите сервер от переполнения буфера

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

Важно защитить ваш сервер от этой атаки.

а. Включите ExecShield

 # sysctl -w kernel.exec-shield=1 

Вы также можете добавить строку ниже в /etc/sysctl.conf:

kernel.exec-shield = 1 

b. Проверить / включить ASLR

Ранжирование пространства адреса – это защитная функция, которая затрудняет переполнение буфера.

 #  sysctl -q -n -w kernel.randomize_va_space=2

Добавьте строку ниже в /etc/sysctl.conf, если она еще не существует:

 kernel.randomize_va_space = 2

Бонус : использование готового решения

В идеале вы можете купить свой выделенный сервер и развернуть на нем свои приложения.

Сервер уже будет подготовлен и достаточно защищен.

Над самим VPS будет вестись мониторинг по его состоянию.

Да, это требует денег ( с ценами вы можете ознакомится на сайте https://www.hostzealot.ru/vps ), но зато у вас будет собственный сервер, на котором вы сможете реализовать и другие свои задачи, не затрагивая ресурсы.

Почему я выделил HostZealot.ru ?

Они предлагают неплохие цены и широко географически распределенные сервера.

Пожалуйста, не спамьте и никого не оскорбляйте. Это поле для комментариев, а не спамбокс. Рекламные ссылки не индексируются!
Добавить комментарий