Проверяем, что за система у нас
uname -a
Увидим текущую версию ОС.
Обновляем ее:
yum update
Устанавливаем сетевой пакет
yum install net-tools.x86_64
Чтобы работала команда nslookup:
yum install bind-utils
Сразу для работы с текстовыми файлами (конфигами) устанавливаем Midnight Commander:
yum install mc
И сразу же для удобства, меняет расцветку синтаксиса:
# cp /usr/share/mc/syntax/sh.syntax /usr/share/mc/syntax/unknown.syntax
Сеть
Отключаем SELinux, для этого открываем файл на редактирование с помощью Midnight Commander:
mcedit /etc/sysconfig/selinux
И у SELINUX ставим параметр disabled.
SELINUX=disabled
После отключения SElinux необходимо перезагрузиться или выполнить команду:
setenforce 0
– тогда изменение выполнится без перезагрузки.
Firewall
Фаерволом в CentOS 7 является iptables. И для управления им в центос придумала другая утилита – Firewalld. Я ею не пользуюсь, поэтому останавливаю ее и удаляю из автозагрузки, т.к. удобнее пользоваться самописным скриптом, который кроссплатформенный между разными линуксами:
systemctl stop firewalld systemctl disable firewalld
Установливаем утилиты для iptables:
yum -y install iptables-services
Включаем iptables в автозагрузку:
systemctl enable iptables
Посмотреть текущие настройки можно командой:
iptables -L -v -n
Теперь создадим текстовый файл (скрипт) для iptables:
mcedit /etc/iptables_rules.sh
И заносим туда:
#!/bin/bash # # Объявление переменных export IPT="iptables" # Интерфейс который смотрит в интернет (свой ip-адрес) export WAN=eth0 export WAN_IP=99.99.99.99 # Очистка всех цепочек 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 # Рзрешаем пинги $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 # Открываем порт для 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 # Открываем порт для NGINX $IPT -A INPUT -i $WAN -p tcp --dport 80 -j ACCEPT # Открываем порт для Apache(httpd) $IPT -A INPUT -i $WAN -p tcp --dport 8080 -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
Делаем файл c правилами исполняемым:
chmod 0740 /etc/iptables_rules.sh
и запускаем его:
/etc/iptables_rules.sh
При каждом запуске скрипта, все изменения записываются в файл /etc/sysconfig/iptables и применяются при загрузке системы.
Проверить, применились ли правила можно командой:
iptables -L -v -n
SSH
По умолчанию, сервис работает на 22 порту. Для безопасности его лучше сменить на любой другой свободный. Открываем конфиг
mcedit /etc/ssh/sshd_config
Нужно раскомментировать строку Port 22 и заменить значение 22 на любое другое, например 99999. Сохраняем.
Теперь нужно добавить в настройки фаервола наш новый порт в разрешенные. Открываем скрипт для iptables
mcedit /etc/iptables_rules.sh
Находим строку
$IPT -A INPUT -i $WAN -p tcp --dport 22 -j ACCEPT
И вместо 22 пишем 99999. Сохраняем и запускаем этот скрипт!
Перезапускаем службу
systemctl restart sshd
Можно проверить на каком порту висит сейчас sshd
netstat -tulpn | grep sshd tcp 0 0 0.0.0.0:99999 0.0.0.0:* LISTEN 1799/sshd tcp6 0 0 :::99999 :::* LISTEN 1799/sshd
видим 99999, значит все ок.
Добавление репозиториев
Добавим популярный репозиторий EPEL
yum install epel-release -y
Настройка bash_history (по желанию)
Все подробно расписал товарищ в этой статье.
Самое основное. Список последних выполненных команд хранится в домашней директории пользователя в файле .bash_history (в начале точка).
Нам нужно отредактировать файл .bashrc, который находится в том же каталоге, что и файл с историей.
Добавляем в него следующие строки:
export HISTSIZE=10000 export HISTTIMEFORMAT="%h %d %H:%M:%S " PROMPT_COMMAND='history -a' export HISTIGNORE="ls:ll:history:w"
Чтобы изменения применились, нужно разлогиниться и залогиниться снова.
Отключаем флуд сообщений в /var/log/messages
cd /etc/rsyslog.d && mcedit ignore-systemd-session-slice.conf
Туда заносим:
if $programname == "systemd" and ($msg contains "Starting Session" or $msg contains "Started Session" or $msg contains "Created slice" or $msg contains "Starting user-" or $msg contains "Starting User Slice of" or $msg contains "Removed session" or $msg contains "Removed slice User Slice of" or $msg contains "Stopping User Slice of") then stop
Сохраняем и перезапускаем:
systemctl restart rsyslog
Мониторинг – iftop, atop, htop, lsof
iftop показывает в режиме реального времени загрузку сетевого интерфейса
yum install iftop
Диспетчеры задач:
yum -y install htop
yum -y install atop
lsof поможет узнать какие файлы используются теми или иными процессами:
yum install lsof
По идее все.
Обычно после этого требуется настроить веб-сервер, к примеру на связке nginx+apache. Статья описывающая эту связку.
Спасибо статье: https://serveradmin.ru/centos-7-nastroyka-servera
Всё сделал с точностью до буквы. Смена порта не получилась. Команда “netstat -tulpn | grep sshd” выводит новый номер порта, однако присоединиться через него не получается. Видно кроме этого нужно что-то ещё сделать, что в статье отсутствует.
в фаерволе разблокировали новый порт?
Да, конечно, новый порт открыл, а старый закрыл. Причина оказалась в том, что новый порт был чем-то занят, хотя перед его открытием проверил занятые порты. Нашёл список портов в Wikipedia, в нём свободный диапазон портов и выбрал из него порт. После этого всё заработало. Я так понимаю. номер порта 99999 указан в статье для примера, как реальный, его я не рассматривал, ибо порта с номером более 65535 не существует, а диапазон 49152—65535 (цитата из Wikipedia) содержит динамически выделяемые или частные порты, которые не регистрируются IANA. Эти порты используются временными (короткоживущими) соединениями «клиент — сервер» или в определённых частных случаях. Этот… Подробнее »
>>Я так понимаю. номер порта 99999 указан в статье для примера
Да, конечно. Простите, если ввел вас в заблуждение этим примером. Надо поправить.
Порт в Firewalld открыл, однако проблема была не в этом, я посмотрел, какие плоты используются и назначил пятизначный порт для SSH, однако, он по какой-то причине не работал. Тогда я нашёл в Википедии список портов, выбрал тот, который помечен, как официально свободный и через него подключил SSH. После этого всё заработало.
У меня вопрос несколько не по теме, Вы не владеете ситуацией с настройкой DNS сервера bind? У меня периодически появляется проблема с доступом в домашней проводной сети. Дело в том, что я для доступа в интернет использую сотовый роутер Huawei B310 и для упрощения настроек на домашнем сервере указал в качестве сервера DNS адрес роутера, 192.168.8.1. Роутер гарантированно поддерживает работу только с Windows и в связи с этим возникают периодические проблемы с доступом к серверу. Решил установить и настроить DNS сервер bind. Вот с этим и возникли проблемы, во всех описаниях приводятся IP адреса, но авторы не поясняют откуда они… Подробнее »
С такими вещами не приходилось сталкиваться и разбираться, поэтому ничем помочь здесь не смогу)
Спасибо, буду искать решение дальше.