Обновление centos 7 через консоль. Шаг #6: Настройка временной зоны

26.03.2019

У меня имеется свежеустановленный сервер CentOS 7 на VDS с виртуализацией KVM. Я расскажу о том, как сделать базовую настройку сервера для использования его в любом качестве на ваше усмотрение. Это может быть web сервер ,vpn сервер , сервер мониторинга . Я расскажу о начальных настройках системы CentOS, которые повышают безопасность и удобство работы с сервером. Отмечу, что в 7-й версии системы произошли некоторые изменения по сравнению с предыдущими версиями.

Введение

Начальная настройка CentOS 7

Итак, у нас имеется: # uname -a Linux zeroxzed.ru 3.10.0-123.20.1.el7.x86_64 #1 SMP Thu Jan 29 18:05:33 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

Первым делом обновим базовую систему:

# yum -y update

Для удобства администрирования, я всегда устанавливаю Midnight Commander, или просто mc:

# ifconfig

И увидите ответ:

Bash: ifconfig: command not found

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

Вместо ifconfig в CentOS 7 теперь утилита ip . Я не понимаю, зачем пилить отдельные программы для управления сетевыми настройками, если ifconfig и так отлично справляется с задачей. К тому же мне всегда нравилось, что в различных дистрибутивах линукс все примерно одинаковое. С помощью ifconfig можно настроить сеть не только в linux, но и в freebsd. Это удобно. А когда в каждом дистрибутиве свой инструмент это неудобно. Так что предлагаю установить привычный ifconfig.

Сделаем это:

# yum -y install net-tools.x86_64

Теперь, чтобы у нас работали команды nslookup или, к примеру, host необходимо установить пакет bind-utils. Если этого не сделать, то на команду:

# nslookup

Будет вывод:

Bash: nslookup: command not found

Так что устанавливаем bind-utils:

# yum -y install bind-utils

Отключаем SELinux. Его использование и настройка отдельный разговор. Сейчас я не буду этим заниматься. Так что отключаем:

# mcedit /etc/sysconfig/selinux

меняем значение
SELINUX=disabled
Чтобы изменения вступили в силу, перезагружаемся:

# reboot

Указываем сетевые параметры

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

Для инсталляции различного софта необходимо подключить репозитории в CentOS . Наиболее популярные это EPEL и rpmforge, поэтому добавим их. Сначала ставим EPEL. С ним все просто, он добавляется из стандартного репозитория:

# yum -y install epel-release

Устанавливаем rpmforge:

# rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt # yum -y install http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm

Установка iftop, atop, htop на CentOS 7

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

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

# yum -y install iftop

И два интересных диспетчера задач, я чаще всего пользуюсь htop, но иногда пригодится и atop. Ставим оба, сами посмотрите, разберетесь, что вам больше нравится, подходит:

# yum -y install htop # yum -y install atop

Вот как выглядит htop:

На этом у меня все. Базовая настройка CentOS 7 закончена, можно приступать к установке и настройке основного функционала.

Заключение

Мы выполнили некоторые начальные шаги по настройке, которые я обычно делаю при подготовке сервера. Я не претендую на абсолютную истину, возможно что-то упускаю или делаю не совсем верно. Буду рад разумным и осмысленным комментариям и замечаниям с предложениями.

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

  1. Пример настройки сервера мониторинга zabbix , либо только подключение centos к мониторингу путем установки на него агента.
  2. Настройка email оповещений zabbix через сторонний smtp сервер.
  3. Подробный мониторинг web сервера на базе nginx + php-fpm.
  4. Система мониторинга сайта на базе zabbix.
  5. Наблюдение за mysql репликацией в zabbix.

Видео по настройке CentOS 7

