Linux security hardering
1. Открываем конфиг /etc/ssh/sshd_config
P.S. Предварительно зайдите на сервер из удалённой или локальной консоли
2. Заносим данные параметры:
Port 65343 ← Выбираем порт из верхнего диапазона
ListenAddress 158.16.6.7 ← Указываем на каком адресе будет слушаться наш демон (можно указать несколько параметров ListenAddress)
Protocol 2 ← Использование только протокола SSH2
UsePrivilegeSeparation yes ← Подключившийся пользователь может создать только процессы от своих привилегий
Ciphers aes256-ctr,aes192-ctr ← Используюм только CTR, вместо CBC и более старых версий как 3des-cbc(перед тем как это использовать, убедитесь что вам ssh клиент поддерживает данный набор шифров)
MACs hmac-sha2-256,hmac-sha2-512-96 ← Так же как и для шифров, используем более криптостойкие алгоритмы
KeyRegenerationInterval 3600 ← Время (в секундах) автоматической генерации серверного ключа
ServerKeyBits 2048 ← Увеличиваем битность серверного ключа
PermitEmptyPasswords no ← Запрещяем заход с путым паролем
StrictModes yes ← Жесткий режим
PubkeyAuthentication yes ← Переходим на авторизацию по открытым ключам
AuthorizedKeysFile %h/.ssh/authorized_keys ← Указываем путь, где должны храниться публичные ключи пользователей
IgnoreRhosts yes ← Отключаем rhost
HostbasedAuthentication no ← Отключаем авторизацию по хосту
PasswordAuthentication no ← Отключаем аутентификацию по паролю
KerberosAuthentication no ← Отключаем поддержку Kerberos
GSSAPIAuthentication no ← Отключаем поддержку GSSAPI
AllowTcpForwarding no ← Запрещаем проброс порта
AllowAgentForwarding no ← Запрещаем проброс через ssh-agent
X11Forwarding no ← Отключаем проброс иксов.
UsePAM yes ← Включаем поддежку PAM
AllowUsers user3@10.20.30.0/24 ← Указываем пользователей и src. net. из которой можно авторизоваться на сервере
1. Переходим в директорию /etc и вводим ls -l | grep cron
2. Меняем права у файла crontab. Делаем его доступным для чтения и записи только для пользователя root chmod 0600 crontab
3. Далее разрешаем создавать «кроны» только руту: создаём файл touch cron.allow && echo «root» > cron.allow && /etc/init.d/cron restart
1. Открываем файл /etc/shells и убираем от туда все лишние шеллы, кроме bash и sh
2. В директории /etc/skell находим файл .bash_logout и записываем туда следующие строки:
history -c
/bin/rm -rf ~/.bash_history
3. Теперь у нас для каждого пользователя, у которого будет этот файл, будет затираться история его команд, после того как он выйдет из оболочки.
P.S. В свой .bash_logout который находится в вашем «хомяке», тоже не забываем это добавить.
1. После установки утилиты sudo вам необходимо отредактировать конфиг /etc/sudoers. Для этого вводим команду visudo:
Defaults env_keep += "HOME" #У каждого пользователя по дефолту будет своя домашняя директория а не /root Defaults logfile=/var/log/sudo.log, log_year #Вести запись тех, кто выполнил команду или повысил свои привилегии через sudo. Хранить логи в течении года Defaults mailto=admin@domain.com, mail_badpass, mail_no_user, mail_no_perms #отправлять по почте уведомления о тем, кто ввёл неправильный пароль, либо неизвестный пользователь пытался выполнить команду/заход из под sudo Defaults editor=/usr/bin/vim #При использовании visudo будет задействован этот редактор Defaults timestamp_timeout = 0 #В дальнейшем не запоминать удачный ввод пароля для пользователя. Defaults secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" #Инициализируем переменную PATH User_Alias ADMINS=user1,user3,mydak #Перечисляем в переменной ADMINS пользователей, которые будут иметь наивысшие привилегии root ALL=(ALL:ALL) ALL ADMINS ALL=(ALL) ALL #Собственно прописываем то, что у пользователей из ADMINS будет максимальные привилегии. user3 ALL=(ALL:ALL) NOPASSWD:/sbin/iptables -vnL #Пользователю user3 разрешено без ввода пароля использовать эту команду (удобно когда нужно дать определённые привилегии для какого-нибудь демона)
2. Далее убедитесь в том, что в конфиге не присутствует никаких лишних строк, которые открывают дополнительные привилегии для пользователей.
1. etckeeper - это аналоги системы контроля версий для всей директории /etc, которая позволяет нам локально, при помощи git, bzr или darcs отслеживать изменения.
2. Скачиваем из дефолтных репозиториев apt-get install etckeeper
WARNING: Предварительно убедитесь, что ни в одной из директорий в /etc, нет локальных репозиториев с git`ом. А иначе будет масса проблем в работе etckeeper, из-за того, что он устанавливает свой репозиторий прямо в /etc/.git
3. После установки. Мы теперь можем просто зайти в директорию /etc и при помощи git просматривать изменения
4. Для CentOS 5 создавать репозиторий надо самостоятельно после установки:# cd /etc && etckeeper init && git commit -am «init /etc»
1. Устанавливаем утилиту: apt-get install changetrack
2. В конфиге /etc/changetrack.conf перечисляем файлы и директории для контроля изменений. Например:
/etc/aliases
/etc/init.d/*
/etc/cron.daily/*
/etc/passwd
…
/etc/sysctl.conf
3. В конфиге /etc/default/changetrack в поле PARAMS= редактируем опции:
-o root ← Указываем на чей почтовый ящик присылать письмо с уведомлением об изменениях
-f changetrack@`/bin/hostname -f` ← Указываем данные отправителя(Поле FROM)
4. Проверки происходят раз в час, смотри скрипт /etc/cron.hourly/changetrack.
http://rkhunter.sourceforge.net/
Программа предназначена для обнаружения руткитов и уязвимых мест в вашей системе.
Все примеры указаны для дистрибутива Debian 8
1. Установливаем rkhunter: # apt-get install rkhunter
2. Редактируем основной конфиг /etc/rkhunter.conf:
UPDATE_MIRRORS=1 ← Ибновляем список зеркал
MIRRORS_MODE=0 ← Использовать любой вид зеркал (локальный и удалённый)
MAIL-ON-WARNING=admin@example.com ← Вписываем свой почтовый ящик, куда будут складироваться письма о том, что на хосте обнаружены уязвимости
MAIL_CMD=mail -s «[rkhunter] Warnings found for ${HOST_NAME}« ← Комманда использующаяся для отправки писем
TMPDIR=/var/lib/rkhunter/tmp ← Директория для увременных файлов rkhunter
DBDIR=/var/lib/rkhunter/db ← Директория с базами rkhunter
SCRIPTDIR=/usr/share/rkhunter/scripts ← Директория для скриптов rkhunter
BINDIR=/bin /usr/bin /sbin /usr/sbin /usr/local/bin +/usr/local/sbin ← Указываем директории с бинарными программами
LANGUAGE=en ← Указываем язык
UPDATE_LANG=«en» ← Указываем какой язык будет обновляться
LOGFILE=/var/log/rkhunter.log ← Указываем путь к лог файлу rkhunter
AUTO_X_DETECT=1 ← Указываем стоит ли обнаружать X сеансы и приложения
WHITELISTED_IS_WHITE=1 ← Подсвечивать белым цветом исключения при запуске в списке сканирования
ALLOW_SSH_ROOT_USER=no ← Указываем должен ли логиниться root пользователь в систему через SSH
ALLOW_SSH_PROT_V1=0 ← Разрешено ли использование SSH версии 1
SSH_CONFIG_DIR=/etc/ssh ← Директория с конфигами OpenSSH
ENABLE_TESTS=ALL ← Использовать все тесты
DISABLE_TESTS=hidden_procs deleted_files packet_cap_apps ← Список не нужных нам тестов
HASH_CMD=SHA512 ← Выбираем хэш функцию для контрольных сумм
PKGMGR=DPKG ← Указываем дефолтный низкоуровневых пакетный менеджер
SCRIPTWHITELIST=/usr/sbin/adduser ← Добавляем скрипт в исключение (орёт на то когда в директории для бинарей лежат скрипты)
ALLOWHIDDENDIR=/etc/.git ← Указываем разрешённые скрытые директории
ALLOWHIDDENFILE=/etc/.gitignore ← Указываем разрешённые скрытые файлы
SCAN_MODE_DEV=THOROUGH ← «Грубый» режим сканирования
ALLOWPROMISCIF=eth0 ← Указываем сетевые интерфейсы на которых разрешено использовать Promisc режим
PHALANX2_DIRTEST=1 ← Сканировать все директории в /etc и /usr
STARTUP_PATHS=/etc/init.d /etc/rc.local ← Директории с init скриптами и скриптами автозапуска
PASSWORD_FILE=/etc/shadow ← Файл с паролями
UID0_ACCOUNTS=toor ← Указываем пользователей с выставленным нулевым UID, если такие есть в системе
SYSLOG_CONFIG_FILE=/etc/rsyslog.conf ← Путь к syslog конфигу
ALLOW_SYSLOG_REMOTE_LOGGING=0 ← Разрешена ли удалённая пересылка сислог сообщений
SUSPSCAN_DIRS=/tmp /var/tmp ← Директории разрешённые для записи всем пользователям
SUSPSCAN_TEMP=/dev/shm ← Разрешённые временные файлы для SUSPSCAN проверки
OS_VERSION_FILE=/etc/debian_version ← Файл с названием и версией дистрибутива
PORT_WHITELIST=TCP:33433 UDP:44444 ← Список разрешённых портов в режиме прослушки из верхнего диапазона
WARN_ON_OS_CHANGE=1 ← Высылать предупреждения об изменении версии операционной системы
UPDT_ON_OS_CHANGE=0 ← Обновлять базы изменений, если произошло обновление системы
SHARED_LIB_WHITELIST=/lib/snoopy.so ← Разрешённые динамически подгружаемые библиотеки
SCANROOTKITMODE=THOROUGH ← Грубый режим антируткит проверки
UNHIDE_TESTS=sys ← Режим unhide проверки
DISABLE_UNHIDE=1 ← Отключить ли UNHIDE сканирование (я отключаю из-за частеньких ложных срабатываний)
INSTALLDIR=/usr ← Основная директория для установки новых программ в системе
3. Теперь открываем файл /etc/default/rkhunter
CRON_DAILY_RUN=«true» ← Запускать ли rkhunter каждый день
CRON_DB_UPDATE=«true» ← Автозапуск обновлений баз
DB_UPDATE_EMAIL=«false» ← Высылать уведомления о статусе обновления баз
REPORT_EMAIL=«admin@domain.com» ← Указываем почтовый ящик на который будут приходить уведомления от ужудневного сканирования
NICE=«0» ← Сказываем nice приоритет для rkhunter
4. Теперь нам необнодимо одновить определения rkhunter введя комманду: rkhunter –propupd
5. Список полезных файлов и основных комманд:
Файлы:
/etc/cron.daily/rkhunter ← Основной скрипт автозапуска
/var/lib/rkhunter/db/mirrors.dat ← Файл где указан путь к зеркалам rkhunter
/var/lib/rkhunter/db/rkhunter.dat ← Основной файл где копится информация о состоянии фашей системы
/var/lib/rkhunter/db/backdoorports.dat ← Список подозрительных портов
/var/lib/rkhunter/db/programs_bad.dat ← Список старых версий программ
Комманды:
rkhunter –update ← Ручное обновление баз
rkhunter –propupd ← Обновление определений
rkhunter –check –sk ← Подробный вывод о сканировании
rkhunter –check –sk –nomow –rwo ← Запустить сканирование без отправки уведомления на почту и вывести только информацию о warning
rkhunter –list tests ← Список доступных тестов
1. Устанавливаем snoopy:
2. apt-get install snoopy либо качаем отсюда repo
3. После установки у вас в /etc появится новый файл ld.so.preload в котором будет прописан путь в данной библиотеке. И теперь все действия наших пользователей будут логироваться в /var/log/auth.log (deb) или /var/log/secure (rpm)
4. Snoopy работает как динамически подгружаемая библиотека, что бы увидеть её, мы можем в текущем сеансе ввести lsof | grep snoopy
Про OSSEC будет отдельная статья, так как OSSEC это куда более «глобальный» инструмент, чем локальное отслеживание изменений.
Про Snort будет отдельная статья
https://github.com/bwalex/tc-play
Программа для шифрования базирующаяся на TrueCrypt