Firewalld - установка, настройка, команды. Как их просмотреть? Настройка зон по умолчанию

CentOS - это свободный дистрибутив, основанный на исходном коде Red Hat Enterprise Linux, фактически, он создается с этих исходников практически без изменений, разработчики только вырезают весь брендинг Red Hat. Но в отличие от Red Hat, CentOS полностью бесплатна и получает регулярные обновления, спустя немного времени после выхода их для Red Hat поскольку они тоже собираются из исходного кода.

Очень часто CentOS применяется в качестве операционной системы для серверов. В одной из предыдущих статей мы рассматривали как выполняется . Сегодня будет рассмотрена настройка сервера CentOS 7 после установки. Мы рассмотрим все основные параметры, которые вам нужно будет изменить чтобы подготовить ваш сервер к работе.

1. Настройка статического IP адреса

Первое, что нужно сделать - это настроить сеть. На персональных компьютерах используется получение IP адреса по DHCP, и компьютер при каждом запуске будет иметь другой адрес, сервер должен всегда работать на одном адресе, поэтому мы присваиваем ему статический IP. Также нужно настроить DNS и шлюз по умолчанию. Но сначала установите утилиту net-tools:

yum install net-tools

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

Теперь можно перейти к настройке интерфейса через файл /etc/sysconfig/network-scripts/ifcfg-enp0s3, например, с помощью редактора vi:

vi /etc/sysconfig/network-scripts/ifcfg-enp0s3

IPADDR = ваш_ip
GATEWAY = шлюз_для_доступа_к_сети
DNS1 = IP_адрес_DNS1
DNS2 = IP_адрес_DNS2

После внесения изменений этот файл будет выглядеть вот так:

Затем останется перезагрузить сеть чтобы применить новые настройки:

service network restart

Потом, при необходимости вы можете сменить IP адрес таким же способом.

2. Имя компьютера

Следующее что нам нужно сделать - это изменить имя компьютера. Текущее имя компьютера хранится в переменной HOSTNAME:

Чтобы его изменить вам нужно отредактировать файл /etc/hostname и заменить там старое имя на новое.

vi /etc/hostname

Также вы можете использовать команду hostnamectl:

hostnamectl set-hostname "имя_хоста"

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

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

yum update && yum upgrade

4. Установите браузер

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

yum install links

Вы можете найти и другие консольные браузеры для Linux, например, Lynx или Elinks.

5. Настройка часового пояса

Правильная настройка часового пояса очень важна для сервера. Это уберет путаницу в логах и позволит вашим приложениям отображать правильную дату и время. Для настройки используется утилита timedatectl.

Сначала получите список часовых поясов:

timedatectl list-timezones

Затем установите нужный, например, Europe/Kyiv:

timedatectl set-timezone Europe/Kyiv

Затем проверьте:

7. Настройка локали

Локаль определяет язык и кодировку, которая будет использоваться в вашей системе, например, для включения русского языка установите значение ru_RU.UTF-8

localectl set-locale LANG=ru_RU.UTF-8

Затем смотрим что получилось:

Затем устанавливаем раскладку клавиатуры:

localectl set-keymap us

8. Отключите SELinux

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

sed -i "s/(^SELINUX=).*/SELINUX=disabled/" /etc/selinux/config

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

9. Создайте пользователя

Использовать систему от имени суперпользователя небезопасно и тем более небезопасно оставлять открытым доступ к root аккаунту по ssh. Сначала создайте обычного пользователя и установите для него пароль:

useradd имя_пользователя
# passwd пароль

Затем добавьте пользователя в группу wheel, чтобы разрешать пользователю работать от имени администратора:

usermod -G wheel имя_пользователя

Теперь осталось подправить настройки sudo, для этого добавьте такую строчку, если ее там еще нет:

%wheel ALL = (ALL) ALL

10. Включите сторонние репозитории

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

Для добавления репозитория Enterprise Linux Repository (EPEL) выполните:

yum install epel-release
# rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

10. Настройка SSH

Чаще всего нам приходится работать с серверами не напрямую, а по сети, через SSH. Обычно служба SSH уже установлена и активирована, но для ее правильной работы нужно выполнить несколько настроек. Сначала нужно настроить использование только безопасного протокола, для этого откройте файл /etc/ssh/ssh_config и удалите строчку Protocol 2,1. А вместо нее добавьте:

Также нужно отключить вход от имени суперпользователя:

PermitRootLogin no

11. Установите веб-сервер Apache

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

yum install httpd

Когда установка будет завершена, перед тем, как вы сможете перейти к работе нужно разрешить HTTP в брандмауере:

firewall-cmd --add-service=http
# firewall-cmd -permanent -add-port=3221/tcp
# firewall-cmd --reload

Теперь осталось добавить Apache в автозагрузку:

systemctl start httpd.service
# systemctl enable httpd.service

12. Установите PHP

PHP - это современный язык веб-приложений и скриптов. Он часто используется в качестве языка программирования общего назначения. Для установки выполните:

После установки необходимо перезапустить Apache:

echo -e "" > /var/www/html/phpinfo.php

Затем откройте созданный файл в браузере:

links http://127.0.0.1/phpinfo.php

13. Установка базы данных

MariaDB - это база данных, основанная на исходном коде MySQL. Дистрибутивы Linux на базе Red Hat используют MariaDB вместо MySQL. Базы данных - незаменимая вещь на сервере, поэтому настройка CentOS после установки должна включать ее установку. Для установки MariaDB наберите:

yum install mariadb-server mariadb

Затем запустите и добавьте в автозагрузку:

systemctl start mariadb.service
# systemctl enable mariadb.service

И разрешите в использование службы в брандмауэре:

firewall-cmd --add-service=mysql

Осталось запустить скрипт настройки:

/usr/bin/mysql_secure_installation

14. Установите GCC

GCC расшифровывается как GNU Compiler Collection, это набор компиляторов, которые считаются стандартом для сборки программ в Linux. Но по умолчанию он не поставляется с CentOS, поэтому для установки наберите:

Затем вы можете посмотреть версию GCC:

15. Установите Java

Java - это объективно-ориентированный язык программирования общего назначения. Он не устанавливается по умолчанию, поэтому настройка CentOS 7 после установки может включать и его установку. Для этого выполните:

yum install java

Затем проверьте версию:

Выводы

В этой статье мы рассмотрели как выполняется настройка сервера CentOS 7 после установки. Как видите, есть много элементарных действий, которые желательно сделать перед тем, как использовать сервер на производстве. Если у вас остались вопросы, спрашивайте в комментариях!

Centos 7, в отличие от CentOS 6, в базе идет с новым брандмауэром - firewalld. Его можно отключить и заменить на старый добрый iptables, но если к этому нет прямых предпосылок, то лучше привыкать к чему-то новому, а не упираться в старое. Это не значит, что Windows 10 лучше Windows 7, а Windows XP лучше Windows 7 ;) Хороший пример на эту тему - selinux. Если вначале почти все (и я тоже) его отключали и даже немного ругали, то теперь почти никто это не советует, только если есть уверенность, что так надо. Напротив, многие уже привыкли (или привыкают) пользоваться semanage. Не будем и мы сразу отключать firewalld, а попробуем, как он на вкус.

Firewalld - это не принципиально иной брандмауэр. Это другая надстройка над netfilter, поэтому если вы обладаете опытом работы с iptables, то помучившись немного вы спокойно начнете пользоваться новым инструментом.

Запуск и остановка firewalld

Проверим, запущен ли firewalld:

# systemctl status firewalld

Тут будет расширенная информация. Чтобы коротко, да (работает) или нет можно так:

# firewall-cmd --state
running

Ок, работает.

Остановка firewalld:

# systemctl stop firewalld

Запрет автостарта:

# systemctl disable firewalld

Запуск firewalld:

# systemctl start firewalld

Включение автостарта:

# systemctl enable firewalld

Зоны firewalld

В firewalld широко используется понятие зоны. Список всех допустимых зон по-умолчанию:

# firewall-cmd --get-zones
block dmz drop external home internal public trusted work

Назначение зон (условно, конечно):

  • drop - все входящие пакеты отбрасываются (drop) без ответа. Разрешены только исходящие соединения.
  • block - входящие соединения отклоняются (rejected) с ответом icmp-host-prohibited (или icmp6-adm-prohibited). Разрешены только инициированные системой соединения.
  • public - зона по-умолчанию . Из названия ясно, что эта зона нацелена на работу в общественных сетях. Мы не доверяем этой сети и разрешаем только определенные входящие соединения.
  • external - зона для внешнего интерфейса роутера (т.н. маскарадинг). Разрешены только определенные нами входящие соединения.
  • dmz - зона DMZ, разрешены только определенные входящие соединения.
  • work - зона рабочей сети. Мы все еще не доверяем никому, но уже не так сильно, как раньше:) Разрешены только определенные входящие соединения.
  • home - домашняя зона. Мы доверяем окружению, но разрешены только определенные входящие соединения
  • internal - внутренняя зона. Мы доверяем окружению, но разрешены только определенные входящие соединения
  • trusted - разрешено все.

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

# firewall-cmd --get-active-zones
public
interfaces: enp1s0

Ага, зона public, к которой присоединен сетевой интерфейс enp1so. Дальше в зону public добавим новый порт, на котором будет висеть sshd.

Зная имя сетевого интерфейса (например, enp1s0), можно узнать, к какой зоне он принадлежит:

# firewall-cmd --get-zone-of-interface=enp1s0
public

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

# firewall-cmd --zone=public --list-interfaces
enp1s0

Пример: разрешаем ssh на нестандартном порте

Давайте разрешим доступ к серверу по ssh на порте 2234/tcp, а не на 22/tcp, как по-умолчанию. Попутно чуть-чуть коснемся selinux.

