Заметки сисадмина

Заметки сисадмина о интересных вещах из мира IT, инструкции и рецензии. Настраиваем Компьютеры/Сервера/1С/SIP-телефонию в Москве



Mi TV Stick: Если тихий звук

2024-03-11 · Posted in TV

На форумах можно найти массу советов о том, что нужно скачать утилиты для регулировки звука и установить на приставку. Якобы с их помощью удастся все настроить. Но исправить тихий звук на Mi TV Stick довольно просто.

  • Берем пульт от Mi TV Stick и нажимаем кнопку «Назад» (стрелка влево).
  • Одновременно зажимаем увеличение/уменьшение громкости (+ или — на пульте).

Что делать, если на Mi TV Stick тихий звук. Оказывается, проблема с громкостью решается с помощью пульта! Фото.

Оказывается, проблема с громкостью решается с помощью пульта!

  • Слева на экране у вас появится ползунок громкости самой приставки: наверняка ползунок у вас установлен на минимуме — проверьте.
  • Продолжайте регулировать громкость, удерживая кнопку «Назад».

То есть, получается, что громкость на ТВ-приставке установлена на максимум, но на системном уровне она находится где-то посередине или вообще ближе к нулю. Поэтому телевизор с Mi TV Stick становится тише — это всего лишь небольшой системный баг, но никак не брак.

Кроме того, вы можете изменить громкость Mi TV Stick и с помощью Гугл Ассистента: достаточно вызвать его с пульта и сказать фразу «Увеличить громкость на максимум» — судя по отзывам, этот способ также работает. Он более универсальный, так как подходит и для других приставок на Android TV.
На самом деле, однозначного ответа, почему на Xiaomi Mi TV Stick тихий звук, пока нет. В сети пишут, что в основном подобный баг случается с программами из Google Play и сторонними приложениями, установленными с внешних носителей.

Системные приложения, в том числе, стандартные плееры или предустановленные приложения «из коробки» это не затрагивает — значит, операционка плохо оптимизирована для работы на ТВ-приставках. Это не удивляет, ведь Андроид ТВ — открытая система с низкими требованиями для разработчиков приложений. Тем не менее, в обычном телевизоре с Android TV я подобного не встречал — во всех приложениях громкость остается на одном уровне.

Debian: Настройка сети

2024-03-10 · Posted in Debian

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

Первоначальная настройка сети начинается во время установки сервера. Если у вас есть сетевой интерфейс и dhcp сервер в сети, то сеть сконфигурируется автоматически на основе полученных настроек и будет готова к работе. В последствии вы можете выполнить настройку сети в Debian через консоль с помощью программ ip или ifconfig. Наиболее популярным и современным средством на текущий момент является ip, поэтому в дальнейшем рассмотрим вопрос конфигурации сетевых интерфейсов с ее помощью. Про ifconfig тоже не забудем. Рассмотрим ее позже отдельно.

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

Есть 2 различные возможности изменить сеть в Debian:

  1. Настройка сети из консоли с помощью указанных ранее консольных программ.
  2. С помощью редактирования конфигурационного файла сетевых интерфейсов /etc/network/interfaces.

Мы рассмотрим оба этих варианта. Вводная теоретическая часть окончена, приступаем к практике.

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

Вы установили сервер и во время установки указали какие-то сетевые параметры, или не указали, не важно. Но сейчас вы решили, что вам нужно назначить статический ip (static ip) адрес. Воспользуемся для этого утилитой ip. Сначала посмотрим список всех сетевых интерфейсов:

У меня в системе 1 сетевой интерфейс eth0 и он каким-то образом уже сконфигурирован. Назначим ему еще один статический адрес:

Этот адрес будет добавлен к уже существующему адресу. Проверим это:

Теперь сервер будет доступен по обоим адресам. Текущая настройка сохранится только до перезагрузки сервера. Чтобы она применялась во время загрузки, нужно либо каким-то образом добавить команду на изменение настроек в автозагрузку, например в /etc/rc.local, но это будет костыль. Правильнее отредактировать файл, который отвечает за сетевые настройки в debian – /etc/network/interfaces. Для того, чтобы назначить постоянный статический ip адрес, его нужно привести к следующему виду:

auto указанный интерфейс необходимо запускать автоматически при загрузке системы
iface интерфейс eth0 находится в диапазоне адресов IPv4 со статическим ip
address статический ip адрес
gateway шлюз по-умолчанию
netmask маска сети

