Статья взята из открытого доступа
Как обезопасить ваш сервер Linux
Опциями OpenSSH управляют через конфигурационный файл /etc/ssh/sshd_config.
Авторизация по открытому ключу:
Теперь вы можете сгенерировать новую пару ключей:
Вместо этого вы должны войти в систему под вашей учетной записью и затем сделать su – чтобы войти в систему как root.
Таким образом, вы должны изменить PermitRootLogin ‘yes’ на PermitRootLogin ‘no’.
Для Debian:
Для Centos:
Чтобы проверить наличие пустых паролей используйте команду ниже:
Заблокируйте пустые пароли:
Sysctl – команда, используемая, чтобы изменить параметры ядра во время выполнения в терминале.
Чтобы подгрузить настройки введите:
Скопируйте следующий контент в файл /etc/sysctl.conf:
Чтобы отключить службы, выполните:
Откройте файл / etc / sysconfig / init и добавьте строку:
Каждый файл, процесс, каталог и порт имеют специальную метку безопасности, называемую контекстами SELinux.
Контекст – это просто имя, которое используется политикой SELinux, чтобы определить, может ли процесс получить доступ к файлу, каталогу или порту.
По умолчанию политика не позволяет взаимодействовать, поэтому явные правила предоставляют доступ.
Если правила разрешений отсутствуют, доступ запрещен.
Команда getenforce сообщает нам, в каком режиме находится SELinux.
Мы можем изменить режим SELinux в принудительном порядке, изменив SELINUX=enforcing в /etc/sysconfig/selinux
В этом файле есть три директивы, как описано ниже.
Сейчас мы видим статус disabled, чтобы включить применение политик безопасности, выполним команду:
Любой локальный или удаленный пользователь может использовать такой файл.
Изменение его на чтение снижает риск несанкционированной модификации важных загрузочных файлов.
Нам нужно отредактировать файл / etc / fstab и вставить строку ниже <
Поэтому рекомендуется блокировать все неиспользуемые приложения, а затем разрешать только те приложения, которые будут использоваться.
Например, мы заблокируем все приложения, но санкционируем ssh
Можно указать, кто может и не сможет выполнять задания.
Это контролируется с помощью файлов под названием /etc/cron.allow и /etc/cron.deny.
Чтобы заблокировать пользователя с помощью cron, просто добавьте имена пользователей в cron.deny и чтобы разрешите пользователю запускать cron add в файле cron.allow.
Важно защитить ваш сервер от этой атаки.
Вы также можете добавить строку ниже в /etc/sysctl.conf:
Добавьте строку ниже в /etc/sysctl.conf, если она еще не существует:
Как обезопасить ваш сервер Linux
1. Безопасный удаленный доступ
Иногда мы получаем доступ к нашему серверу удаленными методами и если это никак не защищено, мы можем подвергнуть наш сервер опасности.Опциями OpenSSH управляют через конфигурационный файл /etc/ssh/sshd_config.
a. Отключите метод аутентификации по паролю SSH и включите метод аутентификации с открытым ключом
Измените значения ChallengeResponseAuthentication и PasswordAuthentication на ‘no’, чтобы деактивировать метод пароля.PasswordAuthentication no
ChallengeResponseAuthentication noАвторизация по открытому ключу:
RSAAuthentication yes
PubkeyAuthentication yesТеперь вы можете сгенерировать новую пару ключей:
# ssh-keygen -t rsab. Отключите прямой вход root’a в систему
Риск безопасности существует, если позволен вход пользователя root непосредственно к серверу.Вместо этого вы должны войти в систему под вашей учетной записью и затем сделать su – чтобы войти в систему как root.
Таким образом, вы должны изменить PermitRootLogin ‘yes’ на PermitRootLogin ‘no’.
PermitRootLogin noc. Измените порт по умолчанию для SSH (например: 8500)
port 85002. Пароль на загрузчик GRUB
Защищая загрузчик мы можем предотвратить доступ к однопользовательскому режиму, в котором пользователь входит в систему автоматически как root.Для Debian:
# grub-mkpasswd-pbkdf2
Для Centos:
# grub2-mkpasswd-pbkdf23. Порты сети
После конфигурирования сетевых служб важно обратить внимание, которое порты на самом деле прослушиваются на сетевых интерфейсах системы. Любые открытые порты могут быть доказательством проникновения.# 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 -tulpnActive 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 paulLocking 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 off8. Требовать аутентификацию для однопользовательского режима
При входе в однопользовательский режим рекомендуется вводить пароль root.Откройте файл / etc / sysconfig / init и добавьте строку:
SINGLE=/sbin/sulogin9. Улучшенная безопасность Linux (SELinux)
SELinux – это набор правил безопасности, которые определяют, какой процесс может получить доступ к файлу, каталогам, портам и т. Д.Каждый файл, процесс, каталог и порт имеют специальную метку безопасности, называемую контекстами SELinux.
Контекст – это просто имя, которое используется политикой SELinux, чтобы определить, может ли процесс получить доступ к файлу, каталогу или порту.
По умолчанию политика не позволяет взаимодействовать, поэтому явные правила предоставляют доступ.
Если правила разрешений отсутствуют, доступ запрещен.
Команда getenforce сообщает нам, в каком режиме находится SELinux.
Мы можем изменить режим SELinux в принудительном порядке, изменив SELINUX=enforcing в /etc/sysconfig/selinux
В этом файле есть три директивы, как описано ниже.
- Enforcing: политика безопасности SELinux применяется.
- Permissive: SELinux печатает предупреждения
- Disabled: SELinux полностью отключен.
# sestatusSELinux status: disabledСейчас мы видим статус disabled, чтобы включить применение политик безопасности, выполним команду:
# setenforce enforcing10. Установите брандмауэр с помощью iptables
iptables – это прикладная программа, которая позволяет системному администратору настраивать таблицы, предоставленные брандмауэром ядра Linux, а также цепочки и правила, которые он хранит.a. Закройте все нежелательные порты
# iptables -A INPUT -p tcp --dport PORT_NUMBER -j DROPb. Заблокируйте плохие IP
# iptables -A INPUT -s IP_ADDRESS -j DROP
[HEADING=3][/HEADING]
с. Блокировать подключения к сетевому интерфейсу
Чтобы заблокировать подключения с определенного IP-адреса к определенному сетевому интерфейсу, используйте команду:# iptables -A INPUT -i <span class="highlight">ens0</span> -s 6<span class="highlight">.6.6.6</span> -j DROPd. Список правил 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 -lsb. Определение файлов, доступных для записи
# find /dir -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -printc. Определение сиротских файлов и папок
# find /dir -xdev \( -nouser -o -nogroup \) -print12. Держать каталог /boot как только для чтения
Ядро Linux и связанные с ним файлы находятся в каталоге / boot, который по умолчанию используется как и на чтение, так и на запись.Изменение его на чтение снижает риск несанкционированной модификации важных загрузочных файлов.
Нам нужно отредактировать файл / etc / fstab и вставить строку ниже <
LABEL=/boot /boot ext2 defaults,ro 1 213. Отключить все TCP оболочки
Оболочки TCP могут обеспечить быстрый и простой способ контроля доступа к связанным с ними приложениям.Поэтому рекомендуется блокировать все неиспользуемые приложения, а затем разрешать только те приложения, которые будут использоваться.
Например, мы заблокируем все приложения, но санкционируем ssh
# echo"ALL:ALL" >> /etc/hosts.deny# echo "sshd:ALL" >> /etc/hosts.allow14. Заблокируйте cronjobs для неавторизованных пользователей.
Cron используется для автоматизации заданий в определенное время.Можно указать, кто может и не сможет выполнять задания.
Это контролируется с помощью файлов под названием /etc/cron.allow и /etc/cron.deny.
Чтобы заблокировать пользователя с помощью cron, просто добавьте имена пользователей в cron.deny и чтобы разрешите пользователю запускать cron add в файле cron.allow.
# echo ALL >> / etc / cron.deny15. Защитите сервер от переполнения буфера
Переполнение буфера происходит тогда, когда программа или процесс пытается записать большее количество данных в блок фиксированной длины памяти или буфер, чем сам буфер, выделенный для хранения.Важно защитить ваш сервер от этой атаки.
а. Включите ExecShield
# sysctl -w kernel.exec-shield=1Вы также можете добавить строку ниже в /etc/sysctl.conf:
kernel.exec-shield = 1b. Проверить / включить ASLR
Ранжирование пространства адреса – это защитная функция, которая затрудняет переполнение буфера.# sysctl -q -n -w kernel.randomize_va_space=2Добавьте строку ниже в /etc/sysctl.conf, если она еще не существует:
kernel.randomize_va_space = 2