1. Вы находитесь в архивной версии форума xaker.name. Здесь собраны темы с 2007 по 2012 год, большинство инструкций и мануалов уже неактуальны.
    Скрыть объявление

Настройка и использование SSH в Linux

Тема в разделе "FAQ", создана пользователем ozs, 19 дек 2010.

  1. ozs

    ozs ... Модератор

    Регистрация:
    25 дек 2007
    Сообщения:
    566
    Симпатии:
    390
    Баллы:
    0
    В сети много документов по настройке SSH для удалённого управления Linux и BSD-системах, но часто в них умалчиваются простые вещи. В этом посте я расскажу о простом использовании клиента SSH и настройке удалённого доступа.

    Установка SSH в Linux на примере Debian

    Итак, всё, что нам нужно для установки полного комплекта удалённого управления компьютером (SSH-клиент и SSH-сервер) давным-давно лежит в репозитории. Лёгким движением ставим пакет:
    Код:
        # apt-get install ssh
    и ждём несколько мгновений, когда оно настроится. После этого мы получим возможность SSH доступа в систему и управления ей. Так как технология эта кросс-платформенная, то можно управлять по SSH Linux или FreeBSD можно и из Windows. Для этого есть putty, SSH Windows клиент.

    На стороне клиента
    Теперь надо поправить настройки, которые лежат в каталоге /etc/ssh - конфиг для клиента называется ssh-config, конфиг для сервера, соответственно, sshd-config. На своей, клиентской, стороне, настраиваем возможность приёма X11Forward, ищем и меняем ключи на:
    Клиентская машина теперь может запускать удалённо графические приложения на сервере. Настройка SSH на стороне клиента закончена, теперь идём к админу далёкого сервера...
    В принципе, можно на клиентской стороне ничего не менять, а логиниться на удалённую машину так:
    Код:
        $ ssh -X [email protected]
    или
    Код:
        $ ssh -X [email protected]
    если лезть в конфиги на своей стороне не хочется, но у меня это почему-то не работало...

    На стороне сервера
    Теперь нужно настроить SSH сервер: в конфигах машины-сервера, к которой будем подсоединяться (у вас ведь есть её рутовый пароль, так ведь?) в /etc/ssh/sshd-config ищем и меняем ключи на:
    Код:
        X11Forwarding yes
        X11DisplayOffset 10
        X11UseLocalhost yes
    
    Этим мы разрешаем серверу запускать удалённо графические приложения и отправлять их на клиентскую машину. Перестартуем сервис:
    Код:
        sudo /etc/init.d/ssh restart
    Теперь мы сможем заходить на машину не только в консольном режиме, но и с запуском иксовых приложений.
    Если хочется разрешить вход только с определённых машин, нужно подправить строки в конфиге /etc/ssh/sshd_config

    Впрочем, это уже для более продвинутых товарищей.


    Всё готово, и теперь я приведу несколько команд SSH для примера. Открываем консольку и пишем в ней:
    Код:
     $ ssh имя_пользователя_удалённой_машины@ip_адрес_или_сетевое_имя_удалённой_машины
    Например, в моём случае, когда я захожу удалённо на ноутбук, пишу ssh [email protected] - так как у меня не настроен сервер имён, пишу адреса. Опять-таки, доступ по SSH может быть не только из Linux или FreeBSD, но и из Windows - при помощи putty.

    После этого нас могут спросить: данный айпишник ещё не опознан, как доверительный, стоит ему доверять? Пишем yes, стоит, конечно! :) Далее вводим пароль пользователя удалённой машины, под которым мы заходим и, если он правильный, попадаем в консоль удалённой машины. В процессе набора пароля вы его не увидите - набирайте всё равно; даётся три попытки - потом соединение обрывается.

    Итак, нас поприветствуют как-то вроде этого:
    Код:
        [email protected]:~$ ssh [email protected]:Linux notebeast 2.6.15.7 #3 PREEMPT Sun Jul 2 12:51:07 MSD 2006 i686 GNU/LinuxThe programs included with the Debian GNU/Linux system are free software;the exact distribution terms for each program are described in theindividual files in /usr/share/doc/*/copyright.Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extentpermitted by applicable law.Last login: Tue Oct 10 19:23:57 2006 from [email protected]:~$
    Теперь, в окошке терминала, который на нашей машине, мы рулим компьютером, к которому мы подключились. Не перепутайте терминалы, а то вырубите не тот компьютер :) Здесь всё просто и логично, но нам бы хотелось ещё и запускать графические приложения на удалённой системе. Легко!

    Запуск графических приложений удалённо
    Вводим, как обычно, логин и пароль удалённой машины. И вот перед нами та же самая консоль. Как вызвать графическое приложение? Просто наберите имя вызываемой программы и поставьте после имени знак амперсанд:
    Код:
        $ gimp &;
    Это запустит на удалённой машине GiMP в фоне и вернёт вам консоль для дальнейших действий. Если вы не поставите амперсанд после имени приложения, то управление в консоль будет возвращено только после завершения приложения.

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

    Так как пост делался с упором на простого пользователя, тут не рассматривается шифрованное копирование файлов и прочие тонкости. Ещё очень подробная статья с nixp. Хорошая справка (правда, на английском) здесь.

    (c)mydebianblog.blogspot.com
     
    1 человеку нравится это.
  2. Anvil

    Anvil Мягкий и пушистый! ..::V.I.P::..

    Регистрация:
    5 авг 2007
    Сообщения:
    194
    Симпатии:
    79
    Баллы:
    0
    А еще многие забывают про такую удобную вещь как как SSH туннель, полноценный сокс через сервер + шифрование и минимальное сжатие.
    Из плсов то что на сервере нечего не надо настраивать (в отличии от VPN), клиенте надо что то типа PuTTY.

    Заходим в путти, вводим сервер на вкладке сесионс, потом заходим на вкладку конект\ССХ\тунель там вводим порт, жмем адд, выбираем динамик и жмем опен.
    (также можно пробрасывать порты через сервер)

    далее берем любой проксификатор или вводим напрямую в проге если поддерживает соксы и получаем удовольствие.
     
  3. EXploit

    EXploit Продвинутый

    Регистрация:
    7 окт 2007
    Сообщения:
    67
    Симпатии:
    54
    Баллы:
    0
    Безопасность не бывает лишней...
    еще б сменить стандартный порт на ssh

    меняем тут
    /etc/ssh/sshd_config
    параметр port (его необходиом раскоментировать и изменить стандартный 22 порт на свой, например 33)

    далее рестартуем
    /etc/init.d/sshd restart

    при входе с клиентской машины набираем
    [[email protected] /]# ssh -p 33 192.168.1.1
    33 - нестандартный порт sshd
    192.168.1.1 - ип удаленной машины
     
    1 человеку нравится это.
  4. ~|~евто|-|

    ~|~евто|-| Silentium ..::V.I.P::..

    Регистрация:
    26 май 2007
    Сообщения:
    30
    Симпатии:
    377
    Баллы:
    0
    Несколько методов защиты SSH с помощью iptables

    Несколько интересных методов защиты SSH c помощью iptables.

    Ограничение количества подключений
    Для защиты от brute force (перебора паролей), можно ограничить количество подключений на 22 порт с одного ip адреса до нескольких раз в минуту, после чего блокировать попытки подключения для данного ip.
    Код:
    ## Создание цепочки правил sshguard
    # Максимум 2 новых запроса в минуту для одного ip
    /sbin/iptables -N sshguard
    # Вкл. лог по желанию
    #/sbin/iptables -A sshguard -m state --state NEW -m recent --name SSH --rcheck --seconds 60 --hitcount 2 -j LOG --log-prefix "SSH-shield: "
    /sbin/iptables -A sshguard -m state --state NEW -m recent --name SSH --update --seconds 60 --hitcount 2 -j DROP
    /sbin/iptables -A sshguard -m state --state NEW -m recent --name SSH --set -j ACCEPT
    /sbin/iptables -A sshguard -j ACCEPT
     
    ## Применение для трафика ssh цепочку sshguard
    /sbin/iptables -A INPUT -p tcp --dport 22 -j sshguard
    recent : позволяет создавать динамические списки адресов IP. Модуль поддерживает ряд опций
    • --name name : имя списка, с которым работает команда. По умолчанию для списка используется имя DEFAULT
    • --rcheck : опция будет проверять наличие адреса отправителя пакета в списке При отсутствии адреса в списке возвращается значение false.
    • --update : опция будет проверять наличие адреса отправителя пакета в списке. Если адрес присутствует, соответствующая запись обновляется. При отсутствии адреса в списке возвращается значение false.
    • --hitcount hits : счетчик, возвращает true при наличии адреса в списке, когда число принятых пакетов с адреса больше или равно заданного значения. Используется совместно с rcheck или update
    • --seconds seconds : определяет период (от момента занесения адреса в список), в течение которого адрес может находиться в списке
    • --set : служит для добавления адреса отправителя пакета в список. Если такой адрес уже есть в списке, запись будет обновлена
    • --remove : удалить адрес из списка. Если адрес не обнаружен вернет false.


    Динамическое открытие/закрытие ssh порта
    Небольшое правило для iptables помогающее лишний раз не держать порты открытыми.

    Пример для доступа к SSH, хотя как сами понимаете можно использовать как угодно.

    Суть правила проста - для того чтобы открыть доступ к шеллу нужно сначала стукнуться на 1500 порт(telnet'ом, браузером, ...) и соответственно если стукнуть на 1499 - то порт закроется.
    Код:
    iptables -N sshguard
    # Если адрес в списке, то подключение разрешено
    iptables -A sshguard -m state --state NEW -m recent --rcheck --name SSH -j ACCEPT
    # Разрешить пакеты для уже установленных соединений
    iptables -A sshguard -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A sshguard -j DROP
     
    # Заносит адрес в список
    iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 1500 -m recent --name SSH --set -j DROP
    # Удаляет адрес из списка
    iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 1499 -m recent --name SSH --remove -j DROP
     
    # Применение для трафика ssh цепочку sshguard
    iptables -A INPUT -p tcp --dport 22 -j sshguard
    Порт открывается только для ip с которого был открыт

    Открытие порта ssh на заданное время​

    Код:
    ## определяем цепочку для SSH трафика
    iptables -N sshguard
    iptables -F sshguard
    # Разрешить подключение если ip есть в списке и последнее подключение осуществлялось не позднее 108000 секунд (30 часов) 
    iptables -A sshguard -m state --state NEW -m recent --update --seconds 108000 --name SSH -j ACCEPT
    # Разрешить пакеты для уже установленных соединений
    iptables -A sshguard -m state --state ESTABLISHED,RELATED -j ACCEPT
    # Заблокировать если нет в списке
    iptables -A sshguard -j DROP
     
    ## Открытие SSH
    iptables -A INPUT -m state --state NEW -p tcp --dport 222 -m recent --name SSH --set
    ## Фильтрация ssh трафика через цепочку sshguard
    iptables -A INPUT -p tcp --dport 22 -j sshguard
    Теперь, чтобы получить ssh доступ нужно сперва постучаться на порт 222, после этого доступ для вашего ip на 22 порт будет разрешен на указанное время, при этом каждый новый коннект на ssh будет продлевать это время. Если вы не хотите продления времени то замените --update --seconds 108000 на --rcheck.
    Порт открывается только для ip с которого был открыт

    (с)
     
    2 пользователям это понравилось.
  5. ma5ter

    ma5ter Новичок

    Регистрация:
    4 окт 2011
    Сообщения:
    22
    Симпатии:
    4
    Баллы:
    0
    Угу, 99,9% атак сразу отпадают, а еще сделать ограничение не подключение раз в 30 сек - 1 минуту, и журналы неудачных подключений будут девственно чисты.
     
  6. b3

    b3 Продвинутый

    Регистрация:
    8 окт 2007
    Сообщения:
    142
    Симпатии:
    104
    Баллы:
    0
    Код:
    Суть правила проста - для того чтобы открыть доступ к шеллу нужно сначала стукнуться на 1500 порт(telnet'ом, браузером, ...) и соответственно если стукнуть на 1499 - то порт закроется.
    Называется port-knocking еще не встречал чтоб кто-то использовал.
     

Поделиться этой страницей