Для проверки перезагружаем сервер и смотрим, все ли в порядке с настройкой статического ip адреса. Если вам нужно сменить ip адрес в debian, то вы можете временно изменить его с помощью команды ip, либо постоянно, отредактировав параметр address в файле сетевых настроек interfaces.

Получение сетевых настроек по DHCP

Теперь рассмотри вариант, когда вам необходимо получить динамический ip адрес в Debian. Здесь по аналогии с предыдущими настройками можно пойди двумя путями:

  1. Получить ip адрес по dhcp в консоли с помощью программы dhclient, который будет работать до перезагрузки.
  2. Отредактировать файл конфигурации сетевых интерфейсов.

Смотрим снова на текущую конфигурацию сети:

Выполним команду на получение ip адреса по dhcp и проверим сеть:

В качестве второго ip мы получили адрес от dhcp сервера. Если у вас несколько сетевых интерфейсов, то необходимо добавлять название после команды, например вот так:

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

Обращаю внимание, что эта команда сбросит все ip адреса интерфейса, в том числе и статические. Чтобы снова запросить адрес, нужно выполнить предыдущую команду на получение ip с указанием сетевого интерфейса eth0.

Все изменения, сделанные в консоли после перезагрузки, исчезнут. Чтобы их сохранить, приведем файл /etc/network/interfaces к следующему виду:

Установка шлюза по-умолчанию (default gateway)

Теперь разберемся со шлюзом по-умолчанию. В предыдущих примерах со статическим ip адресом и настройками по dhcp у нас не было необходимости указывать отдельно default gateway. Мы его устанавливали вместе с остальными настройками. Чтобы посмотреть установленный по-умолчанию шлюз в debian, можно воспользоваться следующей командой в консоли:

Это шлюз по-умолчанию (default gateway). Можно воспользоваться другими, более популярными и привычными командами:

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

Значит у вас не установлен пакет net-tools. Установить его можно следующей командой.

Сетевые инструменты из пакета net-tools объявлены устаревшими и не включены в состав базовой системы. Я ими продолжаю пользоваться, потому что мне нравится их вывод больше, чем у команды ip. Netstat мне видится более информативным, хотя по сути, они все показывают одно и то же. Отказ в пользу утилиты ip идет по той причине, что она объединяет в себе все основные сетевые инструменты. Удобнее пользоваться только ей одной для настройки сети, нежели разными утилитами для разных целей.

Если нам нужно сменить default gateway, то сначала надо удалить текущий шлюз, а потом назначить новый.

То же самое, только с помощью ip:

Проверяем, что получилось:

Все получилось. Эта настройка будет действовать до перезагрузки. Чтобы ее сохранить, либо меняйте конфигурационный файл interfaces, либо, при необходимости, придумывайте что-то еще.

Как указать DNS сервер

Остался последний из основных сетевых параметров – dns сервер. С ним в debian и ubuntu есть определенная путаница. Традиционно в linux для установки dns серверов используется файл /etc/resolv.conf. Но в какой-то момент в этих дистрибутивах появилась программа resolvconf, которая стала управлять настройками dns в системе. В итоге, файл resolv.conf постоянно перезаписывается этой программой. Нужна она в первую очередь для систем, где dns сервера постоянно меняются. Она следит за их изменением и корректно передает информацию об изменении программам, для которых это важно. Я лично не знаю таких программ и мне не приходилось сталкиваться с ситуацией, когда это было необходимо.

Если я не ошибаюсь, то в минимальной конфигурации debian программа resolvconf не устанавливается, а вот в ubuntu она стоит. Проверить наличие программы очень просто:

Если в выводе пусто, значит ее нет. Тогда все очень просто. Для того, чтобы указать dns сервер, достаточно его записать в файл /etc/resolv.conf в следующем виде:

192.168.1.1 локальный dns сервер
77.88.8.1 публичный сервер Яндекса
8.8.8.8 публичный сервер Гугла
1.1.1.1 публичный сервер cloudflare

Я на всякий случай указал локальный сервер и 3 внешних. Если у вас стоит resolvconf, то в случае ненадобности, удалите его командой:

После этого сервер надо перезагрузить и удалить сломавшуюся символьную ссылку /etc/resolv.conf, а вместо нее создать файл с нужным содержанием, которое я привел выше.

Если же вам по какой-то причине необходима указанная выше программа, она у вас стоит и вы не хотите ее удалять, то адрес dns сервера необходимо указать в файле /etc/network/interfaces, добавив к параметрам интерфейса еще один:

Этот параметр нужно установить сразу после указания шлюза gateway. Несколько адресов разделяются пробелом.

