Домой / Операционные системы / CentOS / Первичная настройка сервера CentOS 7

Первичная настройка сервера CentOS 7

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

У нас в наличии:
# uname -a
Linux localhost.localdomain 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

Базовая настройка CentOS 7

Если при попытке выполнить команду sudo из под пользователя получаем ошибку:

%user% is not in the sudoers file. This incident will be reported

Это значит что пользователь не включен в список /etc/sudoers
Добавляем себя в список:
su-
visudo

и дописываем строчку:
Ins включает и отключает режим редактирования. Для выхода используем Esc -> :wq
%user% ALL=(ALL) ALL
где %user% имя вашего пользователя

Теперь обновляем систему
yum update -y
Для удобства установим mc (Midnight Commander)
yum install mc -y
В минимальной версии если посмотреть настройки через ifconfig получаем ошибку:
bash: ifconfig: команда не найдена
Альтернативой является ip addr которая и реализована в дистрибутиве. Для удобства и по привычки предпочтительнее установить пакет сетевых утилит:
yum -y install net-tools.x86_64
При попытке использовать nslookup будет вывод:
nslookup
bash: nslookup: команда не найдена

Поэтому устанавливаем ее:
yum -y install bind-utils
Отключаем SELinux:
setenforce 0
Данное решение временное и действует до следующей перезагрузки.
Отключаем перманентно:
nano /etc/sysconfig/selinux
Выставляем значение disabled
SELINUX=disabled

После данных манипуляций требуется перезагрузка:
shutdown -r now
Ее можно выполнить позже т.к. SELinux уже отключен.

Настройка сетевых параметров

Для настройки сетевых параметров интерфейса смотрим его идентификатор.
# ifconfig
ens192: flags=4163 UP,BROADCAST,RUNNING,MULTICAST mtu 1500
inet 192.168.0.246 netmask 255.255.255.0 broadcast 192.168.0.255
.....

В данном случае он называется: ens192. Теперь открываем файл /etc/sysconfig/network-scripts/ifcfg-ens192
# nano /etc/sysconfig/network-scripts/ifcfg-ens192
и видим примерно следующее:
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=dhcp
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens192
UUID=f21af057-64e7-47cd-8cf4-6da91a57164c
DEVICE=ens192
ONBOOT=yes

Для того что бы задать статический ip адрес изменяем параметры:
BOOTPROTO — с dhcp на none
DNS1 — указали dns сервер
IPADDR0 — настроили статический ip адрес
PREFIX0 — указали маску подсети
GATEWAY0 — настроили шлюз по-умолчанию
у меня получилось так:
BOOTPROTO=none
DNS1=77.88.8.8
IPADDR0=192.168.0.94
PREFIX0=255.255.255.0
GATEWAY0=192.168.0.1

Перезагружаем интерфейс
# systemctl restart network
Проверяем, применились ли новые настройки:
ens192: flags=4163 UP,BROADCAST,RUNNING,MULTICAST mtu 1500
inet 192.168.0.94 netmask 255.255.255.0 broadcast 192.168.0.255
.....

Настраиваем FireWall

По умолчанию iptables запущен. Что бы посмотреть его настройки, нужно ввести команду:
# iptables -L -v -n
ВНИМАНИЕ! Без физического доступа к серверу настраивать firewall очень плохая затея.
В CentOS 7 вместо привычного iptables был создан новый инструмент firewalld. По факту это просто надстройка над iptables со своим синтаксисом. Так и не понял зачем было все так усложнять. Возвращаемся к привычному виду конфигурации firewall. Для этого полностью отключаем firewalld
# systemctl stop firewalld
# systemctl disable firewalld
# Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
# Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.</code>

Устанавливаем утилиты для iptables:
# yum install iptables-services -y
Добавляем iptables в автозапуск:
# systemctl enable iptables
Создаем правила /etc/iptables_rules.sh
следующие настройки взяты с просторов интернета