В данной статье предлагаю Вам познакомиться с брандмауэром . Возможно многие его давно используют. Я впервые столкнулся с новым брандмауэром во время первой установки CentOS 7. Конечно, его можно отключить и заменить на хорошо знакомый и понятный IPTables (как вернуть IPTables в CentOS 7 – рассмотрено ниже), но осваивать что-то новое и повышать уровень своих знаний – это всегда хорошо, если нет прямой необходимости в использовании IPTables. Проще говоря, Firewalld – это не Файрвол, разработанный с нуля – это другая надстройка над IPTables. Также, как и IPTables, новый Firewalld использует для работы IPTables tool и управляет сетевым фильтром ядра, если Вы обладаете опытом работы с IPTables, Вам не составит особого труда начать пользоваться Firewalld. С приходом Firewalld мы получили ряд новых возможностей, но, в тоже время, потеряли некоторые старые. Но, обо всем по порядку, как всегда, для удобства восприятия материал разбит на смысловые блоки. В этой статье Вы найдете решения следующих задач:

  • Установка Firewalld
  • Список параметров и команд Firewalld
  • Замена Firewalld на IPTables

Установка и настройка брандмауэра Firewalld будет происходить в ОС CentOS 7.

Все команды в этой статье выполняются от имени пользователя root!

Установка Firewalld

Выполните для установки Firewalld:

Yum -y install firewalld

Запустите:

Systemctl start firewalld

Проверим:

Посмотрим, что разрешено по умолчанию:

Вывод команды:

Public target: default icmp-block-inversion: no interfaces: sources: services: dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: sourceports: icmp-blocks: rich rules:

На постоянной основе разрешен ssh, а также клиент dhcp v6.

Выполните перезагрузку сервера после установки firewalld.

Обзор возможностей и новых функций Firewalld

Список всех допустимых зон firewalld можно вывести командой:

Firewall-cmd --get-zones

Вывод команды:

Work drop internal external trusted home dmz public block

Описание назначений зон firewalld :

  • DROP

Входящие сетевые пакеты отбрасываются без ответа (drop). Разрешены только исходящие соединения.

  • BLOCK

Входящие сетевые соединения отклоняются (rejected) с сообщением icmp-host-prohibited для Ipv4 и icmp6-adm-prohibited для IPv6. Разрешены только инициированные сетевые соединения внутри нашей системы.

  • PUBLIC

Зона по умолчанию. Нацелена на работу в общественных сетях с не доверенными компьютерами, разрешается устанавливать только определенные входящие соединения.

  • EXTERNAL

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

Зона DMZ, для сетей с собственной демилитаризованной зоной с ограниченным доступом к вашей внутренней сети. Разрешены только определенные входящие соединения.

  • WORK

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

  • HOME

Домашняя зона. Доверяем окружению, разрешены только определенные входящие соединения.

  • INTERNAL

Внутренняя зона. Доверяем окружению, разрешены только определенные входящие соединения.

  • TRUSTED

Все сетевые соединения разрешены.

Добавив сетевое соединение к определенной зоне мы получаем некий предустановленный набор правил.

Вывести список всех активных зон firewalld можно командой:

Вывод команды:

Public interfaces: enp0s3

Для управления firewalld существует два основных инструмента:

1. firewall-config с графическим интерфейсом.

2. firewall-cmd утилита командной строки, именно с ней мы и будем работать в данной статье.

Что именилось с приходом firewalld? Нам теперь недоступно:

1. Нет /etc/sysconfig/iptables. Настроек iptables в обычном ранее для них месте нет, firewalld хранит свои настройки в XML файлах раскидав их по /usr/lib/firewalld/ и /etc/firewalld/

2. Добавлять правила привычными командами вроде iptables -A INPUT -p ICMP -j ACCEPT уже не получится, и вообще на попытку обратиться к iptables, мы получим отказ. Собственно, просто придется настраивать его другими командами.

В то-же время му получили ряд полезных функций:

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

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

Настройка и примеры использования Firewalld

Запуск firewalld:

Systemctl start firewalld

Остановка:

Systemctl stop firewalld

Включите службу в автозагрузку:

Systemctl enable firewalld

Отключение автостарта службы:

Systemctl disable firewalld

Проверить статус (Вам будет предоставлена расширенная информация о работе службы):

Systemctl status firewalld

