Различия между версиями 1 и 2
Версия 1 от 2013-11-29 12:54:25
Размер: 1836
Редактор: FrBrGeorge
Комментарий:
Версия 2 от 2013-11-29 13:29:17
Размер: 5336
Редактор: FrBrGeorge
Комментарий:
Удаления помечены так. Добавления помечены так.
Строка 19: Строка 19:
 * Импортировать открытый ключ и проверить его отпечаток:  * Поговорить с самим собой с помощью `netcat`:
 {{{
[root@uneex ~]# nc -l 12345

[root@uneexclient ~]# nc srv 12345

 }}}
  Для того, чтобы закрыть поток В/В, достаточно нажать "Ctrl+D"
 * Зайти с клиента на сервер по `ssh`, почитать отладочную диагностику и обнаружить там имена файлов с ключами:
  {{{
[root@uneexclient ~]# ssh -v root@srv
  }}}
 * Сгенерировать ключ (защищённый кодовой фразой "123456"):
  {{{
[root@uneexclient ~]# rm -rf /root/.ssh/id_dsa && ssh-keygen -P123456 -t dsa -f /root/.ssh/id_dsa
  }}}
   * <!> Повторять эту команду до тех пор, пока ASCII-арт отпечатка не покажется красивым
   * снова зайти на сервер и в отладочной информации увидеть, что предложенный ключ был отвергнут
 * Скопировать открытый ключ на сервер (надо будет ввести кодовую фразу):
 {{{
[root@uneexclient ~]# ssh-copy-id srv
 }}}
  * `ssh-copy-id` — это простой сценарий, запустить `sh -x ssh-copy-id srv` и посмотреть, какими командами что копируется
 * Ещё раз зайти на сервер (теперь вместо пароля надо будет вводить кодовую фразу)
 * Запустить ssh-агент (обратите внимание, что команда `ssh-agent` генерирует все остальные команды, их просто надо скопировать, и числа там будут другие)
 {{{
[root@uneexclient ~]# ssh-agent
SSH_AUTH_SOCK=/root/tmp/ssh-XIglJWV12040/agent.12040; export SSH_AUTH_SOCK;
SSH_AGENT_PID=12041; export SSH_AGENT_PID;
[root@uneexclient ~]# SSH_AUTH_SOCK=/root/tmp/ssh-XIglJWV12040/agent.12040; export SSH_AUTH_SOCK;
[root@uneexclient ~]# SSH_AGENT_PID=12041; export SSH_AGENT_PID;
 }}}
  Вместо всего этого можно было выполнять такую команду:
 {{{
[root@uneexclient ~]# eval `ssh-agent`
 }}}
 * Добавить в него ключ, посмотреть на ключ и зайти наконец-то без пароля!
 {{{
[root@uneexclient ~]# ssh-add -l
The agent has no identities.
[root@uneexclient ~]# ssh-add
Enter passphrase for /root/.ssh/id_dsa:
Identity added: /root/.ssh/id_dsa (/root/.ssh/id_dsa)
[root@uneexclient ~]# ssh-add -l
1024 5c:5f:59:eb:97:ec:e0:fc:f7:18:1f:10:89:dd:f4:90 /root/.ssh/id_dsa (DSA)
[root@uneexclient ~]# ssh srv
Last login: Fri Nov 29 14:16:39 2013 from host13.class.altlinux.org
 }}}
 * Пробросить подключение с клиента на uneex.ru:80 на порт сервера 8001:
 {{{
[root@uneexclient ~]# ssh srv -R8001:www.ru:80
Last login: Fri Nov 29 14:25:26 2013 from host13.class.altlinux.org
[root@uneex ~]# netlist | grep 8001
root 14358 sshd 8 tcp 127.0.0.1:8001 0.0.0.0:0 LISTEN
[root@uneex ~]# links http://localhost:8001

 }}}
  * <!> С помощью `tcpdump` убедиться, что трафик идёт так: сервер(localhost):8001 → клиент(ssh-тоннель):22 → www.ru:80
 * Импортировать открытый GPG-ключ и проверить его отпечаток:
Строка 31: Строка 89:
[root@uneex ~]# gpg --verify signed.msg [root@uneex ~]# gpg --verify signed.txt

Полезные сетевые утилиты. Использование шифрования

/!\


netcat

socat

wget

tcpdump

конвейерный принцип в UNIX

gpg

работа "NAT" режима в VirtualBox и «проброс портов»