Сначала посмотрим, что вообще разрешено постоянно на нашем сервере:

# firewall-cmd --permanent --list-all
public (default)
interfaces:
sources:
services: ssh dhcpv6-client
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

Я не использую пока ipv6, поэтому сразу уберу соотв. правило из firewalld:

# firewall-cmd --permanent --zone=public --remove-service=dhcpv6-client

Разрешим на постоянной основе (чтобы после перезагрузки не потерлось) соединение на порт 2234/tcp (на него повесим sshd):

# firewall-cmd --permanent --zone=public --add-port=2234/tcp

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

# firewall-cmd --reload

Проверим:

# firewall-cmd --zone=public --list-ports
2234/tcp

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

# nano /etc/ssh/sshd_config
...
port 2234
...

# systemctl restart sshd.service

Но SELinux, которую вы, надеюсь, не отключали, не даст подключиться к ssh на нестандартном порте (порт 2234/tcp для sshd - нестандартный). Вы можете этот шаг пропустить и проверить, как сработатет защита SELinux, а можете сразу все настроить:

# yum provides semanage
# yum install policycoreutils-python
# semanage port -a -t ssh_port_t -p tcp 2234

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

# firewall-cmd --permanent --zone=public --remove-service=ssh
# firewall-cmd --reload

Смотрим, что получилось:

# firewall-cmd --list-all
public (default, active)
interfaces:
sources:
services:
ports: 2234/tcp
masquerade: no
forward-ports:
icmp-blocks:
rich rules:

Вот и все.

Разные полезные команды:

Включить режим блокировки всех исходящих и входящих пакетов:

# firewall-cmd --panic-on

Выключить режим блокировки всех исходящих и входящих пакетов:

# firewall-cmd --panic-off

Узнать, включен ли режим блокировки всех исходящих и входящих пакетов:

# firewall-cmd --query-panic

Перезагрузить правила firewalld без потери текущих соединений:

# firewall-cmd --reload

Перезагрузить правила firewalld и сбросить текущие соединения (рекомендуется только в случае проблем):

# firewall-cmd --complete-reload

Добавить к зоне сетевой интерфейс:

# firewall-cmd --zone=public --add-interface=em1

Добавить к зоне сетевой интерфейс (сохранится после перезагрузки firewall):

# firewall-cmd --zone=public --permanent --add-interface=em1

Можно в конфиге ifcfg-enp1s0 указать, какой зоне принадлежит этот интерфейс. Для этого добавим ZONE=work в файл /etc/sysconfig/network-scripts/ifcfg-enp1s0. Если параметр ZONE не указан, будет назначена зона по-умолчанию (параметр DefaultZone в файле /etc/firewalld/firewalld.conf.

Разрешить диапазон портов:

# firewall-cmd --zone=public --add-port=5059-5061/udp

Маскарад (masquerade, он же nat, он же...):

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

# firewall-cmd --zone=external --query-masquerade

Включить:

# firewall-cmd --zone=external --add-masquerade

Здесь надо отметить, что вы можете включить masquerade и для зоны public, например.

Перенаправить входящие на 22 порт на другой хост:

# firewall-cmd --zone=external --add-forward-port=port=22:proto=tcp:toaddr=192.168.1.23

Перенаправить входящие на 22 порт на другой хост с изменением порта назначения (с 22 на 192.168.1.23:2055):

# firewall-cmd --zone=external /
--add-forward-port=port=22:proto=tcp:toport=2055:toaddr=192.168.1.23

На этом закончу, т.к. примеров может быть бесконечно много. Добавлю только, что лично я не составил окончательно свое мнение по поводу нововведения firewalld, т.к. к синтаксису привыкаешь долго и если в вашем зоопарке встречаются разные OS Linux, то по первости могут быть проблемы именно с привычкой. Но освоив firewalld, вы расширите кругозор - чаще всего, это стоит затраченных усилий.

Не хочу firewalld! Верните мне старый iptables!

Если все же вы хотите вернуть прошлое и заменить firewalld на iptables, то сделать это совсем не трудно:

Новичкам тут не место:

# systemctl disable firewalld
# systemctl stop firewalld

Ставим старый добрый iptables:

# yum install iptables-services

Запускаем брандмауэр:

# systemctl start iptables
# systemctl start ip6tables

Автозапуск при включении:

# systemctl enable iptables
# systemctl enable ip6tables

Для сохранения правил iptables после перезагрузки:

# /sbin/iptables-save > /etc/sysconfig/iptables
# /sbin/ip6tables-save > /etc/sysconfig/ip6tables

Или по-старинке:

# service iptables save

Текущие правила находятся в файлах:
/etc/sysconfig/iptables
/etc/sysconfig/ip6tables

Перезапуск iptables (например, после совершения каких-либо изменений):

# systemctl restart iptables.service

В данной статье предлагаю Вам познакомиться с брандмауэром . Возможно многие его давно используют. Я впервые столкнулся с новым брандмауэром во время первой установки 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

После того как вы установили 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 .