Три замка на воротах SSH

Усложните жизнь потенциальным хакерам

Безопасность всегда должна быть многоуровневой. Хорошим примером этого является SSH. Используемые методы защиты варьируют от простой настройки sshd с помощью PAM с целью указать, кто может использовать SSH, до применения технологии port-knocking и до сокрытия самого факта существования доступа через SSH. Применение этих методов может существенно усложнить жизнь потенциальным взломщикам, которым придется преодолеть три нестандартных препятствия.

Федерико Кереки, системный инженер, Независимый разработчик

Photo of Federico KerekiФедерико Кереки (Federico Kereki) – системный инженер из Уругвая, за плечами которого более 20 лет опыта системной разработки, консалтинга и преподавания в университетах. В настоящее время он работает с широким кругом технологий, в частности SOA, GWT, Ajax, PHP и, разумеется, FLOSS. Связаться с Федерико можно по адресу fkereki@gmail.com.



23.03.2012

Введение

Если вам необходим удаленный доступ к компьютеру и вы разрешили подключение через Secure Shell (SSH), смиритесь с тем, что вы автоматически становитесь мишенью для хакеров, которые попытаются пробить оборону и получить доступ к вашему компьютеру. И хотя нельзя дать никаких гарантий, что ваша машина не будет захвачена хакером, существует несколько простых решений, способных укрепить ваши ворота SSH и усложнить жизнь тем, кто попробует их взломать. Настоящая статья описывает три такие технологии:

Часто встречающиеся аббревиатуры

  • API: интерфейс для программирования приложений
  • DNS: система доменных имен
  • IETF: рабочая группа инженеров Internet
  • LDAP: облегченный протокол доступа к сетевому каталогу
  • RFC: запрос комментариев
  • TCP: протокол управления передачей
  • UDP: протокол пользовательских датаграмм
  1. Изменение номера стандартного порта SSH на другое значение и укрепление конфигурации SSH таким образом, чтобы простые атаки не имели эффекта.
  2. Определение ограниченного списка пользователей, имеющих право на подключение.
  3. Полное сокрытие факта существования доступа через SSH и обязательное применение специальной последовательности "стуков" для распознавания вероятного пользователя.

Для применения этих технологий вам потребуется доступ к учетной записи root. Также вам, вероятно, придется установить некоторые пакеты и соответствующим образом настроить брандмауэр и маршрутизатор (если таковой имеется), чтобы открыть или закрыть некоторые порты и перенаправить их в ваш компьютер.


Укрепление ворот

Концепция "обеспечения безопасности путем сокрытия" известна очень давно и была много раз раскритикована, поскольку, делая что-то скрытно в надежде, что никто не узнает о вашем методе, вы порождаете множество проблем. Тем не менее в некоторых ситуациях немного скрытности не повредит. И хотя настойчивых хакеров простыми мерами не остановишь, вы по крайней мере защитите себя от взломщиков-дилетантов, использующих не самые эффективные сценарии.

Всем известно, что подключение SSH использует стандартный порт 22. Поэтому первое, что нужно сделать для защиты вашего компьютера, — это просто изменить номер порта на другое, нестандартное, значение — например, на 22960. Как правило, номера портов выше 1024 можно использовать свободно, но во избежание проблем сверьтесь со справочником. Такое изменение означает, что для подключения к компьютеру вам просто придется использовать команду:

ssh -p 22960 your.machine.url

Для реализации этой уловки просто внесите изменение в файл /etc/ssh/sshd_config. Откройте его для редактирования (для этого нужно войти в систему как root), найдите строку Port 22 и замените ее значение выбранным вами числом (если строка закомментирована путем помещения в начало знака [#], не забудьте раскомментировать ее). Сохраните файл и перезапустите SSH командой /etc/init.d/sshd restart. Кроме того, нужно открыть выбранный порт в брандмауэре и закрыть порт 22.

Но это еще не все. Исправьте конфигурационный файл так, чтобы он содержал строки, показанные в листинге 1.Обратите внимание, что некоторые из этих строк могут уже присутствовать, но быть при этом закомментированными.

Листинг 1. Некоторые изменения в конфигурационном файле SSH могут повысить безопасность без существенных затрат
Port 22960 
LoginGraceTime 30 
MaxAuthTries 3 
Protocol 2 
PermitRootLogin no

Параметр LoginGraceTime отводит на вход в систему 30 секунд; если пользователь будет действовать дольше, в доступе будет отказано, и ему придется входить в систему повторно. MaxAuthTries ограничивает число неудачных попыток до трех, после чего попытки входа в систему блокируются. Строка Protocol 2 запрещает применение более слабых протоколов. И, наконец, последняя строка запрещает вход в систему с учетной записью root, усложняя жизнь хакерам. Помимо этого, для установки дополнительных ограничений можно использовать опции DenyUsers, AllowUsers, DenyGroups и AllowGroups. И хотя эти изменения лишь ненамного повышают безопасность компьютера, простой сценарий, использующий прямой перебор на стандартном порту 22, потерпит неудачу. Во всяком случае считайте это первым шагом в нужном направлении. Далее в этой статье вы узнаете о более действенных методах, позволяющих не только изменить номер порта, но и полностью его скрыть.


Кто может войти?

В контексте безопасности Linux® PAM означает Pluggable Authentication Modules— «подключаемые модули аутентификации». Эти модули определяют дополнительные правила аутентификации, затрудняя доступ к вашему компьютеру.

Давайте начнем с простого вопроса: зачем вообще нужен PAM? Если каждая программа начнет определять собственную логику аутентификации, получится только путаница. Как гарантировать применение всеми приложениями одинаковых методов проверки? Что делать, если потребуется дополнительный контроль — все перепрограммировать? Программисты иногда говорят, что любую проблему можно решить добавлением еще одного уровня, и по крайней мере для системы безопасности это совершенно справедливо. Если программе нужно аутентифицировать пользователя, она может вызвать API PAM. Этот API выполнит все проверки, указанные в конфигурационных файлах PAM. Такой метод позволяет даже изменять правила аутентификации в процессе работы, поскольку все совместимые с PAM программы начнут применять новые правила без внесения изменений в их код. Если вы хотите проверять биометрические данные (например, радужную оболочку глаза или опечатки пальцев) и изготовитель соответствующих сканеров предоставит вам PAM, — пожалуйста, проверяйте. После добавления вызова этого модуля в конфигурационные файлы устройство станет доступно всем приложениям.

Настройка PAM

PAM предоставляет четыре четко определенные зоны безопасности, хотя не все они могут понадобиться вашим приложениям. Например, команде passwd необходима лишь третья группа из приведенного ниже списка:

  • account определяет ограничения прав учетных записей. Если пользователь имеет право на вход, что ему позволено делать?
  • auth выполняет идентификацию пользователя — например, путем ввода имени пользователя и пароля.
  • password работает исключительно с функциями обработки паролей, такими как ввод нового пароля.
  • session управляет подключением, включая вход в систему.

Для каждого приложения, которое будет использовать PAM, нужно создать отдельный конфигурационный файл в директории /etc/pam.d, причем имя этого файла должно совпадать с именем приложения. Например, конфигурационный файл для команды login будет иметь имя /etc/pam.d/login.

Затем вам нужно определить, какие модули будут применяться, создав для этого "стек" операций. PAM исполняет все модули соответствующего стека и, в зависимости от результата их работы, подтверждает или отклоняет запрос пользователя. Также вы должны определить, являются ли проверки обязательными. И, наконец, файл other должен содержать стандартные правила для всех приложений, не требующих специальных правил.

  • Модули optional могут давать успешный или неуспешный результат; в зависимости от результата работы такого модуля PAM возвращает значение success (успех) или failure (неудача).
  • Модули required являются обязательными. В случае неудачи PAM возвращает значение failure, но только после исполнения всех остальных модулей этого стека.
  • Модули requisite тоже должны успешно завершить работу. Но если они потерпели неудачу, PAM сразу же возвращает значение failure, не исполняя другие модули.
  • В случае удачного завершения работы модулей sufficient PAM немедленно возвращает значение success, не исполняя другие модули.

Структура конфигурационного файла проста. В него можно включать комментарии, начинающиеся с символа #. Длинные строки можно разбивать, добавляя косую черту (\). Строки файла содержат три поля: область (account, auth, password или session), управляющий флажок (optional, required, requisite или sufficient), путь к модулю, который надо исполнить, и всевозможные параметры. Заметьте, что второе поле может быть более сложным; подробная информация об этом приведена в разделе Ресурсы. Кроме того, можно подключать правила из других файлов командой include, например, auth include common-account.

В качестве конфигурационного файла по умолчанию используется специальный файл /etc/pam.d/other (листинг 2). Содержащиеся в нем правила автоматически применяются ко всем приложениям, не имеющим собственных конфигурационных файлов. Рекомендую на всякий случай просмотреть директорию /etc/pam.d и просто переименовать все конфигурационные файлы, которые вы не используете (чтобы вместо них использовался конфигурационный файл other). Если вы решите, что некоторое приложение вам все-таки необходимо, просто верните соответствующему конфигурационному файлу исходное имя. Обычно стандартная конфигурация отклоняет все запросы (используя модуль pam_deny.so) и предупреждает администратора (через модуль pam_warn.so), чтобы он мог исправить ситуацию.

Стандартный конфигурационный файл "other" обеспечивает безопасный уровень защиты по умолчанию (отклонение всех запросов) для всех приложений, не имеющих собственного конфигурационного файла.

Листинг 2. Стандартный конфигурационный файл "other"
account required pam_deny.so 
auth required pam_deny.so 
auth required pam_warn.so 
password required pam_deny.so 
password required pam_warn.so 
session required pam_deny.so

Если заменить pam_deny.so на pam_unix.so, будет применен стандартный метод аутентификации (ввод имени пользователя и пароля). Аналогично, если вам не нужна защита, используйте вместо этого файл pam_permit.so, который с радостью пропустит все запросы!

Некоторые доступные модули

Хотя стандартного списка модулей не существует, все дистрибутивы включают большую часть перечисленных ниже опций. Загляните в директории /lib/security или /usr/lib/security, в которых хранятся модули. Для 64-разрядных операционных систем подставьте lib64 вместо lib. Если вам нужна дополнительная информация, попробуйте воспользоваться командой man имя.модуля, но не пытайтесь непосредственно его исполнить; модули PAM не являются двоичными исполняемыми файлами.

  • pam_access открывает или запрещает доступ в соответствии с файлом /etc/security/access.conf. Вы используете этот модуль позже для принятия решения о том, каким пользователям разрешен вход в систему.
  • pam_cracklib и pam_pwcheck проверяют стойкость новых паролей.
  • pam_deny и pam_permit являются базовыми модулями и всегда отклоняют или разрешают доступ.
  • pam_echo показывает пользователю содержимое указанного файла.
  • pam_lastlog показывает пользователю дату и время его последнего входа в систему.
  • pam_ldap.so позволяет пользователям аутентифицироваться на сервере LDAP, обеспечивая централизованную аутентификацию в пределах сети.
  • pam_limits позволяет определить предельные значения системных ресурсов, которые содержатся в файле /etc/security/limits.conf.
  • pam_listfile предлагает другой способ разрешения или отклонения сервисов в зависимости от содержимого файла.
  • pam_mail проверяет, есть ли у пользователя непрочитанные письма.
  • pam_motd показывает пользователю "сообщение дня".
  • pam_nologin блокирует все входы в систему, если существует файл с именем /etc/nologin.
  • pam_rootok открывает доступ для пользователя root без дальнейших проверок. Этот модуль обычно содержится в /etc/pam.d/su; необходимая строка имеет вид auth sufficient pam_rootok.so. Root может действовать от имени любого другого пользователя без необходимости ввода соответствующего пароля.
  • pam_succeed_if проверяет указанные характеристики учетной записи, например, принадлежность к некоторой группе.
  • pam_time может ограничить доступ к сервису в соответствии с правилами в файле /etc/security/time.conf.
  • pam_unix (или pam_unix2) предлагает классическую аутентификацию в стиле UNIX® в соответствии с файлами /etc/passwd и /etc/shadow.
  • pam_userdb предлагает аутентификацию по базе данных Berkeley.
  • pam_warn заносит информацию в системные журналы.
  • pam_wheel предоставляет доступ с правами root только членам группы wheel; необходимая строка имеет вид auth required pam_wheel.so.

Информацию о других модулях, а также о написании собственных модулей можно найти в разделе Ресурсы. А теперь пора опробовать PAM, чтобы решить, кому давать доступ к вашему компьютеру.

Ограничение доступа с помощью PAM

Теперь давайте используем PAM для ограничения доступа к вашему серверу. Для этого нужно отредактировать файл /etc/pam.d/sshd так, чтобы он выглядел как в листинге 3.

Листинг 3. Добавление pam_access.so в файл sshd PAM
#%PAM-1.0 
account include common-account 
account required pam_access.so 
auth include common-auth 
auth required pam_nologin.so 
password include common-password 
session include common-session

Добавление pam_access.so в файл sshd PAM позволяет просто определить, кто может использовать SSH для подключения к вашему компьютеру. Модуль pam_access.so реализует контроль безопасности на основе файла /etc/security/access.conf, как показано в листинге 4.

Листинг 4. С помощью pam_access.so можно определить, кому разрешено или запрещено использовать SSH
+ : ALL : 192.168.1. 
+ : jack : ALL 
+ : jill : ALL 
- : ALL : ALL

Первая строка разрешает подключение всем (ALL) участникам внутренней сети. Следующие две строки разрешают доступ к серверу пользователям jack и jill из любого места. Последняя строка является "ловушкой" (catch-all) и запрещает доступ всем остальным пользователям со всех других адресов. Другой способ разрешения доступа нескольким пользователям заключается в применении pam_listfile.so для создания списка разрешенных пользователей (например, /etc/ssh_users). Добавьте следующую строку в файл /etc/pam.d/sshd:

auth required pam_listfile.so item=user sense=allow 
   file=/etc/ssh_users onerr=fail

Но это еще не все. Нужно изменить файл /etc/ssh/sshd_config так, чтобы он использовал PAM. Добавьте в файл строку UsePAM yes и перезапустите демон sshd— вот теперь все!


А есть ли вообще ворота?

Даже если вы примените методы, описанные в двух предыдущих разделах, нужно исходить из того, что хакеры будут пытаться проникнуть во все бреши вашей системы, какие бы меры предосторожности вы ни предпринимали. Изменение номера порта SSH ставит некоторый барьер на пути неопытных нарушителей. Ограничения, наложенные на пользователей (при условии, что сам пользователь не подвергнется взлому или психологической атаке, в результате которой станет известен его пароль), тоже повышают уровень защиты. Однако сам факт существования входа в систему остается достаточным искушением для хакеров.

Самой надежной является последняя схема укрепления безопасности компьютера. Вы закрываете открытый порт, отражая тем самым практически все атаки. Порт открывается лишь для пользователей, применивших "секретный перестук", который открывает требуемый порт, чтобы пользователь мог ввести свой пароль и получить доступ к компьютеру.

Эта технология, получившая название port knocking (стук в порты), идеально подходит пользователям, которым нужен доступ к серверам, закрытым для общего доступа. Сервер может держать все свои порты закрытыми, пока пользователь не применит секретную последовательность стуков (такая последовательность легко реализуется и не требует больших ресурсов).После открытия секретных портов применяются обычные механизмы обеспечения безопасности (такие как проверка паролей или сертификатов). Все сервисы, использующие секретные порты, будут работать корректно с использованием дополнительного уровня безопасности, реализованного на уровне брандмауэра.

Суть этого метода заключается в том, чтобы закрыть все порты и контролировать внешние попытки подключения. После распознавания определенной специальной последовательности попыток (называемой последовательностью стуков) вы можете, например, открыть порт и позволить постучавшему войти. Последовательность стуков может быть сколь угодно сложной — от простого списка (например, обращение к TCP порту 7000; UDP порту 7100; TCP порту 7200) до набора однократно применяемых последовательностей. (Эта концепция аналогична шифру Вернама в криптографии — самому защищенному из всех известных методов шифрования.) Для получения доступа к SSH посторонний должен знать номер порта и пароль, а также последовательность стуков, необходимую для открытия этого порта и разрешения ввода пароля. Без этой последовательности попытки подключения просто терпят неудачу без всяких комментариев.

Почему эта схема столь хороша? Существуют 65535 доступных портов (см. раздел Ресурсы). Даже если исключить занятые порты, остаются еще более 60000 портов. Если остановиться на последовательности длиной всего в четыре "стука", хакеру, пытающемуся подобрать ее путем простого перебора, придется проверить почти 13 миллионов миллионов миллионов ( 13 с 18 нулями) возможных комбинаций. Ясно, что такая атака скорее всего не сработает! Конечно, нельзя считать, что простой перебор или выбор наудачу являются единственными способами подбора нужной последовательности. Поэтому мы используем не один-единственный метод защиты, а применяем несколько уровней защиты, что существенно усложняет жизнь хакерам.

Вам придется установить демон knockd; он контролирует последовательности стуков и начинает действовать при обнаружении правильной последовательности. Если хотите, можете скомпилировать его сами из исходного кода, но этот пакет входит в состав большинства (если не всех) дистрибутивов. Лучше использовать для установки демона средство управления дистрибутивом. Например, в OpenSUSE его можно установить с помощью Yast2 или выполнив команду sudo zypper install knockd. В Ubuntu вы можете аналогичным образом применить команду sudo apt-get install knockd, а в Debian — команду sudo aptitude install knockd. Просто поищите в средстве установки программ своего дистрибутива knockd.

Установив пакет, определите правила стука в порты, отредактировав соответствующим образом файл /etc/knockd.conf, и затем запустите демон. Чтобы выполнить все необходимые настройки, вы должны знать, как работает ваш брандмауэр. Например, в OpenSUSE можно использовать настройки вроде тех, что показаны в листинге 5.

Листинг 5. Пример конфигурационного файла для брандмауэра OpenSUSE
[opencloseSSH] 
  sequence= 7000,8000,9000 
  tcpflags= syn 
  seq_timeout= 15 
  cmd_timeout= 30 
  start_command= /usr/sbin/iptables -s %IP% -I input_ext 1 -p tcp --dport 22960 -j ACCEPT 
  stop_command= /usr/sbin/iptables -s %IP% -D input_ext -p tcp --dport 22960 -j ACCEPT

Приведенный выше пример открывает доступ к SSH после успешного стука в порты 7000, 8000 и 9000.

Перед запуском knockd закройте порт 22960 и попробуйте дистанционно войти в систему. Попытка должна быть неудачной, как показано ниже в листинге 6.

Листинг 6. Если вы закрыли доступ к SSH и не запустили демон стука, попытки входа в систему терпят неудачу
> ssh the.url.for.your.site -p 22960 -o ConnectTimeout=15 
ssh: connect to host the.url.for.your.site port 22960: Connection timed out

Теперь попробуйте еще раз, запустив демон стука командой sudo /etc/init.d/knockd start или sudo knockd -d; эти команды эквивалентны. Для открытия порта последовательность стуков должна быть в порты 7000, 8000 и 9000. У вас есть 15 секунд на выполнение этой последовательности. После распознавания последовательности порт открывается, и у вас есть 30 секунд на вход в систему. В противном случае порт закрывается снова.

Чтобы проверить этот процесс, вернитесь к удаленному компьютеру и войдите в систему. На этот раз выполните правильную последовательность стуков, как показано в листинг 7. Заметьте, что при установке knockd обычно устанавливается и команда knock. Но если этого не произошло, найдите эту команду с помощью средства управления своим дистрибутивом.

Листинг 7. Успешный вход после выполнения требуемой последовательности стуков
> knock the.url.for.your.site 7000 
> knock the.url.for.your.site 8000 
> knock the.url.for.your.site 9000 
> ssh the.url.for.your.site -p 22960 -o ConnectTimeout=10 
Password:

Если последовательность стуков окажется неправильной (или стуков не будет вообще), вы получите сообщение "Connection timed out" (тайм-аут соединения), и порт SSH останется полностью закрытым, не подавая признаков существования.

Если вы находитесь за маршрутизатором

Если ваш сервер подключен к Интернету через маршрутизатор, вам придется немного изменить его конфигурацию. Конкретные операции различаются для разных маршрутизаторов и брандмауэров, но в общем случае вы должны:

  • открыть и перенаправить порты стука в свой компьютер, чтобы демон knockd мог их распознавать и обрабатывать;
  • перенаправить порт 22960 (тот, который используется для подключения к SSH) в порт 22960 своего компьютера;
  • настроить брандмауэр компьютера так, чтобы он отклонял подключения к порту 22960 и портам стука.

Хотя некоторые порты маршрутизатора останутся открытыми, доступ к ним будет приводить в брандмауэр компьютера. При этом доступ будет блокироваться до тех пор, пока не будет обнаружена корректная последовательность стуков.

Настройка стука

Файл /etc/knockd.conf должен иметь секцию options для общих параметров и отдельную секцию для каждой последовательности стуков, которую вы хотите использовать. Параметры можно вводить в верхнем регистре, в нижнем регистре или и в том, и в другом.

  • В стандартной конфигурации knockd контролирует интерфейс eth0. Для работы с другим интерфейсом — например, eth1 — нужно дописать строку Interface=eth1. Обратите внимание, что указывается лишь имя устройства, а не полный путь к нему.
  • Если вы хотите выполнять регистрацию событий, можно воспользоваться стандартными файлами журналов Linux, добавив строку useSyslog, или же использовать свой собственный файл, добавив строку LogFile=/полный/путь/к/вашему/файлу. Однако не забывайте, что регистрация событий является слабым местом; если хакер доберется до журнала, он получит последовательность стука в чистом виде.
  • Если вы хотите иметь возможность проверять, работает ли knockd, добавьте строку PidFile=/полный/путь/к/файлу/PID. В этом файле будет сохраняться идентификатор процесса (PID) демона. У вас должна быть запущена задача cron, которая периодически проверяет, работает ли knockd, и при необходимости его перезапускает. Заметьте, что в случае сбоя безопасность системы не нарушается; все порты будут закрыты и недоступны. Тем не менее, пока демон не будет запущен повторно, вы не сможете войти в систему.

Можно настроить knockd так, чтобы он отслеживал несколько последовательностей и по-разному реагировал на каждую из них. В приведенном выше примере knockd открывает порт SSH; но столь же просто можно настроить его на открытие порта HTTP (для предоставления доступа к Web-серверу) или на запуск некоторого процесса. Для каждой последовательности нужно завести в конфигурационном файле отдельную секцию.

  • Для определения последовательности стуков, например, 7000,8000,9000, используйте команду sequence. По умолчанию стуки используют протокол TCP, но вы можете добавить UDP, чтобы еще больше осложнить злоумышленникам задачу, применив, например, такую последовательность: 7000,8000:udp,9000.
  • Вместо простых фиксированных последовательностей можно указать файл с "одноразовыми последовательностями", которые после использования стираются и больше использоваться не могут. Чтобы указать такую последовательность, используйте строку:
    one_time_sequences=/the/full/path/to/a/sequences/file

    Для создания этого файла можно использовать любой текстовый редактор; каждая последовательность в файле должна занимать одну строку (в показанном выше формате). Вам следует иметь копию такого файла на удаленном компьютере, чтобы не забыть, как входить в систему.

  • Вы можете указать, какие входящие TCP пакеты нужно сканировать, и отбрасывать те из них, которые не соответствуют флагам ACK, FIN, PSH, RST, SYN или URG. В соединении SSH нужно использовать TCPFlags=SYN.
  • Можно определить максимальное время завершения последовательности с помощью параметра Seq_Timeout=секунды.ожидания. Если в течение этого времени последовательность не будет завершена, она будет не опознана, и в доступе будет отказано.
  • Аналогичным образом можно определить максимальное время, в течение которого пользователь должен выполнить вторую команду после распознавания последовательности. Для этого используется параметр Cmd_Timeout=секунды.ожидания. Если пользователь, выполнивший последовательность стуков, не будет действовать быстро (например, не выполнит вход), порт снова закроется.
  • Крайне важным является параметр Start_command=команда.для.исполнения, который определяет команду или скрипт, которые будут выполняться после успешного распознавания последовательности стуков. Если вы хотите указать IP-адрес стучащего (например, чтобы разрешить подключение его компьютера к вашему), можно использовать выражение %IP%. Во время исполнения оно заменяется реальным значением. В показанном выше примере вы писали:
    /usr/sbin/iptables -s %IP% -I input_ext 1 -p tcp --dport 22960 -j ACCEPT

    iptables открывает порт 22960 для пользователя с IP-адресом, с которого поступила последовательность стуков.

  • Другим важным параметром является параметр Stop_command= команда.для.исполнения; он выполняется после истечения времени Cmd_timeout.

В данном случае, поскольку нужно просто открыть или закрыть порт 22960, достаточно одной команды. Если требуется более сложная операция, можно использовать скрипт и с его помощью сделать все, что угодно, — даже если это действие вообще не связано с открытием порта. Вы можете выполнить любую операцию, например, запустить некоторый процесс или выполнить резервное копирование. Конечно, узнать, какую команду следует использовать, может оказаться не так просто. Например, поскольку я использую OpenSUSE, имеющий собственный интерфейс брандмауэра, мне нужно исследовать возвращаемое значение функции iptables -l и узнать, какую команду следует использовать для открытия или закрытия порта 22960.

Что касается самого knockd, то с ним можно использовать следующие опции:

  • -c: позволяет указать конфигурационный файл, отличный от стандартного /etc/knockd.conf
  • -d: запускает knockd как фоновый процесс, что является стандартным способом запуска этого демона
  • -D: выводит сообщения для отладки
  • -h: предлагает справку по синтаксису и опциям
  • -i: позволяет изменить контролируемый интерфейс (по умолчанию контролируется интерфейс eth0)
  • -l: разрешает просмотр DNS для записей в журнале — не рекомендуется, поскольку вынуждает ваш компьютер использовать трафик DNS, что нарушает скрытность
  • -v: предлагает более подробные сообщения и пояснения
  • -V: показывает номер версии программы

И, наконец, для воспроизведения самой последовательности стуков можно использовать разные методы, но самый простой заключается в использовании команды knock.

Достаточно подать команду:

knock the.url.for.your.site 7000

чтобы постучаться в TCP порт 7000, и команду:

knock the.url.for.your.site -u 8000

или

knock the.url.for.your.site 8000:udp

чтобы постучаться в UDP порт 8000. Параметр -h предлагает справку по этой команде.


Заключение

Вы познакомились с тремя способами улучшения защиты доступа к вашему компьютеру через SSH: изменение параметров конфигурации sshd; выбор пользователей, имеющих право входа в систему, с помощью PAM; применение последовательностей стуков в порты для сокрытия самого существования доступа через SSH. И хотя, как я говорил, идеальных способов защиты не существует, добавление этих трех уровней сделает ваш сервер существенно безопасней.

Ресурсы

Научиться

Получить продукты и технологии

  • PAM: получите дополнительную информацию на главном сайте PAM.
  • Протоколы SSH: получите протоколы SSH и, в частности, протокол IETF RFC 4252.

Обсудить

Комментарии

developerWorks: Войти

Обязательные поля отмечены звездочкой (*).


Нужен IBM ID?
Забыли Ваш IBM ID?


Забыли Ваш пароль?
Изменить пароль

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Профиль создается, когда вы первый раз заходите в developerWorks. Информация в вашем профиле (имя, страна / регион, название компании) отображается для всех пользователей и будет сопровождать любой опубликованный вами контент пока вы специально не укажите скрыть название вашей компании. Вы можете обновить ваш IBM аккаунт в любое время.

Вся введенная информация защищена.

Выберите имя, которое будет отображаться на экране



При первом входе в developerWorks для Вас будет создан профиль и Вам нужно будет выбрать Отображаемое имя. Оно будет выводиться рядом с контентом, опубликованным Вами в developerWorks.

Отображаемое имя должно иметь длину от 3 символов до 31 символа. Ваше Имя в системе должно быть уникальным. В качестве имени по соображениям приватности нельзя использовать контактный e-mail.

Обязательные поля отмечены звездочкой (*).

(Отображаемое имя должно иметь длину от 3 символов до 31 символа.)

Нажимая Отправить, Вы принимаете Условия использования developerWorks.

 


Вся введенная информация защищена.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=40
Zone=AIX и UNIX
ArticleID=806653
ArticleTitle=Три замка на воротах SSH
publish-date=03232012