Проверить статус (кратко):

Firewall-cmd --state

Вывести список всех допустимых зон:

Firewall-cmd --get-zones

Вывести список всех активных зон:

Firewall-cmd --get-active-zones

Пример вывода команды:

Public interfaces: enp0s3

Где enp0s3 сетевой интерфейс сервера и сопоставлен он с зоной public

Узнать к какой зоне принадлежит конкретный (в нашем случае enp0s3) сетевой интерфейс:

Firewall-cmd --get-zone-of-interface=enp0s3

Список активных сетевых интерфейсов можно получить с помощью команды:

Вывести список сетевых интерфейсов принадлежащих конкретной зоне:

Firewall-cmd --zone=public --list-interfaces

Проверим, что разрешено по умолчанию:

Firewall-cmd --permanent --list-all

Вывод команды:

Public (default) interfaces: sources: services: ssh dhcpv6-client masquerade: no forward-ports: icmp-blocks: rich rules:

На постоянной основе разрешен ssh, а также клиент dhcp v6. Я не использую на сервере ip v6, поэтому уберу соответствующее правило:

Firewall-cmd --permanent --zone=public --remove-service=dhcpv6-client

Разрешить доступ по протоколу ssh вручную:

Firewall-cmd --permanent --zone=public --add-service=ssh

Для работы веб сервера необходимо разрешить сервис http (80 порт):

Firewall-cmd --permanent --zone=public --add-service=http

Если Вы планируете использовать https на Вашем сайте, необходимо разрешить https сервис (443 порт):

Firewall-cmd --permanent --zone=public --add-service=https

Для работы FTP сервера необходимо открыть 21 порт, а также порты 30000-35000 для использования пассивного режима в FTP клиентах:

Firewall-cmd --permanent --zone=public --add-port=21/tcp firewall-cmd --permanent --zone=public --add-port=30000-35000/tcp

Для применения изменений перезагрузите правила:

Firewall-cmd --reload

Мне хочется предложить Вам выполнить еще несколько шагов по повышению уровня безопасности Вашего сервера. Есть довольно подробно написанный . Одним из этапов настройки является изменение стандартного порта, рассмотрим более подробно настройки Firewalld при смене порта ssh.

Разрешим входящие соединения на порт 2220/tcp (на него повесим sshd):

Firewall-cmd --permanent --zone=public --add-port=2220/tcp

Перезагрузим правила:

Firewall-cmd --reload

Проверим:

Firewall-cmd --zone=public --list-ports

Вывод команды:

2220/tcp

Порт открыт. Редактируем конфиг sshd:

Nano /etc/ssh/sshd_config

Вносим изменения:

*** # If you want to change the port on a SELinux system, you have to tell # SELinux about this change. # semanage port -a -t ssh_port_t -p tcp #PORTNUMBER # В файле необходимо только указать порт Port 2220 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress:: ***

Перезапустим ssh:

Systemctl restart sshd.service

Также в случае использования SELinux (надеюсь, Вы его не отключили) необходимо выполнить дополнительные настройки. Это связано с тем, что SELinux не даст подключиться к ssh на нестандартном порте (2220):

Semanage port -a -t ssh_port_t -p tcp 2220

После проверки подключения к ssh на новом порту, закройте доступ к порту 22:

Firewall-cmd --permanent --zone=public --remove-service=ssh

Перезагрузите правила:

Firewall-cmd --reload

Замена Firewalld на IPTables

Для использования IPTables на Вашем сервере с CentOS 7, выполните следующие шаги.

Выключим Firewalld службу:

Systemctl mask firewalld

Остановим Firewalld Service:

Systemctl stop firewalld

Установим iptables.

Yum -y install iptables-services

Включим запуск IPtables при загрузке системы, а также разрешим доступ к серверу по протоколам ssh и http:

Systemctl enable iptables iptables -P INPUT ACCEPT && iptables -F && service iptables save && iptables -A INPUT -i lo -j ACCEPT && iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT && iptables -A INPUT -p tcp --dport 22 -j ACCEPT && iptables -A INPUT -p tcp --dport 80 -j ACCEPT && iptables -P INPUT DROP && iptables -P FORWARD DROP && iptables -P OUTPUT ACCEPT && service iptables save

Проверим:

Iptables -L

Вы должны получить следующий вывод:

Iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ] iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ] Chain INPUT (policy DROP) target prot opt source destination ACCEPT all -- anywhere anywhere ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED ACCEPT tcp -- anywhere anywhere tcp dpt:ssh ACCEPT tcp -- anywhere anywhere tcp dpt:http Chain FORWARD (policy DROP) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination

Август 15, 2014 12:57 пп 12 380 views | Комментариев нет

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

1: Войдите как root-пользователь

Получив свой IP-адрес и root-пароль, войдите на сервер как главный пользователь (root). Для этого используйте команду (замените выделенный IP своим IP-адресом):

ssh [email protected]

Терминал вернет что-то вроде:

The authenticity of host "111.22.33.444 (111.22.33.444)" can"t be established.
ECDSA key fingerprint is 79:95:46:1a:ab:37:11:8e:86:54:36:38:bb:3c:fa:c0.
Are you sure you want to continue connecting (yes/no)?

Выберите yes и введите свой root-пароль.

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

2: Измените пароль

На данный момент используется root-пароль, установленный по умолчанию и полученный после регистрации сервера. Первое, что нужно сделать, — заменить его собственным паролем.

Что касается устанавливаемых паролей, система CentOS очень осторожна. Потому после ввода нового пароля может появиться извещение BAD PASSWORD. Можно либо установить более сложный пароль, либо же проигнорировать сообщение: на самом деле, CentOS примет даже слишком простой или короткий пароль, хотя и предложит использовать более сложную комбинацию.

3: Создайте нового пользователя

Войдя на сервер и изменив root-пароль, нужно снова войти на VPS как root. Данный раздел продемонстрирует, как создать нового пользователя и установить пароль для него.

Итак, создайте нового пользователя; для этого используйте следующую команду (замените demo своим именем пользователя):

adduser demo

Теперь создайте пароль для этого пользователя (опять же, замените demo именем только что созданного пользователя):

passwd demo

4: Root-привилегии

На данный момент все права администратора принадлежат root-пользователю. Чтобы иметь возможность постоянно использовать новую учетную запись, нужно передать новому пользователю (demo) все root-привилегии.

Для выполнения задач с привилегиями root нужно начинать команду с sudo. Эта фраза полезна по двум причинам: 1) она защищает систему от разрушающих ошибок, допущенных пользователем; 2) она хранит все запущенные с sudo команды в файле /var/log/secure, который позже можно просмотреть.

Теперь нужно изменить настройки sudo; для этого используйте текстовый редактор CentOS по умолчанию, который называется vi:

Найдите раздел User privilege specification, который выглядит так:

# User privilege specification
root ALL=(ALL) ALL

После строки с привилегиями root внесите следующую строку, которая передаст все привилегии новому пользователю (чтобы начать ввод текста в vi, нажмите i):

demo ALL=(ALL) ALL

Чтобы завершить ввод текста, нажмите Esc; затем введите:, wq, Enter, чтобы сохранить и закрыть файл.

5: Настройте SSH (дополнительно)

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

Откройте конфигурационный файл:

sudo vi /etc/ssh/sshd_config

Найдите следующие разделы и внесите в них соответствующие изменения:

Port 25000
PermitRootLogin no

Port : хотя по умолчанию используется порт 22, его номер можно заменить любым другим в диапазоне от 1025 до 65536. В данном руководстве используется SSHD-порт 25000. Обратите внимание: новый номер порта нужно обязательно запомнить/записать, поскольку он понадобится для входа на сервер через SSH.

PermitRootLogin :измените значение yes на no, чтобы отключить вход в систему как root. Теперь войти на сервер можно только при помощи нового пользователя.

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

AllowUsers demo

Затем сохраните изменения и закройте файл.