Изменить hostname (имя хоста)

Во время установки debian вы указывали имя хоста. Посмотреть его текущее значение можно в консоли:

Это значение записано в файле /etc/hostname. Есть 2 способа изменить hostname в debian:

  1. Простой и быстрый с помощью консольной команды. Результат работает только до перезагрузки компьютера. Потом вернется старое имя.
  2. С помощью изменения конфигурационного файла результат сохраняется и после перезагрузки. Чтобы сразу применить изменение, потребуется выполнить системный скрипт.

Для первого способа достаточно в консоли ввести команду:

Теперь проверим, что получилось:

Имя хоста изменилось, но в файле /etc/hostname по-прежнему указано прошлое значение. После перезагрузки hostname снова примет старое значение debian. Чтобы сделать постоянное изменение, необходимо ввести новое значение в файл вручную:

Изменение вступит в силу после перезагрузки. Если воспользоваться командой:

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

2 и более IP на одном интерфейсе

Достаточно часто возникают ситуации, когда необходимо назначить несколько ip на одном интерфейсе. Сделать это очень просто. В самом начале я показал, как быстро через консоль в Debian можно назначить несколько ip c помощью программы. Теперь сделаем так, чтобы эти настройки сохранялись после перезагрузки. Для этого редактируем наш любимый и ненаглядный /etc/network/interfaces:

С такими настройками я получу 2 ip адреса на сетевом интерфейсе:

  1. Первый от dhcp сервера.
  2. Второй адрес на этой же сетевой карте будет указан статически.

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

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

Как быстро узнать ip адрес сервера в Debian

Часто возникает вопрос, как в debian быстро узнать или проверить ip адреса, назначенные серверу. Выше я уже приводил пример простой команды, которая показывает все сетевые параметры интерфейса. Сейчас рассмотрим несколько вариантов, которые наглядно покажут только ip адреса, без лишней информации. Для начала воспользуемся уже известной командой ip, немного подрезав ее вывод:

Вы узнаете все ip адреса сервера, в том числе и ipv6. То же самое, только без ipv6 можно увидеть другой командой:

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

Значит у вас не установлен пакет net-tools. Установить его можно следующей командой:

Если совсем заморочиться и обрезать все лишнее в выводе команды ifconfig, то можно вывести только список ip адресов:

Аналогичный вывод будет и в таком случае:

Можно убрать локальный интерфейс, чтобы глаза не мозолил, тогда вообще все наглядно:

Думаю, этих вариантов достаточно, чтобы проверить все ip адреса, отрезав лишнее.

Static routes (статические маршруты)

Следующим важным элементом настройки сети является управление статическими маршрутами (static routes): добавление (route add) и удаление (route del). Вновь воспользуемся консольной командой ip. Для того, чтобы добавить маршрут в debian, достаточно ввести в консоли:

10.0.0.0 адрес подсети, для которой создаем отдельный маршрут в обход шлюза по умолчанию
/24 маска подсети
192.168.1.50 адрес шлюза, который будет роутить трафик в указанную подсеть

Проверяем таблицу маршрутов:

Чтобы удалить маршрут, выполняем команду:

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

Мы добавили 2 статических маршрута. Перезагружаемся и проверяем.

Мой конфиг целиком стал выглядеть вот так:

С постоянными статическими маршрутами в debian разобрались, ничего сложного. Идем дальше.

Как выполнить перезапуск сети

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

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

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

Настройка vlan в Debian

Для настройки vlan в Debian первым делом необходимо установить пакет vlan:

Теперь нужно разобраться с необходимым модулем ядра для vlan – 8021q. Проверим, загружено ли оно в системе:

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

Все в порядке, vlan модуль загрузился. Добавим его в автозагрузку:

Теперь этот модуль будет загружаться при старте сервера. Создадим виртуальный интерфейс с vlan с id 1500:

Назначим адрес новому интерфейсу и запустим его:

Можно в одну команду, с помощью ifconfig:

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

Мы выполнили настройку vlan интерфейса в Debian. Теперь сделаем так, чтобы после перезагрузки настройки сохранились. Для этого добавляем свойства vlan интерфейса в файл конфигурации сети, оставляя и не трогая то, что там уже есть:

Перезагрузите сервер и проверьте, что получилось. Можно выполнить перезапуск сети, но если вы до этого все вручную через консоль сделали, то не поймете, сработали настройки из файла или нет. Таким образом очень просто и быстро настроить vlan на сервере с Debian.