#!/bin/bash
# Объявление переменных
export IPT="iptables"
# Интерфейс который смотрит в интернет
export WAN=eth0
export WAN_IP=149.154.71.205
#Разрешаем доступ SSH
$IPT -A INPUT -i $WAN -p tcp --dport 22 -j ACCEPT
# Очистка всех цепочек iptables
$IPT -F
$IPT -F -t nat
$IPT -F -t mangle
$IPT -X
$IPT -t nat -X
$IPT -t mangle -X
# Установим политики по умолчанию для трафика, не соответствующего ни одному из правил
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
# разрешаем локальный траффик для loopback
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
# Разрешаем исходящие соединения самого сервера
$IPT -A OUTPUT -o $WAN -j ACCEPT
# Состояние ESTABLISHED говорит о том, что это не первый пакет в соединении.
# Пропускать все уже инициированные соединения, а также дочерние от них
$IPT -A INPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
# Пропускать новые, а так же уже инициированные и их дочерние соединения
$IPT -A OUTPUT -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
# Разрешить форвардинг для уже инициированных и их дочерних соединений
$IPT -A FORWARD -p all -m state --state ESTABLISHED,RELATED -j ACCEPT
# Включаем фрагментацию пакетов. Необходимо из за разных значений MTU
$IPT -I FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu
# Отбрасывать все пакеты, которые не могут быть идентифицированы
# и поэтому не могут иметь определенного статуса.
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP
# Приводит к связыванию системных ресурсов, так что реальный
# обмен данными становится не возможным, обрубаем
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP
# Открываем порт для ssh
$IPT -A INPUT -i $WAN -p tcp --dport 22 -j ACCEPT
# Открываем порт для DNS
$IPT -A INPUT -i $WAN -p udp --dport 53 -j ACCEPT
# Открываем порт для NTP
$IPT -A INPUT -i $WAN -p udp --dport 123 -j ACCEPT
# Логирование
# Все что не разрешено, но ломится отправим в цепочку undef
$IPT -N undef_in
$IPT -N undef_out
$IPT -N undef_fw
$IPT -A INPUT -j undef_in
$IPT -A OUTPUT -j undef_out
$IPT -A FORWARD -j undef_fw
# Логируем все из undef
$IPT -A undef_in -j LOG --log-level info --log-prefix "-- IN -- DROP "
$IPT -A undef_in -j DROP
$IPT -A undef_out -j LOG --log-level info --log-prefix "-- OUT -- DROP "
$IPT -A undef_out -j DROP
$IPT -A undef_fw -j LOG --log-level info --log-prefix "-- FW -- DROP "
$IPT -A undef_fw -j DROP
# Записываем правила
/sbin/iptables-save > /etc/sysconfig/iptables

Логи заблокированных соединений будут падать в /var/log/messages
Делаем файл исполняемым и запускаем:
# chmod 0740 /etc/iptables_rules.sh
# /etc/iptables_rules.sh

Проверяем, применились ли правила:
# iptables -L -v -n
При каждом запуске файла с правилами iptables, все изменения записываются в файл /etc/sysconfig/iptables и применяются при загрузке системы.

Настройки времени

Узнаем какое время установлено на сервере:
# date
Чтобы изменить часовой пояс необходимо подобрать файл часовой зоны в папке <strong>/usr/share/zoneinfo</strong>. Если у вас тоже Московское время, тогда делаем следующее:
# mv /etc/localtime /etc/localtime.bak
# ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime

или автоматической утилитой:
# timedatectl set-timezone Europe/Moscow

В CentOS 7 есть предустановленная утилита chrony. Она есть даже в минимальной версии. Если ее все же нет, устанавливаем:
# yum install chrony
Запускаем и добавляем в автозагрузку:
# systemctl start chronyd
# systemctl enable chronyd

Проверяем запущена ли chrony:
# systemctl status chronyd


? chronyd.service — NTP client/server
Loaded: loaded (/usr/lib/systemd/system/chronyd.service; enabled; vendor preset: enabled)
Active: active (running) since Пт 2017-10-20 22:21:04 MSK; 31min ago
Docs: man:chronyd(8)
man:chrony.conf(5)
Main PID: 704 (chronyd)
CGroup: /system.slice/chronyd.service
L-704 /usr/sbin/chronyd -4