Д/З

  • Поговорить с самим собой с помощью netcat:

    [root@uneex ~]# nc -l 12345 
    [root@uneexclient ~]# nc srv 12345 
    
    • Для того, чтобы закрыть поток В/В, достаточно нажать "Ctrl+D"
  • Зайти с клиента на сервер по ssh, почитать отладочную диагностику и обнаружить там имена файлов с ключами:

    • [root@uneexclient ~]# ssh -v root@srv
  • Сгенерировать ключ (защищённый кодовой фразой "123456"):
    • [root@uneexclient ~]# rm -rf /root/.ssh/id_dsa && ssh-keygen -P123456 -t dsa -f /root/.ssh/id_dsa
      • <!> Повторять эту команду до тех пор, пока ASCII-арт отпечатка не покажется красивым

      • снова зайти на сервер и в отладочной информации увидеть, что предложенный ключ был отвергнут
  • Скопировать открытый ключ на сервер (надо будет ввести кодовую фразу):
    [root@uneexclient ~]# ssh-copy-id srv
    • ssh-copy-id — это простой сценарий, запустить sh -x ssh-copy-id srv и посмотреть, какими командами что копируется

  • Ещё раз зайти на сервер (теперь вместо пароля надо будет вводить кодовую фразу)
  • Запустить ssh-агент (обратите внимание, что команда ssh-agent генерирует все остальные команды, их просто надо скопировать, и числа там будут другие)

    [root@uneexclient ~]# ssh-agent
    SSH_AUTH_SOCK=/root/tmp/ssh-XIglJWV12040/agent.12040; export SSH_AUTH_SOCK;
    SSH_AGENT_PID=12041; export SSH_AGENT_PID;
    [root@uneexclient ~]# SSH_AUTH_SOCK=/root/tmp/ssh-XIglJWV12040/agent.12040; export SSH_AUTH_SOCK;
    [root@uneexclient ~]# SSH_AGENT_PID=12041; export SSH_AGENT_PID;
    • Вместо всего этого можно было выполнять такую команду:
    [root@uneexclient ~]# eval `ssh-agent`  
  • Добавить в него ключ, посмотреть на ключ и зайти наконец-то без пароля!
    [root@uneexclient ~]# ssh-add -l
    The agent has no identities.
    [root@uneexclient ~]# ssh-add   
    Enter passphrase for /root/.ssh/id_dsa: 
    Identity added: /root/.ssh/id_dsa (/root/.ssh/id_dsa)
    [root@uneexclient ~]# ssh-add -l
    1024 5c:5f:59:eb:97:ec:e0:fc:f7:18:1f:10:89:dd:f4:90 /root/.ssh/id_dsa (DSA)
    [root@uneexclient ~]# ssh srv
    Last login: Fri Nov 29 14:16:39 2013 from host13.class.altlinux.org
  • Пробросить подключение с клиента на uneex.ru:80 на порт сервера 8001:
    [root@uneexclient ~]# ssh srv -R8001:www.ru:80  
    Last login: Fri Nov 29 14:25:26 2013 from host13.class.altlinux.org
    [root@uneex ~]# netlist | grep 8001
    root     14358 sshd     8 tcp       127.0.0.1:8001          0.0.0.0:0     LISTEN
    [root@uneex ~]# links http://localhost:8001
    
    • <!> С помощью tcpdump убедиться, что трафик идёт так: сервер(localhost):8001 → клиент(ssh-тоннель):22 → www.ru:80

  • Импортировать открытый GPG-ключ и проверить его отпечаток:
     [root@uneex ~]# gpg --list-keys
     [root@uneex ~]# gpg --recv-keys 7C10D900
     [root@uneex ~]# gpg --fingerprint 
     /root/.gnupg/pubring.gpg
     ------------------------
     pub   1024D/7C10D900 2003-10-17
           Key fingerprint = D01B B410 C69D AE98 8EB0  16F0 E1F0 3D6E 7C10 D900
  • Проверить подпись этого файла:

    [root@uneex ~]# gpg --verify signed.txt
    • Обратите внимание, что ключ хотя и проверен, но вы лично не подписывали его, так что причин доверять ему нету.
  • Сгенерировать собственный ключ:
    [root@uneex ~]# echo "
         Key-Type: DSA
         Key-Length: 1024
         Name-Real: Joe Tester
         Name-Comment: with stupid passphrase
         Name-Email: joe@foo.bar
         Expire-Date: 0
         %commit
    " | gpg --batch --gen-key -
    • При появлении надписи "Not enough random bytes available." придётся зайти в соседнюю консоль и нажимать на все подряд клавиши клавиатуры. В VirtualBox с энтропией плоховато.

  • Подписать ключ 7C10D900 и снова проверить подпись
    [root@uneex ~]# gpg --sign-key 7C10D900
    [root@uneex ~]# gpg --verify signed.msg 
    

LecturesCMC/LinuxNetwork2013/09-SecurityAndTools (последним исправлял пользователь FrBrGeorge 2014-01-12 13:39:46)