Что на самом деле логируется на сервере
Привлекательность собственного VPN проста: между вами и интернетом не сидит компания, которая записывает, что вы делаете. Но обычный Linux-сервер всё равно ведёт собственные записи, и если вам нужна по-настоящему безлоговая конфигурация, надо понимать, какие именно:
- Сам WireGuard не ведёт лог трафика. По умолчанию он ничего не пишет на диск о ваших соединениях. Он держит в памяти только время последнего рукопожатия и ваш текущий endpoint, которые видно через
wg show- и всё это стирается при перезагрузке. Так что уровень VPN уже чист. - Шумит именно операционная система. Журнал systemd (
journald) записывает события служб. Если установленrsyslog, он вдобавок пишет текстовые файлы вроде/var/log/syslogи/var/log/auth.log- аauth.logфиксирует каждый вход по SSH. Отдельные файлы (wtmp,btmp,lastlog) отслеживают, кто и когда входил, а ваша оболочка хранит~/.bash_history. - И ещё несколько тихих путей на диск. Если на сервере включён
swap, ядро может сбросить страницы RAM - вместе с ключами - на диск. Аварийно завершившаяся программа может оставитьcore dumpсвоей памяти. А менеджер пакетов пишет логи обновлений в/var/log/apt. Основательная настройка закрывает и это.
root.Честный предел: что безлоговость может и чего не может
Прежде чем что-либо трогать, ясно поймите, что вы на самом деле покупаете. Отключение логов не даёт вашему собственному серверу вести записи - так что если диск когда-нибудь изымут, снимут образ или прочитают тем, кто получил доступ, найти удастся куда меньше. Это реальная и стоящая выгода.
Чего это не делает - так это не прячет вас от компании, которая сдаёт вам сервер. Ваш VPS-провайдер всегда знает, что по этому IP существует машина, видит, сколько трафика она гоняет, и в принципе может наблюдать трафик на уровне сети или гипервизора - никакая настройка внутри вашего сервера это не изменит. Безлоговость - про минимизацию собственного следа, а не про то, чтобы стать невидимым для хостера. Выбирайте провайдера, которому вы доверяете, и относитесь к шагам ниже как к снижению риска, а не к его стиранию.
Безлоговость не гарантирует анонимности. Два предела, которые не изменит никакая настройка сервера:
- Провайдер видит подключающиеся IP. Содержимое зашифровано, но он видит, что ваш домашний IP обращался к порту WireGuard, и когда.
- Провайдер может снять снимок RAM. VPS - это виртуальная машина; хостер управляет гипервизором и может захватить живую память (активные ключи WireGuard и подключённых пиров) и может быть обязан передать её полиции по законному запросу.
Итог: вы владеете софтом, но не машиной. Безлоговость снижает ваш риск, но не стирает его.
Шаг 1: Перенесите журнал systemd в RAM
Сначала скажите journald хранить журнал только в памяти, чтобы он никогда не попадал на диск и исчезал при каждой перезагрузке. Откройте его конфиг:
nano /etc/systemd/journald.conf
В секции [Journal] задайте эти две строки (уберите ведущий #, если он есть):
[Journal]
Storage=volatile
RuntimeMaxUse=16M
Примените - и теперь журнал живёт в /run (RAM), ограничен 16 МБ и исчезает при перезагрузке:
systemctl restart systemd-journald
Шаг 2: Поместите весь /var/log в RAM
Журнал теперь в памяти, но несколько инструментов всё ещё роняют текстовые файлы в /var/log - rsyslog, тот самый auth.log, который фиксирует входы по SSH, логи обновлений apt и записи входов wtmp/btmp/lastlog (которые переписываются при каждом входе, так что простое удаление ничего не даёт). Чистое универсальное решение - смонтировать весь каталог /var/log как tmpfs - файловую систему в RAM, которая стирается при каждой перезагрузке. Добавьте одну строку в /etc/fstab:
echo "tmpfs /var/log tmpfs defaults,noatime,nosuid,nodev,mode=0755,size=50M 0 0" >> /etc/fstab
Теперь всё в /var/log живёт в памяти и очищается при каждой перезагрузке. Перезагрузитесь один раз, чтобы работающие службы заново открыли свои лог-файлы внутри нового RAM-диска:
reboot
/var/log стирается при перезагрузке, любому софту, который вы добавите позже и который ждёт собственную подпапку для логов (например, веб-сервер), может понадобиться пересоздание этой папки. Для машины, которая гоняет только ваш VPN, это не проблема.Шаг 3: Отключите swap
Если на сервере включён swap, ядро может при нехватке памяти вытолкнуть страницы RAM - возможно, включая живые ключи - на диск. На безлоговой машине вы хотите, чтобы память оставалась в памяти. Отключите swap сейчас и держите его выключенным при перезагрузках:
swapoff -a
sed -i.bak '/\sswap\s/s/^/#/' /etc/fstab
Многие небольшие VPS поставляются вообще без swap - в этом случае swapoff -a просто ничего не делает, и это нормально.
Шаг 4: Отключите core dumps
Если программа аварийно завершается, systemd-coredump может записать core dump - снимок памяти этой программы - на диск в /var/lib/systemd/coredump/. Отключите это:
mkdir -p /etc/systemd/coredump.conf.d
printf '[Coredump]Storage=none' > /etc/systemd/coredump.conf.d/99-nolog.conf
systemctl daemon-reload
Шаг 5: Отключите историю оболочки и редакторов
Ваша оболочка сохраняет каждую команду в ~/.bash_history, а редакторы оставляют свои следы (~/.viminfo, ~/.lesshst). Направьте их все в /dev/null, чтобы ничего никогда не записывалось. Для текущего пользователя:
ln -sf /dev/null ~/.bash_history
ln -sf /dev/null ~/.viminfo
ln -sf /dev/null ~/.lesshst
Затем запретите bash хранить файл истории для каждой login-оболочки в системе, чтобы охватить и другие учётные записи:
printf 'unset HISTFILEexport HISTSIZE=0' > /etc/profile.d/00-nohistory.sh
Если у вас есть другие учётные записи, повторите три строки ln -sf для домашнего каталога каждой из них.
Шаг 6: Оставьте защиту от вторжений включённой - вы не слепы
Распространённый миф - что отключение логов оставляет вас беззащитным. Это вовсе не обязательно. fail2ban - инструмент, который банит IP после серии неудачных входов - может читать прямо из журнала systemd, который теперь живёт в RAM. Так вы сохраняете автоматическую защиту от перебора, при этом ничего не записывая на диск. Установите его:
apt install fail2ban -y
Направьте его на журнал, создав /etc/fail2ban/jail.local с содержимым:
[DEFAULT]
backend = systemd
Затем перезапустите его и вдобавок закройте очевидные двери:
systemctl restart fail2ban
- Только SSH-ключи. Отключите вход по паролю в
/etc/ssh/sshd_config(PasswordAuthentication no) и перезапуститеssh. Ключ нельзя угадать так, как пароль. - Файрвол закрыт по умолчанию. Держите
ufwтак, чтобы он пропускал только SSH и ваш порт WireGuard (51820/udp), всё остальное запрещено. - Автоматические обновления безопасности. Установите
unattended-upgrades; его логи теперь живут в размещённом в RAM/var/log, так что они тоже исчезают при перезагрузке.
Шаг 7: Проверьте, что ничего не сохраняется
Перезагрузитесь ещё раз, войдите снова и проверьте четыре вещи, которые вы изменили:
mount | grep /var/log
swapon --show
journalctl --no-pager | wc -l
ls -lh /var/log
Вы должны увидеть /var/log, смонтированный как tmpfs, отсутствие активного swap, почти пустой журнал и свежий, почти пустой /var/log. С этого момента сервер практически ничего не хранит на диске о том, что через него проходит.
Когда стоит оставить часть логов
Безлоговость подходит не всем автоматически. Если сервер делает больше, чем гоняет ваш личный VPN - хостит сайт, обрабатывает чужой трафик - вам может понадобиться немного истории, чтобы замечать проблемы. Хорошая новость: настройка выше и так держит краткосрочные логи в RAM (в журнале и в tmpfs /var/log), так что вы получаете видимость в рамках сессии, при этом ничего не записывая на диск постоянно. Если нужно больше - увеличьте RuntimeMaxUse в Шаге 1 или size у tmpfs в Шаге 2. Настраивайте агрессивность под то, как вы на самом деле используете машину.