Ssh настройка: различия между версиями
imported>Vix Нет описания правки |
imported>Vix |
||
Строка 267: | Строка 267: | ||
* вносим изменения в файл /etc/hosts.deny | * вносим изменения в файл /etc/hosts.deny | ||
sshd: ALL | sshd: ALL | ||
ИСТОЧНИКИ: | |||
<hr> | |||
* [http://diff.org.ua/archives/2317 ssh — Ограничение доступа по GeoIP] | |||
* [https://tecadmin.net/allow-server-access-based-on-country/# How to Allow SSH/FTP Access Based on Country using GeoIP] |
Версия от 03:31, 5 февраля 2018
Настройка сервера SSH
Настройка сервера SSH, то есть программы-демона sshd, производится через файл конфигурации, расположенный по адресу:
/etc/ssh/sshd_config.
AcceptEnv
Переменных среды, принимаемые от клиента, если были установлены, и копируемые в environ текущего сеанса. На стороне клиента данную настройку устанавливает параметр SendEnv подробное описание можно посмотреть в man ssh_config. Указывать нужно имена переменных, разрешается использовать символы подстановки "*" и "?". Если вам нужно передать больше одной переменной, указывайте их через пробел, или в нескольких директивах AcceptEnv. Данная директива введена с целью повышения безопасности, что-бы нельзя было обойти ограничения среды пользователя, путем изменения переменных среды. По-умолчанию, переменные не принимаются.
AddressFamily
Семейство сетевых адресов, разрешенных для использования демоном sshd. Возможные значения: "any", "inet", (только для IPv4) и "inet6" (только для IPv6). По-умолчанию "any", то есть любые.
AllowTcpForwarding
Разрешает TCP форвардинг ( перенаправление ). Отключения данного параметра не увеличивает безопасность системы, пока пользователям разрешен удаленный доступ, при желании, они всегда могут установить свои перенаправления. По-умолчанию "yes".
AllowGroups
Шаблоны имён групп, разделенные пробел. Если данная директива определена, вход в систему по протоколу SSH, разрешен только пользователям, чьи, основная или дополнительная группы, совпадают с одним из шаблонов. Директива понимает только имена групп, здесь нельзя использовать цифровой идентификатор GID. Порядок обработки директив Allow/Deny следующий: DenyUsers -> AllowUsers -> DenyGroups -> AllowGroups. По-умолчанию, вход в систему разрешен членам всех групп.
AllowUsers
Имена пользователей разделенные пробелом. Если данная директива определена, вход в систему по протоколу SSH, разрешен только пользователям, чьи имена, совпадают с одним из шаблонов. Как и в случае с AllowGroups, распознаются только имена, UID не используется. Если шаблон определен в форме ПОЛЬЗОВАТЕЛЬ@ХОСТ, обе части проверяются отдельно, и доступ будет разрешен только пользователю с указанным именем и только с указанного хоста. Порядок обработки директив Allow/Deny следующий: DenyUsers -> AllowUsers -> DenyGroups -> AllowGroups. По-умолчанию, доступ разрешен всем.
DenyGroups
Шаблоны имен групп через пробел. Данный параметр запрещает доступ пользователям, имена групп которых, совпадают с шаблоном. Используются только имена групп, GID не разрешен. Порядок обработки директив Allow/Deny следующий: DenyUsers -> AllowUsers -> DenyGroups -> AllowGroups. По-умолчанию вход разрешен для всех.
DenyUsers
Имена пользователей через пробел. Пользователям, чьи имена перечислены в данной директиве, доступ в систему запрещен. Если шаблон указан в виде ПОЛЬЗОВАТЕЛЬ@ХОСТ, доступ запрещается только указанному пользователю, только с указанного хоста. Порядок обработки директив Allow/Deny следующий: DenyUsers -> AllowUsers -> DenyGroups -> AllowGroups. По-умолчанию вход разрешен для всех пользователей.
AuthorizedKeysFile
Путь к файлу с открытыми ключами для аутентификации.. В директиве можно использовать шаблоны, они преобразуются при настройке соединения: %% заменяется на символ %, %h на домашний каталог пользователя, %u, на имя пользователя. После преобразования AuthorizedKeysFile рассматривается как абсолютный путь, или как путь относительно домашнего каталога пользователя. По-умолчанию: ".ssh/authorized_keys".
Banner
Файл с сообщением, которое будет показано пользователю перед входом в систему. Работает только с протоколом 2.
ChallengeResponseAuthentication
Разрешена ли беcпарольная аутентификация "запрос-ответ". Поддерживаются все механизмы аутентификации login.conf. По-умолчанию "yes".
Ciphers
Разрешенные алгоритмы шифрования для протокола 2, указываются через запятую. Возможны следующие варианты: "3des-cbc", "aes128-cbc", "aes192-cbc",'"aes256-cbc", "aes128-ctr", "aes192-ctr", "aes256-ctr", "arcfour128", "arcfour256", "arcfour", "blowfish-cbc" и "cast128-cbc". По-умолчанию: aes128-cbc, 3des-cbc, blowfish-cbc, cast128-cbc, arcfour128, arcfour256, arcfour, aes192-cbc, aes256-cbc, aes128-ctr, aes192-ctr, aes256-ctr
ClientAliveCountMax
Количество проверок доступности клиента, которые могут оставаться без ответа. Если предел достигнут, sshd завершит сеанс. Данные запросы, отличаются от TCPKeepAlive, так как отправляются через защищённый канал и не могут быть подменены, в то время как TCPKeepAlive такую возможность допускает. СlientAlive полезен, если поведение клиента или сервера зависит от активности соединения. Если ClientAliveInterval (см. ниже) равно 15 секундам, а значение ClientAliveCountMax оставлено по-умолчанию, не отвечающие клиенты SSH, будут отключаться приблизительно через 45 секунд. Параметр работает только для протокола версии 2. По-умолчанию установлено значение 3.
ClientAliveInterval
Время простоя клиента в секундах, после которого демон sshd отправляет через защищённый канал запрос клиенту. Директива работает только для протокола 2. По-умолчанию стоит 0, то есть клиенту вообще не будут направляться такие запросы.
Compression
Данная директива позволяет разрешить сжатие сразу, разрешить после успешной аутентификации или отключить. Возможные значения: "yes", "delayed" или "no". По-умолчанию "delayed".
ForceCommand
В данной директиве можно указать команду, которая будет выполнена при входе пользователя в систему, игнорируя команды пользователя. Команда запускается оболочкой пользователя с ключом -c. Это относится к выполнению самой оболочки, команды или подсистемы. Используется обычно в блоке Match. Команда первоначально запрошенная пользователем, доступна в переменной среды SSH_ORIGINAL_COMMAND. Например, если прописать в данную директиву, файл-менеджер mc ( Midnight Commander ), ForceCommand mc, то при подключении пользователя по протоколу SSH, в его оболочке будет запущен mc, как только пользователь закроет mc, сессия связи будет разорвана. По-умолчанию: не определена.
GatewayPorts
Данная директива определяет, могут-ли ли удалённые хосты подключение к портам, выделенным для туннелирования трафика клиентов. По-умолчанию, сервер sshd разрешает доступ к портам, используемым для туннелирования инициируемого сервером, только для петли (loopback), т.е. удалённые машины подключаться к перенаправляемым портам не могут. Данный параметр позволяет это исправить. Значение "no" разрешает туннелирование только в рамках данной системы, "yes" разрешает туннелирование для хостов соответствующих шаблону, а "clientspecified" позволяет клиенту самостоятельно выбирать адрес для туннелирования. По-умолчанию "no".
GSSAPIAuthentication
Включить GSSAPI аутентификацию. Только для протокола версии 2. По-умолчанию "no".
GSSAPICleanupCredentials
Очищать ли кэш данных аутентификации клиента, при завершении сеанса связи. Только для протокола версии 2. По-умолчанию "yes".
HostbasedAuthentication
Использовать HostBased аутентификацию, т.е. аутентификацию по rhosts или /etc/hosts.equiv, в сочетании с открытым ключом клиента. Эта директива похожа на RhostsRSAAuthentication. Только для протокола версии 2. По-умолчанию "no".
HostbasedUsesNameFromPacketOnly
Выполнять запрос имени хоста при проверке файлов ~/.shosts ~/.rhosts и /etc/hosts.equiv, в рамках HostBased аутентификации. Если "yes", для проверки будет использоваться имя указанное клиентом, а не имя полученное средствами TCP соединения. По-умолчанию "no".
HostKey
Файл хранения приватных ключей хоста. Имейте в виду, что файлы с приватными ключами, не должны быть доступны для чтения всей группе или другим пользователям, в таком случае sshd их не примет. Возможно указание нескольких файлов ключей. Ключи rsa1, используются протоколом версии 1, ключи dsa и rsa, для версии 2, протокола SSH. По-умолчанию /etc/ssh/ssh_host_key для протокола 1, /etc/ssh/ssh_host_rsa_key и /etc/ssh/ssh_host_dsa_key для протокола 2.
IgnoreRhosts
Игнорировать содержимое файлов .rhosts и .shosts, при аутентификации RhostsRSAAuthentication и HostbasedAuthentication. Учитываться будут только /etc/hosts.equiv и /etc/shosts.equiv. По-умолчанию "yes".
IgnoreUserKnownHosts
Игнорировать содержимое файла ~/.ssh/known_hosts, при RhostsRSAAuthentication или HostbasedAuthentication . По-умолчанию "no".
KerberosAuthentication
Включает поддержку аутентификации Kerberos: Проверять ли пароль пользователя для PasswordAuthentication , в Kerberos KDC. Это может быть "билет" Kerberos, либо, пароль пользователя, будет проверен через Kerberos KDC, если включен PasswordAuthentication. Для данной директивы, серверу, необходима Kerberos servtab, разрешающая проверку субъекта KDC. По-умолчанию "no".
KerberosGetAFSToken
Если AFS включена и у пользователя имеется Kerberos 5 TGT, получать талон AFS перед обращением к домашнему каталогу пользователя. По-умолчанию "no".
KerberosOrLocalPasswd
Если аутентификация по Kerberos не проходит, проверять пароль другими средствами, например /etc/passwd. По-умолчанию "yes".
KerberosTicketCleanup
Очистка кэша "билетов" пользователя при завершении сеанса. По-умолчанию "yes".
KeyRegenerationInterval
Для протокола версии 1, ключ сервера будет регенерироваться по истечении количества секунд, указанных данным параметром, (в случае его использования). Целью регенерации, является, защита уже установленных, шифрованных сессий от перехвата ключей. Ключ нигде не сохраняется. Значение 0, запрещает регенерацию. По-умолчанию 3600 секунд.
ListenAddress
Локальный адрес ( или адреса ), на которых сервер sshd будет принимать соединения. Формат записей может быть следующим: ListenAddress имя хоста или адрес-IPv4 / IPv6 ListenAddress имя хоста или адрес-IPv4 : порт ListenAddress имя хоста или адрес-IPv6 : порт Без указания порта, сервер sshd, будет ожидать соединений на данном адресе и на портах, указанных ранее в директиве Port, если директива Port не была назначена, соединения принимаются на 22 порту. По-умолчанию сервер sshd, ожидает соединений на всех локальных адресах. Допускается многократное использование директивы, для указания более чеи одного адреса.
LoginGraceTime
Время ожидания регистрации пользователю в системе. Если пользователь, не успел войти в систему в течении отведенного данной директивой времени, сеанс обрывается. Если установлено 0, время на вход не ограничено. По-умолчанию 120 секунд.
LogLevel
Устанавливает так называемый, уровень логгирования событий. сервера sshd. Допустимые значения: QUIET, FATAL, ERROR, INFO, VERBOSE, DEBUG, DEBUG1, DEBUG2, DEBUG3. Значения DEBUG и DEBUG1 являются эквивалентами. Значения DEBUG*, использовать не рекомендуется, так нарушается конфиденциальность пользователей. По-умолчанию: INFO.
MACs
Разрешенные MAC (Message Authentication Code ), алгоритмы. Используются протоколом версии 2 для гарантирования целостности передаваемых данных. Алгоритмы указываются через запятую. По-умолчанию: "hmac-md5,hmac-sha1,hmac-ripemd160,hmac-sha1-96,hmac-md5-96".
Match
Директива условие, образует блок. Если условия в самой директиве удовлетворены, входящие в блок директивы имеют приоритет над указанными в глобальном разделе файла конфигурации. Окончанием блока может быть, либо следующая директива Match, либо конец файла. Аргументами директивы Match, являются пары, критерий-шаблон, возможные критерии: User, Group, Host, и Address. В блоке Match можно использовать следующие директивы: AllowTcpForwarding, Banner, ForceCommand, GatewayPorts, GSSApiAuthentication, KbdInteractiveAuthentication, KerberosAuthentication, PasswordAuthentication, PermitOpen, RhostsRSAAuthentication, RSAAuthentication, X11DisplayOffset, X11Forwarding, X11UseLocalHost .
MaxAuthTries
Количество попыток входа в систему в рамках сеанса связи. Неудачные попытки входа регистрируются в системном журнале регистрации событий. При достижении максимально разрешенного числа попыток, сеанс обрывается. По-умолчанию 6.
MaxStartups
Число одновременных соединений, в которых еще не пройдена аутентификация. При достижении данного значения, последующие соединения будут сбрасываться, пока не будет пройдена аутентификация, на уже установленных соединениях или пока не истечет время, установленное директивой LoginGraceTime. В качестве альтернативы может быть использован механизм раннего, случайного отказа в подключении, путем установки разделённых двоеточием значений "старт:норма:предел" (например, "10:30:60"). Соединение будет сбрасываться с вероятностью "норма/100" (30%) если имеется "старт" (10) соединений с не пройденной аутентификацией. Вероятность возрастает линейно, и всем соединениям будет отказано, если количество не прошедших аутентификацию соединений достигнет числа "предел" (60). По-умолчанию 10.
PasswordAuthentication
Разрешить аутентификацию по паролю. По-умолчанию "yes".
PermitEmptyPasswords
Разрешить использование пустых паролей при аутентификации по паролю. По-умолчанию "no".
PermitOpen
Директива ограничивает возможные конечные точки для TCP туннелей. Формат записи следующий: PermitOpen хост : порт PermitOpen адрес-IPv4 : порт PermitOpen [ адрес-IPv6 ] : порт Разрешено указывать нескольких конечных точек, разделяя их пробелом. Значение "any" снимает ограничение и установлено по-умолчанию.
PermitRootLogin
Разрешить пользователю root вход через протокол SSH. Возможные значения: "yes", "without-password", "forced-commands-only", "no". Если директива установлена в "without-password" вход для пользователя root по паролю, будет запрещен. Значение "forced-commands-only" разрешает регистрацию пользователя root по открытому ключу, но только если установлен параметр command ( может пригодиться для удалённого создания резервных копий, даже если вход пользователя root по протоколу SSH, в обычном режиме запрещен ). Остальные способы аутентификации для пользователя root будут запрещены. Значение по умолчанию "no", удаленный вход в систему пользователем root, полностью запрещён.
PermitTunnel
Разрешать-ли использовать форвардинг для устройств tun. Возможные значения: "yes", "point-to-point" (уровень 3), "ethernet" (уровень 2), "no". Значение "yes", одновременно эквивалентно значениям, "point-to-point" и "ethernet". По-умолчанию "no".
PermitUserEnvironment
Директива определяет, принимать-ли во внимание содержимое ~/.ssh/environment и параметры environment= в файле ~/.ssh/authorized_keys. Изменяя переменные окружения, пользователь может обойти ограничения своих полномочий, например, с помощью механизма LD_PRELOAD. По-умолчанию "no".
PidFile
PID-файл в который записывается идентификатор процесса, сервера sshd. По-умолчанию /var/run/sshd.pid.
Port
Порт, на котором сервер sshd, принимает и обслуживает соединения. Директиву можно указывать несколько раз для разных портов. Кроме того, если есть возможность, в целях безопасности, рекомендуется сразу изменить значение по-умолчанию. В некоторой степени, это оградит систему от постоянных попыток перебора пароля, на стандартном порту. По-умолчанию 22.
PrintLastLog
Показывать-ли ли время и дату последнего входа в систему, при интерактивной регистрации пользователя в ней. По-умолчанию "yes".
PrintMotd
Показывать-ли содержимое файла /etc/motd при интерактивном входе пользователя ( в некоторых системах это выполняется сценарием /etc/profile или аналогом ). По-умолчанию "yes".
Protocol
Какую версию протокола использовать. Возможные значения 1 и 2. можно указать через запятую. В данный момент протокол версии 1, использовать не рекомендуется из соображений безопасности. По-умолчанию: 2.
PubkeyAuthentication
Разрешить аутентификацию по открытому ключу. Только для протокола версии 2. По-умолчанию "yes".
RhostsRSAAuthentication
Разрешить аутентификацию по файлам .rhosts или /etc/hosts.equiv, совместно с аутентификацией по хосту RSA. Только для протокола версии 1. По-умолчанию "no".
RSAAuthentication
Разрешить аутентификацию только по ключу RSA. Только для протокола версии 1. По-умолчанию "yes".
ServerKeyBits
Длина ключа сервера для протокола версии 1. Минимальное значение - 512, По-умолчанию: 768.
StrictModes
Директива определяет, проверять-ли права доступа и владельца конфигурационных файлов и домашнего каталога, перед разрешение входа пользователя в систему. Рекомендуется выполнять данную проверку, новички частенько оставляют свои каталоги или файлы доступными на запись другим пользователям. По-умолчанию "yes".
Subsystem
Включает внешнюю подсистему (например FTP). В качестве параметров понимает, имя подсистемы и команду, которая будет выполнена при запросе подсистемы. Команда sftp-server, реализует протокол передачи файлов через SSH, "sftp". Только для протокола версии 2. По-умолчанию: не установлена.
SyslogFacility
Код сообщений для протокола syslog. Возможные значения: DAEMON, USER, AUTH, LOCAL0, LOCAL1, LOCAL2, LOCAL3, LOCAL4, LOCAL5, LOCAL6, LOCAL7. По-умолчанию: AUTH.
TCPKeepAlive
Поддерживать-ли соединение в активном состоянии, для этого используются специальные контрольные сообщения, посылаемые с определенным интервалом времени. Если директива установлена, обрыв соединения будет вовремя замечен, а соответствующий процесс будет убит. Возможные значения "yes", "no". По-умолчанию: "yes".
UseDNS
Использовать DNS запросы, для определения имени удалённого хоста, с целью проверки, что обратное преобразование возвращает правильный IP-адрес. По-умолчанию: "yes".
UseLogin
Использовать login для интерактивного входа в систему. Имейте в виду, login, не используется для удалённого выполнения команд. Если директива включена, функция X11Forwarding будет отключена, поскольку login, не умеет обрабатывать cookie xauth. Если используется разделение полномочий, UsePrivilegeSeparation, директива будет отключена, после прохождения аутентификации. По-умолчанию: "no".
UsePAM
Включить дополнительные, подключаемые модули аутентификации ( Pluggable Authentication Module ). Возможные значения "yes", "no". Если данная директива включена, PAM аутентификация, будет доступна через ChallengeResponseAuthentication и PasswordAuthentication, в дополнение к учётной записи PAM и обработке модулей для всех видов аутентификации. Так как беспарольная аутентификация PAM "вызов-ответ", является заменой аутентификации по паролю, нужно отключить, либо PasswordAuthentication, либо ChallengeResponseAuthentication. Если директива UsePAM включена, сервер sshd, можно выполнять только с правами пользователя root. По-умолчанию: "no".
UsePrivilegeSeparation
Разделять полномочия путем создания дочернего процесса с меньшими привилегиями, для обработки входящего трафика. После успешной аутентификации пользователя, будет запущен отдельный процесс, с правами данного пользователя. Данная директива используется в целях повышения безопасности, что-бы предотвратить повышение своих полномочий, недобросовестному пользователю. По-умолчанию: "yes".
X11DisplayOffset
Номер первого дисплея доступного для туннелирования трафика X11, сервером sshd. Позволяет избежать вмешательства сервера sshd в работу настоящих серверов X11. По-умолчанию - 10.
X11Forwarding
Разрешить туннелирование X11. Возможные значения "yes", "no". Если дисплей-посредник ожидает соединений на любых адресах ( подстановка "*"), включение туннелирования X11, подвергает сервер и виртуальные дисплеи пользователей, дополнительной опасности. По этой причине, такое поведение не является поведением по-умолчанию. Проверка и подмена данных аутентификации при атаке выполняются на стороне клиента. При туннелировании X11 графический сервер клиента, может подвергаться атаке, при запросе клиентом SSH туннелирования. Для большей безопасности администратор может запретить туннелирование, установив значение "no". Имейте в виду, даже если туннелирование X11 запрещено данной директивой, пользователи по-прежнему смогут туннелировать трафик X11, настроек туннели общего назначения. Туннелирование X11 отключается автоматически при включении параметра UseLogin. По-умолчанию: "no".
X11UseLocalhost
Директива определяет, на какой адрес, sshd повесит сервер для форвардинга X11, на так называемую петлю ( 127.0.0.1 ) или на подстановку "*" ( любой ). По-умолчанию sshd привязывает сервер туннелирования к петле, а в качестве хоста, в переменную среды DISPLAY заносит "localhost". Это не позволяет удалённым хостам подключаться к дисплею-посреднику. Однако, в случае старых клиентов X11, такая конфигурация может не сработать, в этом случае можно установить значение "no". Возможные значения: "yes", "no". По-умолчанию: "yes".
XAuthLocation
Указывает путь к команде xauth. По-умолчанию: /usr/X11R6/bin/xauth.
Защита ssh по geo-ip
- устанавливаем необходимые пакеты:
apt-get install geoip-bin geoip-database
- -[!] ни в коем случае не ставим geoip-database-extra
- создаем скрипт для опроса входящего хоста на принадлежность к стране, все кто не RU - под запретом.
echo > /usr/local/bin/ssh-geoip.sh editor /usr/local/bin/ssh-geoip.sh
#!/usr/bin/env bash PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin:/root/bin" ALLOW_COUNTRIES="RU" #echo $ALLOW_COUNTRIES if [ $# -ne 1 ]; then echo "Usage: `basename $0` <ip>" 1>&2 exit 0 # return true in case of config issue fi COUNTRY=`geoiplookup $1 |sed -e 's/^.*Edition\:\ //' -e 's/\,.*$//'` if [[ ${COUNTRY} = "IP Address not found" ]]; then logger "sshd ALLOW connection from IP $1 - [LAN]" exit 0 elif [[ ${COUNTRY} =~ ${ALLOW_COUNTRIES} ]]; then logger "sshd ALLOW connection from IP $1 - [${COUNTRY}]" exit 0 else logger "sshd DENY connection from IP $1 - [${COUNTRY}]" exit 1 fi
- вносим изменения в файл /etc/hosts.allow
sshd: 192.168.5. # сюда вносим сеть которая разрешена по умолчанию без проверок, например локальная sshd: ALL: aclexec /usr/local/bin/ssh_geoip.sh %a
- вносим изменения в файл /etc/hosts.deny
sshd: ALL
ИСТОЧНИКИ: