Базовая настройка сервера Debian после установки

После установки нового сервера приходится выполнять один и тот же набор стандартных настроек. Сегодня мы займемся базовой настройкой сервера под управлением операционной системы Debian. Я приведу практические советы по небольшому увеличению безопасности и удобству администрирования, основанные на моем личном опыте.

Углубленный онлайн-курс по MikroTik

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.

Данная статья является частью единого цикла статьей про сервер Debian.

Введение

Любая работа с сервером после установки чаще всего начинается со стандартных обязательных действий, без которых либо не получится продвинуться дальше, либо будет неудобно работать. Например, вам в любом случае необходимо выполнить сетевые настройки, желательно обновить систему и установить часовой пояс. Рекомендуется сразу настроить автообновление времени, подрихтовать параметры sshd, установить midnight commander и выполнить другие настройки.

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

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

Итак, у нас в наличии только что установленная система. Узнать или проверить ее версию можно командами:

# uname -a
Linux debian10 4.19.0-5-amd64 #1 SMP Debian 4.19.37-5 (2019-06-19) x86_64 GNU/Linux

# lsb_release -a
No LSB modules are available.
Distributor ID:	Debian
Description:	Debian GNU/Linux 10 (buster)
Release:	10
Codename:	buster

Очень подробно про настройку сети в Debian я написал в отдельной статье. Рекомендую с ней ознакомиться. Здесь же кратко выполним основное. Для настройки сети, необходимо отредактировать файл /etc/network/interfaces. Сделаем это:

# nano /etc/network/interfaces

Для получения IP адреса по dhcp достаточно будет следующего содержания:

allow-hotplug eth0
iface eth0 inet dhcp

Если у вас статический адрес, то его настроить можно следующими параметрами в файле:

allow-hotplug eth0
iface eth0 inet static
address 192.168.1.24
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 192.168.1.1

Сохраняем файл. Теперь нужно выполнить перезапуск сети. В Debian это делается командой:

# systemctl restart networking.service

В системном логе /var/log/syslog при этом будут записи:

debian10 systemd[1]: Stopping Raise network interfaces...
debian10 systemd[1]: networking.service: Succeeded.
debian10 systemd[1]: Stopped Raise network interfaces.
debian10 systemd[1]: Starting Raise network interfaces...
debian10 systemd[1]: Started Raise network interfaces.

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

К сетевым настройкам я отношу установку пакета net-tools, в состав которого входят старые и привычные утилиты для работы с сетью - ifconfig, netstat, route и другие. В современных дистрибутивах их заменили одной командой ip, но лично мне вывод некоторых старых команд, конкретно, netstat, нравится больше, поэтому я иногда ими тоже пользуюсь.

# apt install net-tools

На этом настройка сети закончена.

Обновление системы, отличие apt upgrade от dist-upgrade и full-upgrade

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

# apt update

Обновление debian

Посмотреть список пакетов, готовых к обновлению, можно с помощью команды:

# apt list --upgradable

Теперь выполним простое обновление всех пакетов системы:

# apt upgrade

apt upgrade

Ключ upgrade выполняет только обновление одной версии пакета на другую, более свежую. Он не будет устанавливать или удалять пакеты, даже если это необходимо для обновления других. Это наиболее безопасный и надежный вариант обновления, но он может обновить не все. Например, с ее помощью не обновить ядро до более свежей версии.

Ключ dist-upgrade или full-upgrade (это одно и то же) в дополнение к upgrade обрабатывает все изменения зависимостей для новых пакетов и во время работы может удалять ненужные и ставить необходимые пакеты для обновления. Вот выдержка из документации по поводу этих двух ключей.

Отличие apt upgrade от apt dist-upgrade и full-upgrade

Так что после обычного обновления, делаем еще full-upgrade.

# apt full-upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following packages were automatically installed and are no longer required:
  dh-python guile-2.0-libs libbind9-140 libdns162 libicu57 libisc160 libisccc140 libisccfg140 liblvm2app2.2 liblvm2cmd2.02 liblwres141 libperl5.24
  libpython3.5-minimal libpython3.5-stdlib linux-image-4.9.0-3-amd64 python3-distutils python3-lib2to3 python3.5 python3.5-minimal rename sgml-base tcpd
  xml-core
Use 'apt autoremove' to remove them.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

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

# apt autoremove

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

На этом обновление системы закончено. Если вы хотите обновить версию релиза, например Debian 9 обновить до Debian 10 Buster, то читайте отдельный материал.

Настройка ssh

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

Существует расхожее мнение, что менять порт ssh это наивность, а не защита. Надо просто настроить сертификаты, fail2ban или еще каким-то образом защитить ssh порт, к примеру, с помощью ограничений iptables, и т.д. Тем не менее, я все же рекомендую порт сменить на нестандартный. Даже если у вас все защищено от подбора паролей, так как вы используете сертификаты, лишние запросы к ssh порту тратят ресурсы сервера, хоть и не очень большие. Идет установка соединения, обмен рукопожатиями и т.д. Зачем вам это нужно?

По-умолчанию в Debian, впрочем как и в любом другом дистрибутиве Linux, ssh сервер работает на 22 порту. Изменим этот порт, к примеру, на 23331. Так же я еще изменяю конфигурацию для разрешения подключения по ssh пользователя root с использованием пароля. В Debian из коробки пользователь root по ssh паролем авторизовываться не может. Изменим и это. Открываем файл настроек:

# nano /etc/ssh/sshd_config

И изменяем там следующие строки. Приводим их к виду:

Port 23331
PermitRootLogin yes

Сохраняем изменения и перезапускаем сервер ssh следующей командой:

# service sshd restart

Проверяем изменения:

# netstat -tulnp | grep ssh

tcp 0 0 0.0.0.0:23331 0.0.0.0:* LISTEN 925/sshd
tcp6 0 0 :::23331 :::* LISTEN 925/sshd

Все в порядке, сервер слушает 23331 порт. Теперь новое подключение будет осуществлено только по порту 23331. При этом, после перезапуска ssh, старое подключение не будет разорвано.

Я знаю, что многие возражают против подключения рутом к серверу. Якобы это небезопасно и т.д. и т.п. Мне эти доводы кажутся не убедительными. Не понимаю, в чем может быть проблема, если у меня нормальный сложный пароль на root, который не получится подобрать или сбрутить. Ни разу за всю мою работу системным администратором у меня не возникло проблем с этим моментом. А вот работать так значительно удобнее, особенно, когда необходимо оперативно куда-то подключиться по форс мажорным обстоятельствам.

Отдельно тему подключения к серверу под root я рассмотрел в статье про sudo. Кому интересно, переходите в нее и делитесь своим мнением на этот счет.

Установка утилит mc, htop, iftop

Следующим шагом я настраиваю некоторые полезные утилиты, которыми регулярно пользуюсь в повседневной работе. Первая из них это всем известный двухпанельный файловый менеджер Midnight Commander. Установим mc на наш сервер:

# apt install mc

И сразу же для него включаю подсветку синтаксиса всех файлов, которые не обозначены явно в файле /usr/share/mc/syntax/Syntax синтаксисом для sh и bash скриптов. Этот универсальный синтаксис нормально подходит для конфигурационных файлов, с которыми чаще всего приходится работать на сервере. Перезаписываем файл unknown.syntax. Именно этот шаблон будет применяться к .conf и .cf файлам, так как к ним явно не привязано никакого синтаксиса.

# cp /usr/share/mc/syntax/sh.syntax /usr/share/mc/syntax/unknown.syntax

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

# select-editor

Select an editor. To change later, run 'select-editor'.
 1. /bin/nano <---- easiest
 2. /usr/bin/mcedit
 3. /usr/bin/vim.tiny

Choose 1-3 [1]: 2

Так же я рекомендую очень удобный диспетчер задач - htop. Мне он помог, к примеру, решить проблему Взлома сервера CentOS. Ставим его на сервер:

# apt install htop

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

# apt install iftop

debian iftop

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

Теперь проверим установленный часовой пояс, время и включим автоматическую синхронизацию времени с удаленного сервера. Очень подробно этот вопрос я рассмотрел в отдельной статье - настройка времени в Debian.

Узнать дату, время, часовой пояс можно командой date:

# date

Mon 12 Aug 2019 02:29:03 PM MSK

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

# apt install tzdata

Теперь выберем правильный часовой пояс с помощью команды:

# dpkg-reconfigure tzdata

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

Дальше синхронизируем время с сервером времени в интернете. Для разовой или ручной синхронизации понадобится отдельная утилита. Установим ntpdate на сервер:

# apt install ntpdate

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

# ntpdate-debian

12 Aug 14:30:21 ntpdate[8688]: adjust time server 89.109.251.21 offset 0.004529 sec

Если получаете ошибку:

12 Aug 14:30:21 ntpdate[8688]: the NTP socket is in use, exiting

Значит у вас уже работает служба ntp. Ее нужно остановить и обновить время вручную. Хотя если она работает, то у вас и так должно быть все в порядке.

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

# apt install ntp

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

# netstat -tulnp | grep ntp

udp        0      0 10.20.1.16:123          0.0.0.0:*                           8855/ntpd           
udp        0      0 127.0.0.1:123           0.0.0.0:*                           8855/ntpd           
udp        0      0 0.0.0.0:123             0.0.0.0:*                           8855/ntpd           
udp6       0      0 fe80::cce1:23ff:fe4:123 :::*                                8855/ntpd           
udp6       0      0 ::1:123                 :::*                                8855/ntpd           
udp6       0      0 :::123                  :::*                                8855/ntpd

Настройка firewall (iptables) в Debian

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