Перезапуск SSH

Чтобы активировать внесенные изменения, перезапустите сервис SSHD:

sudo systemctl reload sshd.service

Чтобы протестировать новые настройки (пока что не выходите из учетной записи root), откройте терминал и войдите на сервер как новый пользователь (не забудьте указать правильный IP-адрес и порт):

ssh -p 25000 demo @111.22.33.444

Должно появиться извещение:

У меня имеется только что установленный сервер с CentOS 7 на VDS с виртуализацией KVM.

Я расскажу о том, как сделать базовую настройку сервера для использования его в любом качестве на ваше усмотрение. Это может быть web сервер , vpn сервер , сервер мониторинг а.

Я расскажу о начальных настройках системы CentOS, которые повышают безопасность и удобство работы с сервером. Отмечу, что в 7-й версии системы произошли некоторые изменения по сравнению с предыдущими версиями.

  1. Введение
  2. Начальная настройка CentOS 7
  3. Указываем сетевые параметры
  4. Настраиваем firewall
  5. Настройка SSH в CentOS 7
  6. Настраиваем время
  7. Добавление репозиториев
  8. Заключение
  9. Видео по настройке CentOS 7

Введение

Начальная настройка CentOS 7

Итак, у нас имеется:

# uname -a
Linux zeroxzed.ru 3.10.0-123.20.1.el7.x86_64 #1 SMP Thu Jan 29 18:05:33 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux

Первым делом обновим базовую систему:

# yum -y update

Для удобства администрирования, я всегда устанавливаю Midnight Commander, или просто mc:

# ifconfig

И увидите ответ:

Bash: ifconfig: command not found

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

Вместо ifconfig в CentOS 7 теперь утилита ip . Я не понимаю, зачем пилить отдельные программы для управления сетевыми настройками, если ifconfig и так отлично справляется с задачей. К тому же мне всегда нравилось, что в различных дистрибутивах линукс все примерно одинаковое. С помощью ifconfig можно настроить сеть не только в linux, но и в freebsd. Это удобно. А когда в каждом дистрибутиве свой инструмент это неудобно. Так что предлагаю установить привычный ifconfig.

Сделаем это:

# yum -y install net-tools.x86_64

Теперь, чтобы у нас работали команды nslookup или, к примеру, host необходимо установить пакет bind-utils. Если этого не сделать, то на команду:

# nslookup

Будет вывод:

Bash: nslookup: command not found

Так что устанавливаем bind-utils:

# yum -y install bind-utils

Отключаем SELinux. Его использование и настройка отдельный разговор. Сейчас я не буду этим заниматься. Так что отключаем:

# mcedit /etc/sysconfig/selinux

меняем значение SELINUX=disabled

Чтобы изменения вступили в силу, перезагружаемся:

# reboot

Указываем сетевые параметры

Теперь произведем настройку сети в CentOS. Для этого открываем файл /etc/sysconfig/network-scripts/ifcfg-eth0

# mcedit /etc/sysconfig/network-scripts/ifcfg-eth0

В поле IPADDR вводим свой адрес, в NETMASK маску сети, в GATEWAY шлюз, DNS1 адрес днс сервера. Сохраняем файл и перезапускаем сеть для применения настроек:

# /etc/init.d/network restartНастраиваем firewall

Очень подробно вопрос настройки iptables в CentOS 7 я рассмотрел отдельно. Сейчас мы быстро и просто настроим firewall. В CentOS 7 в качестве фаервола выступает iptables. По-умолчанию он запущен. Чтобы посмотреть текущие правила, нужно ввести команду:

# iptables -L -v -n

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

В 7-й версии CentOS для управления iptables разработан новый инструмент под названием firewalld и все управление производится через него. Я не понял зачем это сделали, и не могу сказать, удобнее с ним стало или нет. По мне, так удобнее использовать одни и те же наработки по iptables. Мигрируя от сервера к серверу и от дистрибутива к дистрибутиву, я просто редактирую скрипт настроек фаервола.

