Шпаргалка по tmux

Tmux — это терминальный мультиплексор или иными словами, вы можете в одном терминале запустить несколько терминальных сессий и переключаться между ними или даже разместить их в одном окне, а также отключиться от сессии оставив её работать в фоне, а затем вернуться и посмотреть результат, это может быть очень удобно при работе по SSH. Если вы раньше пользовались утилитой screen, то tmux — это её аналог, который имеет намного больше функций.




Эта статья — небольшая шпаргалка по Tmux, в которой мы разберем установку программы, основные её возможности и команды, а также некоторые приемы использования. После прочтения статьи вы сможете полноценно пользоваться утилитой.




УСТАНОВКА TMUX




Здесь все просто. Для установки программы в Ubuntu выполните следующую команду:




sudo apt install tmux







А для установки в CentOS:




sudo yum install tmux




СИНТАКСИС И ОПЦИИ КОМАНДЫ TMUX




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




tmux команда опции




Что касается опций, то в большинстве вам придется использовать только две — это -t (target) — которая указывает цель, к которой будет применяться команда, например, идентификатор сессии или подключенного клиента, а также -s (session) — который обычно используется для обозначения источника, над которым будет выполняться действие.




Команды tmux для управления сессиями, которые вы можете использовать:




  • attach-session (attach) — подключиться к уже существующей сессии. В параметре необходимо передать опцию -t и идентификатор сессии;
  • detach-session (detach) — отключить всех клиентов (или переданного с помощью опции -t) от сессии, переданной в опции -s;
  • has-session — проверить существует ли сессия, аналогично, надо передать идентификатор сессии;
  • kill-server — остановить все запущенные сессии;
  • kill-session — завершить сессию переданную в параметре -t;
  • list-clients — посмотреть клиентов, подключенных к сессии -t;
  • list-sessions (ls) — вывести список всех запущенных сессий;
  • new-session — создать новую сессию, можно передать имя сессии в опции -s и стартовую директорию в опции -c;
  • rename-session — переименовать сессию, нужно передать идентификатор сессии и новое имя;




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




По умолчанию для активации сочетания клавиш нужно нажать Ctrl+B, отпустить, а потом нажать нужную клавишу. Вот основные сочетания клавиш tmux, которые вам понадобятся:




  • Ctrl+b c — создать новое окно;
  • Ctrl+b w — выбрать окно из списка;
  • Ctrl+b 0-9 — открыть окно по его номеру;
  • Ctrl+b , — переименовать текущее окно;
  • Ctrl+b % — разделить текущую панель по горизонтали;
  • Ctrl+b « — разделить текущую панель по вертикали;
  • Ctrl+b стрелка — перейти на панель, находящуюся в стороне, куда указывает стрелка;
  • Ctrl+b Ctrl+стрелка — изменить размер текущей панели;
  • Ctrl+b o — перейти на следующую панель;
  • Ctrl+b ; — переключаться между текущей и предыдущей панелью;
  • Ctrl+b x — закрыть текущую панель;
  • Ctrl+b [ — войти в режим копирования (подробнее ниже);
  • Ctrl+b ] — вставить из внутреннего буфера обмена tmux;
  • Ctrl+b d — отключится от текущей сессии;
  • Ctrl+b : — открыть командную строку.




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




КАК ПОЛЬЗОВАТЬСЯ TMUX




1. СОЗДАНИЕ СЕССИИ




Чтобы создать новую сессию достаточно выполнить команду без параметров:




tmux




Также можно создать сессию командой new-session и задать ей удобное имя:




tmux new-session -s losst







2. РАЗДЕЛЕНИЕ ОКНА НА ПАНЕЛИ




Окно сессии можно разделить на несколько панелей. Чтобы выполнить разделение по горизонтали нажмите Ctrl+b отпустите, а затем нажмите Shift+»:







Аналогично можно разделить панель по вертикали, нажав Ctrl+b, а затем Shift+%:







Размер активной панели можно менять нажав Ctrl+b, а потом Ctrl и стрелка:







А для переключения между панелями используйте клавиши Ctrl+b и стрелка. Сначала не привычно, но потом удобно.




3. ПОДДЕРЖКА МЫШКИ




По умолчанию поддержка мышки отключена, но если вы работаете в графическом окружении, вы можете её включить. Это даст несколько преимуществ: вы сможете выбирать активную панель мышкой, копировать текст во внутренний буфер обмена, менять размер панелей, использовать прокрутку для просмотра истории вывода и так далее. Для этого откройте файл ~/.tmux.conf и добавьте туда следующие строки:




nano ~/.tmux.conf




set-option -g -q mouse on

bind-key -T root WheelUpPane if-shell -F -t = "#{alternate_on}" "send-keys -M" "select-pane -t =; copy-mode -e; send-keys -M"

bind-key -T root WheelDownPane if-shell -F -t = "#{alternate_on}" "send-keys -M" "select-pane -t =; send-keys -M"







Сохраните изменения, нажмите Ctrl+b :, а потом выполните такую команду чтобы перезагрузить tmux:




source ~/.tmux.conf







Настройка tmux завершена, теперь мышь будет работать.




4. КОПИРОВАНИЕ И ВСТАВКА




Одна из достаточно важных операций при работе с терминалом — это возможность что-то скопировать и куда-то перенести. После активации поддержки мышки вы можете просто выделить участок текста мышкой и он автоматически скопируется во внутренний буфер tmux.







Если вы хотите иметь возможность скопировать в системный буфер обмена, перед тем как выполнять действия мышкой зажмите Shift:







Кроме того, в tmux есть управление копированием и вставкой с помощью клавиш. Для перехода в режим копирования нажмите Ctrl+B [, затем переместите курсор к нужному месту с помощью стрелок. Кстати, этот режим можно использовать также для прокрутки. Потом нажмите Ctrl+пробел для начала выделения, выделите нужный фрагмент стрелками и нажмите Ctrl+w для копирования.







Чтобы вставить текст из внутреннего буфера обмена нужно нажать сочетание клавиш Ctrl+b ]. Для выхода из режима копирования используйте q или Esc.




5. ОКНА TMUX




Кроме панелей в tmux можно открывать окна. Это аналог рабочих столов в Linux. Каждое окно привязано к определенной цифровой кнопке и имеет свой набор панелей. Для создания нового окна нажмите Ctrl+b c:







Список окон выводится внизу окна терминала. Для переключения на нужное окно нажмите Ctrl+b и номер окна.




6. ОТКЛЮЧЕНИЕ ОТ СЕССИИ




Чтобы отключиться от текущей сессии достаточно нажать сочетание клавиш Ctrl+b d.




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




7. ПОДКЛЮЧЕНИЕ К СЕССИИ




Посмотреть список сессий можно командой ls:




tmux ls







А для подключения используйте attach:




tmux attach -t losst







Ещё можно посмотреть список клиентов, подключенных к сессии:




tmux lc







ВЫВОДЫ




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




Источник: https://losst.ru/shpargalka-po-tmux



2021-03-10T23:31:45
Утилиты командной строки

Как пользоваться iperf

