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

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

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:

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

# 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

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

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

  • 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

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

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 ?

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

15 views·1 share