Но CentOS зачем-то придумали firewalld, в Ubuntu стоит ufw, но суть одна и та же - это утилиты для конфигурирования iptables, который один и тот же во всех дистрибутивах. Я привык управлять iptables через самописный скрипт, который переношу от сервера к серверу и редактирую под конкретные потребности. Этим скриптом я и поделюсь. Так что для начала остановим и отключим firewalld:

# systemctl stop firewalld
# systemctl disable firewalld
rm "/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service"
rm "/etc/systemd/system/basic.target.wants/firewalld.service"

Установим утилиты для iptables:

# yum -y install iptables-services

Включим автозапуск iptables:

# systemctl enable iptables

Теперь создадим файл /etc/iptables_rules.sh следующего содержания:

#!/bin/bash
#
# Объявление переменных
export IPT="iptables"

# Интерфейс который смотрит в интернет
export WAN=eth0
export WAN_IP=149.154.71.205

# Очистка всех цепочек 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 и записей там будет очень много. Так что в обычной работе эти строки нужно закомментировать, и использовать только во время отладки. Более подробное описание правил и примеры настроек firewall в случае, когда ваш сервер является шлюзом локальной сети, приведено по ссылке в начале раздела.

Делаем файл c правилами исполняемым и запускаем:

# chmod 0740 /etc/iptables_rules.sh
# /etc/iptables_rules.sh

Проверяем, применились ли правила:

# iptables -L -v -n

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

Настройка SSH в CentOS 7

Дальше внесем некоторые изменения в работу ssh для увеличения безопасности. По-умолчанию, сервис работает на 22 порту и если все оставить как есть, то мы получим огромное количество попыток авторизоваться. Боты сканят непрерывно интернет и подбирают пароли к ssh. Чтобы обезопасить себя от сканов простых ботов, изменим порт, на котором работает ssh. Можно выбрать любой пятизначный номер, это не принципиально. От автоматического сканирования это защитит.

Повесим демон ssh на 25333 порт. Для этого редактируем файл /etc/ssh/sshd_config

# mcedit /etc/ssh/sshd_config

Раскомментируем строку Port 22 и заменим значение 22 на 25333.

Так же я обычно разрешаю подключаться по ssh пользователю root. Мне так удобнее. Проблем с этим у меня никогда не возникало. Если вы считаете, что это не безопасно, не трогайте эту настройку. Чтобы разрешить пользователю root подключаться по ssh, раскомментируйте строку PermitRootLogin yes.

Сохраняем файл. Теперь обязательно изменяем настройки iptables, добавляем в разрешенные подключения вместо 22 порта 25333. Если этого не сделать, то после перезапуска sshd мы потеряем удаленный доступ к серверу. Итак, открываем /etc/iptables_rules.sh и меняем в строке

$IPT -A INPUT -i $WAN -p tcp --dport 22 -j ACCEPT

22 на 25333 и исполняем файл.

Наше текущее соединение не оборвется, так как оно уже установлено, но заново подключиться по ssh к 22 порту уже н получится.

Перезапускаем sshd:

# systemctl restart sshd

Проверяем какой порт слушает sshd:

# netstat -tulpn | grep sshd
tcp 0 0 0.0.0.0:25333 0.0.0.0:* LISTEN 1799/sshd
tcp6 0 0:::25333:::* LISTEN 1799/sshd

Если вывод такой же как у меня, то все в порядке, теперь к ssh можно подключаться по 25333 порту.

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

Узнать, какое время на сервере можно с помощью команды date:

Чтобы сменить часовой пояс, необходимо выбрать подходящий файл часовой зоны в /usr/share/zoneinfo. В случае, если у вас часовой пояс Москвы, выполните следующее:

# mv /etc/localtime /etc/localtime.bak
# ln -s /usr/share/zoneinfo/Europe/Moscow /etc/localtime

Устанавливаем утилиту синхронизации времени в CentOS:

# yum install -y ntp

Разово синхронизируем время:

# /usr/sbin/ntpdate pool.ntp.org

