nft: современный фаервол в Linux, который заменил iptables
nft — это утилита для управления nftables, новой подсистемой фаервола в ядре Linux. Она пришла на смену старым и запутанным инструментам: iptables, ip6tables, ebtables, arptables. Теперь всё делается в одной системе, единым языком, более эффективно и понятно.
Зачем нужен nft?
- Чтобы блокировать или разрешать трафик (фаервол).
- Для перенаправления портов (DNAT / SNAT).
- Чтобы настроить NAT, логирование, rate limiting и т.д.
- Управлять IPv4, IPv6, Ethernet, ARP в одной таблице.
Установка nft
На многих дистрибутивах nft уже предустановлен. Если нет:
Как работает nftables
В отличие от iptables, где каждая подсистема жила в своём мире (разные команды для IPv4, IPv6, ARP...), nftables работает с едиными таблицами и цепочками, и одним конфигом.
Простой пример через команды:
Конфиг-файл "/etc/nftables.conf". В реальности, правила лучше описывать в конфиге, чтобы сохранять и применять при старте:
Применить файл:
И включить автозапуск:
Как проверить, что правила работают
Посмотреть текущие правила:
Или только одну таблицу:
Вывод будет в читабельной иерархии, например:
Чтобы перезаписать все старые правила, используйте:
Что делает nft круче iptables
- Одна система вместо четырёх: больше не нужно думать iptables vs ip6tables.
- Наборы (sets): можно сразу заблокировать десятки IP без повторений.
- Списки и словари: условная логика в правилах.
- Rate limiting: ограничение по частоте (например, не более 10 пакетов/сек).
- Логирование прямо в правило: встроенная поддержка log.
- Конфиги, читаемые человеком, пригодные для версионирования.
- Высокая производительность: меньше затрат ядра, быстрее работает.
Совет
Если вы раньше использовали iptables, не стоит мешать его правила с nftables. Лучше отключить iptables и перейти на nft полностью:
LinuxCamp | #utils
nft — это утилита для управления nftables, новой подсистемой фаервола в ядре Linux. Она пришла на смену старым и запутанным инструментам: iptables, ip6tables, ebtables, arptables. Теперь всё делается в одной системе, единым языком, более эффективно и понятно.
Зачем нужен nft?
- Чтобы блокировать или разрешать трафик (фаервол).
- Для перенаправления портов (DNAT / SNAT).
- Чтобы настроить NAT, логирование, rate limiting и т.д.
- Управлять IPv4, IPv6, Ethernet, ARP в одной таблице.
Установка nft
На многих дистрибутивах nft уже предустановлен. Если нет:
# Debian / Ubuntu
sudo apt install nftables
# Red Hat / CentOS / Fedora
sudo dnf install nftables
# Arch Linux
sudo pacman -S nftables
Как работает nftables
В отличие от iptables, где каждая подсистема жила в своём мире (разные команды для IPv4, IPv6, ARP...), nftables работает с едиными таблицами и цепочками, и одним конфигом.
Простой пример через команды:
# Создаём таблицу и цепочку
sudo nft add table inet filter
sudo nft add chain inet filter input { type filter hook input priority 0 \; }
# Блокируем IP-адрес
sudo nft add rule inet filter input ip saddr 203.0.113.42 drop
Конфиг-файл "/etc/nftables.conf". В реальности, правила лучше описывать в конфиге, чтобы сохранять и применять при старте:
#!/usr/sbin/nft -f
table inet filter {
chain input {
type filter hook input priority 0;
policy accept;
# Блокируем IP
ip saddr 203.0.113.42 drop
# Разрешаем SSH
tcp dport 22 accept
}
}
Применить файл:
sudo nft -f /etc/nftables.conf
И включить автозапуск:
sudo systemctl enable nftables
sudo systemctl start nftables
Как проверить, что правила работают
Посмотреть текущие правила:
sudo nft list ruleset
Или только одну таблицу:
sudo nft list table inet filter
Вывод будет в читабельной иерархии, например:
table inet filter {
chain input {
type filter hook input priority 0; policy accept;
ip saddr 203.0.113.42 drop
tcp dport 22 accept
}
}
Чтобы перезаписать все старые правила, используйте:
sudo nft flush ruleset
Что делает nft круче iptables
- Одна система вместо четырёх: больше не нужно думать iptables vs ip6tables.
- Наборы (sets): можно сразу заблокировать десятки IP без повторений.
- Списки и словари: условная логика в правилах.
- Rate limiting: ограничение по частоте (например, не более 10 пакетов/сек).
- Логирование прямо в правило: встроенная поддержка log.
- Конфиги, читаемые человеком, пригодные для версионирования.
- Высокая производительность: меньше затрат ядра, быстрее работает.
Совет
Если вы раньше использовали iptables, не стоит мешать его правила с nftables. Лучше отключить iptables и перейти на nft полностью:
sudo systemctl disable iptables
sudo systemctl disable ip6tables
LinuxCamp | #utils
👍23🔥8❤5🙈3🤣1
Что такое docker network и зачем он нужен?
Docker-сеть (docker network) - это способ связать контейнеры между собой и с внешним миром. Благодаря ей приложения в разных контейнерах могут видеть друг друга, обмениваться данными и быть изолированными от посторонних.
Типы сетей:
1) bridge — дефолтная сеть для контейнеров. Работает как приватная подсеть на хосте. Контейнеры внутри могут общаться друг с другом по имени, но не видят контейнеры из других сетей.
2) host — контейнер использует сетевой стек хоста напрямую. Без изоляции, но с меньшими накладными расходами.
3) none — без сети. Полная изоляция.
4) overlay — для связи контейнеров между хостами (в Swarm-кластере).
5) macvlan — контейнеру назначается собственный MAC-адрес. Выглядит как отдельное устройство в сети.
Зачем нужна Docker-сеть:
Можно обращаться между сервисами внутри сети по имени контейнера, без знания IP-адреса. Это работает благодаря встроенному DNS-серверу Docker.
Например, если у тебя есть два сервиса - frontend и api, то внутри одного контейнера ты можешь сделать запрос:
Docker сам разрешит имя api в IP-адрес другого контейнера в той же сети. Это особенно удобно при использовании docker-compose, где имена сервисов автоматически становятся доступными как DNS-имена.
Создание сети:
Создать сеть можно например командой:
Также можно указать сеть в одном docker-compose.yml:
В этом случае будет создана сеть и туда войдут контейнеры с апи и бд.
Подключение к уже существующей сети:
"external: true" говорит docker-compose, что сеть уже создана заранее (вручную или другим compose-файлом) и её не нужно пересоздавать.
Добавление и удаление вручную:
Контейнер продолжит работу, просто будет подключён или отключён от указанной сети.
Docker-сети позволяют организовать понятную, безопасную и изолированную инфраструктуру между сервисами. Даже при локальной разработке это помогает избавиться от хаоса с IP-адресами и ручными настройками.
LinuxCamp | #docker #devops #bymaga
Docker-сеть (docker network) - это способ связать контейнеры между собой и с внешним миром. Благодаря ей приложения в разных контейнерах могут видеть друг друга, обмениваться данными и быть изолированными от посторонних.
Типы сетей:
1) bridge — дефолтная сеть для контейнеров. Работает как приватная подсеть на хосте. Контейнеры внутри могут общаться друг с другом по имени, но не видят контейнеры из других сетей.
2) host — контейнер использует сетевой стек хоста напрямую. Без изоляции, но с меньшими накладными расходами.
3) none — без сети. Полная изоляция.
4) overlay — для связи контейнеров между хостами (в Swarm-кластере).
5) macvlan — контейнеру назначается собственный MAC-адрес. Выглядит как отдельное устройство в сети.
Зачем нужна Docker-сеть:
Можно обращаться между сервисами внутри сети по имени контейнера, без знания IP-адреса. Это работает благодаря встроенному DNS-серверу Docker.
Например, если у тебя есть два сервиса - frontend и api, то внутри одного контейнера ты можешь сделать запрос:
http://api:5000
Docker сам разрешит имя api в IP-адрес другого контейнера в той же сети. Это особенно удобно при использовании docker-compose, где имена сервисов автоматически становятся доступными как DNS-имена.
Создание сети:
Создать сеть можно например командой:
docker network create mynetwork
Также можно указать сеть в одном docker-compose.yml:
services:
api:
image: my-api
networks:
- mynetwork
db:
image: postgres:17
networks:
- mynetwork
networks:
mynetwork:
В этом случае будет создана сеть и туда войдут контейнеры с апи и бд.
Подключение к уже существующей сети:
services:
frontend:
image: myfront
networks:
- mynetwork
networks:
mynetwork:
external: true
"external: true" говорит docker-compose, что сеть уже создана заранее (вручную или другим compose-файлом) и её не нужно пересоздавать.
Добавление и удаление вручную:
docker network connect mynetwork frontend
docker network disconnect mynetwork frontend
Контейнер продолжит работу, просто будет подключён или отключён от указанной сети.
Docker-сети позволяют организовать понятную, безопасную и изолированную инфраструктуру между сервисами. Даже при локальной разработке это помогает избавиться от хаоса с IP-адресами и ручными настройками.
LinuxCamp | #docker #devops #bymaga
🔥20👍11❤4❤🔥4
Нагрузочное тестирование с помощью locust
Хочешь узнать, сколько реально выдержит твой сервис под наплывом пользователей? И вот тут выходит на сцену Locust — очень простой, но мощный инструмент на Python. Locust — это нагрузочный генератор, который:
- пишет сценарии на Python
- запускает веб-интерфейс для управления нагрузкой
- показывает реальное поведение под давлением
В общем, работает как армия виртуальных пользователей, которые одновременно штурмуют твой API.
Установка:
Пример теста:
Запуск:
Если ты назовёшь файл просто "locustfile.py" и запустишь команду в этой же директории, то можно вообще не указывать "-f", и Locust подхватит его автоматически.
Затем открой браузер: http://localhost:8089
Укажи количество юзеров и скорость (spawn rate) и начинай тест.
Что можно узнать:
- RPS — сколько запросов в секунду проходит
- Latency — время ответа
- Failures — ошибки, 5xx и timeouts
- Percentiles — насколько стабилен сервис под давлением
Зачем использовать Locust?
1) проверить, на сколько пользователей хватит твоей архитектуры;
2) увидеть, какой метод тормозит при росте нагрузки;
3) смоделировать реальные сценарии (авторизация, покупка, публикация);
4) подготовиться к маркетинговой акции, запуску продукта, или… DDOS атаке;
LinuxCamp | #bymaga
Хочешь узнать, сколько реально выдержит твой сервис под наплывом пользователей? И вот тут выходит на сцену Locust — очень простой, но мощный инструмент на Python. Locust — это нагрузочный генератор, который:
- пишет сценарии на Python
- запускает веб-интерфейс для управления нагрузкой
- показывает реальное поведение под давлением
В общем, работает как армия виртуальных пользователей, которые одновременно штурмуют твой API.
Установка:
pip install locust
Пример теста:
from locust import HttpUser, task, between
class WebsiteUser(HttpUser):
wait_time = between(1, 3)
# Указан хост твоего апи
host = "http://localhost:8000"
@task
def get_articles(self):
self.client.get("/api/articles")
@task
def post_form(self):
self.client.post("/api/submit", json={"name": "Locust"})
Запуск:
locust -f locustfile.py
Если ты назовёшь файл просто "locustfile.py" и запустишь команду в этой же директории, то можно вообще не указывать "-f", и Locust подхватит его автоматически.
Затем открой браузер: http://localhost:8089
Укажи количество юзеров и скорость (spawn rate) и начинай тест.
Что можно узнать:
- RPS — сколько запросов в секунду проходит
- Latency — время ответа
- Failures — ошибки, 5xx и timeouts
- Percentiles — насколько стабилен сервис под давлением
Зачем использовать Locust?
1) проверить, на сколько пользователей хватит твоей архитектуры;
2) увидеть, какой метод тормозит при росте нагрузки;
3) смоделировать реальные сценарии (авторизация, покупка, публикация);
4) подготовиться к маркетинговой акции, запуску продукта, или… DDOS атаке;
LinuxCamp | #bymaga
👍26❤14🔥10✍3
Масштабируем сервисы через docker compose --scale
Хочешь, чтобы твой API обрабатывал больше запросов? Или нужно поднять несколько воркеров параллельно? Всё это можно сделать одной командой:
Как это работает
Команда "--scale" запускает несколько контейнеров одного сервиса по конфигурации "docker-compose.yml":
Создаст 3 независимых контейнера api, которые используют один и тот же образ, переменные, порты и т.д.
Варианты использования
Пример docker-compose.yml:
Важно: если nginx поднят в докере и в одной сети с апи, то порт не должен быть жёстко задан как "8000:8000", иначе только один контейнер сможет его занять. Используй:
А в nginx конфиге:
Обычно внутри Docker все контейнеры сервиса находятся под одним именем (например, api), и Docker DNS сам решает, кому из них отдать запрос (round-robin). Если же nginx вне докер сети, то в docker-compose.yml нужно прописать все порты:
И затем настроить nginx конфиг так:
Теперь Nginx равномерно распределяет входящие запросы между 3 контейнерами, которые слушают на разных портах.
Ограничения и подводные камни
1) Порты: нужно либо жестко прописывать порты для каждого инстанса, либо не прописывать порты жестко вообще при масштабировании;
2) Состояние контейнеров не сохраняется — это одинаковые инстансы, а не кластеры;
3) Не путай с кластеризацией — это просто локальное масштабирование;
Про полноценную кластеризацию через Docker Swarm будет в одном из следующих постов :)
LinuxCamp | #devops #docker
Хочешь, чтобы твой API обрабатывал больше запросов? Или нужно поднять несколько воркеров параллельно? Всё это можно сделать одной командой:
docker compose up --scale <сервис>=<кол-во>
Как это работает
Команда "--scale" запускает несколько контейнеров одного сервиса по конфигурации "docker-compose.yml":
docker compose up --scale api=3
Создаст 3 независимых контейнера api, которые используют один и тот же образ, переменные, порты и т.д.
Варианты использования
Пример docker-compose.yml:
version: "3.8"
services:
api:
image: myapp:latest
build: .
ports:
- "8000"
Важно: если nginx поднят в докере и в одной сети с апи, то порт не должен быть жёстко задан как "8000:8000", иначе только один контейнер сможет его занять. Используй:
ports:
- "8000"
А в nginx конфиге:
upstream backend {
server api:8000;
server api:8001;
server api:8002;
}
Обычно внутри Docker все контейнеры сервиса находятся под одним именем (например, api), и Docker DNS сам решает, кому из них отдать запрос (round-robin). Если же nginx вне докер сети, то в docker-compose.yml нужно прописать все порты:
ports:
- "8001:8000"
- "8002:8000"
- "8003:8000"
И затем настроить nginx конфиг так:
upstream backend {
server 127.0.0.1:8001;
server 127.0.0.1:8002;
server 127.0.0.1:8003;
}
server {
listen 80;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
Теперь Nginx равномерно распределяет входящие запросы между 3 контейнерами, которые слушают на разных портах.
Ограничения и подводные камни
1) Порты: нужно либо жестко прописывать порты для каждого инстанса, либо не прописывать порты жестко вообще при масштабировании;
2) Состояние контейнеров не сохраняется — это одинаковые инстансы, а не кластеры;
3) Не путай с кластеризацией — это просто локальное масштабирование;
Про полноценную кластеризацию через Docker Swarm будет в одном из следующих постов :)
LinuxCamp | #devops #docker
👍23🔥11❤6🦄3
Что такое Docker Swarm и как с ним работать
Когда ты используешь только "docker compose" и поднимаешь по 1 сервису в контейнере в какой-то момент тебе может этого стать недостаточно. Может понадобиться масштабировать сервис чтобы обрабатывать больше запросов, включить отказоустойчивость, развернуть сервис на нескольких серверах.
Тогда можно использовать очень простой но достаточно мощный Docker Swarm - встроенный в Docker механизм кластеризации и управления сервисами. Ничего доустанавливать не нужно!
Что такое Docker Swarm?
Это режим работы Docker, в котором:
1) несколько машин объединяются в кластер (Swarm)
2) сервисы запускаются как реплики на этих машинах
3) нагрузка распределяется автоматически
4) контейнеры перезапускаются при сбоях
Быстрый запуск:
Инициализируй кластер на главной машине
После этого она становится менеджером. Если ты работаешь на одной машине — этого уже достаточно. Создай docker-compose.yml:
Swarm понимает почти тот же формат compose, но использует ключ "deploy:" для настройки. В обычном docker compose блок deploy игнорируется. Запусти сервис как "стек" (stack):
Теперь Docker Swarm создаст сервис с именем mystack_web и запустит 3 реплики nginx.
А если нужно несколько машин?
На других серверах запусти:
Токен можно взять с главной машины через:
Теперь у тебя кластер с множеством нод, и Swarm будет распределять нагрузку автоматически.
Вывод:
Docker Swarm — это простой и мощный способ масштабирования контейнеров и управления кластерами. Он отлично подходит, когда нужно что-то чуть более надежное, чем просто docker-compose, но не хочется разбираться с Kubernetes.
LinuxCamp | #devops #docker #bymaga
Когда ты используешь только "docker compose" и поднимаешь по 1 сервису в контейнере в какой-то момент тебе может этого стать недостаточно. Может понадобиться масштабировать сервис чтобы обрабатывать больше запросов, включить отказоустойчивость, развернуть сервис на нескольких серверах.
Тогда можно использовать очень простой но достаточно мощный Docker Swarm - встроенный в Docker механизм кластеризации и управления сервисами. Ничего доустанавливать не нужно!
Что такое Docker Swarm?
Это режим работы Docker, в котором:
1) несколько машин объединяются в кластер (Swarm)
2) сервисы запускаются как реплики на этих машинах
3) нагрузка распределяется автоматически
4) контейнеры перезапускаются при сбоях
Быстрый запуск:
Инициализируй кластер на главной машине
docker swarm init
После этого она становится менеджером. Если ты работаешь на одной машине — этого уже достаточно. Создай docker-compose.yml:
services:
api:
image: myapi
ports:
- "8000:8000"
deploy:
# запустит 3 экземпляра nginx
replicas: 3
restart_policy:
# перезапускает при сбоях
condition: on-failure
Swarm понимает почти тот же формат compose, но использует ключ "deploy:" для настройки. В обычном docker compose блок deploy игнорируется. Запусти сервис как "стек" (stack):
docker stack deploy -c docker-compose.yml mystack
Теперь Docker Swarm создаст сервис с именем mystack_web и запустит 3 реплики nginx.
А если нужно несколько машин?
На других серверах запусти:
docker swarm join --token <токен> <IP-менеджера>:2377
Токен можно взять с главной машины через:
docker swarm join-token worker
Теперь у тебя кластер с множеством нод, и Swarm будет распределять нагрузку автоматически.
Вывод:
Docker Swarm — это простой и мощный способ масштабирования контейнеров и управления кластерами. Он отлично подходит, когда нужно что-то чуть более надежное, чем просто docker-compose, но не хочется разбираться с Kubernetes.
LinuxCamp | #devops #docker #bymaga
👍24🔥8❤6❤🔥1
Портфорвардинг по ssh
Многие используют SSH исключительно для подключения к серверу, но не все знают о портфорвардинге — функции, которая позволяет значительно расширить способы взаимодействия с удалённой машиной. Ниже — несколько полезных сценариев:
Пример 1: Доступ к внутренней БД через туннель
Если на сервере работает PostgreSQL, настроенный на прослушивание только localhost, то подключиться к нему снаружи напрямую не получится. В этом случае выручит локальный туннель:
Теперь на твоей локальной машине порт 5432 будет связан с портом 5432 на удалённой, и ты сможешь подключаться к базе данных, как будто она работает у тебя локально.
Пример 2: Реверсивный SSH — проброс внутрь NAT’а
Если у тебя домашний сервер, который находится за NAT и не имеет внешнего IP, можно настроить обратный (reverse) туннель через внешний VPS:
После этого с VPS-сервера ты сможешь подключиться обратно к домашнему серверу:
Пример 3: Dynamic SOCKS proxy
Можно превратить SSH-сессию в полноценный SOCKS5-прокси-сервер, через который будут проходить запросы браузера, curl или других инструментов:
Указав в настройках прокси localhost:1080, ты получишь простой VPN без дополнительного ПО.
LinuxCamp | #utils
Многие используют SSH исключительно для подключения к серверу, но не все знают о портфорвардинге — функции, которая позволяет значительно расширить способы взаимодействия с удалённой машиной. Ниже — несколько полезных сценариев:
Пример 1: Доступ к внутренней БД через туннель
Если на сервере работает PostgreSQL, настроенный на прослушивание только localhost, то подключиться к нему снаружи напрямую не получится. В этом случае выручит локальный туннель:
ssh -L 5432:localhost:5432 user@remote_host
Теперь на твоей локальной машине порт 5432 будет связан с портом 5432 на удалённой, и ты сможешь подключаться к базе данных, как будто она работает у тебя локально.
Пример 2: Реверсивный SSH — проброс внутрь NAT’а
Если у тебя домашний сервер, который находится за NAT и не имеет внешнего IP, можно настроить обратный (reverse) туннель через внешний VPS:
ssh -R 2222:localhost:22 user@your-vps.com
После этого с VPS-сервера ты сможешь подключиться обратно к домашнему серверу:
ssh -p 2222 user@localhost
Пример 3: Dynamic SOCKS proxy
Можно превратить SSH-сессию в полноценный SOCKS5-прокси-сервер, через который будут проходить запросы браузера, curl или других инструментов:
ssh -D 1080 user@remote_host
Указав в настройках прокси localhost:1080, ты получишь простой VPN без дополнительного ПО.
LinuxCamp | #utils
🔥41👍16❤🔥4❤1
tmux: держим терминал «живым», даже если связь пропала
Иногда запускаешь на сервере сборку или бэкап, а Wi-Fi взял и оборвался. Без tmux это заканчивается внезапно — процесс тоже падает. С tmux всё спокойнее: сессия остаётся работать на сервере сама по себе.
Установка:
Запуск и «вечная» сессия:
Работай как обычно, можно запускать тяжелые команды, которые могут очень долго выполняться. Чтобы «сложить» терминал и вернуться к нему позже нажми "Ctrl-b" затем "d". Сессия остаётся жить на сервере в фоне. Можно смело закрыть вкладку SSH.
Повторное подключение:
Подключись снова хоть через неделю:
Попадаешь в ту же сессию и видишь, чем закончилась сборка.
Совместная работа:
Оба пользователя SSH-атся на сервер, один запускает:
Второй подключается тем же:
Теперь видно один и тот же терминал.
Вывод:
tmux - страховой полис от разрывов SSH и удобный рабочий стол внутри терминала: долгие сборки не падают, окна и сплиты сохраняются, а сессию можно делить с коллегами.
LinuxCamp | #utils
Иногда запускаешь на сервере сборку или бэкап, а Wi-Fi взял и оборвался. Без tmux это заканчивается внезапно — процесс тоже падает. С tmux всё спокойнее: сессия остаётся работать на сервере сама по себе.
Установка:
sudo apt install tmux
Запуск и «вечная» сессия:
tmux new -s work
Работай как обычно, можно запускать тяжелые команды, которые могут очень долго выполняться. Чтобы «сложить» терминал и вернуться к нему позже нажми "Ctrl-b" затем "d". Сессия остаётся жить на сервере в фоне. Можно смело закрыть вкладку SSH.
Повторное подключение:
Подключись снова хоть через неделю:
tmux attach -t work
Попадаешь в ту же сессию и видишь, чем закончилась сборка.
Совместная работа:
Оба пользователя SSH-атся на сервер, один запускает:
tmux new -s pair
Второй подключается тем же:
tmux attach -t pair
Теперь видно один и тот же терминал.
Вывод:
tmux - страховой полис от разрывов SSH и удобный рабочий стол внутри терминала: долгие сборки не падают, окна и сплиты сохраняются, а сессию можно делить с коллегами.
LinuxCamp | #utils
1👍48🔥15❤13🙏1
fzf - быстрый «поиск-как-пишешь» прямо в терминале
fzf — небольшая утилита, которая показывает список файлов, папок, команд и интерактивно фильтрует его, пока ты печатаешь.
Установка:
После установки — перезапусти терминал, чтобы подключились биндинги.
Быстрый поиск файлов
Начинаешь печатать — выдаётся автообновляемый список. Нажимаешь Enter → выбранный путь вставляется в командную строку (например, чтобы открыть vim $(fzf)).
История команд без прокрутки:
fzf перехватывает стандартный Ctrl-R и показывает историю, которую можно фильтровать в реальном времени. Нашёл строку → Enter → команда подставилась, остаётся запустить.
Минималистичная кастомизация:
Что даёт:
--height 40% — окно fzf занимает 40% экрана
--border — рамка вокруг списка
--preview — предпросмотр файла справа, с подсветкой синтаксиса через bat
fzf — удобная штука, которая экономит время. Помогает быстро найти файл или команду прямо в терминале. Определенно стоит попробовать, возможно не захочется бросать :)
LinuxCamp | #utils
fzf — небольшая утилита, которая показывает список файлов, папок, команд и интерактивно фильтрует его, пока ты печатаешь.
Установка:
apt install fzf
После установки — перезапусти терминал, чтобы подключились биндинги.
Быстрый поиск файлов
# ищем любой файл/папку рекурсивно от текущей точки
fzf
Начинаешь печатать — выдаётся автообновляемый список. Нажимаешь Enter → выбранный путь вставляется в командную строку (например, чтобы открыть vim $(fzf)).
История команд без прокрутки:
fzf перехватывает стандартный Ctrl-R и показывает историю, которую можно фильтровать в реальном времени. Нашёл строку → Enter → команда подставилась, остаётся запустить.
Минималистичная кастомизация:
export FZF_DEFAULT_OPTS="--height 40% --border --preview 'batcat --style=numbers --color=always {} | head -100'"
Что даёт:
--height 40% — окно fzf занимает 40% экрана
--border — рамка вокруг списка
--preview — предпросмотр файла справа, с подсветкой синтаксиса через bat
fzf — удобная штука, которая экономит время. Помогает быстро найти файл или команду прямо в терминале. Определенно стоит попробовать, возможно не захочется бросать :)
LinuxCamp | #utils
👍34🔥13👌6❤3🤔1
bat — «цветной cat» с номерами строк и подсветкой кода
Хочется быстро посмотреть файл, но чтобы были цвета, номера строк и даже diff-режим? bat делает ровно это, оставаясь таким же простым, как cat. Установка:
В Debian/Ubuntu бинарник устанавливается как batcat. Чтобы использовать просто bat, можно добавить в "~/.bashrc" или "~/.zshrc":
Затем:
Обычный просмотр с цветами:
Синтаксис подсвечен, строки пронумерованы, длинные файлы листаются как less.
Сравнить два файла:
Видишь изменения как в git diff, только без репозитория. Красивый вывод в Git:
Теперь git show и git diff автоматически открываются через bat с подсветкой. Если подсветка не нужна, добавь -p — plain.
Тонкая настройка (по желанию):
Создай конфиг и подправь тему/стиль:
Список доступных тем:
Вывод:
bat устанавливается за минуту, заменяет cat, добавляет цвета, номера строк и удобный просмотр diff. Просто, красиво и удобно.
LinuxCamp | #utils
Хочется быстро посмотреть файл, но чтобы были цвета, номера строк и даже diff-режим? bat делает ровно это, оставаясь таким же простым, как cat. Установка:
sudo apt install bat
В Debian/Ubuntu бинарник устанавливается как batcat. Чтобы использовать просто bat, можно добавить в "~/.bashrc" или "~/.zshrc":
alias bat="batcat"
Затем:
source ~/.bashrc
Обычный просмотр с цветами:
bat nginx.conf
Синтаксис подсвечен, строки пронумерованы, длинные файлы листаются как less.
Сравнить два файла:
bat --diff old.cfg new.cfg
Видишь изменения как в git diff, только без репозитория. Красивый вывод в Git:
git config --global core.pager "bat --paging=always --style=numbers"
Теперь git show и git diff автоматически открываются через bat с подсветкой. Если подсветка не нужна, добавь -p — plain.
Тонкая настройка (по желанию):
Создай конфиг и подправь тему/стиль:
bat --generate-config-file # путь покажет в выводе
Список доступных тем:
bat --list-themes | less
Вывод:
bat устанавливается за минуту, заменяет cat, добавляет цвета, номера строк и удобный просмотр diff. Просто, красиво и удобно.
LinuxCamp | #utils
👍41🔥17❤9❤🔥2
tldr — короткие примеры вместо километров man-страниц
man - хорошо, но порой там много экранов опций. tldr показывает самые частые примеры одной командой. Открыл - увидел, как пользоваться. Особенно удобно тем, кто только знакомится с терминалом.
Ставим за минуту:
После установки один раз обнови кэш страниц:
Примеры использования:
Хочешь быстро вспомнить синтаксис tar?
Пример вывода команды - короткие, готовые к использованию шпоры с пояснениями. Создать архив, распаковать, посмотреть содержимое, использовать с gzip - всё по делу, без лишнего. Все работает офлайн - страницы лежат в кэше:
tldr - это именно шпаргалка: поставил, ввёл "tldr <команда>" и сразу видишь рабочие примеры без лишних километров текста. Утилита покрывает самые популярные команды, но для редких или новых CLI, каких-то редких кейсов естественно лучше все-таки использовать man или --help.
LinuxCamp | #utils #microhelp
man - хорошо, но порой там много экранов опций. tldr показывает самые частые примеры одной командой. Открыл - увидел, как пользоваться. Особенно удобно тем, кто только знакомится с терминалом.
Ставим за минуту:
sudo apt install tldr
После установки один раз обнови кэш страниц:
tldr -u
Примеры использования:
Хочешь быстро вспомнить синтаксис tar?
tldr tar
Пример вывода команды - короткие, готовые к использованию шпоры с пояснениями. Создать архив, распаковать, посмотреть содержимое, использовать с gzip - всё по делу, без лишнего. Все работает офлайн - страницы лежат в кэше:
- [c]reate an archive and write it to a [f]ile:
tar cf path/to/target.tar path/to/file1 path/to/file2
- E[x]tract a (compressed) archive [f]ile into the current directory:
tar xvf path/to/source.tar.gz
- Lis[t] the contents of a tar [f]ile:
tar tvf path/to/source.tar
tldr - это именно шпаргалка: поставил, ввёл "tldr <команда>" и сразу видишь рабочие примеры без лишних километров текста. Утилита покрывает самые популярные команды, но для редких или новых CLI, каких-то редких кейсов естественно лучше все-таки использовать man или --help.
LinuxCamp | #utils #microhelp
🔥37👍20❤14🥴1
rg (ripgrep) - самый быстрый поиск в файлах
grep работает, но медленно и выводит всё подряд. rg ищет во много раз быстрее, понимает .gitignore, красиво подсвечивает совпадения и по-умолчанию пропускает бинарники.
Установка по классике:
Молниеносный поиск слова во всём проекте:
Ищет во всех подпапках, игнорируя каталоги из .gitignore. Совпадения подсвечены, путь + номер строки показаны.
Вывод только имени файла по регулярке:
Флаг -l — показать только файлы, где найдено. Полезно, если нужно перебрать список в скрипте.
Поиск и сразу количество совпадений:
-c выводит «файл: число», когда важно быстро понять, где больше всего вхождений. Если надо искать без учёта регистра — добавь "-i"; нужно точное слово — "-w".
Можете сравнить скорости поиска:
Попробуйте поискать часто используемый паттерн и если до этого не пользовались rg, то очень приятно удивитесь) Чтобы искать без учета .gitignore:
Вывод:
rg — это «grep на турбинах»: ищет быстрее, выводит понятнее, уважает .gitignore. Поставь и попробуй rg error в своём большом репозитории — разница чувствуется сразу.
LinuxCamp | #utils
grep работает, но медленно и выводит всё подряд. rg ищет во много раз быстрее, понимает .gitignore, красиво подсвечивает совпадения и по-умолчанию пропускает бинарники.
Установка по классике:
sudo apt install ripgrep
Молниеносный поиск слова во всём проекте:
rg TODO
Ищет во всех подпапках, игнорируя каталоги из .gitignore. Совпадения подсвечены, путь + номер строки показаны.
Вывод только имени файла по регулярке:
rg -l '^import .*react' src
Флаг -l — показать только файлы, где найдено. Полезно, если нужно перебрать список в скрипте.
Поиск и сразу количество совпадений:
rg -c "SELECT .* FROM" sql/
-c выводит «файл: число», когда важно быстро понять, где больше всего вхождений. Если надо искать без учёта регистра — добавь "-i"; нужно точное слово — "-w".
Можете сравнить скорости поиска:
time grep -R "somePattern" .
time rg "somePattern"
Попробуйте поискать часто используемый паттерн и если до этого не пользовались rg, то очень приятно удивитесь) Чтобы искать без учета .gitignore:
rg --no-ignore secret
Вывод:
rg — это «grep на турбинах»: ищет быстрее, выводит понятнее, уважает .gitignore. Поставь и попробуй rg error в своём большом репозитории — разница чувствуется сразу.
LinuxCamp | #utils
👍34🔥18❤9
Forwarded from ITCamp
Пацаны, биг дроп на канале! 🔥
Какой язык программирования выбрать новичку? JavaScript, Python, C/C++, Java, Go, Rust, C#, а может быть вообще ассемблер?)
Когда перед вкатунами возникает такое разнообразие опций, глаза разбегаются и непонятно, с чего начать!
Выбор первого языка - очень важное событие на старте карьеры. Ошибёшься - потеряешь время, попадёшь не туда, выгоришь.
Поинты, которые обсудили:
— Чем опасен неверный выбор языка и как "не прогадать"?
— Как найти свою нишу и в каких направлениях на старте может быть тяжелее обычного?
— Какие языки правят в каждой сфере: веб, мобилки, десктоп, геймдев, ML?
— Где активно используются C/C++ и стоит ли начинать с них?
— Что нужно учитывать при выборе языка и на какие моменты обратить особое внимание?
Смотреть на YouTube
Какой язык программирования выбрать новичку? JavaScript, Python, C/C++, Java, Go, Rust, C#, а может быть вообще ассемблер?)
Когда перед вкатунами возникает такое разнообразие опций, глаза разбегаются и непонятно, с чего начать!
Выбор первого языка - очень важное событие на старте карьеры. Ошибёшься - потеряешь время, попадёшь не туда, выгоришь.
Поинты, которые обсудили:
— Чем опасен неверный выбор языка и как "не прогадать"?
— Как найти свою нишу и в каких направлениях на старте может быть тяжелее обычного?
— Какие языки правят в каждой сфере: веб, мобилки, десктоп, геймдев, ML?
— Где активно используются C/C++ и стоит ли начинать с них?
— Что нужно учитывать при выборе языка и на какие моменты обратить особое внимание?
Смотреть на YouTube
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13❤7👍7🤔3
Собери себе эстетичный IDE в терминале
Представь, что ты открываешь терминал и хочешь быстро найти какой-то фрагмент кода, увидеть его контекст, а затем сразу же открыть файл ровно там, где найдено совпадение.
Всё это можно сделать через утилиту rgo, не переключаясь в тяжёлую графическую IDE. Ниже показано, как настроить такой «мини-IDE» за несколько минут. Будем использовать: ripgrep + fzf + bat + любой редактор.
Короткая версия команды:
Ты пишешь rgo, затем в задаёшь шаблон поиска, а далее — редактор, в котором хочешь открыть результат. Если второй аргумент опустить, по умолчанию откроется vim.
Редактор можно заменить на nano, bat или почти любой другой: главное, чтобы он понимал, как открыть файл и перейти к нужной строке.
Что происходит внутри:
ripgrep (rg) мгновенно пробегает по всем файлам вашего проекта и выводит совпадения в формате "путь:строка:текст", fzf превращает вывод в интерактивный список, где можно перемещаться стрелками.
Справа показывается фрагмент кода, нужную строку подсвечивает bat. Когда нажимаешь Enter, выбранная строка распаршивается: скрипт узнаёт путь к файлу и номер строки. После этого файл открывается именно там, где нужно, в соответствии с тем редактором, который ты указал.
Полный скрипт, который кладётся в конфиг шелла:
После того как вставишь этот блок в "~/.bashrc" или "~/.zshrc", перезапусти оболочку "exec $SHELL". Теперь rgo готова к работе.
Вывод:
В ситуациях, когда приходится много работать в терминале и редактировать файлы, такая команда заметно ускоряет работу. Одна короткая функция в конфиге превращает терминал в лёгкую и быструю среду разработки.
Попробуй, поэкспериментируй с параметрами, и, если найдёшь новые трюки, обязательно расскажи о них!
LinuxCamp | #utils #bymaga
Представь, что ты открываешь терминал и хочешь быстро найти какой-то фрагмент кода, увидеть его контекст, а затем сразу же открыть файл ровно там, где найдено совпадение.
Всё это можно сделать через утилиту rgo, не переключаясь в тяжёлую графическую IDE. Ниже показано, как настроить такой «мини-IDE» за несколько минут. Будем использовать: ripgrep + fzf + bat + любой редактор.
Короткая версия команды:
rgo "<паттерн>" [vim|nano|bat]
Ты пишешь rgo, затем в задаёшь шаблон поиска, а далее — редактор, в котором хочешь открыть результат. Если второй аргумент опустить, по умолчанию откроется vim.
Редактор можно заменить на nano, bat или почти любой другой: главное, чтобы он понимал, как открыть файл и перейти к нужной строке.
Что происходит внутри:
ripgrep (rg) мгновенно пробегает по всем файлам вашего проекта и выводит совпадения в формате "путь:строка:текст", fzf превращает вывод в интерактивный список, где можно перемещаться стрелками.
Справа показывается фрагмент кода, нужную строку подсвечивает bat. Когда нажимаешь Enter, выбранная строка распаршивается: скрипт узнаёт путь к файлу и номер строки. После этого файл открывается именно там, где нужно, в соответствии с тем редактором, который ты указал.
Полный скрипт, который кладётся в конфиг шелла:
rgo () {
local editor=${2:-vim}
# ищем совпадения, показываем их в fzf с превью
local sel=$(
rg --line-number --no-heading --color=never "$1" \
| fzf \
--height 50% --border \
--delimiter ':' \
--preview 'bat --style=numbers --color=always --highlight-line {2} {1}' \
--preview-window 'right:60%' \
) || return
# вытаскиваем путь и номер строки
local file=${sel%%:*}
local rest=${sel#*:}
local line=${rest%%:*}
case "$editor" in
vim) vim +"$line" "$file" ;;
nano) nano +"$line" "$file" ;;
bat) bat --style=numbers --highlight-line "$line" "$file" ;;
*) "$editor" "$file" ;;
esac
}
export -f rgo
После того как вставишь этот блок в "~/.bashrc" или "~/.zshrc", перезапусти оболочку "exec $SHELL". Теперь rgo готова к работе.
Вывод:
В ситуациях, когда приходится много работать в терминале и редактировать файлы, такая команда заметно ускоряет работу. Одна короткая функция в конфиге превращает терминал в лёгкую и быструю среду разработки.
Попробуй, поэкспериментируй с параметрами, и, если найдёшь новые трюки, обязательно расскажи о них!
LinuxCamp | #utils #bymaga
🔥23👍14❤9
autossh — чтобы SSH-туннели не отваливались
Обычный "ssh -L" рвётся: сеть пропала, ноут ушёл в сон — туннель умер. Тулза autossh следит за соединением и сам перезапускает его. Незаменим для баз, Grafana, внутренних API — всего, что должно «всегда работать».
Установка:
Быстрый старт:
Достаточно заменить привычную команду ssh -L на autossh, добавив пару опций. Например, вместо:
Пишем:
Параметры тут важны. Флаг "-fN" означает запуск в фоне без запуска удалённой команды. Флаг "-M 0" отключает echo-порт, чтобы не мешал, — вместо него autossh будет использовать настройки keep-alive из SSH-конфига.
Надёжность через keep-alive:
Чтобы autossh действительно знал, когда туннель умер, нужно включить keep-alive. Добавьте в "~/.ssh/config":
Теперь SSH будет каждые 30 секунд отправлять пинг на сервер. Если три пинга подряд не получат ответа, соединение считается мёртвым - и autossh запустит его заново.
Примеры из практики:
Обратный туннель (если сервер стоит за NAT или роутером):
На VPS теперь можно выполнить ssh -p 2222 localhost — и попасть внутрь домашнего сервера, как будто он сам подключился. SOCKS-прокси с автопереподключением:
Выставляете localhost:1080 в браузере - и получаете надёжный прокси, который не развалится при первой же потере Wi-Fi.
Автозапуск с systemd:
Если туннель нужен всегда (например, при старте сервера) — стоит обернуть autossh в systemd-сервис:
Активировать можно одной командой:
Теперь туннель поднимется при загрузке сервера и будет перезапущен, если вдруг упадёт.
Вывод:
autossh незаметный, но жизненно важный инструмент. Просто заменяешь ssh на autossh, и туннель больше не рвётся. Настроил один раз - и забыл, что раньше ты делал это вручную.
LinuxCamp | #utils
Обычный "ssh -L" рвётся: сеть пропала, ноут ушёл в сон — туннель умер. Тулза autossh следит за соединением и сам перезапускает его. Незаменим для баз, Grafana, внутренних API — всего, что должно «всегда работать».
Установка:
sudo apt install autossh
Быстрый старт:
Достаточно заменить привычную команду ssh -L на autossh, добавив пару опций. Например, вместо:
ssh -L 5432:localhost:5432 user@111.111.111.111
Пишем:
autossh -M 0 -fN -L 5432:localhost:5432 user@111.111.111.111
Параметры тут важны. Флаг "-fN" означает запуск в фоне без запуска удалённой команды. Флаг "-M 0" отключает echo-порт, чтобы не мешал, — вместо него autossh будет использовать настройки keep-alive из SSH-конфига.
Надёжность через keep-alive:
Чтобы autossh действительно знал, когда туннель умер, нужно включить keep-alive. Добавьте в "~/.ssh/config":
Host *
ServerAliveInterval 30
ServerAliveCountMax 3
Теперь SSH будет каждые 30 секунд отправлять пинг на сервер. Если три пинга подряд не получат ответа, соединение считается мёртвым - и autossh запустит его заново.
Примеры из практики:
Обратный туннель (если сервер стоит за NAT или роутером):
autossh -M 0 -fN -R 2222:localhost:22 user@111.111.111.111
На VPS теперь можно выполнить ssh -p 2222 localhost — и попасть внутрь домашнего сервера, как будто он сам подключился. SOCKS-прокси с автопереподключением:
autossh -M 0 -fN -D 1080 user@111.111.111.111
Выставляете localhost:1080 в браузере - и получаете надёжный прокси, который не развалится при первой же потере Wi-Fi.
Автозапуск с systemd:
Если туннель нужен всегда (например, при старте сервера) — стоит обернуть autossh в systemd-сервис:
# /etc/systemd/system/db-tunnel.service
[Unit]
Denoscription=Persistent SSH tunnel to prod DB
After=network-online.target
Wants=network-online.target
[Service]
User=deploy
ExecStart=/usr/bin/autossh -M 0 -N -L 5432:localhost:5432 deploy@db-host
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Активировать можно одной командой:
sudo systemctl enable --now db-tunnel.service
Теперь туннель поднимется при загрузке сервера и будет перезапущен, если вдруг упадёт.
Вывод:
autossh незаметный, но жизненно важный инструмент. Просто заменяешь ssh на autossh, и туннель больше не рвётся. Настроил один раз - и забыл, что раньше ты делал это вручную.
LinuxCamp | #utils
❤28👍16🔥15✍2❤🔥1
Релиз отечественного дистрибутива РЕД ОС 8 и 7
Все же в курсе про примерную ОС РЕД?) Так вот, разрабы «РЕД СОФТ» радуют нас новыми апдейтами.
Произошел выпуск РЕД ОС 8.0.2 и 7.3.6 с ядрами Linux 6.12.21 и 6.1.128, обновленным ПО (Zabbix, Docker, PostgreSQL), улучшенным дизайном KDE, MATE, GNOME 46.
Что нового в РЕД ОС 8?
— Обновленные ядра: исправлены уязвимости, улучшена производительность, наложены патчи безопасности, закрывающие более 1500 CVE.
— Обновленный дизайн графических окружений: в РЕД 8 обновлены темы оформления для KDE и MATE, изменен стиль экранов входа и блокировки. Окружение GNOME обновлено до версии 46.
Итого: обновления обеспечивают повышенную безопасность, улучшенную производительность и современный интерфейс. Детальнее ознакомиться можно по ссылке.
LinuxCamp | #news
Все же в курсе про примерную ОС РЕД?) Так вот, разрабы «РЕД СОФТ» радуют нас новыми апдейтами.
Произошел выпуск РЕД ОС 8.0.2 и 7.3.6 с ядрами Linux 6.12.21 и 6.1.128, обновленным ПО (Zabbix, Docker, PostgreSQL), улучшенным дизайном KDE, MATE, GNOME 46.
Что нового в РЕД ОС 8?
— Обновленные ядра: исправлены уязвимости, улучшена производительность, наложены патчи безопасности, закрывающие более 1500 CVE.
— Обновленный дизайн графических окружений: в РЕД 8 обновлены темы оформления для KDE и MATE, изменен стиль экранов входа и блокировки. Окружение GNOME обновлено до версии 46.
Итого: обновления обеспечивают повышенную безопасность, улучшенную производительность и современный интерфейс. Детальнее ознакомиться можно по ссылке.
LinuxCamp | #news
👍28💊9🔥6❤3❤🔥2🫡2🗿2
Закрываем Docker-порты правильно
Даже если ты настроил ufw и открыл порты только на 22, 433 и 80, у тебя все равно сервисы docker могут торчать наружу. Это происходит потому что docker напрямую управляет iptables/nftables, вставляя свои правила до UFW, поэтому опубликованные порты могут быть доступны, даже если UFW их не показывает.
Почему это небезопасно:
Если ты запускаешь контейнер так:
Или в docker-compose у тебя:
То Docker сам открывает порт всему интернету (0.0.0.0), даже если в ufw status его нет. Это значит, что любой человек из сети может достучаться до твоего контейнера и ufw это не остановит - Docker обходит его фильтры.
Как правильно защитить контейнер:
Лучше всего конечно вообще не открывать порт наружу, если в этом нет нужды. Безопасный вариант (локальный доступ):
либо в docker-compose.yml:
Так сервис будет доступен только внутри сервера. Подходит для проксирования через nginx, который проксирует наружу, скрытых API и внутренних утилит, ssh-туннелей или VPN.
Вариант с открытым портом контейнера:
Если все-таки нужно по какой-то причине поднять контейнер на 0.0.0.0, то лучше закрыть эти порты с помощью правил. Docker поддерживает специальную цепочку DOCKER-USER, где ты можешь сам прописать фильтры:
Важно: правила читаются сверху вниз, поэтому разрешающие вставляем перед правилом DROP.
Проверка:
Если вывод пуст - порт больше не слушает «снаружи».
Вывод:
Docker по умолчанию открывает всё наружу, даже если UFW говорит, что порты закрыты. Если не нужен внешний доступ, не публикуй порты или публикуй на 127.0.0.1. Если доступ нужен - используй DOCKER-USER, чтобы жёстко ограничить доступ к нужным портам.
LinuxCamp | #devops #docker #bymaga
Даже если ты настроил ufw и открыл порты только на 22, 433 и 80, у тебя все равно сервисы docker могут торчать наружу. Это происходит потому что docker напрямую управляет iptables/nftables, вставляя свои правила до UFW, поэтому опубликованные порты могут быть доступны, даже если UFW их не показывает.
Почему это небезопасно:
Если ты запускаешь контейнер так:
docker run -p 8080:80 …
Или в docker-compose у тебя:
ports:
- "8080:80"
То Docker сам открывает порт всему интернету (0.0.0.0), даже если в ufw status его нет. Это значит, что любой человек из сети может достучаться до твоего контейнера и ufw это не остановит - Docker обходит его фильтры.
Как правильно защитить контейнер:
Лучше всего конечно вообще не открывать порт наружу, если в этом нет нужды. Безопасный вариант (локальный доступ):
docker run -p 127.0.0.1:8080:80 …
либо в docker-compose.yml:
ports:
- "127.0.0.1:8080:80"
Так сервис будет доступен только внутри сервера. Подходит для проксирования через nginx, который проксирует наружу, скрытых API и внутренних утилит, ssh-туннелей или VPN.
Вариант с открытым портом контейнера:
Если все-таки нужно по какой-то причине поднять контейнер на 0.0.0.0, то лучше закрыть эти порты с помощью правил. Docker поддерживает специальную цепочку DOCKER-USER, где ты можешь сам прописать фильтры:
# Разрешаем уже установленные соединения
sudo iptables -I DOCKER-USER -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# Разрешаем только нужный порт (например, 8080)
sudo iptables -I DOCKER-USER -p tcp --dport 8080 -j ACCEPT
# Всё остальное режем
sudo iptables -A DOCKER-USER -j DROP
Важно: правила читаются сверху вниз, поэтому разрешающие вставляем перед правилом DROP.
Проверка:
ss -lntp | grep 8080 # Слушает ли порт
Если вывод пуст - порт больше не слушает «снаружи».
Вывод:
Docker по умолчанию открывает всё наружу, даже если UFW говорит, что порты закрыты. Если не нужен внешний доступ, не публикуй порты или публикуй на 127.0.0.1. Если доступ нужен - используй DOCKER-USER, чтобы жёстко ограничить доступ к нужным портам.
LinuxCamp | #devops #docker #bymaga
👍36🔥12❤8👌7✍1
Please open Telegram to view this post
VIEW IN TELEGRAM
😁65👍6❤4💔3🔥1
Как найти процесс, который грузит сеть?
В случае когда соединение начинает тормозить, а ты не понимаешь, кто именно грузит сеть. Может, какой-то скрипт что-то качает? Или случайно оставил curl в фоне? В таких случаях хочется просто одной командой увидеть, какой процесс активнее всех гоняет трафик.
Для этого есть простая, но очень удобная утилита - nethogs. Она показывает, какой процесс сколько трафика использует в реальном времени. Интерфейс у неё похож на top, только вместо нагрузки на CPU - сетевой трафик.
Установка:
Использование:
Запустить её можно вообще без параметров:
В этом случае она попытается определить интерфейс автоматически. Часто этого достаточно. Если ты точно знаешь, через какой интерфейс идёт трафик (чаще всего это eth0, но может быть ens18, enp0s3, wlan0, зависит от системы и типа подключения), то можешь указать его явно:
После запуска ты увидишь список процессов, которые что-то скачивают или отдают. Указывается имя процесса, путь до исполняемого файла, пользователь, и скорость входящего/исходящего трафика.
Всё обновляется в реальном времени, можно наблюдать за сетевой активностью прямо на лету. Если не уверен, какой интерфейс использовать, глянь список всех с помощью команды:
Команда покажет список всех интерфейсов. Обычно нужный - это тот, где есть IP-адрес из подсети (например, 192.168.*.* или 10.*.*.*), и видно state UP.
Вывод:
Так можно удобно на сервере быстро понять, кто шумит. Или локально, если подозреваешь, что какая-то программа активно лезет в интернет. Утилита nethogs не показывает домены, IP-адреса или порты, а только процессы и их скорость. Но для локальной отладки этого обычно хватает с головой.
LinuxCamp | #utils
В случае когда соединение начинает тормозить, а ты не понимаешь, кто именно грузит сеть. Может, какой-то скрипт что-то качает? Или случайно оставил curl в фоне? В таких случаях хочется просто одной командой увидеть, какой процесс активнее всех гоняет трафик.
Для этого есть простая, но очень удобная утилита - nethogs. Она показывает, какой процесс сколько трафика использует в реальном времени. Интерфейс у неё похож на top, только вместо нагрузки на CPU - сетевой трафик.
Установка:
sudo apt install nethogs
Использование:
Запустить её можно вообще без параметров:
sudo nethogs
В этом случае она попытается определить интерфейс автоматически. Часто этого достаточно. Если ты точно знаешь, через какой интерфейс идёт трафик (чаще всего это eth0, но может быть ens18, enp0s3, wlan0, зависит от системы и типа подключения), то можешь указать его явно:
sudo nethogs eth0
После запуска ты увидишь список процессов, которые что-то скачивают или отдают. Указывается имя процесса, путь до исполняемого файла, пользователь, и скорость входящего/исходящего трафика.
Всё обновляется в реальном времени, можно наблюдать за сетевой активностью прямо на лету. Если не уверен, какой интерфейс использовать, глянь список всех с помощью команды:
ip a
Команда покажет список всех интерфейсов. Обычно нужный - это тот, где есть IP-адрес из подсети (например, 192.168.*.* или 10.*.*.*), и видно state UP.
Вывод:
Так можно удобно на сервере быстро понять, кто шумит. Или локально, если подозреваешь, что какая-то программа активно лезет в интернет. Утилита nethogs не показывает домены, IP-адреса или порты, а только процессы и их скорость. Но для локальной отладки этого обычно хватает с головой.
LinuxCamp | #utils
👍52🔥18❤13
Автоматическая защита SSH от перебора
Fail2ban - утилита для автоматической блокировки ip-адресов, с которых идёт много неудачных попыток подключения по ssh. Она нужна, когда сервер доступен напрямую по порту 22 и авторизация по SSH открыта во внешний интернет без vpn.
Установка:
По умолчанию fail2ban готов к работе сразу после установки. Чтобы убедиться, что он запущен и будет стартовать автоматически при перезагрузке системы, можно выполнить:
Базовая настройка:
Основные параметры fail2ban находятся в конфигурационном файле. Чтобы его изменить, сначала создайте копию стандартного файла, так безопаснее и проще для управления:
Затем отредактируйте файл:
В самом верху задаются базовые настройки: сколько времени держать IP заблокированным (bantime), за какой промежуток времени подсчитывать неудачные попытки (findtime), и после скольких попыток банить (maxretry). Например:
Здесь fail2ban будет банить IP на 1 час (3600 секунд), если за последние 10 минут (600 секунд) с него было 5 неудачных попыток входа. Отдельно включается защита SSH:
После внесения изменений нужно перезапустить fail2ban, чтобы они вступили в силу:
Для проверки текущего состояния защиты SSH используется:
Эта команда покажет, сколько IP-адресов сейчас заблокировано и сколько всего попыток было зафиксировано.
Вывод:
Использовать fail2ban рекомендуется вместе с другими подходами к защите сервера: строгой авторизацией только по ключам, изменением стандартного порта SSH, ограничением доступа с помощью firewall и регулярными обновлениями системы.
LinuxCamp | #utils
Fail2ban - утилита для автоматической блокировки ip-адресов, с которых идёт много неудачных попыток подключения по ssh. Она нужна, когда сервер доступен напрямую по порту 22 и авторизация по SSH открыта во внешний интернет без vpn.
Установка:
sudo apt install fail2ban
По умолчанию fail2ban готов к работе сразу после установки. Чтобы убедиться, что он запущен и будет стартовать автоматически при перезагрузке системы, можно выполнить:
sudo systemctl enable --now fail2ban
Базовая настройка:
Основные параметры fail2ban находятся в конфигурационном файле. Чтобы его изменить, сначала создайте копию стандартного файла, так безопаснее и проще для управления:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
Затем отредактируйте файл:
sudo nano /etc/fail2ban/jail.local
В самом верху задаются базовые настройки: сколько времени держать IP заблокированным (bantime), за какой промежуток времени подсчитывать неудачные попытки (findtime), и после скольких попыток банить (maxretry). Например:
[DEFAULT]
ignoreip = 127.0.0.1
bantime = 3600
findtime = 600
maxretry = 5
Здесь fail2ban будет банить IP на 1 час (3600 секунд), если за последние 10 минут (600 секунд) с него было 5 неудачных попыток входа. Отдельно включается защита SSH:
[sshd]
enabled = true
port = ssh
logpath = %(sshd_log)s
После внесения изменений нужно перезапустить fail2ban, чтобы они вступили в силу:
sudo systemctl restart fail2ban
Для проверки текущего состояния защиты SSH используется:
sudo fail2ban-client status sshd
Эта команда покажет, сколько IP-адресов сейчас заблокировано и сколько всего попыток было зафиксировано.
Вывод:
Использовать fail2ban рекомендуется вместе с другими подходами к защите сервера: строгой авторизацией только по ключам, изменением стандартного порта SSH, ограничением доступа с помощью firewall и регулярными обновлениями системы.
LinuxCamp | #utils
👍38🔥17❤5❤🔥5