Утилита iperf — это генератор сетевого трафика, предназначенный для проверки скорости и пропускной способности сети. Программа кроссплатформена, и распространяется с открытым исходным кодом. Вы можете использовать её для проверки пропускной способности VPS серверов или для настройки и улучшения производительности сети.




Программа состоит из клиентской и серверной части, поэтому для работы вам понадобится как минимум два компьютера, подключённых к сети. В этой статье мы рассмотрим как установить и как пользоваться iperf. Обратите внимание, что мы будем говорить об последней версии программы iperf3.




УСТАНОВКА IPERF




Как я уже сказал, программа кроссплатформенная, поэтому вы можете использовать её как в Windows, так и в Linux. Для установки в Ubuntu или Debian выполните:




sudo apt install iperf3







А для установки iperf в CentOS или Fedora:




sudo dnf install iperf3




В Windows программа ставится немного по другому. Просто скачайте утилиту из официального сайта и распакуйте куда-нибудь. Сразу же после этого вы сможете её использовать.




СИНТАКСИС И ОПЦИИ IPERF




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




$ iperf3 -s опции




Для запуска клиента используется ключ -c, которому надо передать адрес сервера:




$ iperf3 -c адрес_сервера опции




Теперь давайте рассмотрим общие опции программы:




  • -p, —port — указать порт для сервера или к какому порту надо подключаться;
  • -f, —format — формат выводимых данных, доступны значения: k,m,g,t,K,M,G,T;
  • -i, —interval — интервал времени между выводами результата тестирования;
  • -F, —file — использовать данные из файла вместо генерации случайных данных;
  • -V, —verbose — вывод максимально подробной информации;
  • -J, —json — вывод в формате JSON;
  • —logfile — записывать информацию в лог файл;
  • —forceflush — очищать историю вывода перед выводом следующего результата тестирования;
  • -v, —version — версия программы.




Теперь разберемся с опциями только для серверной части:




  • -D, —daemon — запустить сервер в фоновом режиме;
  • -I, —pidfile — путь для записи PID файла процесса;
  • -1, —one-off — обработать только одно подключение клиента, а затем выйти.




У клиентской части опций чуть больше:




  • —sctp — использовать SCTP вместо TCP;
  • -u, —udp — использовать UDP вместо TCP;
  • —connect-timeout — таймаут для первого соединения с сервером в миллисекундах;
  • -b, —bitrate — битрейт, для UDP используется по умолчанию 1 Мбит/сек, для TCP не ограничено;
  • -t, —time — время одного теста в секундах, по умолчанию 10 секунд;
  • -R, —reverse — обратный тест, не клиент отправляет данные серверу, а сервер клиенту;
  • -P — количество потоков;
  • -w — размер окна TCP;
  • -4, —version4 — использовать только IPv4;
  • -6, —version6 — использовать только IPv6.




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




man iperf3




Теперь вы знаете как установить iperf, а также основные её опции, но на этом инструкция не заканчивается. Дальше давайте перейдем к примерам использования iperf3.




КАК ПОЛЬЗОВАТЬСЯ IPERF




Для примеров я буду использовать сервер с адресом 192.168.0.101. Адрес клиента не имеет значения. Сначала необходимо запустить серверную часть программы. Для этого выполните:




iperf3 -s







Вы можете сразу указать в каких единицах измерения хотите видеть результаты. Для этого используется опция -f. Доступны такие варианты:




  • k — килобиты;
  • m — мегабиты;
  • g — гигабиты;
  • K — килобайты;
  • M — мегабайты;
  • G — гигабайты;
  • T — терабайты.




Например:




iperf3 -s -f K




Аналогично для сервера можно задать порт с помощью опции -p. По умолчанию он работает на порту 5201:




ipref3 -s -p 4000




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




sudo ufw allow 5201




А для firewalld:




sudo firewall-cmd --permanent --add-port=5201/tcp

sudo firewall-cmd --permanent --add-port=5201/udp

sudo firewall-cmd --reload




И если вы хотите запустить программу в фоновом режиме, можете использовать опцию -D и перенаправить вывод в лог файл:




iperf3 -s -D --logfile /var/log/ipref.log




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




ss -tulpn | grep 5201







Обратите внимание на IP адрес, на котором слушает сервер, звездочка означает IPv4 соединения, а [::] — IPv6. Поэтому, возможно вам придется вручную указать откуда надо ждать подключений:




iperf3 -s -4 -D --logfile /var/log/ipref.log




Теперь к серверу можно подключаться. Для этого используйте опцию -c. Если вы меняли порт сервера, то здесь его надо указать с помощью опции -p:




iperf3 -c 192.168.0.101 -f K







В данном примере тест выполняется 10 секунд. Чтобы понять какая сейчас у вас пропускная способность сети следует смотреть на колонку Bitrate. Обращайте внимание на строки под чертой, они отображают среднее значение. В данном примере было передано 113 мебабайт со скоростью 11534 килобайт в секунду.




По умолчанию утилита выводит промежуточный результат каждую секунду, вы можете изменить это поведение с помощью опции -i. Например, 5 секунд:




iperf3 -c 192.168.0.101 -f M -i 5







А общую продолжительность теста можно задать с помощью опции -t. Например, 30 секунд:




iperf3 -c 192.168.0.101 -f M -i 5 -t 30




По умолчанию клиент отправляет данные серверу. Вы можете использовать опцию -R, чтобы сервер отправлял данные клиенту:




iperf3 -c 192.168.0.101 -f K -R







Если вы хотите видеть вывод сервера на клиенте, достаточно использовать опцию —get-server-output:




iperf3 -c 192.168.0.101 -f K --get-server-output




С помощью опции -P можно указать количество параллельных потоков тестирования, например, два:




iperf3 -c 192.168.0.101 -f K -P 2




Чтобы использовать UDP пакеты вместо TCP используйте опцию -u:




iperf3 -c 192.168.0.101 -f K -u







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




iperf3 -c iperf.volia.net







ВЫВОДЫ




В этой статье мы рассмотрели как пользоваться iperf 3 для проверки пропускной способности сети, а также разобрались как узнать скорость вашего провайдера с помощью публичных серверов iperf. Как видите, всё не так уж сложно. А какие вы используете утилиты для проверки скорости работы сети? Напишите в комментариях!




Источник: https://losst.ru/kak-polzovatsya-iperf



2021-03-10T23:25:19
Утилиты командной строки

Установка Docker Portainer

В последнее время Docker набирает всё больше и больше популярности благодаря возможности быстро развертывать сложные приложения, состоящие из большого количества сервисов. Portainer — это система управления docker контейнерами в Linux. Она позволяет управлять как локальными контейнерами, так и удалёнными с помощью Docker API.




С помощью Portainer вы сможете отслеживать состояние контейнеров, запускать, останавливать и удалять их, развертывать новые приложения, а также многое другое. Сегодня мы поговорим как выполняется установка Docker Portainer на ваш компьютер, а также как пользоваться программой




КАК УСТАНОВИТЬ DOCKER PORTAINER