окт 20 22:21:03 zabbix.localdomain systemd[1]: Starting NTP client/server…
окт 20 22:21:03 zabbix.localdomain chronyd[704]: chronyd version 3.1 start…
окт 20 22:21:03 zabbix.localdomain chronyd[704]: Frequency -10.854 +/- 0.0…
окт 20 22:21:04 zabbix.localdomain systemd[1]: Started NTP client/server.
окт 20 22:23:38 zabbix.localdomain chronyd[704]: Selected source 93.180.6.3
окт 20 22:23:38 zabbix.localdomain chronyd[704]: System clock wrong by 1.0…
окт 20 22:23:39 zabbix.localdomain chronyd[704]: System clock was stepped …
окт 20 22:25:49 zabbix.localdomain chronyd[704]: Selected source 194.190.1…
Hint: Some lines were ellipsized, use -l to show in full.

Все отлично, сервис запущен и исправно работает синхронизируя время.

Добавление репозитория EPEL

Для установки различных пакетов требуется установка дополнительных репозиториев. Поэтому ставим самый популярный EPEL:
# yum install epel-release

Хранение истории команд в bash_history

Достаточно полезно будет вести лог команд. Эта функция часто выручает. Но в стандартных стройках есть ряд ограничений:

  1. По-умолчанию, сохраняются только последние 1000 команд. При переполнении старые затираются
  2. Не указана дата и время выполнения команд
  3. Файл со списком команд обновляется после завершения сессии. При параллельных сессиях часть команд может быть утеряна.
  4. Сохраняются абсолютно все команды, хотя в хранении некоторых нет никакого смысла.

Список последний команд хранится в файле .bash_history
Но для удобства есть команда:
# history
Появится пронумерованный список. Найти интересующие команды можно так:
history | grep systemctl
После ввода увидим все варианты использования команды systemctl которые хранятся в истории. Для изменения стандартных настроек открываем .bashr c который расположен рядом с файлом истории.
У меня он расположен /root/.bashrc
# nano /root/.bashrc
Добавляем в него следующие строки:
export HISTSIZE=10000
export HISTTIMEFORMAT="%h %d %H:%M:%S "
PROMPT_COMMAND='history -a'
export HISTIGNORE="ls:ll:history:w"

HISTSIZE увеличил лог до 10000 команд. Следующий параметр указал необходимость сохранять время и дату выполнения команды. Третья строка требует сразу же после выполнения команды сохранять ее в лог. В последней создаем список исключений для тех команд, запись которых в историю не требуется. Приведен пример самого простого списка. Если хотите дополните его на свое усмотрение.

Применяем настройки:
# source ~/.bashrc
или делаем релог.

Установка вспомогательных утилит

iftop показывает нагрузку на сетевой интерфейс, так же присутствует большое количество ключей запуска:
# yum install -y iftop
Диспетчер задач:
# yum install htop -y
альтернатива
# yum install atop -y
Мне больше нравится htop.

Для того что бы знать какие процессы используют определенные файлы можно использовать утилиту lsof.
# yum install lsof -y
Так же советую установить wget, bzip2, traceroute, gdisk.
# yum install wget bzip2 traceroute gdisk -y
wget — консольная программа для загрузки файлов по сети
bzip2 — утилита командной строки для сжатия данных
traceroute — программа предназначенная для определения маршрутов следования данных в сетях TCP/IP.
gdisk — приложение для работы с GPT разделами любого размера.

Итог

Так я вижу первичную настройку сервера CentOS которую обычно выполняю перед началом эксплуатации. Буду рад обоснованной критике и комментариям.

информация частично взята с serveradmin.ru

Проверьте также

Доступ к Windows RDP по E-mail

Сразу оговоримся: с программированием не знаком и не считаю себя скриптером или кодером. То, что …

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *