Здесь вы найдете полезные советы, практические материалы и интересные инсайты по администрированию Linux. Погружаемся в мир команд, скриптов и серверов вместе! 🚀
Авторский канал действующего админа 👨🏼💻
Post #230
1.17K

- 👍 6
LI @linux_odmin
Showing posts older than #231 · Back to latest

pwd # Выводит текущий путь;ls # Выводит список файлов и каталогов. Пример вывода форматированного списка всех файлов и директорий, включая скрытые: ls -laX ;cd # Переход по директориям. Примеры:cd # Переход в домашнюю директорию;cd /home # Пример перехода в /home; cd .. # Переход в директорию уровнем выше;cd ~user # Перейти в домашнюю директорию пользователя user ;touch # Создание пустого файла если нет. Пример: touch test.txt ;rm # Удаление. Примеры:rm test.txt # Удаление файла;rm -rf temp # Удаление директории temp с вложенными файлами;cp # Копирование. Примеры:cp test.txt /home/test.txt # Копирует test.txt из текущей директории в /home ;cp -la /dir1 /dir2 # Копирование директорий;ln # — создание символической ссылки. Пример: ln -s /var/test.txt /home/test.txt — создать символическую ссылку к файлу /var/test.txt в директории /home;mkdir # Создание директории. Пример: mkdir temp ;rmdir # Удаление директории. Пример: rmdir temp ;mv # ПеремещениеПереименование. Пример переименования директории: mv /dir1 /dir2 (аналогично с файлами);locate # Поиск. Пример поиска везде всех файлов с именем test.txt: locate test.txt ;find # Поиск. Примеры:find /home/it -name test.txt # Найти файлы и директории с именем test.txt в /home/it и вложенных;find /home/it -name "*.txt" # Найти все файлы и директории в /home/it и вложенных, имена которых оканчиваются на ‘.txt’;find /usr/bin -type f -atime +100 # Найти все файлы в ‘/usr/bin’, время последнего обращения к которым более 100 дней; find /usr/bin -type f -mtime -10 # Найти все файлы в ‘/usr/bin’, созданные или изменённые в течении последних 10 дней;stat # Отображение всей доступной информации об указанном файле. Пример: stat test.txt;file # Определяет тип файла. Пример: file test.txt ;chmod # Права доступа;chown # Меняет владельца файла, пример: chown www:www test.txt;mc # запуск файлового менеджера;
crontab -ecrontab -lcrontab -r0 10 * * * {{path/to/script.sh}}* * 3 Apr * {{path/to/script.sh}}30 2 * * Fri {{path/to/script.sh}}# virsh list – показать список запущенных ВМ# virsh list --all – показать список всех машин (в том числе выключенных)# virsh shutdown <vm name> — выключить виртуальную машину# virsh start <vm name> — запустить виртуальную машину# virsh suspend <vm name> — приостановить виртуальную машину# virsh resume <vm name> — запустить приостановленную виртуальную машину# virsh reboot <vm name> — перезапустить виртуальную машину# virsh destroy <vm name> — уничтожить виртуальную машину# virsh undefine <vm name> — удалить машину из списка и удалить все файлы, принадлежащие ей (обычно применяется после выполнения команды virsh destroy).# virsh vcpuinfo <vm name> — информация о процессоре на виртуальной машине # virsh domid <vm name> — получить идентификатор виртуальной машины# virsh domuuid <vm name> — получить UUID виртуальной машины# virsh dominfo <vm name> — получить сведения о виртуальной машине# virsh domstate <vm name> — просмотр состояния виртуальной машины# virsh dumpxml <vm name> — вывести файл конфигурации указанной виртуальной машины в XML формате
$ find . -type d -empty -exec rmdir -v {} +$ find . -type d -empty -delete
ens3 → enp0s3).
ip link show
cat >/etc/systemd/network/10-persistent.link <<EOF
[Match]
MACAddress=52:54:00:ab:cd:ef
[Link]
Name=lan0
EOF
systemctl restart systemd-udevd
systemctl restart systemd-networkd
lan0.ESTABLISHED. Классика: приложение не отвечает, но сокеты не закрываются.
ss -tnao state established 'sport = :22'
-tnao - TCP, numeric, all, с таймерами;state established - только активные соединения;'sport = :22' - фильтр по SSH (меняй на свой порт).timer:on (keepalive,...) - соединение живое;on (timewait,...) или долго висит без активности → зомби-сессия.
ss -K dport = :22 state established
sysctl -w net.ipv4.tcp_keepalive_time=300
sysctl -w net.ipv4.tcp_keepalive_probes=5
sysctl -w net.ipv4.tcp_keepalive_intvl=60
table inet sshguard {
set ssh_blacklist {
type ipv4_addr
flags timeout
timeout 1h
}
map ssh_counter {
type ipv4_addr : counter
}
chain input {
type filter hook input priority 0;
# Разрешаем локалку и уже забаненных
ip saddr @ssh_blacklist drop
tcp dport 22 ct state new add @ssh_counter { ip saddr } counter
tcp dport 22 ct state new ip saddr @ssh_counter { ip saddr } >= 5 add @ssh_blacklist { ip saddr } drop
# Разрешаем SSH по умолчанию (после фильтра)
tcp dport 22 accept
}
}
ssh_counter считает подключения по IP.ssh_blacklist на 1 час.limit rate over и динамических set с timeout.
nft add table inet filter
nft add chain inet filter input '{ type filter hook input priority 0; policy accept; }'
# IPv4
nft add set inet filter ssh_flood4 '{ type ipv4_addr; flags dynamic; timeout 10s; size 131072; }'
nft add set inet filter ssh_blackhole4 '{ type ipv4_addr; flags dynamic; timeout 1h; size 65536; }'
# IPv6
nft add set inet filter ssh_flood6 '{ type ipv6_addr; flags dynamic; timeout 10s; size 131072; }'
nft add set inet filter ssh_blackhole6 '{ type ipv6_addr; flags dynamic; timeout 1h; size 65536; }'
flags dynamic+timeoutобязательны для пополнения set’ов из правил;size- защита от OOM. Пример такой схемы есть в man nft.
nft add rule inet filter input ip saddr @ssh_blackhole4 drop
nft add rule inet filter input ip6 saddr @ssh_blackhole6 drop
limit rate over матчится на превышение порога)
# IPv4
nft add rule inet filter input tcp dport 22 ct state new \
add @ssh_flood4 { ip saddr limit rate over 10/second } \
add @ssh_blackhole4 { ip saddr timeout 1h } drop
# IPv6
nft add rule inet filter input tcp dport 22 ct state new \
add @ssh_flood6 { ip6 saddr limit rate over 10/second } \
add @ssh_blackhole6 { ip6 saddr timeout 1h } drop
timeout легко подкручивать под трафик.nft list set inet filter ssh_blackhole4 и nft monitor ruleset - видно пополнение set’ов. burst 3 к limit, чтобы сгладить джиттер (по умолчанию 5 пакетов). nft delete element inet filter ssh_blackhole4 { 1.2.3.4 } или nft flush set inet filter ssh_blackhole4.@ssh_blackhole вверху input, раньше любых accept.ct count over N (connlimit). ssh, без демонов и лог-парсеров. Решение - динамический set с таймаутом + правило, которое само добавляет нарушителя.
sudo nft -f - <<'EOF'
table inet fw {
set ssh_bad {
type inet_addr
flags timeout
timeout 1h # дефолт для элементов
}
chain input {
type filter hook input priority 0; policy accept;
iif lo accept
ct state established,related accept
# уже занесённых — вон:
ip saddr @ssh_bad drop
# детект частых новых соединений на 22/tcp и бан + дроп:
tcp dport 22 ct state new limit rate over 10/minute \
add @ssh_bad { ip saddr timeout 2h } counter drop
}
}
EOF
sudo nft add element inet fw ssh_bad { 203.0.113.5 timeout 24h comment "manual" }
sudo nft delete element inet fw ssh_bad { 203.0.113.5 }
sudo nft monitor set
# Проверь синтаксис и атомарно загрузись
sudo nft -c -f /etc/nftables.conf && sudo nft -f /etc/nftables.conf
sudo systemctl enable --now nftables
совет: вынеси блок в/etc/nftables.d/ssh-ban.nftи подключиincludeв/etc/nftables.conf.
family inet → одна логика и для IPv4, и для IPv6.limit rate over срабатывает только при превышении порога - нормальные пользователи не пострадают.flush table inet fw в бою: обнулятся текущие баны (timeouts). Обновляй правила точечно (nft -a list ruleset, затем delete rule handle … / add rule …) или проверяй конфиг -c перед загрузкой.tcp dport 22 на свой./var/log/auth.log (или аналогом в вашей системе).iptables или ufw), которое блокирует этот IP-адрес.
sudo apt update
sudo apt install fail2ban
jail.conf! Создайте его копию jail.local, чтобы ваши настройки не перезаписались при обновлении.
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
jail.local:sudo nano /etc/fail2ban/jail.local и найдите секцию [sshd]. Убедитесь, что она включена:
[sshd]
enabled = true
maxretry = 5 - количество неудачных попыток до бана.bantime = 10m - время блокировки (10 минут).findtime = 10m - временное окно, в течение которого считаются попытки.
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd
iptables ≠ nftables: почему правила "не работают"iptables, но трафик не фильтруется.iptables лишь транслируется в nftables. В итоге: часть правил "теряется" или конфликтует.
# какой бэкенд используется
iptables -V
# если увидите "nf_tables" — значит это не классический iptables
update-alternatives --config iptables
iptables-legacy (и для ip6tables тоже).nftables:
nft list ruleset
nft add rule inet filter input tcp dport 22 accept
nftables. Старые - либо переводить, либо жёстко фиксировать iptables-legacy.ss:
ss -ltnp | grep ':80'
-l — только listening сокеты-t — TCP-n — не резолвить имена-p — показывать PID/имя процесса
LISTEN 0 128 *:80 *:* users:(("nginx",pid=1234,fd=6))
lsof -i :80 — если привычнее через lsoffuser 80/tcp — быстрый вариант, сразу PIDss -ltunp в цикле:
watch -n1 "ss -ltunp | grep ':80'"
sysctl net.ipv4.conf.all.rp_filter
sysctl net.ipv4.conf.default.rp_filter
0 - фильтр выключен1 - строгий режим (пакет отбрасывается, если обратный маршрут не совпадает с интерфейсом входа)2 - «loose mode» (разрешает асимметричную маршрутизацию, но всё ещё фильтрует spoof)
sysctl -w net.ipv4.conf.all.rp_filter=1
sysctl -w net.ipv4.conf.default.rp_filter=1
sysctl -w net.ipv4.conf.all.rp_filter=2
sysctl -w net.ipv4.conf.default.rp_filter=2
cat >> /etc/sysctl.conf <<EOF
net.ipv4.conf.all.rp_filter=1
net.ipv4.conf.default.rp_filter=1
EOF
sysctl -p
ssss быстрее и информативнее, чем устаревший netstat.
ss -ltnp
-l — только прослушивающие сокеты-t — TCP-n — не пытаться резолвить имена-p — показать PID/имя процесса
ss -tn state established
ss -tn sport = :443
ss может фильтровать по состояниям, адресам и портам прямо в команде — это экономит время при отладке сетевых проблем и поиске подозрительных подключений.dmesg.
# 1. Создаём цепочку для логирования
sudo iptables -N LOG_DROP
# 2. Логируем с ограничением частоты (1 сообщение/сек)
sudo iptables -A LOG_DROP -m limit --limit 1/second -j LOG \
--log-prefix "[FW DROP] " --log-level 4
# 3. Дропаем пакет
sudo iptables -A LOG_DROP -j DROP
# 4. Применяем к подозрительному трафику (пример: TCP 23)
sudo iptables -A INPUT -p tcp --dport 23 -j LOG_DROP
journalctl -k -f/var/log/kern.log (Debian/Ubuntu)-m limit, чтобы не утопить систему в логахrsyslog с отдельным тегомtc
# Очистить старые правила
tc qdisc del dev eth0 root 2>/dev/null
# Добавить qdisc с ограничением
tc qdisc add dev eth0 root tbf rate 10mbit burst 32kbit latency 400ms
tc -s qdisc show dev eth0
tc qdisc del dev eth0 root