Для выполнения этой статьи вам понадобится уже установленный в вашей системе Docker. Я не буду подробно рассказывать как установить docker и docker-compose. Для этого воспользуйтесь этой статьей для Ubuntu или этой для CentOS.




После того, как Docker будет установлен, можно развернуть контейнер с Portainer. Было бы странно, если бы программа поставлялась в каком-либо другом виде. Создайте хранилище данных для Portainer:




docker volume create portainer_data




Для установки и запуска контейнера выполните:




docker run -d -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer







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




docker ps







НАСТРОЙКА PORTAINER




1. ВХОД




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







Затем выберите метод подключения к Docker. Для начала можно подключиться к локальному сервису Docker. Для этого выберите Local:







2. СПИСОК УЗЛОВ И КОНТЕЙНЕРОВ




После нажатия кнопки Connect вы попадите в панель управления контейнерами:







Сначала вам надо выбрать узел, на котором вы будете управлять контейнерами, в данном случае, это local. Здесь вы можете уже управлять вашими контейнерами. Например, в разделе Containers можно посмотреть все доступные контейнеры:







А в разделе Stacks — все доступные приложения:







3. РАЗВОРАЧИВАНИЕ ПРИЛОЖЕНИЯ




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







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







После этого нажмите кнопку Deploy the stack и новое приложение появится в списке раздела Stasks. Как видите, теперь программа сообщает, что у неё есть полный контроль над этим приложением, потому что она его создала:




4. УПРАВЛЕНИЕ ПРИЛОЖЕНИЕМ




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







Для командной строки рядом есть значок с символом приглашения ввода. Вот так выглядит командная строка:







А открытые порты находятся в самом конце характеристик контейнера в разделе Published ports:







Если вы кликните по ссылке с надписью 32768:80 для контейнера WordPress, то попадёте на сайт WordPress:







КАК ОБНОВИТЬ PORTAINER




Чтобы обновить Portainer надо удалить текущий образ и запустить его снова. Это не вызовет никаких проблем, так как при создании предыдущего образа мы использовали внешнее хранилище для хранения данных. Остановите образ и удалите его:




docker stop portainer

docker rm portainer




Скачайте новую версию:




docker pull portainer/portainer




Затем осталось снова установить Portainer:




docker run -d -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer




ВЫВОДЫ




Как видите установка Portainer очень простая, если у вас есть уже установленный docker, а далее программа только помогает пользоваться контейнерами. Вы можете подключить к ней и удалённые узлы, однако для этого надо, чтобы у них был публичный IP адрес, потому что в локальной сети взаимодействовать с ними вы не сможете. А вы используете Portainer или пользуетесь другим интерфейсом для управления Docker? Напишите в комментариях!




Источник: https://losst.ru/ustanovka-docker-portainer



2021-03-10T23:16:02
Software

Как добавить команду в Cron

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




Служба cron — это стандартный планировщик задач в Linux. С помощью него вы можете запланировать выполнение команды или скрипта один или несколько раз, в определенную минуту, час, день, неделю и месяц. В этой статье мы подробно рассмотрим как выполняется настройка Cron в Linux на примере дистрибутива Ubuntu.




КАК ПОСМОТРЕТЬ ЗАДАНИЯ CRON




Думаю, что начать следует не с настройки, а именно как посмотреть уже настроенные задачи cron. На самом деле задачи хранятся в трёх местах:




  • База данных crontab — здесь хранятся все записи cron пользователя, которые вы настраиваете вручную;
  • /etc/crontab и /etc/cron.d/ — системные записи cron и записи cron различных пакетов;
  • /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly, /etc/cron.monthly — здесь лежат скрипты, которые надо выполнять раз в час, день, неделю и месяц соответственно, обычно эти папки используются различными пакетами, но вы тоже можете их использовать для своих скриптов.




Чтобы посмотреть задания cron добавленные текущим пользователем используйте команду crontab и опцию -l:




crontab -l




Все задачи cron разделены по пользователям, и команды из этих задач будут выполнятся от имени того пользователя, для которого они были добавлены. Чтобы посмотреть задачи другого пользователя используйте опцию -u:




sudo crontab -u root -l




А теперь давайте поговорим о том, как добавить команду cron для нужного вам пользователя.




ДОБАВЛЕНИЕ КОМАНДЫ В CRON




Чтобы добавить задание cron из терминала можно использовать утилиту crontab. Для открытия временного файла с текущими заданиями этого пользователя выполните:




crontab -e




Все запланированные действия будут выполнятся от текущего пользователя, если вы хотите указать другого пользователя используйте опцию -u:




sudo crontab -u имя_пользователя -e




Команда откроет текстовый редактор, где вы сможете добавлять или редактировать задания cron. Будет использован установленный по умолчанию редактор, например, vim:







Каждая задача формируется следующим образом:




минута(0-59) час(0-23) день(1-31) месяц(1-12) день_недели(0-7) /полный/путь/к/команде




Чтобы подставить любое значение используйте звездочку «*«. Первые пять параметров характеризуют время выполнения, а последний, это путь к команде или скрипту, который нужно выполнить. Обратите внимание, что значение переменной PATH здесь не действует, поэтому путь надо писать полностью либо объявлять свою переменную PATH в начале файла настройки. Давайте сделаем простой скрипт, который будет выводить в лог дату своего запуска и поможет отладить всё это:




sudo vi /usr/local/bin/script.sh




#!/bin/bash

echo $(date) >> /var/log/testcron.log







Сделайте скрипт исполняемым:




sudo chmod ugo+x /usr/local/bin/script.sh




Самый простой пример как запускать cron каждую минуту. Вместо всех параметров ставим просто звездочку:




* * * * * /usr/local/bin/script.sh







Или только в нулевую минуту, то есть в начале каждого часа или другими словами запуск cron каждый час:




0 * * * * /usr/local/bin/script.sh




Можно указать несколько значений через запятую, для того чтобы определить несколько точек запуска. Например, будем запускать скрипт cron каждые 15 минут:




0,14,29,44 * * * * /usr/local/bin/script.sh




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




0-10 * * * * /usr/local/bin/script.sh




Чтобы чтобы настроить интервал выполнения более тонко можно использовать слеш (/) с помощью этого символа и звездочки можно указать шаг с которым будет выполнятся команда. Например, каждые пять минут:




0/5 * * * * /usr/local/bin/script.sh




Чтобы запустить cron каждые 10 минут используйте:




0/10 * * * * /usr/local/bin/script.sh




А для запуска cron каждые 30 минут:




0/30 * * * * /usr/local/bin/script.sh




Аналогичным образом задаются часы, например, выполнять скрипт только 6:00 и 18:00:




0 6,18 * * * /usr/local/bin/script.sh




А вот запустить cron каждую секунду или раз в 30 секунд не получится. Минимальная единица времени в cron это минута. Но можно создать команду, которая будет запускаться раз в минуту и по 30 секунд спать и затем снова делать:




* * * * * /usr/local/bin/script.sh && sleep 30 && /usr/local/bin/script.sh