Как отключить ipv6 в Debian

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

На свежеустановленном сервере debian программы ssh, exim, dhclient и rpcbind используют ipv6. Отключим это. Начнем с ssh. Открываем файл /etc/ssh/sshd_config и раскомментируем параметр ListenAddress:

Перезапускаем ssh:

Сделаем то же самое с exim4. Открываем файл конфигурации /etc/exim4/exim4.conf.template и в самом начале, после вступительных комментариев пишем:

Перезапускаем exim:

В dhclient для отключения ipv6 в конфиге убираем все параметры в запросе request, начинающиеся с dhcp6. Должно получиться вот так:

Перезапускаем сеть:

Отключаем ipv6 в rpcbind. Открываем конфигурацию /etc/netconfig и комментируем 2 строки с udp6 и tcp6:

Перезапускаем службу rpcbind и nfs-common, которая от него зависит:

Проверяем, что у нас осталось:

dhclient почему-то остался висеть на ipv6 порту, но ладно, это не страшно, запрашивать по ipv6 он все равно ничего не будет. Теперь полностью отключаем ipv6 в Debian:

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

Проверяем свойства сетевых интерфейсов командами ifconfig и ip. Информации об ipv6 быть не должно, мы его полностью отключили.

Работа с файлом hosts

В папке /etc любого linux дистрибутива, в том числе debian есть файл hosts. Разберемся немного что это за файл и для чего он нужен. По умолчанию он выглядит следующим образом:

Представим, что у нас в локальной сети есть некий сервер с именем server  и ip 192.168.1.50 Мы хотим к нему обращаться по имени. Тогда добавляем запись в файл hosts:

Теперь мы можем обращаться к серверу просто по имени server.

Сервер будет в первую очередь смотреть информацию в файле hosts, только потом в dns сервере. Например, если вы добавите в файл строку:

То обращаясь к адресу ya.ru будете попадать на локалхост:

Этот функционал может быть полезен для публикации в локальной сети каких-то внутренних сервисов, к которым доступ будет только из вашей сети. Вам нет необходимости использовать dns сервер, с файлом hosts настройка делается гораздо быстрее.

Так же правка файла hosts актуальна, если вы используете локальную копию сервиса webpagetest для тестирования скорости работы сайта на разных хостингах. Вы просто меняете ip адреса для домена и делаете тесты. Так можно наглядно и однозначно сравнивать быстродействие разных хостингов.

Настройка сетевой карты

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

В моем случае это единственная сетевая карта фирмы Qualcomm. Теперь установим утилиту ethtool для настройки сетевой карты:

Посмотрим информацию о сетевой карте:

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

Этой командой можно изменить скорость сетевой карточки до 100Mb/s в случае, если там стояла другая скорость. Смотрим, что получилось:

Показал просто для примера, вряд ли кому-то понадобится уменьшать скорость. Чаще нужно выполнить обратное преобразование. У меня была ситуация, когда сетевая карта упорно не хотела работать на скорость 1Gb, хотя поддерживала такую работу, и свитч был гигабитный. Долго бился и пробовал различные утилиты для изменения скорости. Оказалось, что патч корд был 4-х жильный из комплекта какого-то роутера. Им воспользовались для подключения и даже не обратили внимание на то, что он не поддерживает работу по гигабиту.

У утилиты ethtool много параметров, с помощью которых можно настроить сетевую карту.

Работа с утилитой ifconfig

В завершении сетевых настроек хотел немного поговорить об ifconfig. Ранее я упомянул, что более современным средством для настройки сети является утилита ip. В последних релизеах Debian и CentOS ifconfig вообще исключили из базовой установки, ее приходится устанавливать отдельно. IP объединяет в себе два функционала – настройка сетевых интерфейсов и маршрутизации. То есть по сути она заменяет ifconfig + route. В ней реализован функционал обоих программ.

Сам я привык к ifconfig, так как она есть не только в linux, но и в freebsd. Удобно использовать одно и то же средство во всех дистрибутивах. Но последнее время переучиваюсь на ip, так как надо идти в ногу со временем. Тенденция такова, что ip будут продвигать все сильнее и сильнее в силу его большей новизны и, наверное, удобства. Что касается удобства, лично я ничего не могу сказать, мне совершенно все равно, какую команду использовать:

или

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

или

В случае с ip мы работаем с одной командой, а не двумя. Чем пользоваться вам, выбирайте сами. Если не привыкли к чему-то конкретному, рекомендую использовать ip. Мне было бы любопытно узнать, кто, что использует. Оставьте свой комментарий на эту тему.

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

Часто задаваемые вопросы по теме статьи (FAQ)

Есть ли принципиальное отличие в том, как задать hostname сервера?

В целом, нет. Вы можете как отредактировать файл hostname, так и воспользоваться утилитой hostnamectl. Единственное, напомню, что нужно не забыть проверить файл hosts и изменить имя сервера в том числе и там.

Зачем отключать ipv6 в на сервере Debian?

Отключать ipv6 или нет, решать вам. Я придерживаюсь следующего принципа в настройке серверов – отключать или удалять все то, что не используется. Это уменьшает вероятность получить баг или уязвимость в компоненте.

Почему команда ifconfig во многих дистрибутивах объявлена deprecated и отсутствует в системе?

В этом статусе она находится последние лет 10 и тем не менее продолжает использоваться. Насколько я понимаю, заменившая ifconfig команда ip является более функциональная и заменяет сразу несколько старых сетевых утилит, таких как ifconfig, netstat, route и т.д. Отказ от ifconfig в пользу ip – попытка внедрить универсальную и самодостаточную утилиту для работы с сетью.

Как настроить proxy в Debian?

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

How To Protect SSH with Fail2Ban on Debian 11

2024-03-06 · Posted in Debian

SSH is the de facto method of connecting to a cloud server. It is durable, and it is extensible — as new encryption standards are developed, they can be used to generate new SSH keys, ensuring that the core protocol remains secure. However, no protocol or software stack is totally foolproof, and SSH being so widely deployed across the internet means that it represents a very predictable attack surface or attack vector through which people can try to gain access.

Any service that is exposed to the network is a potential target in this way. If you review the logs for your SSH service running on any widely trafficked server, you will often see repeated, systematic login attempts that represent brute force attacks by users and bots alike. Although you can make some optimizations to your SSH service to reduce the chance of these attacks succeeding to near-zero, such as disabling password authentication in favor of SSH keys, they can still pose a minor, ongoing liability.

Large-scale production deployments for whom this liability is completely unacceptable will usually implement a VPN such as WireGuard in front of their SSH service, so that it is impossible to connect directly to the default SSH port 22 from the outside internet without additional software abstraction or gateways. These VPN solutions are widely trusted, but will add complexity, and can break some automations or other small software hooks.

Prior to or in addition to committing to a full VPN setup, you can implement a tool called Fail2ban. Fail2ban can significantly mitigate brute force attacks by creating rules that automatically alter your firewall configuration to ban specific IPs after a certain number of unsuccessful login attempts. This will allow your server to harden itself against these access attempts without intervention from you.

In this guide, you’ll see how to install and use Fail2ban on a Debian 11 server.

1)Installing Fail2ban

Fail2ban is available in Debian’s software repositories. Begin by running the following commands as a non-root user to update your package listings and install Fail2ban:

Fail2ban will automatically set up a background service after being installed. You can check its status by using the systemctl command:

Output

You can continue using Fail2ban with its default settings, but first, you’ll review some of its features.

2)Configuring Fail2ban

The fail2ban service keeps its configuration files in the /etc/fail2ban directory. There is a file with defaults called jail.conf. Go to that directory and print the first 20 lines of that file using head -20:

Output

As you’ll see, the first several lines of this file are commented out – they begin with # characters indicating that they are to be read as documentation rather than as settings. As you’ll also see, these comments are directing you not to modify this file directly. Instead, you have two options: either create individual profiles for Fail2ban in multiple files within the jail.d/ directory, or create and collect all of your local settings in a jail.local file. The jail.conf file will be periodically updated as Fail2ban itself is updated, and will be used as a source of default settings for which you have not created any overrides.

In this tutorial, you’ll create jail.local. You can do that by copying jail.conf:

Now you can begin making configuration changes. Open the file in nano or your favorite text editor:

While you are scrolling through the file, this tutorial will review some options that you may want to update. The settings located under the [DEFAULT] section near the top of the file will be applied to all of the services supported by Fail2ban. Elsewhere in the file, there are headers for [sshd] and for other services, which contain service-specific settings that will apply over top of the defaults.
/etc/fail2ban/jail.local

The bantime parameter sets the length of time that a client will be banned when they have failed to authenticate correctly. This is measured in seconds. By default, this is set to 10 minutes.
/etc/fail2ban/jail.local

The next two parameters are findtime and maxretry. These work together to establish the conditions under which a client is found to be an illegitimate user that should be banned.

The maxretry variable sets the number of tries a client has to authenticate within a window of time defined by findtime, before being banned. With the default settings, the fail2ban service will ban a client that unsuccessfully attempts to log in 5 times within a 10 minute window.
/etc/fail2ban/jail.local

If you need to receive email alerts when Fail2ban takes action, you should evaluate the destemail, sendername, and mta settings. The destemail parameter sets the email address that should receive ban messages. The sendername sets the value of the “From” field in the email. The mta parameter configures what mail service will be used to send mail. By default, this is sendmail, but you may want to use Postfix or another mail solution.
/etc/fail2ban/jail.local

This parameter configures the action that Fail2ban takes when it wants to institute a ban. The value action_ is defined in the file shortly before this parameter. The default action is to update your firewall configuration to reject traffic from the offending host until the ban time elapses.

There are other action_ scripts provided by default which you can replace $(action_) with above:
/etc/fail2ban/jail.local

For example, action_mw takes action and sends an email, action_mwl takes action, sends an email, and includes logging, and action_cf_mwl does all of the above in addition to sending an update to the Cloudflare API associated with your account to ban the offender there, too.

Individual Jail Settings

Next is the portion of the configuration file that deals with individual services. These are specified by section headers, like [sshd].

Each of these sections needs to be enabled individually by adding an enabled = true line under the header, with their other settings.
/etc/fail2ban/jail.local

By default, the SSH service is enabled and all others are disabled. . Some other settings that are set here are the filter that will be used to decide whether a line in a log indicates a failed authentication and the logpath which tells fail2ban where the logs for that particular service are located.

The filter value is actually a reference to a file located in the /etc/fail2ban/filter.d directory, with its .conf extension removed. These files contain regular expressions (a common shorthand for text parsing) that determine whether a line in the log is a failed authentication attempt. We won’t be covering these files in-depth in this guide, because they are fairly complex and the predefined settings match appropriate lines well.

However, you can see what kind of filters are available by looking into that directory:

If you see a file that looks related to a service you are using, you should open it with a text editor. Most of the files are fairly well commented and you should be able to at least tell what type of condition the script was designed to guard against. Most of these filters have appropriate (disabled) sections in the jail.conf file that we can enable in the jail.local file if desired.

For instance, imagine that you are serving a website using Nginx and realize that a password-protected portion of your site is getting slammed with login attempts. You can tell fail2ban to use the nginx-http-auth.conf file to check for this condition within the /var/log/nginx/error.log file.

This is actually already set up in a section called [nginx-http-auth] in your /etc/fail2ban/jail.conf file. You would just need to add the enabled parameter:
/etc/fail2ban/jail.local

When you are finished editing, save and close the file. If you’ve made any changes, you can restart the Fail2ban service using systemctl:

In the next step, you’ll demonstrate Fail2ban in action.

3)Testing the Banning Policies (Optional)

From another server, one that won’t need to log into your Fail2ban server in the future, you can test the rules by getting that second server banned. After logging into your second server, try to SSH into the Fail2ban server. You can try to connect using a nonexistent name:

Enter random characters into the password prompt. Repeat this a few times. At some point, the error you’re receiving should change from Permission denied to Connection refused. This signals that your second server has been banned from the Fail2ban server.

On your Fail2ban server, you can see the new rule by checking your iptables output. iptables is a command for interacting with low-level port and firewall rules on your server. If you followed DigitalOcean’s guide to initial server setup, you will be using ufw to manage firewall rules at a higher level. Running iptables -S will show you all of the firewall rules that ufw already created:

Output

If you pipe the output of iptables -S to grep to search within those rules for the string f2b, you can see the rules that have been added by fail2ban:

Output

The line containing REJECT –reject-with icmp-port-unreachable will have been added by Fail2ban and should reflect the IP address of your second server.

How To Set Up a Firewall with UFW on Debian 11

2024-03-04 · Posted in Debian

UFW, or Uncomplicated Firewall, is a simplified firewall management interface that hides the complexity of lower-level packet filtering technologies such as iptables and nftables. If you’re looking to get started securing your network, and you’re not sure which tool to use, UFW may be the right choice for you.

This tutorial will show you how to set up a firewall with UFW on Debian 11.

To follow this tutorial, you will need one Debian 11 server with a sudo non-root user, which you can set up by following Step 1 through 3 in the Initial Server Setup with Debian 11 tutorial.

1)Installing UFW

Debian does not install UFW by default. If you followed the entire Initial Server Setup tutorial, you will have installed and enabled UFW. If not, install it now using apt:

You will set up UFW and enable it in the following steps.

2)Using IPv6 with UFW (Optional)

This tutorial is written with IPv4 in mind but will work for IPv6 as well if you enable it. If your Debian server has IPv6 enabled, you will want to ensure that UFW is configured to support IPv6. This will ensure that UFW will manage firewall rules for IPv6 in addition to IPv4. To configure this, open the UFW configuration file /etc/default/ufw with nano or your favorite editor:

Locate IPV6 in the file and ensure the value is yes:
/etc/default/ufw excerpt

Save and close the file. If you’re using nano, press CTRL+X, then Y, then ENTER to save and exit the file.

Now when UFW is enabled, it will be configured to write both IPv4 and IPv6 firewall rules. Before enabling UFW, however, you will want to ensure that your firewall is configured to allow you to connect via SSH. Start with setting the default policies.

3)Setting Up Default Policies

If you’re just getting started with your firewall, the first rules to define are your default policies. These rules handle traffic that does not explicitly match any other rules. By default, UFW is set to deny all incoming connections and allow all outgoing connections. This means anyone trying to reach your server would not be able to connect, while any application within the server would be able to reach the outside world.

Set your UFW rules back to the defaults so you can be sure that you’ll be able to follow along with this tutorial. To set the defaults used by UFW, use these commands:

You will receive output like the follow:

Output

These commands set the defaults to deny incoming and allow outgoing connections. These firewall defaults alone might suffice for a personal computer, but servers typically need to respond to incoming requests from outside users. You’ll start this process in the next step.

4)Allowing SSH Connections

You can’t enable your UFW firewall yet, because it would deny all incoming connections including your attempts to access your server. This means that you will need to create rules that explicitly allow legitimate incoming connections — SSH or HTTP connections, for example — if you want your server to respond to those types of requests. If you’re using a cloud server, you will probably want to allow incoming SSH connections so you can connect to and manage your server.

To configure your server to allow incoming SSH connections, use this command:

This will create firewall rules that will allow all connections on port 22, which is the port that the SSH daemon listens on by default. UFW knows what port is tied to allow ssh because it’s listed as a service in the /etc/services file.

However, you can actually write the equivalent rule by specifying the port instead of the service name. For example, this command produces the same result as the one above:

If you configured your SSH daemon to use a different port, you will have to specify the appropriate port. For example, if your SSH server is listening on port 2222, you can use this same command but replace 22 with 2222.

Now that your firewall is configured to allow incoming SSH connections, you can enable it.

5)Enabling UFW

To enable UFW, use this command:

You will receive a warning that says the command may disrupt existing SSH connections. You already set up a firewall rule that allows SSH connections, so it should be fine to continue. Respond to the prompt with y and hit ENTER.

The firewall is now active. To see the rules that you have set, run this command:

The rest of this tutorial covers how to use UFW in more detail, including allowing and denying different types of connections.

6)Allowing Other Connections

At this point, you should allow all of the other connections that your server needs to function properly. The connections that you should allow depend on your specific needs. You already know how to write rules that allow connections based on a service name or port; you did this for SSH on port 22.

You can do this for HTTP on port 80, which is what unencrypted web servers use. To allow this type of traffic, you would type:

You can also do this for HTTPS on port 443, which is what encrypted web servers use. To allow this type of traffic, you would type:

In both scenarios, specifying the ports would also work, with HTTP being 80 and HTTPS being 443. For example:

There are other ways to allow connections, however, aside from specifying a port or known service. This is discussed next.

Specific Port Ranges

You can specify port ranges with UFW. For example, some applications use multiple ports instead of a single port.

For example, to allow X11 connections, which use ports 6000-6007, use these commands:

When specifying port ranges with UFW, you must specify the protocol (tcp or udp) that the rules should apply to. This was not mentioned before because not specifying the protocol automatically allows both protocols, which is OK in most cases.

Specific IP Addresses

When working with UFW, you can also specify IP addresses. For example, if you want to allow connections from a specific IP address, such as a work or home IP address of 203.0.113.4, you need to specify from and then the IP address:

You can also specify a specific port that the IP address is allowed to connect to by adding to any port followed by the port number. For example, if you want to allow 203.0.113.4 to connect to port 22 (SSH), use this command:

Subnets

If you want to allow a subnet of IP addresses, you can do so using CIDR notation to specify a netmask. For example, if you want to allow all of the IP addresses ranging from 203.0.113.1 to 203.0.113.254 you can use this command:

Likewise, you may also specify the destination port that the subnet 203.0.113.0/24 is allowed to connect to. Again, using port 22 (SSH) as an example:

Connections to a Specific Network Interface

If you want to create a firewall rule that only applies to a specific network interface, you can do so by specifying allow in on, followed by the name of the network interface.

It will be helpful to look up your network interfaces before continuing. To do so, use this command:

Output

The highlighted output indicates the network interface names. They typically have names like eth0 or enp3s2.

If your server has a public network interface named eth0, for example, you could allow HTTP traffic to it with this command:

Doing so would allow your server to receive HTTP requests from the public internet.

Or, if you want a MySQL database server (port 3306) to listen for connections on the private network interface eth1, you could use this command:

This would allow other servers on your private network to connect to your MySQL database.

7)Denying Connections

If you haven’t changed the default policy for incoming connections, UFW is configured to deny all incoming connections. Generally, this simplifies the process of creating a secure firewall policy by requiring you to create rules that explicitly allow specific ports and IP addresses through.

Sometimes you will want to deny specific connections based on the source IP address or subnet, however, perhaps because you know that your server is being attacked from there. Also, if you want to change your default incoming policy to allow (which is not recommended), you would need to create deny rules for any services or IP addresses that you don’t want to allow connections for.

To write deny rules, you can use the commands described above, replacing allow with deny.

For example, to deny HTTP connections, you could use this command:

Or if you want to deny all connections from 203.0.113.4 you could use this command:

Now, you can learn how to implement delete rules.

8)Deleting Rules

Knowing how to delete firewall rules is just as important as knowing how to create them. There are two ways to specify which rules to delete: by the rule number or by the rule itself. This is similar to how the rules were specified when they were created.

By Rule Number

If you’re using the rule number to delete firewall rules, the first thing you’ll want to do is get a list of your firewall rules. The UFW status command has the numbered option, which displays numbers next to each rule:

Output

If you decide that you want to delete rule 2, which allows HTTP connections on port 80, you can specify this in the following UFW delete command:

This will show a confirmation prompt, which you can answer with y/n. Typing y will then delete rule 2. Note that if you have IPv6 enabled, you will want to delete the corresponding IPv6 rule as well.

By Actual Rule

The alternative to rule numbers is to specify the actual rule to delete. For example, if you want to remove the allow http rule, you could write it like this:

You can also specify the rule with allow 80 instead of the service name:

This method will delete both IPv4 and IPv6 rules, if they exist.

9)Checking UFW Status and Rules

At any time, you can check the status of UFW with this command:

If UFW is disabled, which is the default, the output will be this:

Output

If UFW is active, which it should be if you followed Step 3, the output will say that it’s active and will list any rules that you have set. For example, if the firewall is set to allow SSH (port 22) connections from anywhere, the output might include something like this:

Output

Use the status command if you want to check how UFW has configured the firewall.

10)Disabling or Resetting UFW (optional)

If you decide you don’t want to use UFW, you can disable it with this command:

Any rules that you created with UFW will no longer be active. You can always run sudo ufw enable if you need to activate it later.

If you already have UFW rules configured, but you decide that you want to start over, you can use the reset command:

This will disable UFW and delete any rules that you have previously defined. Keep in mind that the default policies won’t change to their original settings if you modified them at any point. This should give you a fresh start with UFW.

Putting a network interface up/down from command line

2024-03-01 · Posted in Debian

In Xubuntu 14.04, I tried to use both ip and ifconfig to handle a network interface, but they gave the same result.

both correcly put down the interface and the connectivity does not work; but then

did not restore the connectivity!

This is the output of ip link show after putting the interface down:

and this is the output after putting the interface up:

So it has no carrier and I can’t access the web, but it has an IP!

1) Why? Shouldn’t the up command restore the previous situation? I had to turn off and on the physical switch of the wireless board to browse again the web. I also tried with dhclient -r wlan0 and dhclient wlan0, but the result was that neither the physical switch was useful and I had to restart the whole system.

2) Even after putting the interface down, the GUI connectivity icon was active and a connection to the wireless Access-Point was normally shown (even if no webpages were actually available). Why?

Solution:

1)This answer is only for a wired connection. Use ifup and ifdown, not ifconfig, unless you want to manually specify the parameters. ifup will look at your network configuration in /etc/network/interfaces (or wherever your distro puts it).

2)If you’re using wpa for your wifi, you cannot connect to it with just ifup; a helper application must be configured and running (usually wpa_supplicant). Usually your distro will provide you with network scripts to perform these tasks automatically.