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

Автор: unix-admin.su

Первоначальная настройка сервера

1. Дефолтный пароль от root

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


[root@localhost]# passwd root
Changing password for user root.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

2. SSH

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

PermitRootLogin no

После этого обязательно создайте себе пользовательский логин и добавьте его в группу wheel(для чего объясню далее)

[root@localhost]# adduser -G wheel -m -s /bin/bash my_user
[root@localhost]# passwd my_user
Changing password for user my_user.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

Для того чтобы доступ к root аккаунту имели только вы, в случае даже если кто-то узнал пароль от пользователя root, можно запретить использование команды su, для всех пользователей, кто не состоит в группе wheel. Для этого раскомментируйте следующую строку в файле /etc/pam.d/su:

auth required pam_wheel.so use_uid

Так же рекомендую поменять дефолтный порт 22 на какой-нибудь другой из диапазона 10000-65536. Чтобы понять смысл этого действия, оставьте только что арендованный сервер на пару дней с дефолтным паролем, а потом посмотрите лог /var/log/audit. Тысячи, если не сотни тысяч, ботов штурмуют интернет сканирую 22 порт в попытке подобрать пароль к пользователю root и другим популярным логинам, и можете быть уверенными - подбирают, на черном рынке в «Глубоком» интернете продаются тысячи root и не-root аккаунтов.

Port 45625

Так же целесообразно поставить максимальное количество попыток ввода пароля, по тем же причинам.

MaxAuthTries 3

и перезапустим демон SSH

[root@CentOS-72-64-minimal ~]systemctl restart sshd.service

3. Обновление

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

[root@ocalhost ]# yum update -y

После обновления рекомендую перезагрузить сервер.

[root@ocalhost ]# reboot

4. Отключаем SELinux

Сейчас в меня полетят помидоры от гуру-админов, приверженцев True RedHat Way и прочих параноиков(хотя как посмотреть). SELinux переводится как Security-Enhanced Linux или Linux с улучшенной безопасностью, был разработан АНБ США, а по-сути является расширением классической схемы ограничения прав rwx. Безусловно, инструмент полезный и нужный, однако лишает гибкости и простоты конфигурации сервисов, а некоторые сервисы, такие как OpenVZ не могут работать с ним вообще. Так что, если вы не уверены будете или нет использовать selinux в своем проекте - отключайте, включить обратно можно всегда.

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# minimum - Modification of targeted policy. Only selected processes are protected.
# mls - Multi Level Security protection.
SELINUXTYPE=targeted

5. Обнуляем iptables

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

[root@ocalhost ]# iptables -P INPUT ACCEPT
[root@ocalhost ]# iptables -P FORWARD ACCEPT
[root@ocalhost ]# iptables -P OUTPUT ACCEPT
[root@ocalhost ]# iptables -F

Первые 3 строки устанавливают разрешающую политику по-умолчанию в цепочках INPUT, FORWARD и OUTPUT, 4 строка обнуляет все правила во всех цепочках(в пределах таблицы filter).

Проверить наличие правил можно командой:

 

[root@localhost]# iptables -nvL
Chain INPUT (policy ACCEPT 4784 packets, 4986K bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination

Chain OUTPUT (policy ACCEPT 2929 packets, 225K bytes)
 pkts bytes target     prot opt in     out     source               destination

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

[root@CentOS-72-64-minimal ~]# date
Tue Jun 7 17:19:45 CEST 2016

Как видим у нас установлен часовой пояс CEST или Central European Summer Time - Центральное Европейское Летнее Время, он же UTC +2. Лично мне было бы удобней ориентироваться по Московскому времени, поэтому меняем часовой пояс. Для этого необходим пакет tzdata.

[root@localhost]# yum install tzdata -y

Настройки текущего часового пояса находятся в файле /etc/localtime, нам нужно заменить этот файл нужным нам часов поясом

[root@localhost]# rm -rf /etc/localtime
[root@localhost]# ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime

Первой командой мы удаляем текущий часовой пояс(о ужас!), второй командой делаем символическую ссылку, которая указывает на нужный нам файл с часовым поясом. Теперь проверим правильность времени

[root@localhost]# date
Tue Jun 7 18:34:26 MSK 2016

Часовой пояс установлен верно, а вот время нет. Есть 2 выхода, либо синхронизировать время с NTP-севером в интернете, либо указать правильное время командой date, формат даты такой: MMDDHHmm, MM-месяц, DD-день, HH - час(в 24 часовом формате), mm - минуты, СС - столетие, YY - год. CC и YY не обязательный параметр.

[root@localhost]# date 060721382016
Mon Jun 7 21:38:00 MSK 2106

7. Отключение ненужных сервисов

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

 

[root@localhost]# netstat -atunp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      22887/sshd
tcp        0      0 ——.—.——.0——:22         ——.——.——.1—:13123      ESTABLISHED 22833/sshd: root@pt
tcp        0     48 ——.—.——.1——:22         ——.——.——.1—:12233      ESTABLISHED 23046/sshd: super_u
tcp6       0      0 :::——                 :::*                    LISTEN      22887/sshd
udp        0      0 0.0.0.0:—4——           0.0.0.0:*                           21110/openvpn
udp        0      0 127.0.0.1:323           0.0.0.0:*                           575/chronyd
udp6       0      0 ::1:323                 :::*                                575/chronyd

«——» - я закрасил порты и адреса, которые не имеют ничего общего с этой статьей.

Как видим нас открыт 22 TCP порт - это порт SSH,порт —4—— TCP это мой vpn сервер и 323 UDP порт какого-то сервиса chronyd. Google сказал мне, что это NTP-сервер, значит пусть стоит. И таким методом вы проверяете все неизвестные вам службы, если какие-то вам совсем не нужны, отключаете их.

8. Вспомогательные утилиты

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

htop - Более красивый аналог утилиты top, если хорошо прочитать мануал, то поможет сэкономить вам много времени для поиска «того самого процесса, который жрет непонятно когда много памяти».

iotop - Почти тоже самое что и top/htop, только показывает загрузку дисковой подсистемы, бывает очень полезен.

iftop - Аналогично предыдущим двум, только для сетевой подсистемы

tcpdump - Легендарный сниффер, очень полезная утилита для мониторинга всего что происходит в сети, очень гибка в настройках, можно выбрать любую детализацию результата на свой вкус да и вообще unix-way.

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

gdb - Тяжелая артиллерия, самый настоящий дебаггер. Если вы, будучи системным администратором, дошли до его использования, то вы уже никогда не будете прежним :).