Ssh настройка

Материал из support.qbpro.ru

Настройка сервера 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".

Файл с сообщением, которое будет показано пользователю перед входом в систему. Работает только с протоколом 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