Это довольно плохой подход и лучше так не делать. Кроме того, для экономии времени при работе с cron можно использовать специальные слова-маркеры времени. Вот они:




  • @reboot — при перезагрузке;
  • @yearly@annually — раз в год (0 0 1 1 *);
  • @monthly — раз в месяц (0 0 1 * *);
  • @weekly — раз в неделю (0 0 * * 0);
  • @daily@midnight — раз в день в полночь (0 0 * * *);
  • @hourly — раз в час (0 * * * *).




Для подбора правильной комбинации даты можно использовать сервис crontab.guru. Он позволяет в реальном времени посмотреть когда будет выполнено то или иное условие:







Когда настройка cron linux будет завершена, сохраните изменения и закройте файл. Для этого в Nano нажмите Ctrl+O для сохранения и Ctrl+X для закрытия редактора, а в Vim нажмите Esc и наберите :wq. Теперь новые задания Cron будут добавлены и активированы. Посмотреть как выполняется ваш Cron вы можете с помощью скрипта, который я привел выше либо в лог файле. Сервис cron пишет свои логи в стандартный журнал syslog. В Ubuntu они сохраняются в файле /var/log/syslog:




cat /var/log/syslog | grep CRON







Если во время работы возникнут ошибки cron, они тоже будут здесь. Если же вам надо добавить задание Cron из какого либо скрипта, то вы всегда можете поместить свой скрипт в папку /etc/cron.d или /cron/hourly,… чтобы выполнять его когда надо, только не забудьте сделать скрипт исполняемым.




ВЫВОДЫ




В этой статье мы разобрались как выполняется настройка cron linux на примере Ubuntu. Как видите, все только кажется сложным, но на самом деле просто если разобраться.




Источник: https://losst.ru/kak-dobavit-komandu-v-cron



2021-03-10T23:09:16
Утилиты командной строки

Примеры синхронизации Rsync

Потребность передачи файлов между серверами и компьютерами возникает довольно часто, особенно при администрировании нескольких устройств. Обычно для этих целей удобно использовать ssh и scp, но если файл очень большой, а изменена была только небольшая его часть, или вы хотите настроить постоянную автоматическую синхронизацию, то scp уже явно неидеальный вариант. Для этого существуют специальные утилиты. В этой статье мы рассмотрим одну из них. А именно будет рассмотрена rsync синхронизация в linux.




Rsync — это программное обеспечение с открытым исходным кодом, которое можно использовать для синхронизации файлов и папок с локального компьютера на удаленный и наоборот. Примечательная особенность Rsync — возможность передавать зашифрованные файлы с помощью SSH и SSL. Кроме того, здесь передача файлов выполняется в один поток, в отличие от других подобных программ, создающий отдельный поток для передачи каждого файла. Это увеличивает скорость и убирает дополнительные задержки, которые становятся проблемой при передаче большого количества маленьких файлов.




Возможно использование rsync для синхронизации файлов, каталогов, при этом может применяться сжатие и шифрование. Программа впервые была применена в июне 1996 года, она разработана Эндрю Тридгелом и Полом Маккерасом. Rsync синхронизация выполняется по протоколу RSYNC, который специально разработан не просто для передачи файлов между двумя компьютерами, а для их синхронизации. Если точнее, то передается не файл полностью, а только то, что было изменено.




Как вы уже поняли, в этой статье мы рассмотрим rsync примеры синхронизации, настройку rsync, а также ее основные возможности и опции.




ОСОБЕННОСТИ RSYNC




Давайте сначала рассмотрим примечательные особенности Rsync:




  • Возможность поддерживать синхронизацию целых деревьев каталогов;
  • Можно сохранять символические ссылки, жесткие ссылки,  владельцев и права файла, метаданные и время создания;
  • Не требует особых привилегий;
  • Передача файлов одним потоком;
  • Поддержка RSH, SSH в качестве транспорта;
  • Поддержка анонимного Rsync.




СИНТАКСИС RSYNC




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




 sudo apt-get install rsync




А теперь, уже по традиции подобных статей, рассмотрим синтаксис команды rsync:




$ rsync опции источник приемник




В качестве источника и приемника может выступать удаленная или локальная директория. Например, ssh, rsync, samba сервер или локальная директория. Опции задают дополнительные параметры rsync.




ОПЦИИ RSYNC




Теперь давайте кратко рассмотрим параметры rsync. Здесь перечислены не все опции. Для более подробной информации смотрите man rsync:




  • -v — Выводить подробную информацию о процессе копирования;
  • -q — Минимум информации;
  • -c — Проверка контрольных сумм для файлов;
  • -a — Режим архивирования, когда сохраняются все атрибуты оригинальных файлов;
  • -R — Относительные пути;
  • -b — Создание резервной копии;
  • -u — Не перезаписывать более новые файлы;
  • -l — Копировать символьные ссылки;
  • -L — Копировать содержимое ссылок;
  • -H — Копировать жесткие ссылки;
  • -p — Сохранять права для файлов;
  • -g — Сохранять группу;
  • -t — Сохранять время модификации;
  • -x — Работать только в этой файловой системе;
  • -e — Использовать другой транспорт, например, ssh;
  • -z — Сжимать файлы перед передачей;
  • —delete — Удалять файлы которых нет в источнике;
  • —exclude — Исключить файлы по шаблону;
  • —recursive — Перебирать директории рекурсивно;
  • —no-recursive — Отключить рекурсию;
  • —progress — Выводить прогресс передачи файла;
  • —stat — Показать статистику передачи;
  • —version — Версия утилиты.




НАСТРОЙКА СЕРВЕРА RSYNC




Как вы понимаете, нельзя просто так взять и закинуть на первую попавшуюся машину файлы без установки на нее специального программного обеспечения. На удаленной машине должен быть установлен и настроен RSYNC, SSH, Samba или FTP сервер, с помощью которого Rsync сможет авторизоваться на машине и передавать туда файлы.




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




Сначала создайте конфигурационный файл со следующим содержимым:




sudo vi /etc/rsyncd.conf

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsync.log

[share]

path = /tmp/share/

hosts allow = 192.168.56.1

hosts deny = *

list = true

uid = root

gid = root

read only = false







Здесь мы задаем путь к нашей папке для синхронизации, разрешаем доступ к серверу только с ip адреса (192.168.56.1) и запрещаем все остальные подключения. Параметры uid и gid указывают пользователя и группу, от которых будет запущен демон. Лучше не использовать root, а указать пользователя nobody и выдать ему права на ту папку, в которую будет выполняться синхронизация каталогов rsync.




Настройка rsync завершена, остается сохранить файл, запустить сервер rsync и добавить его в автозагрузку:




sudo systemctl start rsync

sudo systemctl enable rsync







Сервер будет предоставлять доступ к файлам без запроса пароля.




ПРИМЕРЫ СИНХРОНИЗАЦИИ RSYNC




Дальше давайте рассмотрим использование rsync, примеры синхронизации.




1. КОПИРОВАНИЕ И СИНХРОНИЗАЦИЯ ФАЙЛОВ НА ЛОКАЛЬНОМ КОМПЬЮТЕРЕ




Rsync позволяет синхронизировать файлы и папки в пределах одной машины. Давайте сначала рассмотрим использование rsync для синхронизации файла на локальном компьютере:




rsync -zvh file /tmp/backups/







Указав опцию —progress вы можете видеть сколько процентов уже скопировано, а сколько еще осталось:




rsync -zvh --progress file /tmp/backups/







2. СИНХРОНИЗАЦИЯ ПАПОК НА ЛОКАЛЬНОЙ МАШИНЕ




Синхронизация папок rsync выполняется так же просто, как и файлов:




rsync -zvh /home/user/documents /tmp/backups/




Если вы хотите, чтобы все атрибуты файлов, такие, как дата изменения и создания сохранялись, необходимо использовать опцию -a:




rsync -azvh /home/user/documents /tmp/backups/







3. СИНХРОНИЗАЦИЯ С УДАЛЕННЫМ СЕРВЕРОМ




Ненамного сложнее синхронизировать файлы с удаленным сервером. Скопируем локальную папку documents, на удаленный сервер:




 rsync -avz /home/sergiy/tmp/ root@192.168.56.102:/home/




По умолчанию rsync попытается использовать транспорт ssh. Если вы хотите использовать ранее созданный сервер rsync, нужно указать это явно:




rsync -avz /home/sergiy/tmp/ rsync://192.168.56.102:/share




Точно также можно синхронизировать файлы с rsync из удаленного сервера:




rsync -avz root@192.168.56.102:/home/ /home/sergiy/tmp/




Адрес удаленного сервера записывается в таком формате:




имя_пользователя@адрес_машины/папка/на/удаленной_машине




Синхронизация папок rsync будет выполняться на стандартном порту.




4. СИНХРОНИЗАЦИЯ ФАЙЛОВ ПО SSH




Чтобы задать протокол подключения используется опция -e. При использовании SSH все передаваемые данные шифруются и передаются по защищенному каналу, таким образом, чтобы никто не мог их перехватить. Для использования SSH вам нужно знать пароль пользователя в системе.




Синхронизация файлов rsync с удаленного сервера по ssh будет выглядеть вот так:




 rsync -avzhe ssh root@192.168.56.102:/root/install.log /tmp/




Если вы используете другой порт для ssh, то здесь его можно указать:




rsync -avzhe "ssh -p 22" root@192.168.56.102:/root/install.log /tmp/







А теперь передадим данные на тот же сервер:




 rsync -avzhe ssh backup.tar root@192.168.0.101:/backups/




5. ПРОСМОТР ПРОГРЕССА ПРИ СИНХРОНИЗАЦИИ




Для просмотра прогресса копирования файла с одной машины на другую используется опция progress:




 rsync -avzhe ssh --progress /home/user/documents root@192.168.56.102:/root/documents




6. СИНХРОНИЗАЦИЯ НЕ ВСЕХ ФАЙЛОВ В RSYNC




Опции include и exclude позволяют указать какие файлы нужно синхронизировать, а какие исключить. Опции работают не только с файлами но и с директориями.




Например, скопируем все файлы, начинающиеся на букву R:




 rsync -avze ssh --include 'R*' --exclude '*' root@192.168.56.102:/root/documents/ /root/documents




7. УДАЛЕНИЕ ПРИ СИНХРОНИЗАЦИИ




Во время синхронизации можно удалять файлы, которых нет на машине откуда идет rsync синхронизация, для этого используется опция —delete.




Например:




 rsync -avz --delete root@192.168.56.102:/documents/ /tmp/documents/




Если перед выполнением этой команды создать в папке файл которого нет на удаленном сервере, то он будет удален.




8. МАКСИМАЛЬНЫЙ РАЗМЕР ФАЙЛОВ




Вы можете указать максимальный размер файлов, которые нужно синхронизировать. Для этого используется опция —max-size. Например, будем синхронизировать только файлы меньше 200 килобайт:




 rsync -avzhe ssh --max-size='200k' /user/documents/ root@192.168.56.102:/root/documents




9. УДАЛЕНИЕ ИСХОДНЫХ ФАЙЛОВ




Есть возможность удалять исходные файлы после завершения синхронизации с удаленным сервером:




 rsync --remove-source-files -zvh backup.tar /tmp/backups/




Таким образом, файл backup.tar будет удален после завершения копирования в папку /tmp/backups.




10. РЕЖИМ СИМУЛЯЦИИ RSYNC




Если вы новичок, и еще не использовали rsync, то возможно захотите посмотреть как отработает команда без применения реальных действий в файловой системе. Для этого есть опция dry-run. Команда только выведет все выполняемые действия в терминал, без выполнения реальных изменений:




 rsync --dry-run --remove-source-files -zvh backup.tar /tmp/backups/




11. ОГРАНИЧИТЬ СКОРОСТЬ ПЕРЕДАЧИ




Вы можете ограничить использование пропускной способности сети с помощью опции —bwlimit:




 rsync --bwlimit=100 -avzhe ssh /user/home/documents/ root@192.168.56.102:/root/documents/




Как я уже писал выше, rsync синхронизирует только части файла, если вы хотите синхронизировать файл целиком используйте опцию -W:




 rsync -zvhW backup.tar /tmp/backups/backup.tar

backup.tar




12. АВТОМАТИЧЕСКАЯ СИНХРОНИЗАЦИЯ ПАПОК RSYNC




Можно расписать автоматическую синхронизацию с помощью cron. Но в случае доступа к серверу по SSH необходимо будет создать ключ и загрузить его на сервер, чтобы аутентификация проходила без запроса пароля.




Создаем ключ:




 ssh-keygen -t rsa




Загружаем ключ на сервер к с которым собираемся синхронизироваться:




 ssh-copy-id -i /home/sk/.ssh/id_rsa.pub sk@192.168.1.250




Теперь можем переходить к настройке расписания cron. Будем запускать синхронизацию каждый день:




crontab -e

00 05 * * * rsync -azvre ssh /home/user/Downloads/ 192.168.56.102:/share




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




ВЫВОДЫ




Теперь вы знаете все что нужно, чтобы настройка rsync была выполнена правильно. Мы рассмотрели некоторые примеры rsync синхронизации. И теперь вы можете использовать все это для решения своих задач. Я упустил какую-то полезную информацию или у вас остались вопросы? Напишите в комментариях!




Источник: https://losst.ru/rsync-primery-sinhronizatsii



2021-03-10T23:03:25
Утилиты командной строки

MikroTik – Firewall защита доступа

К каким результатам мы пришли:
У нас встает вопрос безопасности нашей локальной сети, ведь китайские боты не спят и постоянно сканируют доступное сетевое пространство на наличие дыр и уязвимостей.
Имея статический IP мы подвержены риску быть взломанными. Т.к. наш статический IP доступен в интернете, он может подвергаться различного рода «атакам из вне».
Поэтому нам нужно сделать так, чтобы только мы могли подключаться к нашим роутерам и другим сервисам в локальной сети.
В принципе жесткую защиту мы делать не будем. У нас ведь не корпоративная сеть, а домашняя. Данной статьей мы попробуем закрыть самые распространенные пробелы в защите нашего роутера и локальной сети в общем. Не будем допускать банальных ошибок.




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




За все операции обработки трафика в сетевых устройствах отвечает так называемый “Межсетевой экран” (Eng – Firewall)
Именно он определяет куда отправлять тот или иной пакет, как обрабатывать соединения и многое, многое другое…
Чтобы охватить весь спектр работы Firewall-а не хватит не только одной статьи, но и 10 или 20 статей точно. Настолько велики его возможности и вариации применения.
Кстати это касается не только MikroTik RouterOS, а принципа фильтрации трафика в общем в операционных системах (даже на Windows)!




Официальные данные на MikroTik Wiki: IP/Firewall/Filter [ENG]




Давайте взглянем, где находится этот самый Межсетевой экран в наших устройствах(ведь RouterOS одинакова на всем оборудовании MikroTik):
Он находится по пути IP -> Firewall




Путь до межсетевого экрана




Окно для ввода правил фильтрации




Кратко пробежимся по основным вкладкам Firewall:
1 – Filter Rules – тут основные разрешающие и блокирующие правила.
2 – NAT – тут формируются перенаправления трафика.
3 – Mangle – тут происходит маркировка соединений и пакетов, отлов определенного вида трафика для дальнейшей его обработки.
Остальные вкладки пока рассматривать не будем, они нам не пригодятся.
4 – Raw – тут можно правилами отловить паразитный трафик и тем самым снизить нагрузку на CPU. Полезно для смягчения DOS атак.
5 – Service Ports – Для некоторых сетевых протоколов требуется прямое двустороннее соединение между конечными точками. Это не всегда возможно, поскольку трансляция сетевых адресов широко используется для подключения клиентов к сети. Это подменю позволяет настроить «помощники отслеживания соединений» для вышеупомянутых протоколов. Эти «помощники» используются для обеспечения правильного обхода NAT.
6 – Connections – тут отображаются все текущие соединения проходящие через маршрутизатор.
7 – Address List – тут списки адресов брандмауэра позволяют пользователю создавать списки IP-адресов, сгруппированных под общим именем. Затем фильтры брандмауэра, Mangle и NAT могут использовать эти списки адресов для сопоставления пакетов с ними.
8 – Layer7 Protocols – тут можно создавать шаблоны для поиска в потоках ICMP / TCP / UDP. L7 собирает первые 10 пакетов соединения или первые 2KB соединения и ищет шаблон в собранных данных.




Часть терминов может показаться непонятной, но в этом нет ничего страшного, мы будем работать только с первым пунктом Filter Rules. Хотя в нем тоже, очень много вариантов создания правил.
Сразу нужно оговориться, что полной безопасности Вам никто не обеспечит и это важно понимать! Но боятся не стоит, мы ведь не популярная корпорация за которой ведется промышленный шпионаж, нам достаточно превентивных мер ))))




Конфигурация по умолчанию:




На MikroTik Wiki представлена базовая конфигурация в таком виде: Basic universal firewall script [ENG]




Вы можете использовать её или нет )
Я делаю несколько по своему, возможно что-то тут не идеально, и Вы обладая большим опытом подскажите мне в комментариях, как сделать лучше ))




1. Перейдем к созданию правил в Firewall Filter Rules




Отступление: А ты засейвился? (Кнопка Safe Mode)




Все правила добавленные в таблицу применяются последовательно, сверху вниз. Будьте осторожны не добавляйте сразу правило, блокирующее все что только можно. Вы можете потерять доступ к роутеру и тогда придется его сбрасывать и перенастраивать заново.
Я рекомендую использовать магическую кнопку Safe Mode для таких целей. Если эта кнопка нажата и Вас отключит от роутера, настройки вернутся к моменту нажатия на эту кнопку. Очень полезная вещь, особенно если Вы работаете удаленно.










Правила добавляются по уже знакомой нам кнопке плюс…







1.1. Перво наперво нам нужно разрешить уже установленные(Established) и связанные(Related) соединения и сбросить некорректные(Invalid) соединения для проходящих (маршрутизируемых) пакетов в цепочке Forward и предназначенных локальной системе в цепочке Input.
Так мы снизим нагрузку на маршрутизатор обработав эти данные сразу.
Зачем повторно обрабатывать эти соединения если они уже и так установлены или неизвестны. Экономим ресурсы процессора. Т.е. эти правила будут в самом начале нашей таблицы.




Добавление правил 1.1. через WinBox (Изображения)




Правило 0




Правило 0




Правило 1




Правило 1




Правило 2




Правило 2




Правило 3




Правило 3







Консольно:




/ip firewall filter
add action=accept chain=forward comment="1.1. Forward and Input Established and Related connections" connection-state=established,related
add action=drop chain=forward connection-state=invalid
add action=accept chain=input connection-state=established,related
add action=drop chain=input connection-state=invalid




Дополнительно: Защита локальной сети от атак из публичного интернета
Очень часто люди используют настройки по умолчанию на своих маршрутизаторах. Это также означает, что можно угадать, какой локальный адрес используется за маршрутизатором. Обычно это 192.168.88.0/24 для устройств, работающих на RouterOS. Это означает, что в общедоступной сети злоумышленник может создать простой маршрут, который говорит, что 192.168.88.0/24 находится за вашим общедоступным IP-адресом.
Таким образом злоумышленник может атаковать ваши локальные сетевые устройства.
Чтобы защитить вашу локальную подсеть от этих атак, можно использовать очень простое правило фильтра брандмауэра. Это правило отбрасывает все пакеты, которые предназначены для локальной сети, но не являются NAT




/ip firewall filter
add action=drop chain=forward connection-nat-state=!dstnat connection-state=new in-interface-list=Internet




1.2. Далее необходимо обеспечить защиту. Продолжим мы с Лимита входящих соединений.




Это даст нам некоторую защиту от DDoS атак.
Далее, большинство правил будут включать в себя параметр Списков интерфейсов In Interface List. Это замена для параметра In Interface.
Позволяет группировать интерфейсы и применять правила Firewall обращаясь сразу к нескольким интерфейсам.
Более подробно про данные списки можно почитать в отдельной статье: MikroTik RouterOS – Списки интерфейсов “Interface List”
Чтобы дальнейшие правила отработали корректно Вы должны внести WAN интерфейс в список Internet, а все локальные интерфейсы в список Local.
Сами списки также нужно создать. Имена списков Вы можете задавать свои не обязательно, как у меня.
Вся информация по тому, как это делать по ссылке выше в статье MikroTik RouterOS – Списки интерфейсов “Interface List”




Добавление правил 1.2. через WinBox (Изображения)




Правило 4




Правило 4




Правило 4




Правило 5




Правило 5




Правило 5




Правило 5







Консольно:




/ip firewall filter
add action=add-src-to-address-list address-list=ddos-blacklist address-list-timeout=1d chain=input comment="1.2. DDoS Protect - Connection Limit" connection-limit=100,32 in-interface-list=Internet protocol=tcp
add action=tarpit chain=input connection-limit=3,32 protocol=tcp src-address-list=ddos-blacklist