# iptables -L -v -n

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
Обращаю пристальное внимание на то, что настраивать firewall без прямого доступа к консоли сервера не следует. Особенно, если вы не очень разбираетесь в этом и копируете команды с сайта. Шанс ошибиться очень высок. Вы просто потеряете удаленный доступ к серверу.

Создадим файл с правилами iptables:

# mcedit /etc/iptables.sh

Очень подробно вопрос настройки iptables я рассмотрел отдельно, рекомендую ознакомиться. Хотя в примере другая ОС linux, принципиальной разницы нет, настройки iptables абсолютно одинаковые, так как правила одни и те же.

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

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

# Активный сетевой интерфейс
export WAN=ens18
export WAN_IP=10.20.1.16

# Очистка всех цепочек 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 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 $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
# Открываем порт для web сервера
$IPT -A INPUT -i $WAN -p tcp --dport 80 -j ACCEPT
$IPT -A INPUT -i $WAN -p tcp --dport 443 -j ACCEPT

# Записываем правила в файл
/sbin/iptables-save > /etc/iptables_rules

Даем файлу права на запуск:

# chmod 0740 /etc/iptables.sh

Запускаем скрипт:

sh /etc/iptables.sh

Проверяем правила:

# iptables -L -v -n

Настройка iptables в debian

Проверяем, что правила записались в файл /etc/iptables_rules. Если их там нет, то записываем их вручную.

# /sbin/iptables-save > /etc/iptables_rules

Правила применились и произошла их запись в файл /etc/iptables_rules. Теперь нужно сделать так, чтобы они применялись при загрузке сервера. Для этого делаем следующее. Открываем файл /etc/network/interfaces и добавляем в него строку pre-up iptables-restore < /etc/iptables_rules Должно получиться вот так:

# cat /etc/network/interfaces

allow-hotplug eth0
iface eth0 inet dhcp
pre-up iptables-restore < /etc/iptables_rules

Для проверки перезагрузите сервер и посмотрите правила iptables. Должен загрузиться настроенный набор правил из файла /etc/iptables_rules.

Настройка логов cron

По-умолчанию, в Debian нет отдельного лог файла для событий cron, они все сыпятся в общий лог /var/log/syslog. Лично мне это не очень нравится, я предпочитаю выводить эти события в отдельный файл. Об этом я написал отдельно - вывести логи cron в отдельный файл. Рекомендую пройти по ссылке и настроить, если вам это необходимо. Там очень кратко и только по делу, не буду сюда копировать эту информацию.

Установка и настройка screen

Я привык в своей работе пользоваться консольной утилитой screen. Изначально она задумывалась как инструмент, который позволяет запустить что-то удаленно в консоли, отключиться от сервера и при этом все, что выполняется в консоли продолжит свою работу. Вы сможете спокойно вернуться в ту же сессию и продолжить работу.

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

Позже я решил подробнее ознакомиться с этим инструментом и обнаружил, что там есть несколько удобных моментов, которые можно использовать в ежедневной работе. Вот как использую утилиту screen я. При подключении к серверу у меня запускается screen с тремя окнами 1, 2, 3. Первое окно автоматически переходит в каталог /, второе в /etc, третье в /var/log. Я осмысленно назвал эти окна: Main, etc, logs соответственно. Внизу находится строка состояния, в которой отображен список всех открытых окон и подсвечено активное окно.

С помощью горячих клавиш я очень быстро переключаюсь между окнами в случае необходимости. Вот как выглядит мое рабочее окно ssh подключения:

настройка screen в debian

Переключаюсь между окнами с помощью стандартных горячих клавиш screen: ctrl+a 1,  ctrl+a 2, ctrl+a 3. Я специально изменил нумерацию, чтобы она начиналась не с 0 по-дефолту, а с 1. Так удобнее на клавиатуре переключать окна. Кнопка 0 находится слишком далеко от 1 и 2.

Чтобы настроить такую же работу screen, как у меня, достаточно выполнить несколько простых действий. Сначала устанавливаем screen:

# apt install screen

Создаем в каталоге /root конфигурационный файл .screenrc следующего содержания:

# mcedit /root/.screenrc
#Выводим строку состояния
hardstatus alwayslastline "%-Lw%{= BW}%50>%n%f* %t%{-}%+Lw%<"

# Добавляем некоторые настройки
startup_message off
defscrollback 1000
defutf8 on
shell -$SHELL

# Создаем несколько окон
chdir
screen -t Main 1
chdir /etc
screen -t etc 2
chdir /var/log
screen -t logs 3

# Активное первое окно после запуска
select 1

Для знакомства с настройками, горячими клавишами и вариантами применения утилиты screen можно по адресу http://itman.in/ssh-screen/ Мне помог этот материал. Написано кратко, по делу и доходчиво.

Заключение

Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

Теперь можно перезагрузить сервер и проверить, все ли в порядке. У меня все в порядке, проверил :) На этом базовая настройка сервера debian окончена. Можно приступать к конфигурации различных сервисов, под которые он настраивался. Об этом я рассказываю в отдельных статьях.

