В данной статье речь пойдет о первоначальной настройке серверной ОС CentOS 7 и 8 версиях после установки.
1. Установка необходимых пакетов
Теперь обновим систему и установим необходимый приклад:
# yum -y update
Если возникнет ошибка:
Error: Failed to download metadata for repo 'appstream': Cannot prepare internal mirrorlist: No URLs in mirrorlist
То в CentOS 8 сначала требуется прописать репозиторий, выполним:
# cd /etc/yum.repos.d/
# sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
# sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
# yum -y update
# yum -y install epel-release
# yum -y install mc net-tools bind-utils nano wget bzip2 traceroute gdisk htop iftop atop lsof chrony git unzip
Включаем подсветку в MC
# cp /usr/share/mc/syntax/sh.syntax /usr/share/mc/syntax/unknown.syntax
cp: overwrite '/usr/share/mc/syntax/unknown.syntax'? y
2. Настройка синхронизация времени (NTP)
Проверим текущее время на сервере:
# date
Установим часовой пояс:
# timedatectl set-timezone Europe/Moscow
Включим и добавим в автозагрузку утилиту Crony для синхронизации времени:
# systemctl start chronyd && systemctl enable chronyd && systemctl status chronyd
Проверяем
# timedatectl
Изменить конфигурацию NTP можно в /etc/chrony.conf
После внесения изменений выполните:
3. Отключить SELinux
Отключите SELinux, внеся правки в /etc/sysconfig/selinux
# nano /etc/sysconfig/selinux
меняем значение:
SELINUX=disabled
# reboot или # setenforce 0
4. Сетевые параметры
Зададими Hostname нашему серверу
# hostnamectl set-hostname New_HostName
# systemctl restart systemd-hostnamed
Для возможности управления сетевыми настройками с помощью конфигурационных файлов, установим пакет network-scripts:
# yum -y install network-scripts
Зададим сетевые настройки в конфигурационном файле ifcfg-eth0, где eth0 - имя сетевого интерфейса. Узнать сетевые интерфейсы можно командой # ifconfig
# nano /etc/sysconfig/network-scripts/ifcfg-eth0
Для настроек по DHCP:
TYPE="Ethernet"
BOOTPROTO="dhcp"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
Настройки статического ip адреса:
TYPE="Ethernet"
BOOTPROTO="none"
DEFROUTE="yes"
IPV4_FAILURE_FATAL="no"
NAME="eth0"
DEVICE="eth0"
ONBOOT="yes"
IPADDR=192.168.1.10
DNS1=192.168.1.1
DNS2=172.16.10.112
PREFIX=24
GATEWAY=192.168.1.1
# systemctl restart network
5. Отключение firewalld с заменой на iptables
Отключение firewalld
# systemctl stop firewalld && systemctl disable firewalld
Установка iptables
# yum -y install iptables-services
Добавить iptables в автозагрузку и запустить:
# systemctl enable iptables.service && systemctl start iptables.service
Для управления правилами фаервола создать скрипт.
# nano /etc/iptables.sh
#!/bin/bash
# Задаем переменные
export IPT="iptables"
export LAN=eth0
export LAN_IP=192.168.1.10
# Очищаем все цепочки правил
$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
# Разрешаем localhost и локалку
$IPT -A INPUT -i lo -j ACCEPT
# $IPT -A INPUT -i $LAN -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
# $IPT -A OUTPUT -o $LAN -j ACCEPT
# Разрешаем пинги
$IPT -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
$IPT -A INPUT -p icmp --icmp-type echo-request -j ACCEPT
# Разрешаем исходящие подключения сервера
$IPT -A OUTPUT -o $LAN -j ACCEPT
# Разрешаем установленные подключения
$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
# Отбрасываем неопознанные пакеты
$IPT -A INPUT -m state --state INVALID -j DROP
$IPT -A FORWARD -m state --state INVALID -j DROP
# Отбрасываем нулевые пакеты
$IPT -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
# Закрываемся от syn-flood атак
$IPT -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP
# Открываем порты
$IPT -A INPUT -i $LAN -p tcp --dport 22 -j ACCEPT # SSH
# Включаем логирование, теперь заблокированные пакеты
# вы сможете отследить в файле /var/log/messages
$IPT -N block_in
$IPT -N block_out
$IPT -N block_fw
$IPT -A INPUT -j block_in
$IPT -A OUTPUT -j block_out
$IPT -A FORWARD -j block_fw
$IPT -A block_in -j LOG --log-level info --log-prefix "--IN--BLOCK"
$IPT -A block_in -j DROP
$IPT -A block_out -j LOG --log-level info --log-prefix "--OUT--BLOCK"
$IPT -A block_out -j DROP
$IPT -A block_fw -j LOG --log-level info --log-prefix "--FW--BLOCK"
$IPT -A block_fw -j DROP
# Сохраняем правила
/sbin/iptables-save > /etc/sysconfig/iptables
Сохраняем скрипт, делаем исполняемым и запускаем:
# chmod 0740 /etc/iptables.sh
# /etc/iptables.sh
Вывести цепочку применяемых правил можно командой:
# iptables -L -v -n
Если не нужен фаервол то можно его отключить
# systemctl stop iptables.service && systemctl disable iptables.service