1.3. Следом идет защита от SYN флуда.
Что это такое можно почитать тут: https://ru.wikipedia.org/wiki/SYN-флуд или в более профильных изданиях.
Защищать мы будем, как проходящий трафик, так и входящий трафик. Путем создания отдельной цепочки SYN-Protect




Добавление правил 1.3. через WinBox (Изображения)




Правило 6




Правило 6




Правило 6




Правило 7




Правило 7




Правило 7




Правило 8




Правило 8




Правило 8




Правило 8




Правило 9




Правило 9




Правило 9







Консольно:




/ip firewall filter
add action=jump chain=forward comment="1.3. DDoS Protect - SYN Flood" connection-state=new jump-target=SYN-Protect protocol=tcp tcp-flags=syn
add action=jump chain=input connection-state=new in-interface-list=Internet jump-target=SYN-Protect protocol=tcp tcp-flags=syn
add action=return chain=SYN-Protect connection-state=new limit=200,5:packet protocol=tcp tcp-flags=syn
add action=drop chain=SYN-Protect connection-state=new protocol=tcp tcp-flags=syn




1.4. Защита от сканеров портов (PSD – Port Scan Detection).
На счет данного правила есть разные мнения, кто-то считает, что оно не нужно, кто-то, что нужно.
Я же предпочитаю немного себя подстраховать. Тем более, что благодаря данному правилу Address Lists заполняется какими-то забугорными IP адресами )




Добавление правил 1.4. через WinBox (Изображения)




Правило 10




Правило 10




Правило 10




Правило 11




Правило 11




Правило 11







Консольно:




/ip firewall filter
add action=drop chain=input comment="1.4. Protected - Ports Scanners" src-address-list="Port Scanners"
add action=add-src-to-address-list address-list="Port Scanners" address-list-timeout=none-dynamic chain=input in-interface-list=Internet protocol=tcp psd=21,3s,3,1




1.5. Защита WinBox порта от перебора.
Логика обработки тут следующая.
1. Когда мы подключаемся к роутеру на порт 8291, то мы имеет состояние соединения new, правило добавляет наш IP в список уровня 1
2. Если мы не авторизовались и отключились, а после снова пытаемся подключиться, то мы опять будем иметь состояние соединения new. При этом наш IP адрес уже будет в Списке 1
Соответственно наш IP попадет в список уровня 2 и т.д до тех пор пока нас не заблокирует Правило 13, и уже после этого Правило 12 не будет нам давать возможность новых подключений к роутеру по порту 8291.
3. А если мы авторизовались, то наше соединение перейдет из состояния new в состояние established и обработка соединения уже будет вестись самым верхним правилом 2, которое нам все разрешает.
По сути у злоумышленника может быть всего четыре возможности Авторизоваться у нас на роутере через порт WinBox




Добавление правил 1.5. через WinBox (Изображения)




Правило 12




Правило 12




Правило 12




Правило 13




Правило 13




Правило 13




Правило 14




Правило 14




Правило 14




Правило 15




Правило 15




Правило 15




Правило 16




Правило 16




Правило 17




Правило 17







Консольно:




/ip firewall filter
add action=drop chain=input comment="1.5. Protected - WinBox Access" src-address-list="Black List Winbox"
add action=add-src-to-address-list address-list="Black List Winbox" address-list-timeout=none-dynamic chain=input connection-state=new dst-port=8291 in-interface-list=Internet log=yes log-prefix="BLACK WINBOX" protocol=tcp src-address-list="Winbox Stage 3"
add action=add-src-to-address-list address-list="Winbox Stage 3" address-list-timeout=1m chain=input connection-state=new dst-port=8291 in-interface-list=Internet protocol=tcp src-address-list="Winbox Stage 2"
add action=add-src-to-address-list address-list="Winbox Stage 2" address-list-timeout=1m chain=input connection-state=new dst-port=8291 in-interface-list=Internet protocol=tcp src-address-list="Winbox Stage 1"
add action=add-src-to-address-list address-list="Winbox Stage 1" address-list-timeout=1m chain=input connection-state=new dst-port=8291 in-interface-list=Internet protocol=tcp
add action=accept chain=input dst-port=8291 in-interface-list=Internet protocol=tcp




1.6. Защита OpenVPN порта от перебора.
Данная защита делается абсолютно аналогично пункту 1.5.
Единственным отличием будут названия OpenVPN вместо WinBox и входящий TCP порт 1194
Поэтому просто повторяем действия
Консольно:




/ip firewall filter
add action=drop chain=input comment="1.6. Protected - OpenVPN Connections" src-address-list="Black List OpenVPN"
add action=add-src-to-address-list address-list="Black List OpenVPN" address-list-timeout=none-dynamic chain=input connection-state=new dst-port=1194 in-interface-list=Internet log=yes log-prefix="BLACK OVPN" protocol=tcp src-address-list="OpenVPN Stage 3"
add action=add-src-to-address-list address-list="OpenVPN Stage 3" address-list-timeout=1m chain=input connection-state=new dst-port=1194 in-interface-list=Internet protocol=tcp src-address-list="OpenVPN Stage 2"
add action=add-src-to-address-list address-list="OpenVPN Stage 2" address-list-timeout=1m chain=input connection-state=new dst-port=1194 in-interface-list=Internet protocol=tcp src-address-list="OpenVPN Stage 1"
add action=add-src-to-address-list address-list="OpenVPN Stage 1" address-list-timeout=1m chain=input connection-state=new dst-port=1194 in-interface-list=Internet protocol=tcp
add action=accept chain=input dst-port=1194 in-interface-list=Internet protocol=tcp




1.7. Разрешающее правило для прохождения любого трафика по VPN туннелям.




Добавление правил 1.7. через WinBox (Изображения)




Правило 24




Правило 24







Консольно:




/ip firewall filter
add action=accept chain=input comment="1.7. Access OpenVPN Tunnel Data" in-interface-list=VPN




1.8. Разрешающее правило для прохождения только нормальных PING запросов.




Добавление правил 1.8. через WinBox (Изображения)




Правило 25




Правило 25




Правило 25







Консольно:




/ip firewall filter
add action=accept chain=input comment="1.8. Access Normal Ping" in-interface-list=Internet limit=50/5s,2:packet protocol=icmp




1.9. Запрещающее правило
Нормально закрытый Firewall должен обязательно обладать таким правилом. Иначе все бессмысленно.
Выше мы обрабатываем соединения и разрешаем только то, что нам необходимо. Все остальное блокируем.
Это намного правильней, чем Разрешить все и блокировать только нужное Вам. А всего, что нужно заблокировать Вы наверняка не знаете.







Консольно:




/ip firewall filter
add action=drop chain=input comment="1.9. Drop All Other" in-interface-list=Internet




 
 
2. Для ленивых
Если Вы дочитали до конца, значит у Вас пытливый ум и Вы хорошо представляете с чем столкнулись. Вы молодец.
Еще раз хотелось бы обозначить, что данная конфигурация не является идеальной. Я просто старался показать некоторые способы фильтрации трафика. Вам решать, использовать это у себя простым копипастом или подумать и сделать лучше! Но я уверен, что моё решение тоже не плохое =)