Если ntpdate не работает, посмотрите материал, может это ваш случай. Запустим демон синхронизации и запишем его запуск в автозагрузку:

# systemctl start ntpd
# systemctl enable ntpd
ln -s "/usr/lib/systemd/system/ntpd.service" "/etc/systemd/system/multi-user.target.wants/ntpd.service"

Теперь наши часы будут автоматически синхронизироваться с сервером времени.

Более подробно об этой теме написано отдельно в моем материале - установка, настройка и синхронизация времени в CentOS.

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

Для инсталляции различного софта необходимо подключить репозитории в CentOS. Наиболее популярные это EPEL и rpmforge, поэтому добавим их. Сначала ставим EPEL. С ним все просто, он добавляется из стандартного репозитория:

# yum -y install epel-release

Устанавливаем rpmforge:

# rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
# yum -y install http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el7.rf.x86_64.rpm

Установка iftop, atop, htop на CentOS 7

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

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

# yum -y install iftop

И два интересных диспетчера задач, я чаще всего пользуюсь htop, но иногда пригодится и atop. Ставим оба, сами посмотрите, разберетесь, что вам больше нравится, подходит:

# yum -y install htop
# yum -y install atop

Вот как выглядит htop:

На этом у меня все. Базовая настройка CentOS 7 закончена, можно приступать к установке и настройке основного функционала.

Видео по настройке CentOS 7

Заключение

Мы выполнили некоторые начальные шаги по настройке, которые я обычно делаю при подготовке сервера. Я не претендую на абсолютную истину, возможно что-то упускаю или делаю не совсем верно. Буду рад разумным и осмысленным комментариям и замечаниям с предложениями.

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

За информацию спасибо: http://serveradmin.ru

После того как вы установили CentOS на свой VPS-сервер, крайне важно выполнить несколько дополнительных действий по настройке сервера и обеспечении его защиты от различных атак. Далее в статье я рассмотрю наиболее главные, на мой взгляд, шаги для создания полноценного и защищенного VPS-сервера.

Шаг #1: Смена пароля для учетной записи - root

После окончания создания нового VPS-сервера, вам будет выдан пароль для суперпользователя root. Сразу после подключения к вашему серверу по SSH, необходимо его изменить, т.к. иногда выданный пароль не является устойчивым к подбору (brutforce).

Зададим новый пароль для root.

Шаг #2: Создание нового пользователя

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

В связи с этим, администратор сервера создаёт нового пользователя, которому частично делегируют привилегии root. Ниже рассмотрим процесс создания и настройки учетной записи нового пользователя системы.

Создадим новую учетную запись, из под которой будем всегда работать на сервере.

adduser username

Добавим пароль для входа в систему.

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

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

Сделать это можно добавив учетную запись в группу суперпользователей - wheel .

gpasswd -a username wheel

Теперь новый пользователь username может исполнять команды от имени root , используя утилиту sudo .

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

Шаг #3: Включение файрвола

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

Установим службу файрвола:

sudo yum install firewalld

Включим файрвол и добавим его в список служб для автозапуска при рестарте системы:

sudo systemctl start firewalld;
sudo systemctl enable firewalld;

Шаг #4: Настройка конфигурации SSH

Так как в сети существует большое количество запущенных по всему миру брутфорс-программ, которые день и ночь подбирают пароли к пользователю root и есть вероятность того, что ваш VPS тоже попадет под раздачу. В таком случае, разумным решением будет запретить возможность подключения root пользователя по SSH.

Откроем конфигурационный файл - /etc/ssh/sshd_config:

sudo vi /etc/ssh/sshd_config

Изменим значение директивы PermitRootLogin .

#PermitRootLogin yes PermitRootLogin no

#PermitRootLogin yes

PermitRootLogin no

Если вы недостаточно опытный пользователь Linux систем и ваш хостер не предоставляет вам VNC-панель, то запрещать root доступ по ssh, не рекомендуется, т.к. при возникновении критической ошибки, которую можно исправить, только из root записи, вы не сможете ничего сделать.

Также изменим стандартный номер порта SSH, т.к. именно на стандартный 22 порт "стучатся" брутфорс-программы.

Все порты можно разделить на три группы:

  • 0 - 1023 - хорошо известные порты, также относятся к системным портам;
  • 1024 - 49151 - зарегистрированные порты, также относятся к пользовательским портам;
  • 49152 - 65535 - динамические порты, также относятся к частным портам.

Для начала выберем номер порта, на котором будет работать SSH. Выбирать значение номера порта рекомендуется в пределах 49152 - 65535. Чтобы выбрать какой-либо порт, сначала нужно проверить не занят ли он другим сервисом. Для примера, я выберу порт с номером 63356.

Проверим занятость порта 63356 следующей командой:

cat /etc/services | grep 63356/tcp

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

Теперь в файле /etc/ssh/sshd_config изменим значение директивы Port:

#Port 22 Port 63356

#Port 22

Port 63356

Перезапустим сервис SSH для принятия настроек.

sudo systemctl restart sshd

Укажем файрволу, чтобы он пропускал подключения по новому SSH порту - 63356

sudo firewall-cmd --zone=public --permanent --add-port=63356/tcp;
sudo firewall-cmd --reload;

Убедимся, что добавленный порт прослушивается (активен):

ss -lntu | grep 63356

$ ss -lntu | grep 63356
tcp LISTEN 0 128 *:63356 *:*
tcp LISTEN 0 128:::63356:::*

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

ssh username@server_ip_adress -p 63356

Шаг #5: Смена имени сервера (hostname)

В арендуемые VPS-сервера хостеры часто устанавливают значение переменной $HOSTNAME , на свое усмотрение. Давайте поменяем дефолтное имя хоста на другое. Чаще всего именем для хоста служит какой-нибудь домен.

Полную информацию о имени хоста можно узнать следующей командой:

hostnamectl status

$ hostnamectl status
Static hostname: hostername.ru
Icon name: computer-vm
Chassis: vm
Machine ID:
Boot ID:
Virtualization: kvm
Operating System: CentOS Linux 7 (Core)
CPE OS Name: cpe:/o:centos:centos:7
Kernel: Linux 3.10.0-693.2.2.el7.x86_64
Architecture: x86-64

Изменим имя сервера:

sudo hostnamectl set-hostname "example.ru"

Убедимся, что имя поменялось:

Шаг #6: Настройка временной зоны

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

Проверим, то по какой временной зоне работает наш сервер:

Получить список доступных временных зон:

timedatectl list-timezones

Я живу в Московском часовом поясе, поэтому мне удобно, чтобы и сервер работал по такому же времени.

Установить время сервера по Москве можно так:

timedatectl set-timezone Europe/Moscow

Шаг #7: Настройка локали

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

Список всех доступных локалей хранится в каталоге - /usr/share/i18n/locales

Просмотреть используемые локали, можно командой ниже:

$ locale
LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=

Если вы хотите установить русскую локаль для какого либо формата, например времени, то воспользуетесь следующей командой:

sudo localectl set-locale LC_TIME=ru_RU.UTF-8

Язык в результат выполнения команды date , изменится на Русский(после перезагрузки сервера).

Для установки Русского-языка в систему, используйте команду:

sudo localectl set-locale LANG=ru_RU.UTF-8

Установка Русской локали для всех переменных окружения:

sudo localectl set-locale LC_ALL=ru_RU.UTF-8

Проверка установки локали:

lacalectl status

Шаг #8: Отключение SElinux

SELinux (англ. Security-Enhanced Linux - Linux с улучшенной безопасностью) - реализация системы принудительного контроля доступа, которая может работать параллельно с классической избирательной системой контроля доступа.

Не смотря на то, что SElinux позволяет улучшить управление безопасностью, он чаще мешает чем приносит реальную пользу, поэтому рекомендую его отключить.

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

Для отключения SElinux отредактируйте файл - /etc/selinux/config и для директивы SELINUX установите значение disabled .