Напоминаю, что данная статья является частью единого цикла статьей про сервер Debian.

Углубленный онлайн-курс по MikroTik.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Автор Zerox

Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

93 комментария

  1. пукичкакич

    Устанавливается ssh:
    apt install -y ssh
    Далее добавляется в автозагрузку:
    systemctl enable ssh
    Настройки SSH
    Все настройки хранятся в файле sshd_config в директории /etc/ssh
    Файл открывается текстовым реактором:
    nano /etc/ssh/sshd_config
    В файле ищутсятся параметры:
    Port со значением 22
    PermitRootLogin со значением prohibit-password
    AddressFamily со значением any
    Port выставляется 2222
    значение prohibit-password меняется на yes и снимается знак коментария "#"
    AddressFamily выставляется inet (чтобы был доступ только по ipv4)
    Далее перезапуск ssh:
    systemctl restart ssh
    При перезагрузке не должно возникнуть ошибок.
    Можно проверить, работает ли ssh локально:
    ssh пользователь@адрес узла -p 2222
    На вопос "Are you sure you want to continue connecting?" дается положительный ответ (вводится yes).
    Появляется поле для ввода пароля. Поскольку пользователем был указан root при подключении, пароль будет от него (P@ssw0rd). При вводе пароля символы не отображаются, но вводятся.
    После этих действий подключение будет выполнено.

  2. пукакукакака

    Устанавливается firewalld
    apt install -y firewalld
    После установки проверяются зоны:
    firewall-cmd --list-all-zones | less
    Меняется зона по умолчанию:
    firewall-cmd --set-default-zone=trusted
    Интерфейсы переводятся в зону trusted
    firewall-cmd --change-interface=ens(у вас свой) --zone=trusted
    firewall-cmd --change-interface=ens(у вас свой) --zone=trusted
    Изменение сохраняется:
    firewall-cmd --runtime-to-permanent
    Выполняется перезапуск firewalld
    systemctl restart firewalld.service
    Проверка зон теперь должна показывать, что все интерфейсы в зоне trusted:
    Для проверки можно использовать команду
    firewall-cmd --info-zone=trusted
    чтобы не смотреть весь список зон.
    Возможно перебрасывать интерфейсы придется несколько раз, иногда они не перекидываются с первого раза. Поэтому обязательно нужно проверять, какие интерфейсы и в каких зонах находятся.
    Когда распределение интерфейсов выполнено, нужно сделать переадресацию порта 22 на порт 2222 согласно заданию.
    указания порта (пример входа с Боряна под пользователем root c паролем P@ssw0rd):
    После проверок конфигурация сохраняется:
    firewall-cmd --runtime-to-permanent
    Выполняется перезапуск:
    systemctl restart firewalld.service
    firewall-cmd –add-forward-port=port=22:proto=tcp:toport=2222:toport=2222:toaddr=172.16.54.50

  3. Устанавливается firewalld
    apt install -y firewalld
    После установки проверяются зоны:
    firewall-cmd --list-all-zones | less
    Меняется зона по умолчанию:
    firewall-cmd --set-default-zone=trusted
    Интерфейсы переводятся в зону trusted
    firewall-cmd --change-interface=ens(у вас свой) --zone=trusted
    firewall-cmd --change-interface=ens(у вас свой) --zone=trusted
    Изменение сохраняется:
    firewall-cmd --runtime-to-permanent
    Выполняется перезапуск firewalld
    systemctl restart firewalld.service
    Проверка зон теперь должна показывать, что все интерфейсы в зоне trusted:
    Для проверки можно использовать команду
    firewall-cmd --info-zone=trusted
    чтобы не смотреть весь список зон.
    Возможно перебрасывать интерфейсы придется несколько раз, иногда они не перекидываются с первого раза. Поэтому обязательно нужно проверять, какие интерфейсы и в каких зонах находятся.
    Когда распределение интерфейсов выполнено, нужно сделать переадресацию порта 22 на порт 2222 согласно заданию.
    указания порта (пример входа с BR-SRV под пользователем root c паролем P@ssw0rd):
    После проверок конфигурация сохраняется:
    firewall-cmd --runtime-to-permanent
    Выполняется перезапуск:
    systemctl restart firewalld.service

  4. Андрей

    Get-WindowsCapability -Online | ? Name -like 'OpenSSH.Ser*'
    namo : openssh.serever***0.0.1.0
    state: installed

    Set-Service -Name sshd -StartupType 'Automatic'
    Start-Service sshd
    Для корректной работы «SSH-сервера», нужно добавить разрешающие правила в Windows Defender Firewall
    Авторизуемся под учетными данными нашей виртуальный машины и переходим по пути «Control Panel» -> «System and Security» -> «Windows Defender Firewall»
    Открываем параметр «Windows Defender Firewall» и кликаем по пункту «Advanced Settings»

    Выбираем пункт «Inbound Rules» и создаем новое правило при помощи кнопки «New Rule»
    Выбираем тип правила «Port»
    Указываем протокол «TCP» и порт «2222»
    Разрешаем подключение к выбранному порту «Allow the connection»
    Выбираем тип сетей, где будет доступен протокол
    Называем правило «SSH» и нажимаем кнопку «Finish» для завершения создания правила
    Открываем конфигурацию «SSH-сервера» для редактирования
    изменяем port 2222

    открываем
    start-process notepad C:\Programdata\ssh\sshd_config

    permitRootLogin yes
    PasswordAuthentication yes
    permitEmptyPassword no

    restart-service sshd

    открываем hq-r
    iptables -t nat -A PREROUTING --dst 1.1.1.100 -p tcp --dport 22 -j DNAT --to-destination 192.168.0.60:2222

    ip6tables -t nat -A PREROUTING --dst 1110:a::100 -p tcp --dport 22 -j DNAT --to-destination 192:168:d::6:2222

    dpkg-reconfigure iptables-persistent
    [ Виртуальная машина HQ-SRV ]
    Авторизуемся под учетными данными нашей виртуальный машины и переходим по пути «Control Panel» -> «System and Security» -> «Windows Defender Firewall»
    Открываем параметр «Windows Defender Firewall» и кликаем по пункту «Advanced Settings»
    Выбираем пункт «Inbound Rules» и создаем новое правило при помощи кнопки «New Rule»
    Выбираем тип правила «Custom»
    Выбираем тип «All Programs»
    Выбираем тип протокола «TCP» и указываем локальный порт «2222»
    Указываем IP-адреса, которые будут заблокированы к SSH-сервису
    Запрещаем подключение к выбранному порту «Block the connection
    Называем правило «BlockCLI-SSH» и нажимаем кнопку «Finish» для завершения создания правила

  5. Добрый день. На старом Intel-ком сервере поднял Debian 12 на raid1. На сервере две сетевухи, использую только одну. Система встала, поднял часть сервисов, все нормально, проблем нет. Делаю проверку на отказ дисков. Отключаю - первый, загружаюсь, все работает, проблем нет (кроме отсутcnвия диска в raid). Возвращаю диск обратно - проверяю все нормально. Отключаю - второй, загружаюсь, все работает, кроме сети. Сетевуха не хочет получать адрес по dhcp. Возвращаю диск - сетевуха снова работает. Не подскажите, куда копать, с чем связано такое поведение системы ?

    • Даже не знаю. Похоже на проблемы с железом. Может с питанием что-то. Сетевуха без второго диска из системы не выпадает? Она там присутствует и просто не получает адрес по dhcp, или её нет в списке оборудования?

      • Обе сетвухи распаяны на материнке. Из системы не выпадает, просто не получает адрес по dhcp. Под Windows, такого не наблюдается. Ума не приложу, как могут быть связаны диск и сетевуха.

        • А если вручную прописать сетевые настройки, то сеть работает?

          • Прописывание настроек не помогает, но проблема несколько изменилась. Сеть пропала после проверки второго диска, т.е. когда его вернул в систему (mdstat показала, что оба диска на месте). Прям чудеса какие-то.

            • Проблему более-менее определил, это просто у меня она при манипуляциях с дисками четко проявляется. На самом деле, это старая проблема Debian с отвалом сетевухи.

  6. Владимир, здравствуйте.
    Интересует вопрос про ip v6 и iptables (установлен отдельно, nftables удалён). Сейчас всё больше vps включают раздачу вместе с ip v4 и ip версию 6, который не особо пока нужен. Отключить его полностью везде не всегда получается. (Кто-нибудь да слушает на разных портах). Подскажите, как вообще правильно поступить - по умолчанию, для ip v4 пишем правила iptables (пользуюсь вашим скриптом), там всё прикрыто, а для ip v6 получается правил нет, вообще никаких. Потенциально, может ли это представлять угрозу безопасности и нужно ли отдельно писать правила для ip v6, хотя бы, например, дропнуть всё.?

    • Да, ipv6 может, и, более того, представляет угрозу. Его нужно либо отключать, либо блокировать на firewall, если не пользуетесь. Отключить можно как на уровне системы, так и по отдельным приложениям. В целом, не трудно посмотреть, какие порты открыты и отключить ipv6 на всех работающих сервисах. У меня есть статья на этот счёт: https://serveradmin.ru/disable-ipv6/

      • Спасибо. Статью читал. Хотелось бы доработать скрипт с правилами iptables. Подскажите, достаточно ли будет добавить туда правила для ip v6 так (с целью вообще заблокировать на уровне firewall) или нужно что-то ещё предусмотреть?

        Очистка всех цепочек:
        iptables: ip6tables --flush

        Запрет любого трафика по ipv6:
        ip6tables -P INPUT DROP
        ip6tables -P OUTPUT DROP
        ip6tables -P FORWARD DROP

        Для автозагрузки правил в debian использую пакет iptables-persistent.
        В конце скрипта записываем правила (отдельно для v4 и v6):
        ip6tables-save > /etc/iptables/rules.v6

  7. Добрый день. Спасибо за статью. Сейчас по ней упражняюсь с Debian 12. В настройке firewall споткнулся на iptables. По # iptables -L -v -n получил "команда не найдена".
    Стал разбираться. Согласно документации Debian выполнил: # systemctl enable nftables.service , проверил снова: "команда не найдена". После чего выяснил, что нет пакета iptables, поставил # apt install iptables. Проверил - снова "команда не найдена". Сделал # su - root, # iptables -L -v -n , команда отработала. Может кому поможет. Debian ставил как вы описывали в установке, только добавил KDE.

    • Iptables давно уже нет в базовой установке системы. Надо ставить отдельно. В связи с выходом Debian 12 планирую обновить эту статью. Но надо время выделить, которого не так много.

  8. Можно упростить задачу в добавления правил firewall

    echo -e 'пишем текст как он есть
    вставляем с
    новой строки
    ' \
    | sudo tee /etc/iptables.sh

    с ключем sudo tee -a текст будет добавятся в конец, без ключа все перезаписывать

  9. Дмитрий

    Спасибо за полезный мануал!

    Удачи в карьере!

  10. Андрей

    Спасибо за статью. Помогло

  11. Геннадий

    Спасибо очень статья очень сильно помогла! В следующий раз буду искать информацию сперва здесь

  12. Сергей Викторович

    А мы можем такую вещь сделать https://profitserver.ru/knowledge-base/vpn-setup-linux ??!

  13. Руслан

    Здравствуйте! Помогите новичку линуксоиду. Смонтировал сетевую папку в debian расшаренную через винду. Поднял iredmail, указал чтобы сохранял письма в этой папке. Но письма уходят, но не сохраняются ни входящие не исходящие. Подозреваю что дело в правах на смонтированную папку. Помогите, пожалуйста, разобраться. Заранее спасибо)

    • Скорее всего вы неправильно настроили использование этой папки. Я вам вообще не рекомендую такую схему. Не надо почту хранить на директории, подключенной по smb. Это очень медленно и ненадёжно.

  14. Аноним

    У меня сайчас в дебиан 11 вот так:
    vim /etc/network/if-pre-up.d/iptables в данном файле создаем скрип на его загрузку до запуска системы
    сам скрипт
    #!/bin/sh
    iptables-restore < /etc/iptables_rules

    chmod 0740 /etc/network/if-pre-up.d/iptables даем скрипту права на выполнеие

    • А для чего тут скрипт? Можно команду:
      iptables-restore < /etc/iptables_rules сразу в interfaces добавить.

  15. чихачупс

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

    • ПОПЧЕЛУС

      все помогло, сил больше не осталось пустил собаку на шаурму хуть она не в чем не виновато

    • Бабулит уже лежит вкусно кушает

      • Брат асалейкумс заежай сегодня в чайхану посидим кальян покурим, вкусно барашка зажарим, по скидки брат сделаем побратски давай жду брат ул. попчелоский дом 16

      • Ахмад Марихмудатов

        баратан саламулик, как твой бублик, конфетка бараночка

  16. Спасибо за статью. Помогло.

  17. Сергей

    Спасибо за статью! В 11 debian-е не нашел файл /etc/iptables_rules , однако есть файл /etc/iptables/rules.v4 .
    iptables-save > /etc/iptables/rules.v4
    reboot
    iptables -L -v -n
    все прописанные правила на месте )

  18. Владимир, у Вас в настройках сетевого интерфейса не указан широковещательный адрес. Почему?

  19. Спасибо за полезный мануал!

    Удчаи в карьере!

  20. Спасибо тебе коллега, очень помогает твой ресурс.
    Знай, что твое время на создание и размещение инфы потрачено не зря.
    Жму руку

  21. Сергей

    Приветствую!
    Вы большой молодец!

    Для того, чтоб правила iptables загружались при старте системы Ubuntu 20.04 (насколько знаю, это же касается и в 16-й, 18-й версиях) нужно проделать следующее (к сожалению только это работает в новой бубунте):

    Создать шаблон сервиса:
    sudo mcedit /etc/systemd/system/restore-iptables-rules.service

    Скопипастить туда команды ниже:
    [Unit]
    Description = Apply iptables rules

    [Service]
    Type=oneshot
    ExecStart=/bin/sh -c 'iptables-restore < /etc/iptables_rules'

    [Install]
    WantedBy=network-pre.target

    Включить сервис:
    sudo systemctl enable restore-iptables-rules.service

    Перезагрузиться.
    После перезагрузки можно проверить правила: iptables -L -v -n

    Надеюсь кому-то будет полезно. :)

    • Спасибо. В убунте все по-другому в плане настройки сети. Не стоит использовать руководства для Debian.

  22. Сергей

    Мужик! Ты бог!

  23. Здравствуйте! Помогите разобраться.
    Делаю первый раз, нужно на новой работе.
    Делаю все по Вашей инструкции, до перезагрузки сервера, правила применяются, но после перезагрузки они опять не работают.
    И еще, после применения правил, перестает работать интернет.
    и в файле interfaces что делает строчка # cat /etc/network/interfaces
    Пробовал и с ней и без нее, она как бы закомментирована, но все же.

    Проверил все свои действия не однократно и не раз переделал все, результат один.
    (готовлю сервер для ip телефонии)

    • Вы похоже совсем не разбираетесь в linux, поэтому у вас возникают такие вопросы.
      # cat /etc/network/interfaces
      Это команда, которую я ввел в терминале, чтобы отобразить содержимое файла interfaces. В сам файл это писать не надо. Проверьте еще раз внимательно то, что вы сделали. Скорее всего где-то ошиблись или напутали.

      Проверьте, создался ли у вас файл /etc/iptables_rules с правилами iptables. Отсюда они загружаются при старте сервера с помощью команды
      pre-up iptables-restore < /etc/iptables_rules в файле interfaces.

      • Да Вы правы, с линуксом я на ВЫ, но изучать придется, в общем еще раз много раз перепроверил. Результат такой же.
        Что в итоге:
        Вручную скрипт запускается, после запуска отрубается доступ в инет, с другого компа в сети, сервер пингуется.
        После перезагрузки сервера, правила не применяются.
        Может я что-то не то прописываю в сетевых интерфейсах файла iptables? и как все таки заставить применять правила при загрузке?
        Заранее большое спасибо, если поможете)

        • Я вряд ли вам смогу помочь в формате ответа на комментарии. С учетом того, что у вас много чего не работает, а по какой причине, я не смогу выяснить никаким образом. Вам придется самому со всем этим разбираться, или просить чьей-то помощи очно или с удаленным подключением (но это не ко мне).

  24. Дмитрий

    А зачем разрешать подключаться через root по ssh, если при необходимости можно от обычного пользователя перейти к руту командой su - ?

  25. А кто то может объяснить как дописать правила в iptables которые используются в данном гайде
    для вот этого скрипта: https://github.com/hwdsl2/setup-ipsec-vpn

    • Можно просто посмотреть, какие правила он добавляет и дописать их в скрипт uptables. Посмотреть правила можно прямо в скрипте vpnsetup.sh.

      • как раз вчера днем этим и занимался, пока без успешно (:
        Но нужно все таки добить. Увы знаний пока не совсем много, но на Вашем сайте можно что то и извлечь ценное)

        Вопрос конечно не по теме, смотрю появился раздел с микротиками, не планируете написать статью на тему настройки впн клиента на микротике для определенного списка сайтов?

        Ранее настраивал подобную вещь на RB951G-2HnD но так как под рукой теперь его нету, пытаюсь вспомнить как настраивал, что бы перекинуть на свой hAp ac2

  26. Прошу совета.

    Добавляю правило в фаерволе для прозрачного squid
    iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.0.13:3128
    Через несколько секунд, правило исчезает

  27. Александр

    Час добрый! Хотел бы проконсультироваться. Пытаюсь открыть порт 587 для исходящей рассылки moodle.
    Прописал: в iptables.sh строки:
    $IPT -A FORWARD -p tcp -d 10.6.0.5 --dport 587 -j ACCEPT
    $IPT -A OUTPUT -p tcp -d 10.6.0.5 --dport 587 -j ACCEPT

    но при telnet показывает, что порт не активен. Может я что не так прописываю?

    • Откуда происходит рассылка? С этого же сервера, где firewall или с другого? Откуда пытаетесь проверить телнетом? Из описания полная картина не понятна.

  28. Аноним

    Добрый день. Подскажите пожалуйста я поставил debian 10 на виртуальную машину, в локальной сети через PuTTy подключаюсь все хорошо как мне сделают чтоб на виртуальную машину можно было подключается к серверу удалено через putty не в локальной сети. Модем tplink там нужно добавлять порты или нет? Я новичок в этом не судите строго. Или напишите ссылку на статью где можно почитать и настроить. Спасибо.

    • Нужно настроить проброс порта tcp 22 для ssh на адрес сервера с debian на модеме tplink. Как пробрасывать порт на модеме, можно найти в интернете, если сам не разберетесь в веб интерфейсе.

  29. Можно упростить задачу в добавления правил firewall

    echo -e 'пишем текст как он есть
    вставляем с
    новой строки
    ' \
    | sudo tee /etc/iptables.sh

    с ключем sudo tee -a текст будет добавятся в конец, без ключа все перезаписывать

  30. Андрей

    Почему у вас правило для web-сервера на 80-ом порту разрешает протокол upd, а не tcp?

    • Это ошибка, которая появилась после последней правки статьи. Менял правила и забыл изменить протокол.

  31. Алексей

    Добрый день.

    При изменении настроек SSH:

    # nano /etc/ssh/sshd_config

    PermitRootLogin yes

    Нет такой строки. Есть другая:
    PermitRootLogin prohibit-password

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

    • А что там к screen привыкать? Зашел в него, обновил систему и вышел. Я в основном его ситуационно использую, постоянно в нем не работаю, нет необходимости.

  33. с iptables тоже почему-то не получается.
    После запуска скрипта сервер перестает отвечать и пинговаться с роутера. Помогает только ручная чистка iptables_rules через консоль virtualbox

    Вот выдержка из моих файлов. Я подозреваю, что где-то не так адреса указал, хотя напутать вроде вообще негде. Настройки в iptables.sh соответствуют настройкам в interfaces. Точно также как в статье.

    /etc/network/interfaces
    auto ens3
    allow-hotplug ens3
    iface ens3 inet static
    address 192.168.88.10

    /etc/iptables.sh
    # Активный сетевой интерфейс
    export WAN=ens3
    export WAN_IP=192.168.88.10

    • В правилах где-то ошибка 100%, раз доступ блокируется после применения правил. Надо внимательно проверять. Посмотреть вывод команды:
      iptables -L -v -n
      и проверить все активные правила.

    • у меня интерфейс называется ens3s0

    • Аноним

      Как Вы решили вопрос с блокировкой прохождения пакетов в iptables? Та же проблема, все сделал по сайту но всё блокируется

  34. У меня Debian 9.6.0. После изменения порта ssh
    root@debian:~# service sshd restart
    Job for ssh.service failed because the control process exited with error code.
    See "systemctl status ssh.service" and "journalctl -xe" for details.

    Если закрыть putty и открыть заново, то не удаётся подключиться ни по старому порту 22, ни по новому.
    После ручного перезапуска сервера подключение тоже не работает. Приходится подключаться через консоль virtualmachine и менять порт обратно.

  35. Сергей

    Застрял на пункте 2. Указываем сетевые параметры
    При установке Debian попросил драйвера на флешке для WI-FI. Драйвера нашел записал на флешку rtl8168d-1.fw установщик их увидел установил, ввел пароль от WI-FI, закончил установку системы но после перезагрузки сети нет. Что делать?

  36. iptraf для меня удобнее, чем iftop

  37. Очень помог с iptables
    Спасибо дружище!

  38. Аноним

    # service sshd restart
    Долго ломал голову, почему не могу зайти под root, пока не поменял на
    # service ssh restart

  39. "Открываем файл /etc/network/interfaces и добавляем в него строку post-up iptables-restore < /etc/iptables_rules" не применились при загрузке сервера...
    pre-up iptables-restore < /etc/iptables_rules применились при загрузке сервера...

    Спасибо за сайт и статьи. Буду рекомендовать Ваш ресурс.

    • Спасибо за замечание. Проверил на своих серверах. Действительно, pre-up стоит. Странно, что я так ошибся и никто раньше не заметил.

  40. Отличная статья! Отличный сайт! Спасибо вам большое за работу!

  41. Я поэтому и спросил, потому что вижу что статей по Centos больше. Плохо что у Debian короткий цикл поддержки, Centos и Ubuntu лучше конечно в этом отношении.

  42. Установил на Debian с Gnome3 в Oracle virtualbox чистый сервер Debian с ssh. И не получается у меня копирование-вставка текста с сайта в виртуалбокс, уже и настройки и доп. пакеты для этого устанавливал, не помогает. Не знаете как правильно сделать?

    • Вставляете через консоль virtualbox или по ssh подключаетесь к виртуальному серверу? Через окно гипервизора копрование - вставка нигде не работают, насколько я знаю. Никогда не получалось копировать - вставить.

      • Вставляю через консоль virtullbox. А через ssh будет работать?

        • Через ssh будет. Рекомендую работать с виртуальными машинами именно через ssh. Так удобнее.

          • Спасибо! Учусь сисадминистрированию. Лучше Centos сначала изучать или Debian?

          • Мне больше нравится CentOS, но если я скажу, что он лучше Debian, то это будет неправда. Они немного разные, но для задач общего назначения не важно, какой будет дистрибутив. Оба примерно одинаково решают задачи. Я пишу статьи в основном по CentOS.

  43. В разделе про настройку firewall, после текста /etc/iptables.sh и до проверки настройки правил, надо в таком порядке:
    chmod 0740 /etc/iptables.sh
    sh /etc/iptables.sh
    /sbin/iptables-save > /etc/iptables_rules
    (также обратите внимание на недописанное /etc/ в первой команде).
    Описались, думаю, в спешке.

    • Спасибо за дельный комментарий. Странно, что раньше никто про это не написал. Хотя и так все понятно, но порядок команд нарушен.

  44. Не обязательно, для работы в своей локальной сети можно и не настраивать. Вряд ли ты его настраивал в Windows.

  45. Привет установил дебиан 8 вместо виндовс обязательно ли настраивать файрвол?

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

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

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.
Используешь Telegram? Подпишись на канал автора →
This is default text for notification bar