Все вышеизложенное в едином виде:







Консольно:




/ip firewall filter
add action=accept chain=forward comment="1.1. Forward and Input Established and Related connections" connection-state=established,related
add action=drop chain=forward connection-state=invalid
add action=drop chain=forward connection-nat-state=!dstnat connection-state=new in-interface-list=Internet
add action=accept chain=input connection-state=established,related
add action=drop chain=input connection-state=invalid
add action=add-src-to-address-list address-list=ddos-blacklist address-list-timeout=1d chain=input comment="1.2. DDoS Protect - Connection Limit" connection-limit=100,32 in-interface-list=Internet protocol=tcp
add action=tarpit chain=input connection-limit=3,32 protocol=tcp src-address-list=ddos-blacklist
add action=jump chain=forward comment="1.3. DDoS Protect - SYN Flood" connection-state=new jump-target=SYN-Protect protocol=tcp tcp-flags=syn
add action=jump chain=input connection-state=new in-interface-list=Internet jump-target=SYN-Protect protocol=tcp tcp-flags=syn
add action=return chain=SYN-Protect connection-state=new limit=200,5:packet protocol=tcp tcp-flags=syn
add action=drop chain=SYN-Protect connection-state=new protocol=tcp tcp-flags=syn
add action=drop chain=input comment="1.4. Protected - Ports Scanners" src-address-list="Port Scanners"
add action=add-src-to-address-list address-list="Port Scanners" address-list-timeout=none-dynamic chain=input in-interface-list=Internet protocol=tcp psd=21,3s,3,1
add action=drop chain=input comment="1.5. Protected - WinBox Access" src-address-list="Black List Winbox"
add action=add-src-to-address-list address-list="Black List Winbox" address-list-timeout=none-dynamic chain=input connection-state=new dst-port=8291 in-interface-list=Internet log=yes log-prefix="BLACK WINBOX" protocol=tcp src-address-list="Winbox Stage 3"
add action=add-src-to-address-list address-list="Winbox Stage 3" address-list-timeout=1m chain=input connection-state=new dst-port=8291 in-interface-list=Internet protocol=tcp src-address-list="Winbox Stage 2"
add action=add-src-to-address-list address-list="Winbox Stage 2" address-list-timeout=1m chain=input connection-state=new dst-port=8291 in-interface-list=Internet protocol=tcp src-address-list="Winbox Stage 1"
add action=add-src-to-address-list address-list="Winbox Stage 1" address-list-timeout=1m chain=input connection-state=new dst-port=8291 in-interface-list=Internet protocol=tcp
add action=accept chain=input dst-port=8291 in-interface-list=Internet protocol=tcp
add action=drop chain=input comment="1.6. Protected - OpenVPN Connections" src-address-list="Black List OpenVPN"
add action=add-src-to-address-list address-list="Black List OpenVPN" address-list-timeout=none-dynamic chain=input connection-state=new dst-port=1194 in-interface-list=Internet log=yes log-prefix="BLACK OVPN" protocol=tcp src-address-list="OpenVPN Stage 3"
add action=add-src-to-address-list address-list="OpenVPN Stage 3" address-list-timeout=1m chain=input connection-state=new dst-port=1194 in-interface-list=Internet protocol=tcp src-address-list="OpenVPN Stage 2"
add action=add-src-to-address-list address-list="OpenVPN Stage 2" address-list-timeout=1m chain=input connection-state=new dst-port=1194 in-interface-list=Internet protocol=tcp src-address-list="OpenVPN Stage 1"
add action=add-src-to-address-list address-list="OpenVPN Stage 1" address-list-timeout=1m chain=input connection-state=new dst-port=1194 in-interface-list=Internet protocol=tcp
add action=accept chain=input dst-port=1194 in-interface-list=Internet protocol=tcp
add action=accept chain=input comment="1.7. Access OpenVPN Tunnel Data" in-interface-list=VPN
add action=accept chain=input comment="1.8. Access Normal Ping" in-interface-list=Internet limit=50/5s,2:packet protocol=icmp
add action=drop chain=input comment="1.9. Drop All Other" in-interface-list=Internet




Бонус:
Работая с Firewall на родительском hEx роутере, обнаружил большой объем заблокированного трафика.
Решил посмотреть, в чем дело, включил логирование в правилах и обнаружил интересную ситуацию.
Оказалось, что местный провайдер не закрыл широковещательный трафик службы имен NetBIOS Name Service – UDP порт 137 (Остальные порты и информация: 
https://ru.wikipedia.org/wiki/NetBIOS)
И какой-то “Сосед” воткнул интернет кабель в простой ПК с Windows, тем самым создав тот самый паразитный трафик. Такие запросы с одного ПК могут занимать около 30 кбит/сек на вашем WAN порту.
Думаю можно себе представить если таких ПК в сети будет 100-150. Написали провайдеру, а пока он латает свои дыры, добавил правило блокировки. Только не в Firewall Filter, а в Firewall Raw.
Данная таблица полезна для уменьшения нагрузки на CPU и позволяет блокировать трафик на этапе Prerouting-а
Вот это правило:




/ip firewall raw
add action=drop chain=prerouting dst-port=137,138,139 in-interface-list=Internet protocol=udp




Бонус 2:




Правила для роутера за серым IP провайдера




Для роутера за серым IP провайдера я оставил только такие правила. Даже не смотря на то, что IP серый, доверять сети провайдера ни в коем случае не стоит.




/ip firewall filter
add action=fasttrack-connection chain=forward connection-state=established,related
add action=accept chain=forward comment="ALLOW - Established, Related and connections" connection-state=established,related
add action=accept chain=input connection-state=established,related
add action=drop chain=forward comment="DROP - Invalid connections" connection-state=invalid
add action=drop chain=input connection-state=invalid
add action=jump chain=input comment="DDoS - SYN flood protection" connection-state=new in-interface-list=Internet jump-target=SYN-Protect protocol=tcp tcp-flags=syn
add action=return chain=SYN-Protect limit=200,5:packet tcp-flags=""
add action=add-src-to-address-list address-list=ddos-blacklist address-list-timeout=1w3d chain=SYN-Protect log-prefix="DDoS: SYN-Protect" tcp-flags=""
add action=jump chain=input comment="DDoS - Main protection" connection-state=new in-interface-list=Internet jump-target=DDoS-Protect
add action=return chain=DDoS-Protect dst-limit=15,15,src-address/10s
add action=add-src-to-address-list address-list=ddos-blacklist address-list-timeout=1w3d chain=DDoS-Protect log-prefix="DDoS: MAIN-Protect"
add action=drop chain=input comment="DROP - Block all other input/forward connections on the WAN" in-interface-list=Internet
add action=drop chain=forward in-interface-list=Internet
/ip firewall raw
add action=drop chain=prerouting comment="DDoS - Drop blacklist IP" in-interface-list=Internet src-address-list=ddos-blacklist







Источник: https://gregory-gost.ru/sozdanie-domashney-seti-na-baze-ustroystv-mikrotik-chast-6-firewall-zashhita-dostupa/



2021-03-10T22:47:49
Network