После установки нового сервера приходится выполнять один и тот же набор стандартных настроек. Сегодня мы займемся базовой настройкой сервера под управлением операционной системы Debian. Я приведу практические советы по небольшому увеличению безопасности и удобству администрирования, основанные на моем личном опыте.
Научиться настраивать 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
Посмотреть список пакетов, готовых к обновлению, можно с помощью команды:
# apt list --upgradable
Теперь выполним простое обновление всех пакетов системы:
# apt upgrade
Ключ upgrade выполняет только обновление одной версии пакета на другую, более свежую. Он не будет устанавливать или удалять пакеты, даже если это необходимо для обновления других. Это наиболее безопасный и надежный вариант обновления, но он может обновить не все. Например, с ее помощью не обновить ядро до более свежей версии.
Ключ dist-upgrade или full-upgrade (это одно и то же) в дополнение к 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
Теперь проверим установленный часовой пояс, время и включим автоматическую синхронизацию времени с удаленного сервера. Очень подробно этот вопрос я рассмотрел в отдельной статье - настройка времени в 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
Создадим файл с правилами 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
Проверяем, что правила записались в файл /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: 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 с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
Устанавливается 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). При вводе пароля символы не отображаются, но вводятся.
После этих действий подключение будет выполнено.
Устанавливается 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
Устанавливается 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
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» для завершения создания правила
Добрый день. На старом Intel-ком сервере поднял Debian 12 на raid1. На сервере две сетевухи, использую только одну. Система встала, поднял часть сервисов, все нормально, проблем нет. Делаю проверку на отказ дисков. Отключаю - первый, загружаюсь, все работает, проблем нет (кроме отсутcnвия диска в raid). Возвращаю диск обратно - проверяю все нормально. Отключаю - второй, загружаюсь, все работает, кроме сети. Сетевуха не хочет получать адрес по dhcp. Возвращаю диск - сетевуха снова работает. Не подскажите, куда копать, с чем связано такое поведение системы ?
Даже не знаю. Похоже на проблемы с железом. Может с питанием что-то. Сетевуха без второго диска из системы не выпадает? Она там присутствует и просто не получает адрес по dhcp, или её нет в списке оборудования?
Обе сетвухи распаяны на материнке. Из системы не выпадает, просто не получает адрес по dhcp. Под Windows, такого не наблюдается. Ума не приложу, как могут быть связаны диск и сетевуха.
А если вручную прописать сетевые настройки, то сеть работает?
Прописывание настроек не помогает, но проблема несколько изменилась. Сеть пропала после проверки второго диска, т.е. когда его вернул в систему (mdstat показала, что оба диска на месте). Прям чудеса какие-то.
Проблему более-менее определил, это просто у меня она при манипуляциях с дисками четко проявляется. На самом деле, это старая проблема Debian с отвалом сетевухи.
Владимир, здравствуйте.
Интересует вопрос про 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
Добрый день. Спасибо за статью. Сейчас по ней упражняюсь с 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 планирую обновить эту статью. Но надо время выделить, которого не так много.
Можно упростить задачу в добавления правил firewall
echo -e 'пишем текст как он есть
вставляем с
новой строки
' \
| sudo tee /etc/iptables.sh
с ключем sudo tee -a текст будет добавятся в конец, без ключа все перезаписывать
Спасибо за полезный мануал!
Удачи в карьере!
Спасибо за статью. Помогло
Спасибо очень статья очень сильно помогла! В следующий раз буду искать информацию сперва здесь
А мы можем такую вещь сделать https://profitserver.ru/knowledge-base/vpn-setup-linux ??!
https://serveradmin.ru/nastroyka-openvpn-na-centos/
Для Debian настройка аналогичная практически 1 в 1.
Здравствуйте! Помогите новичку линуксоиду. Смонтировал сетевую папку в debian расшаренную через винду. Поднял iredmail, указал чтобы сохранял письма в этой папке. Но письма уходят, но не сохраняются ни входящие не исходящие. Подозреваю что дело в правах на смонтированную папку. Помогите, пожалуйста, разобраться. Заранее спасибо)
Скорее всего вы неправильно настроили использование этой папки. Я вам вообще не рекомендую такую схему. Не надо почту хранить на директории, подключенной по smb. Это очень медленно и ненадёжно.
У меня сайчас в дебиан 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 добавить.
и так, добрый день, товарищ долгопупс. я рассмотрел вашу заявку и принял решение нагадить вам в тарелку помимо кота, чтобы вы вкусно кушали и были хорошим системным администратором. кстати ваня, как там баранка? сколько сбил бабулит?
все помогло, сил больше не осталось пустил собаку на шаурму хуть она не в чем не виновато
Бабулит уже лежит вкусно кушает
Брат асалейкумс заежай сегодня в чайхану посидим кальян покурим, вкусно барашка зажарим, по скидки брат сделаем побратски давай жду брат ул. попчелоский дом 16
баратан саламулик, как твой бублик, конфетка бараночка
Спасибо за статью. Помогло.
Спасибо за статью! В 11 debian-е не нашел файл /etc/iptables_rules , однако есть файл /etc/iptables/rules.v4 .
iptables-save > /etc/iptables/rules.v4
reboot
iptables -L -v -n
все прописанные правила на месте )
Владимир, у Вас в настройках сетевого интерфейса не указан широковещательный адрес. Почему?
Его не обязательно указывать. Он формируется на основе ip адреса и маски.
Спасибо за полезный мануал!
Удчаи в карьере!
Спасибо тебе коллега, очень помогает твой ресурс.
Знай, что твое время на создание и размещение инфы потрачено не зря.
Жму руку
Приветствую!
Вы большой молодец!
Для того, чтоб правила 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.
Мужик! Ты бог!
Бог на небе, а я на земле!
Здравствуйте! Помогите разобраться.
Делаю первый раз, нужно на новой работе.
Делаю все по Вашей инструкции, до перезагрузки сервера, правила применяются, но после перезагрузки они опять не работают.
И еще, после применения правил, перестает работать интернет.
и в файле 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? и как все таки заставить применять правила при загрузке?
Заранее большое спасибо, если поможете)
Я вряд ли вам смогу помочь в формате ответа на комментарии. С учетом того, что у вас много чего не работает, а по какой причине, я не смогу выяснить никаким образом. Вам придется самому со всем этим разбираться, или просить чьей-то помощи очно или с удаленным подключением (но это не ко мне).
А зачем разрешать подключаться через root по ssh, если при необходимости можно от обычного пользователя перейти к руту командой su - ?
А зачем делать 2 действия, если можно одно? Мне на сервере всегда нужен root.
А кто то может объяснить как дописать правила в iptables которые используются в данном гайде
для вот этого скрипта: https://github.com/hwdsl2/setup-ipsec-vpn
Можно просто посмотреть, какие правила он добавляет и дописать их в скрипт uptables. Посмотреть правила можно прямо в скрипте vpnsetup.sh.
как раз вчера днем этим и занимался, пока без успешно (:
Но нужно все таки добить. Увы знаний пока не совсем много, но на Вашем сайте можно что то и извлечь ценное)
Вопрос конечно не по теме, смотрю появился раздел с микротиками, не планируете написать статью на тему настройки впн клиента на микротике для определенного списка сайтов?
Ранее настраивал подобную вещь на RB951G-2HnD но так как под рукой теперь его нету, пытаюсь вспомнить как настраивал, что бы перекинуть на свой hAp ac2
Идею с микротиком понял, но не планирую такую статью делать.
Прошу совета.
Добавляю правило в фаерволе для прозрачного squid
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.0.13:3128
Через несколько секунд, правило исчезает
Это уже чудеса какие-то :) Без экстрасенса никак.
Час добрый! Хотел бы проконсультироваться. Пытаюсь открыть порт 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 или с другого? Откуда пытаетесь проверить телнетом? Из описания полная картина не понятна.
Добрый день. Подскажите пожалуйста я поставил debian 10 на виртуальную машину, в локальной сети через PuTTy подключаюсь все хорошо как мне сделают чтоб на виртуальную машину можно было подключается к серверу удалено через putty не в локальной сети. Модем tplink там нужно добавлять порты или нет? Я новичок в этом не судите строго. Или напишите ссылку на статью где можно почитать и настроить. Спасибо.
Нужно настроить проброс порта tcp 22 для ssh на адрес сервера с debian на модеме tplink. Как пробрасывать порт на модеме, можно найти в интернете, если сам не разберетесь в веб интерфейсе.
Можно упростить задачу в добавления правил firewall
echo -e 'пишем текст как он есть
вставляем с
новой строки
' \
| sudo tee /etc/iptables.sh
с ключем sudo tee -a текст будет добавятся в конец, без ключа все перезаписывать
Почему у вас правило для web-сервера на 80-ом порту разрешает протокол upd, а не tcp?
Это ошибка, которая появилась после последней правки статьи. Менял правила и забыл изменить протокол.
Добрый день.
При изменении настроек SSH:
# nano /etc/ssh/sshd_config
PermitRootLogin yes
Нет такой строки. Есть другая:
PermitRootLogin prohibit-password
Как раз prohibit-password я и предлагаю заменить на yes.
Тоже изменил эти настройки, но порт по прежнему остаётся 22
Сколько не пробовал Screen все ни как не мог к нему привыкнуть, альтернативу для себя нашел это Tmux. Очень хорошо настраиваемый, а самое главное разбиение консоли как по горизонтали так и по вертикали
А что там к screen привыкать? Зашел в него, обновил систему и вышел. Я в основном его ситуационно использую, постоянно в нем не работаю, нет необходимости.
с 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? Та же проблема, все сделал по сайту но всё блокируется
У меня 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 и менять порт обратно.
пробовал порт 223344
Проблема в номере порта - он не может быть от 1 до 65535.
* может быть только от 1 до 65535.
Застрял на пункте 2. Указываем сетевые параметры
При установке Debian попросил драйвера на флешке для WI-FI. Драйвера нашел записал на флешку rtl8168d-1.fw установщик их увидел установил, ввел пароль от WI-FI, закончил установку системы но после перезагрузки сети нет. Что делать?
Ничем не помогу. Я wifi вообще ни разу на сервере не настраивал.
iptraf для меня удобнее, чем iftop
Очень помог с iptables
Спасибо дружище!
# service sshd restart
Долго ломал голову, почему не могу зайти под root, пока не поменял на
# service ssh restart
/etc/init.d/ssh restart
"Открываем файл /etc/network/interfaces и добавляем в него строку post-up iptables-restore < /etc/iptables_rules" не применились при загрузке сервера...
pre-up iptables-restore < /etc/iptables_rules применились при загрузке сервера...
Спасибо за сайт и статьи. Буду рекомендовать Ваш ресурс.
Спасибо за замечание. Проверил на своих серверах. Действительно, pre-up стоит. Странно, что я так ошибся и никто раньше не заметил.
Отличная статья! Отличный сайт! Спасибо вам большое за работу!
Рад, что мои статьи помогли.
Я поэтому и спросил, потому что вижу что статей по Centos больше. Плохо что у Debian короткий цикл поддержки, Centos и Ubuntu лучше конечно в этом отношении.
Установил на Debian с Gnome3 в Oracle virtualbox чистый сервер Debian с ssh. И не получается у меня копирование-вставка текста с сайта в виртуалбокс, уже и настройки и доп. пакеты для этого устанавливал, не помогает. Не знаете как правильно сделать?
Вставляете через консоль virtualbox или по ssh подключаетесь к виртуальному серверу? Через окно гипервизора копрование - вставка нигде не работают, насколько я знаю. Никогда не получалось копировать - вставить.
Вставляю через консоль virtullbox. А через ssh будет работать?
Через ssh будет. Рекомендую работать с виртуальными машинами именно через ssh. Так удобнее.
Спасибо! Учусь сисадминистрированию. Лучше Centos сначала изучать или Debian?
Мне больше нравится CentOS, но если я скажу, что он лучше Debian, то это будет неправда. Они немного разные, но для задач общего назначения не важно, какой будет дистрибутив. Оба примерно одинаково решают задачи. Я пишу статьи в основном по CentOS.
В разделе про настройку firewall, после текста /etc/iptables.sh и до проверки настройки правил, надо в таком порядке:
chmod 0740 /etc/iptables.sh
sh /etc/iptables.sh
/sbin/iptables-save > /etc/iptables_rules
(также обратите внимание на недописанное /etc/ в первой команде).
Описались, думаю, в спешке.
Спасибо за дельный комментарий. Странно, что раньше никто про это не написал. Хотя и так все понятно, но порядок команд нарушен.
Не обязательно, для работы в своей локальной сети можно и не настраивать. Вряд ли ты его настраивал в Windows.
Привет установил дебиан 8 вместо виндовс обязательно ли настраивать файрвол?