Кратко о настройке Samba

Для расшаривания файлов с сервера под linux в сеть Windows используем Samba сервер.

Установка Samba:

sudo apt-get install samba

Настройка.
Самба хранит все свои настройки в файле /etc/samba/smb.conf. Откроем его для редактирования

sudo nano /etc/samba/smb.conf

Каждый раздел файла начинается с заголовка раздела: [global], [homes], [printers], и т.п.

В [global] определяются глобальные настройки для всего сервера.
Раздел [homes] позволяет удаленным пользователям иметь доступ к своим (и только своим) домашним директориям на сервере. Т. е., если к серверу подключиться пользователь user1, то он будет подключены к своему домашнему каталогу. Для этого он должен быть зарегистрированы на сервере.
В [printers] прописаны настройки для принтеров.

Глобальные настройки:

[global]
; куда записывать логи
log file = /var/log/samba/log.%m
; максимальный размер файла журнала
max log size = 1000

# имя самба сервера в сетевом окружении
netbios name = HomeServer
; коментарий самба сервера
server string = Home Server Ubuntu
; Рабочая группа
workgroup = WORKGROUP
; выступать как контролер домена
domain master = no

; привязка к интерфейсам, на каких слушать, если не указано
;слушает на все интерфейсах, можно указать ай-пи адреса
interfaces = lo, eth2

; подчиняться директивам учетных записей PAM и управлению сессиями
obey pam restrictions = yes
; шифрование паролей между сервером и клиентом
encrypt passwords = true
; параметр сообщают демону smbd что делать с запросами,
; которые не удалось аутентифицировать в UNIX
; bad user – запросы с неправильным паролем будут отклонены, если
; такое имя пользователя существует. Если не существует, то такие запросы
; будут считаться как попытки зайти гостем (guest account).
map to guest = bad user

; определяет будет ли демон nmbd делать запрос к DNS, если WINS
; не смог разрешить NetBIOS имя
dns proxy = no

; параметр заставляет синхронизировать пароль UNIX с паролем SMB при
; изменении зашифрованного пароля SMB в файле smbpasswd. При включении
; этого параметра (yes) от пользователя ROOT вызывается программа,
; определенная в параметре passwd program, что позволяет установить
; новый пароль UNIX без доступа к старому паролю UNIX
unix password sync = yes
; имя программы, которую можно использовать для смены паролей UNIX,
; любые вхождения %u будут заменены именем пользователя
passwd program = /usr/bin/passwd %u
; механизм для хранения информации о пользователях
passdb backend = tdbsam

; уровень отладки журналов событий, которые будут записываться
; в системный syslog, 0 - события LOG_ERR, 1 - LOG_WARNING,
; 2 — LOG_NOTICE, 3 - LOG_INFO.
syslog = 0

; режим работы Samba:
; share - уровень ресурсов,
; user - уровень пользователей, доступ по логин-паролю,
; domain - домен,
; server - сервер паролей,
; ads - Active directory
security = user

; не аутентифицированные пользователи получают доступ к общим
; ресурсам пользователей
usershare allow guests = yes

panic action = /usr/share/samba/panic-action %d
os level = 20

; если включено, для смены паролей будет использован PAM, вместо
; программы указанной в параметре passwd program
pam password change = yes

; разрешаем доступ для всех со своей подсетки и локалхоста
hosts allow = 192.168.10. 127.

; пользователь с root-правами
admin users = user1

; выступать сервером времени
time server = yes

Основные настройки сделаны. Теперь расшарим нужные папки.

Расшариваем домашние папки пользователей

[HOMES]
; комментарий
comment = Home directories
; путь к папке, %U = имя пользователя
path = /home/samba/homes/%U
; только для чтения?
read only = no
; вход с паролем?
public = no
; запись разрешена?
writable = yes
; права создаваемых файлов и папок
create mask = 0600
directory mask = 0700
; отображать в списке ресурсов в сетевом окружении?
browseable = no

Далее расшариваем нужные папки. Для каждой папки можно определить свои параметры доступа. Для этого дописываем в конец конфиг-файла smb.conf разделы как представлено в примере ниже.

Пример:

; создадим расшаренную папку files
[files]
; комментарий к создаваемой папке
comment = Media files
; путь к папке
path = /home/user1/files
; будем разрешать доступ только по паролю
public = yes
; не видно в сетевом окружении всем кроме владельцев
printable = no
; запрещаем запись всем
writable = no
; и разрешаем запись для user1 и пользователям из группы adm
write list = user1 @adm

По аналогии создаются все остальные шары.

Для добавления пользователей в Samba делаем следующее:
smbpasswd -a username

Вам будет предложено ввести пароль, пользователь будет добавлен в базу, теперь необходимо включить этого пользователя.
smbpasswd -e username

Для проверки правильности сделанных настроек выполните команду
testparm

если testparm сообщает об отсутствии проблем, то smbd правильно загрузит файл настроек.

Не забудьте перезапустить Samba после изменения конфиг-файла.
sudo /etc/init.d/samba restart

Если будете расшаривать внешние устройства, нтфс диски и т. д., не забудьте добавить пользователя в группу plugdev.

После того как вы настроите самбу как вам нужно, выполните в терминале команду
testparm
Результатом будет вывод состояния smb-сервера и список расшаренных ресурсов. Если настройки сделаны не правильно, вы увидите сообщение об ошибке, из которой легко поймете, где ошиблись.
Будем считать, что у вас есть сервер с ip-адресом 192.168.1.1 и ваш рабочий компьютер с адресом 192.168.1.2
Пропингуйте сервер с рабочего компьютера:
ping 192.168.1.1
Также пропингуйте рабочий компьютер с сервера:
ping 192.168.1.2
Если пинги идут, значит с сетью все в порядке. Если пинги не проходят, проверьте ваш файл /etc/hosts. Также проблема может быть в DNS-сервере (если он у вас установлен), в роутере, хабе, кабелях.

Если пинги идут, но вы все еще не видите расшаренные папки, выполните команду
smbclient -L 192.168.1.1
Вы должны увидить список доступных расшаренных ресурсов. Если вы получите сообщение «Bad password»,
проверьте, параметры hosts allow, hosts deny и valid users в файле smb.conf. Попробуйте временно закоментировать их.

Выполнение этих простых тестов, позволяет устранить большинство проблем, связанных с настройкой и использование Samba.

Автор статьи – Ильдар Галиуллин

Сервер видеонаблюдения на базе Ubuntu

motionСуществует множество решений для реализации сервера видеонаблюдения, но учитывая наличие уже работающего медиасервера на базе XBMCbuntu был выбран пакет motion работающий как и с дешевыми USB камерами, так и с платами видеозахвата, также он достаточно прост в настройке.

Подключим вебкамеру (можно использовать практически любую недорогую камеру), проверим, доступна ли она:

ls /dev/video*

В выводе команды видим строку /dev/video0. Если подключено несколько камер, соответственно каждая следующая будет идти по порядку video1, video2 и т. д. Если вместо этого видим строку:

ls: невозможно получить доступ к /dev/video*: Нет такого файла или каталога

значит ваша камера не подключена или не найден нужный драйвер. Необходимо поставить его отдельно.

Определившись с камерами, установим пакет motion:

sudo apt-get install motion

Приступим к настройке программы. Настраиваем захват видео с камеры при обнаружении движения в кадре. Т.е. запись в файл начинается, если motion фиксирует движение, экономим свободное пространство на винте.
Конфигурационный файл находится в /etc/motion/motion.conf
Открываем его текстовым редактором nano.

sudo nano /etc/motion/motion.conf

Конфиг подробно прокомментирован:

# Start in daemon (background) mode and release terminal (default: off)
#Старт как демон,по умолчанию он в off
daemon on# Videodevice to be used for capturing (default /dev/video0)
# for FreeBSD default is /dev/bktr0
#устройство для захвата должно быть по умолчанию /dev/video0 если несколько то соответственно /dev/video1 /dev/video2 и т.д.
videodevice /dev/video0

# Image width (pixels). Valid range: Camera dependent, default: 352
#Разрешение камеры  320х240, 640х480 …
width 640

# Image height (pixels). Valid range: Camera dependent, default: 288
height 480

# Maximum number of frames to be captured per second.
# Valid range: 2-100. Default: 100 (almost no limit).
# Определим количество fps;
framerate 30 (30 подойдет, но можете менять в зависимости от нагрузки на компьютер)

# Gap is the seconds of no motion detection that triggers the end of an event
# An event is defined as a series of motion images taken within a short timeframe.
# Recommended value is 60 seconds (Default). The value 0 is allowed and disables
# events causing all Motion to be written to one single mpeg file and no pre_capture.
gap 60

# Maximum length in seconds of an mpeg movie
# When value is exceeded a new mpeg file is created. (Default: 0 = infinite)
#ОЧЕНЬ ВАЖНЫЙ ПАРАМЕТР!
Продолжительность файла можно ограничить параметром max_mpeg_time, указав в качестве значения время в секундах.
max_mpeg_time 180

# Output ‘normal’ pictures when motion is detected (default: on)
# Valid values: on, off, first, best, center
# When set to ‘first’, only the first picture of an event is saved.
# Picture with most motion of an event is saved when set to ‘best’.
# Picture with motion nearest center of picture is saved when set to ‘center’.
# Can be used as preview shot for the corresponding movie.
#Тип скриншота с движением,по умолчанию on - сохранять все подряд - кушает много места
 ставим или best, или first
output_normal off

# Output pictures with only the pixels moving object (ghost images) (default: off)
#Оставим как есть
output_motion off

# Use ffmpeg to encode mpeg movies in realtime (default: off)
#ВАЖНЫЙ ПАРАМЕТР! Указывает motion что сохраняем видео,
#нам видео, по умолчанию стоит off переключаем на on
ffmpeg_cap_new on

# Codec to used by ffmpeg for the video compression.
# Timelapse mpegs are always made in mpeg1 format independent from this option.
# Supported formats are: mpeg1 (ffmpeg-0.4.8 only), mpeg4 (default), and msmpeg4.
# mpeg1 – gives you files with extension .mpg
# mpeg4 or msmpeg4 – gives you files with extension .avi
# msmpeg4 is recommended for use with Windows Media Player because
# it requires no installation of codec on the Windows client.
# swf – gives you a flash film with extension .swf
# flv – gives you a flash video with extension .flv
# ffv1 – FF video codec 1 for Lossless Encoding ( experimental )
# mov – QuickTime ( testing )
#тип используемого кодека.
ffmpeg_video_codec mpeg4

# Target base directory for pictures and films
# Recommended to use absolute path. (Default: current working directory)
#путь для сохранения видео и скринов.
target_dir /home/user/new

# The mini-http server listens to this port for requests (default: 0 = disabled)
#Это порт  доступа на localhost.
webcam_port 7777

# Quality of the jpeg images produced (default: 50)
#
webcam_quality 50

# Output frames at 1 fps when no motion is detected and increase to the
# rate given by webcam_maxrate when motion is detected (default: off)
#Поставим 20
webcam_motion 20

# Maximum framerate for webcam streams (default: 1)
#Поставим 20
webcam_maxrate 20

# Restrict webcam connections to localhost only (default: on)
#
webcam_localhost off

Настройка конфига закончена, запускаем motion (с правами суперпользователя обязательно):

sudo motion -n

Если не стартует, то заведем так:

LD_PRELOAD=/usr/lib/libv4l/v4l2convert.so motion -n

если библиотека v4l2convert.so не установлена, то установим ее:

sudo apt-get install libv4l-0

Смотрим на вывод, видим лог запуска мини http-server.
Теперь откроем браузер и введем в адресной строке

http://localhost:7777

Теперь  камера наблюдает за происходящим, если в поле зрения попадает движущийся объект то сразу стартует запись, после того как объект выходит из поля зрения камеры, запись продолжается 180 секунд, далее ролик не пишется. Таким образом, motion ведет запись только в случае обнаружения движения.
Так же для более четкого отображения записей задаем параметры:

snapshot_filename %Y-%m-%d/snapshot/%H-%M-%S
jpeg_filename %Y-%m-%d/jpeg/%H-%M-%S-%q
movie_filename %Y-%m-%d/movie/%H-%M-%S-%v

Теперь каждые сутки пишутся в отдельные папки, что очень удобно для просмотра.

Настройка захвата
Секция “Motion Detection Settings”, находящаяся в самом конце конфигурационного файла, отвечает за настройку обнаружения движущихся объектов. Если камера стоит в комнате, и объект перекрывает объектив, проблем с обнаружением нет. Настройка нужна в том случае, когда камера контролирует значительную территорию, где объект имеет небольшой размер, и срабатывание может быть вызвано движением веток деревьев, проходящими машинами и другими помехами.

Параметры:

Threshold позволяет указать количество пикселей, меняющихся для срабатывания детектора, а minimum_motion_frames – количество кадров, в котором они зафиксированы. Подобрав эти значения, можно сделать так, что Motion не будет замечать пролетающую птицу, но без проблем реагировать на человека. Фильтры для сглаживания шума включаются при помощи despeckle. По умолчанию используется оптимальное значение EedDl. При появлении проблем следует поэкспериментировать, убирая буквы в сочетании EedDl и пробуя их в разных комбинациях (подробнее о despeckle смотри на WiKi Motion и на emit.demon.co.uk/motion).

Параметры noise_level, noise_tune, night_compensate и lightswitch отвечают за уровень порога шума и компенсацию темных и светлых участков.

Комбинация параметров pre_capture, post_capture и gap позволяет записать сцену, где будет зафиксирован объкт до и после того, как было обнаружено движение. Значение gap по умолчанию установлено в оптимальные 60 (секунд), если движение не будет обнаружено, то создается новый видеофайл, а старый удаляется. Чтобы захваченный файл не был большим, его продолжительность можно ограничить параметром max_mpeg_time, указав в качестве значения время в секундах.

Параметров в motion.conf очень много, лучший способ  – это вдумчивое курение man’а и тематических форумов, ну а в базовом варианте – простейшая система видеонаблюдения готова к эксплуатации.

Поддержка русского языка в дистрибутивах TurnKey linux

turnkey-linuxОбновился  релиз Turnkey Linux 12, в рамках которого имеется набор из 106 минималистичных сборок Debian, неплохо подходящих для запуска в качестве гостевых ОС в системах виртуализации VMware, Xen, OpenVZ, KVM, VirtualBox или для быстрого развертывания в Cloud-окружениях Amazon EC2. Обычный размер сборки – 200 Мб. Сразу после установки можно получить доступ к работоспособному из коробки рабочему окружению с LAMP (Linux, Apache, MySQL, PHP/Python/Perl), Ruby on Rails, Joomla, MediaWiki, WordPress, Drupal, Apache Tomcat, LAPP, Django, MySQL, PostgreSQL и т.д. Управление программным обеспечением производится через простенький web-интерфейс, в большинстве сборок доступен webmin. Сборки снабжены системой автоматического резервного копирования и средством для автоматической установки обновлений.

app_turnkey

Текущая версия отличается добавлением 61 новой сборки (в прошлом выпуске формировалось 45 сборок), переходом на пакетную базу Debian (ранее использовался Ubuntu 10.04) и подготовкой образов, оптимизированных для развёртывания в инфраструктуре на базе платформы OpenStack. Основными причинами перехода на пакетную базу Debian называются более широкий охват пакетов при подготовке исправлений проблем безопасности  и более высокая стабильность пакетной базы Debian. Из новых сборок Turnkey Linux можно отметить образы с готовыми для работы Node.js, Jenkins, Xoops, Typo3, Drupal 7, Plone, SugarCRM, punBB, OS Commerce, ownCloud, MongoDB, OpenLDAP, e107, gitlab, mambo, CouchDB.

Но, как и в предыдущих версиях, поддержку русского языка надо включать вручную:

Редактируем файл /etc/environment

nano /etc/environment

Вот как должен выглядеть вывод команды в «правильной» системе:

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"
LANGUAGE="ru_RU.UTF-8"
LANG="ru_RU.UTF-8"
LC_ALL="ru_RU.UTF-8"
LC_MESSAGES="ru_RU.UTF-8"

Генерим русскую и английскую UTF-8 локали (Generating Russian & English UTF-8 Locales)

locale-gen ru_RU.utf8 && locale-gen en_US.utf8

Переконфигурируем локали (Reconfiguring locales)

dpkg-reconfigure locales

Определяем дефолтную локаль (Determine the default locale)

localedef ru_RU.UTF-8 -i ru_RU -f UTF-8

Для того, чтобы удалить из системы ненужные локали, заходим в папку

cd /var/lib/locales/supported.d

и правим, соответственно файлики en, ru и local.

echo "ru_RU.UTF-8 UTF-8" > ru
echo "en_US.UTF-8 UTF-8" > en
echo "ru_RU.UTF-8 UTF-8" > local

Перезагружаемся

reboot

После перезагрузки по SSH будет доступен русский язык.

Анализ сссылочной массы на сервисе solomono ru бесплатно.

Тест на русскость

Тест на русскость

rus_test

Вот настоящий тест на русскость. Было показано двум американским славистам, которые прекрасно владеют русским, и они не поняли. Хм… любому русскому – сразу все понятно…

Intel Itmanagerduels

Я играю в игру ИТ-менеджер: Дуэли, стратегический ИТ-симулятор, разработанный корпорацией Intel, и думаю, что она вам тоже понравится. Вы можете играть в однопользовательскую игру или, еще лучше, играть со мной в игру для двух игроков! Регистрация производится бесплатно. Перейдите по указанной ниже ссылке и создайте игровую учетную запись.

Присоединяйтесь здесь: https://itmanagerduels.intel.com/ru_ru/?rid=oEFKJBYcuS752UT-0dET

Я надеюсь сразиться с вами в игре (и, конечно, победить вас).
Рекомендую попробовать антивирус Доктор-Веб для защиты сервера, сам уже как 3 года пользуюсь, доволен.
Кстати, вот мое имя пользователя: targon, так что присоединяйтесь и, когда будете готовы, вызывайте меня на игру.

Настраиваем автоматическое подключение к WiFi при старте системы

  1. Определяем имя адаптера
    $ iwconfig
    lo no wireless extensions.

    eth0 no wireless extensions.

    wlan0     Auto  Access Point: Not-Associated
              Link Quality:0  Signal level:0  Noise level:0
              Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
              Tx excessive retries:0  Invalid misc:0   Missed beacon:0

  2. Получаем список доступных сетей
    $ ifconfig wlan0 up
    $
    iwlist wlan0 scan

    wlan0 Scan completed :
     Cell 01 - Address: 00:18:F3:98:E0:AA
     Channel:1
     Frequency:2.412 GHz (Channel 1)
     Quality=70/70 Signal level=-32 dBm
     Encryption key:on
     ESSID:"MyHomeWiFiRouterSSID"
     Bit Rates:1 Mb/s; 2 Mb/s; 5.5 Mb/s; 11 Mb/s; 18 Mb/s
     24 Mb/s; 36 Mb/s; 54 Mb/s
     Bit Rates:6 Mb/s; 9 Mb/s; 12 Mb/s; 48 Mb/s
     Mode:Master
     Extra:tsf=0000010d317851d5
     Extra: Last beacon: 44292ms ago
     IE: Unknown: 000D656E6572676F70726F6A656374
     IE: Unknown: 010882848B962430486C
     IE: Unknown: 030101
     IE: Unknown: 2A0104
     IE: Unknown: 2F0104
     IE: Unknown: 32040C121860
     IE: Unknown: DD060010180205F0
     IE: WPA Version 1
     Group Cipher : TKIP
     Pairwise Ciphers (1) : TKIP
     Authentication Suites (1) : PSK
    
  3. Анализируем данные полученные после сканирования:
    – Ищем название точки, к которой хотим подключиться (MyHomeWiFiRouterSSID)
    – Определяем тип сети: Если значение “Encryption key” off – значит сеть открытая, если on – закрытая
    – Для закрытой сети определяем тип шифрования: Параметр “IE” содержит слово “WPA” – значит WPA, в другом случае установлено шифрование WEP
  4. Для закрытой сети с шифрованием WPA нужно сформировать значение psk
    $ wpa_passphrase "MyHomeWiFiRouterSSID" "enter_password_here"
    network={
            ssid="MyHomeWiFiRouterSSID"
            #psk="enter_password_here"
            psk=2ab8fc6da97c71cc91431d4689ecaf69f527242e78eaa141a63fab4c0faedc3d
    }
  5. Добавляем либо корректируем настройки беспроводного адаптера в файл /etc/network/interfaces
    auto wlan0

    Если IP адреса раздаются по DHCP:

    iface wlan0 inet dhcp

    Если IP адреса статические:

    iface wlan0 inet static
    address 192.168.1.101
    netmask 255.255.255.0
    gateway 192.168.1.1
    dns-nameservers 192.168.1.1 192.168.1.2

    Для открытой сети или с шифрование WEP:

    wireless-mode managed
    wireless-essid MyHomeWiFiRouterSSID

    Для сети с WEP шифрованием:

    wireless-enc enter_password_here

    Для сети с WPA шифрованием:

    wpa-driver wext
    wpa-ssid MyHomeWiFiRouterSSID
    wpa-ap-scan 2
    wpa-proto RSN WPA
    wpa-pairwise CCMP TKIP
    wpa-group CCMP TKIP
    wpa-key-mgmt WPA-PSK
    wpa-psk psk_passphrase
  6. Если требуется немедленное подключение:
    К открытой сети:

    $ iwconfig wlan0 essid "MyHomeWiFiRouterSSID"

    К закрытой с шифрованием WEP:

    $ iwconfig wlan0 essid "MyHomeWiFiRouterSSID" key enter_password_here

    К закрытой с шифрованием WPA:

    $ wpa_passphrase "MyHomeWiFiRouterSSID" "enter_password_here" > /tmp/wpa-temp-file-254341.conf
    $ wpa_supplicant -Dwext -iwlan0 -c/tmp/wpa-temp-file-254341.conf
    $ rm -f /tmp/wpa-temp-file-254341.conf

    Для получения IP адресов динамически по DHCP:

    $ dhclient wlan0

    Для ввода статического IP адреса:

    $ ifconfig wlan0 inet 192.168.1.101 netmask 255.255.255.0

    Можно ещё вместо всего выше описанного в пункте 6 просто перезапустить службу выполнив команду:

    $ /etc/init.d/networking restart
  7. Чтобы работало автоматическое переподключение при обрыве связи с WiFi точкой, требуется установить NetworkManager
    $ apt-get install network-manager

    В файле /etc/NetworkManager/NetworkManager.conf установить значение managed = true

Wi-Fi: неочевидные нюансы

Перепост статьи с Хабра

Сейчас многие покупают точки доступа 802.11n, но хороших скоростей достичь удается не всем. В этом посте поговорим о не очень очевидных мелких нюансах, которые могут ощутимо улучшить (или ухудшить) работу Wi-Fi. Всё описанное ниже применимо как к домашним Wi-Fi-роутерам со стандартными и продвинутыми (DD-WRT & Co.) прошивками, так и к корпоративным железкам и сетям. Поэтому, в качестве примера возьмем «домашнюю» тему, как более родную и близкую к телу. Ибо даже самые администые из админов и инженеристые из инженеров живут в многоквартирных домах (или поселках с достаточной плотностью соседей), и всем хочется быстрого и надежного Wi-Fi.

Несколько примечаний перед началом:

  • Стиль изложения нарочито упрощен, т.к. некоторые вещи вам, возможно, придется объяснять соседям, совершенно незнакомым с основами радиосетей, стандартом 802.11 и регуляторной политикой государства.
  • Из любого правила есть исключения, которые опущены для краткости. Предельные случаи можно обсудить в комментариях.
  • Пожалуйста, обратите внимание на слово «неочевидные». Подробное доказательство некоторых тезисов требует погружения в стандарты, я этого делать не хочу (хоть и пришлось пару раз).

1. Как жить хорошо самому и не мешать соседям.

[1.1] Казалось бы – чего уж там? Выкрутил точку на полную мощность, получил максимально возможное покрытие – и радуйся. А теперь давайте подумаем: не только сигнал точки доступа должен достичь клиента, но и сигнал клиента должен достичь точки. Мощность передатчика ТД обычно до 100 мВт (20 dBm). А теперь загляните в datasheet к своему ноутбуку/телефону/планшету и найдите там мощность его Wi-Fi передатчика. Нашли? Вам очень повезло! Часто её вообще не указывают (можно поискать по FCC ID). Тем не менее, можно уверенно заявлять, что мощность типичных мобильных клиентов находится в диапазоне 30-50 мВт. Таким образом, если ТД вещает на 100мВт, а клиент – только на 50мВт, в зоне покрытия найдутся места, где клиент будет слышать точку хорошо, а ТД клиента — плохо (или вообще слышать не будет) – асимметрия. Это справедливо даже с учетом того, что у точки обычно лучше чувствительность приема — смотрите под спойлером. Опять же, речь идет не о дальности, а о симметрии.Сигнал есть – а связи нет. Или downlink быстрый, а uplink медленный. Это актуально, если вы используете Wi-Fi для онлайн-игр или скайпа, для обычного интернет-доступа это не так и важно (только, если вы не на краю покрытия). И будем жаловаться на убогого провайдера, глючную точку, кривые драйвера, но не на неграмотное планирование сети.

Обоснование (для тех, кому интересны подробности):

Вывод: может оказаться, что для получения более стабильной связи мощность точки придется снизить. Что, согласитесь, не совсем очевидно 🙂

[1.2] Также далеко не самым известным фактом, добавляющим к асимметрии, является то, что у большинства клиентских устройств мощность передатчика снижена на «крайних» каналах (1 и 11/13 для 2.4 ГГц). Вот пример для iPhone из документации FCC (мощность на порту антенны).

Как видите, на крайних каналах мощность передатчика в ~2.3 раза ниже, чем на средних. Причина в том, что Wi-Fi – связь широкополосная, удержать сигнал чётко в пределах рамки канала не удастся. Вот и приходится снижать мощность в «пограничных» случаях, чтобы не задевать соседние с ISM диапазоны. Вывод: если ваш планшет плохо работает в туалете – попробуйте переехать на канал 6.

2. Раз уж речь зашла о каналах…

Всем известны «непересекающиеся» каналы 1/6/11. Так вот, они пересекаются! Потому, что Wi-Fi, как было упомянуто раньше, технология широкополосная и полностью сдержать сигнал в рамках канала невозможно. Приведенные ниже иллюстрации демонстрируют эффект для 802.11n OFDM (HT). На первой иллюстрации изображена спектральная маска 802.11n OFDM (HT) для 20МГц канала в 2.4ГГц (взята прямо из стандарта). По вертикали — мощность, по горизонтали — частота (смещение от центральной частоты канала). На второй иллюстрации я наложил спектральные маски каналов 1,6,11 с учетом соседства. Из этих иллюстраций мы сделаем два важных вывода.

[2.1] Все считают, что ширина канала — 22МГц (так и есть). Но, как показывает иллюстрация, сигнал на этом не заканчивается, и даже непересекающиеся каналы таки перекрываются: 1/6 и 6/11 — на ~-20dBr, 1/11 — на ~-36dBr, 1/13 — на -45dBr.
Попытка поставить две точки доступа, настроенные на соседние «неперекрывающиеся» каналы, близко друг от друга приведет к тому, что каждая из них будет создавать соседке помеху в 20dBm – 20dB – 50dB [которые добавим на потери распространения сигнала на малое расстояние и небольшую стенку] =-50dBm! Такой уровень шума способен целиком забить любой полезный Wi-Fi сигнал из соседней комнаты, или блокировать ваши коммуникации целиком!

Почему

Вывод: если вы поставите точку рядом со стеной, а ваш сосед – с другой стороны стены, его точка на соседнем «неперекрывающемся» канале все равно может доставлять вам серьезные проблемы. Попробуйте посчитать значения помехи для каналов 1/11 и 1/13 и сделать выводы самостоятельно.
Аналогично, некоторые стараются «уплотнить» покрытие, устанавливая две точки настроенные на разные каналы друг на друга стопкой — думаю, уже не надо объяснять, что будет (исключением тут будет грамотное экранирование и грамотное разнесение антенн — все возможно, если знать как).

[2.2] Второй интересный аспект – это попытки чуть более продвинутых пользователей «убежать» между стандартными каналами 1/6/11. Опять же, логика проста: «Я между каналами словлю меньше помех». По факту, помех, обычно, ловится не меньше, а больше. Раньше вы страдали по полной только от одного соседа (на том же канале, что и вы). Но это были помехи не первого уровня OSI (интерференция), а второго – коллизии — т.к. ваша точка делила с соседом коллизионный домен и цивилизованно соседствовала на MAC-уровне. Теперь вы ловите интерференцию (Layer1) от двух соседей с обеих сторон.
В итоге, delay и jitter, может, и попытались немного уменьшиться (т.к. коллизий теперь как бы нет), но зато уменьшилось и соотношение сигнал/шум. А с ним уменьшились и скорости (т.к. каждая скорость требует некоторого минимального SNR — об этом в [3.1]) и процент годных фреймов (т.к. уменьшился запас по SNR, увеличилась чувствительность к случайным всплескам интерференции). Как следствие, обычно, возростает retransmit rate, delay, jitter, уменьшается пропускная способность.
Кроме того, при значительном перекрытии каналов таки возможно корректно принять фрейм с соседнего канала (если соотношение сигнал/шум позволяет) и таки получить коллизию. А при помехе выше -62dBm вышеупомянутый механизм CCA просто не даст воспользоваться каналом. Это только усугубляет ситуацию и негативно влияет на пропускную способность.
Вывод: не старайтесь использовать нестандартные каналы, не просчитав последствий, и отговаривайте от этого соседей. В общем, то же, что и с мощностью: отговаривайте соседей врубать точки на полную мощность на нестандартных каналах – будет меньше интерференции и коллизий у всех. Как просчитать последствия станет понятно из [3].

[2.3] По примерно тем же причинам не стоить ставить точку доступа у окна, если только вы не планируете пользоваться/раздавать Wi-Fi во дворе. Толку от того, что ваша точка будет светить вдаль, вам лично никакого – зато будете собирать коллизии и шум от всех соседей в прямой видимости. И сами к захламленности эфира добавите. Особенно в многоквартирных домах, построенных зигзагами, где окна соседей смотрят друг на друга с расстояния в 20-30м. Соседям с точками на подоконниках принесите свинцовой краски на окна… 🙂

3. Раз уж речь зашла о скоростях…

[3.1] Уже несколько раз мы упоминали скорости (rate/MCS — не throughput) в связке с SNR. Ниже приведена таблица необходимых SNR для рейтов/MCS, составленная мной по материалам стандарта. Собственно, именно поэтому для более высоких скоростей чувствительность приемника меньше, как мы заметили в [1.1].

В сетях 802.11n/MIMO благодаря MRC и другим многоантенным ухищрениям нужный SNR можно получить и при более низком входном сигнале. Обычно, это отражено в значениях чувствительности в datasheet’ах.
Отсюда, кстати, можно сделать еще один вывод: эффективный размер (и форма) зоны покрытия зависит от выбранной скорости (rate/MCS). Это важно учитывать в своих ожиданиях и при планировании сети.

[3.2] Этот пункт может оказаться неосуществимым для владельцев точек доступа с совсем простыми прошивками, которые не позволяют выставлять Basic и Supported Rates. Как уже было сказано выше, скорость (rate) зависит от соотношения сигнал/шум. Если, скажем, 54Mbps требует SNR в 25dB, а 2Mbps требует 6dB, то понятно, что фреймы, отправленные на скорости 2Mbps «пролетят» дальше, т.е. их можно декодировать с большего расстояния, чем более скоростные фреймы. Тут мы и приходим к Basic Rates: все служебные фреймы, а также броадкасты (если точка не поддерживает BCast/MCast acceleration и его разновидности), отправляются на самой нижней Basic Rate. А это значит, что вашу сеть будет видно за многие кварталы. Вот пример (спасибо Motorola AirDefense).

Опять же, это добавляет к рассмотренной в [2.2] картине коллизий: как для ситуации с соседями на том же канале, так и для ситуации с соседями на близких перекрывающихся каналах. Кроме того, фреймы ACK (которые отправляются в ответ на любой unicast пакет) тоже ходят на минимальной Basic Rate (если точка не поддерживает их акселерацию)

Еще немного математики

Вывод: отключайте низкие скорости – и у вас, и у соседей сеть станет работать быстрее. У вас – за счет того, что весь служебный трафик резко начнет ходить быстрее, у соседей – за счет того, что вы теперь для них не создаете коллизий (правда, вы все еще создаете для них интерференцию — сигнал никуда не делся — но обычно достаточно низкую). Если убедите соседей сделать то же самое – у вас сеть будет работать еще быстрее.

[3.3] Понятно, что при отключении низких скоростей подключиться к тоже можно будет только в зоне более сильного сигнала (требования к SNR стали выше), что ведет к уменьшению эффективного покрытия. Равно как и в случае с понижением мощности. Но тут уж вам решать, что вам нужно: максимальное покрытие или быстрая и стабильная связь. Используя табличку и datasheet’ы производителя точки и клиентов почти всегда можно достичь приемлемого баланса.

[3.4] Еще одним интересным вопросам являются режимы совместимости (т.н. “Protection Modes”). В настоящее время есть режим совместимости b-g (ERP Protection) и a/g-n (HT Protection). В любом случае скорость падает. На то, насколько она падает, влияет куча факторов (тут еще на две статьи материала хватит), я обычно просто говорю, что скорость падает примерно на треть. При этом, если у вас точка 802.11n и клиент 802.11n, но у соседа за стеной точка g, и его трафик долетает до вас – ваша точка точно так же свалится в режим совместимости, ибо того требует стандарт. Особенно приятно, если ваш сосед – самоделкин и ваяет что-то на основе передатчика 802.11b. 🙂 Что делать? Так же, как и с уходом на нестандартные каналы – оценить, что для вас существеннее: коллизии (L2) или интерференция (L1). Если уровень сигнала от соседа относительно низок, переключайте точки в режим чистого 802.11n (Greenfield): возможно, понизится максимальная пропускная способность (снизится SNR), но трафик будет ходить равномернее из-за избавления от избыточных коллизий, пачек защитных фреймов и переключения модуляций. В противном случае – лучше терпеть и поговорить с соседом на предмет мощности/перемещения ТД. Ну, или отражатель поставить… Да, и не ставьте точку на окно! 🙂

[3.5] Другой вариант – переезжать в 5 ГГц, там воздух чище: каналов больше, шума меньше, сигнал ослабляется быстрее, да и банально точки стоят дороже, а значит – их меньше. Многие покупают dual radio точку, настраивают 802.11n Greenfield в 5 ГГц и 802.11g/n в 2.4 ГГц для гостей и всяких гаджетов, которым скорость все равно не нужна. Да и безопаснее так: у большинства script kiddies нет денег на дорогие игрушки с поддержкой 5 ГГц.
Для 5 ГГц следует помнить, что надежно работают только 4 канала: 36/40/44/48 (для Европы, для США есть еще 5). На остальных включен режим сосуществования с радарами (DFS). В итоге, связь может периодически пропадать.

4. Раз уж речь зашла о безопасности…

Упомянем некоторые интересные аспекты и здесь.
[4.1] Какой должна быть длина PSK? Вот выдержка из текста стандарта 802.11-2012, секция M4.1:
Keys derived from the pass phrase provide relatively low levels of security, especially with keys generated form short passwords, since they are subject to dictionary attack. Use of the key hash is recommended only where it is impractical to make use of a stronger form of user authentication. A key generated from a passphrase of less than about 20 characters is unlikely to deter attacks.
Вывод: ну, у кого пароль к домашней точке состоит из 20+ символов? 🙂

[4.2] Почему моя точка 802.11n не «разгоняется» выше скоростей a/g? И какое отношение это имеет к безопасности?
Стандарт 802.11n поддерживает только два режима шифрования: CCMP и None. Сертификация Wi-Fi 802.11n Compatible требует, чтобы при включении TKIP на радио точка переставала поддерживать все новые скоростные режимы 802.11n, оставляя лишь скорости 802.11a/b/g. В некоторых случаях можно видеть ассоциации на более высоких рейтах, но пропускная способность все равно будет низкой. Вывод: забываем про TKIP – он все равно будет запрещен с 2014 года (планы Wi-Fi Alliance).

[4.3] Стоит ли прятать (E)SSID? (это уже более известная тема)

спрятался

5. Всякая всячина.

[5.1] Немного о MIMO. Почему-то по сей день я сталкиваюсь с формулировками типа 2×2 MIMO или 3×3 MIMO. К сожалению, для 802.11n эта формулировка малополезна, т.к. важно знать еще количество пространственных потоков (Spatial Streams). Точка 2×2 MIMO может поддерживать только один SS, и не поднимется выше 150Mbps. Точка с 3×3 MIMO может поддерживать 2SS, ограничиваясь лишь 300Mbps. Полная формула MIMO выглядит так: TX x RX: SS. Понятно, что количество SS не может быть больше min (TX, RX). Таким образом, приведенные выше точки будут записаны как 2×2:1 и 3×3:2. Многие беспроводные клиенты реализуют 1×2:1 MIMO (смартфоны, планшеты, дешевые ноутбуки) или 2×3:2 MIMO. Так что бесполезно ожидать скорости 450Mbps от точки доступа 3×3:3 при работе с клиентом 1×2:1. Тем не менее, покупать точку типа 2×3:2 все равно стоит, т.к. большее количество принимающих антенн добавляет точке чувствительности (MRC Gain). Чем больше разница между количеством принимающих антенн точки и количеством передающих антенн клиента — тем больше выигрыш (если на пальцах). Однако, в игру вступает multipath.

[5.2] Как известно, multipath для сетей 802.11a/b/g – зло. Точка доступа, поставленная антенной в угол, может работать не самым лучшим образом, а выдвинутая из этого угла на 20-30см может показать значительно лучший результат. Аналогично для клиентов, помещений со сложной планировкой, кучей металлических предметов и т.д.
Для сетей MIMO с MRC и в особенности для работы нескольких SS (и следовательно, для получения высоких скоростей) multipath – необходимое условие. Ибо, если его не будет – создать несколько пространственных потоков не получится. Предсказывать что-либо без специальных инструментов планирования здесь сложно, да и с ними непросто. Вот пример рассчетов из Motorola LANPlanner, но однозначный ответ тут может дать только радиоразведка и тестирование.

Создать благоприятную multipath-обстановку для работы трех SS сложнее, чем для работы двух SS. Поэтому новомодные точки 3×3:3 работают с максимальной производительностью обычно лишь в небольшом радиусе, да и то не всегда. Вот красноречивый пример от HP (если копнуть глубже в материалы анонса их первой точки 3×3:3 — MSM460)

[5.3] Ну, и несколько интересных фактов для коллекции:

  • Человеческое тело ослабляет сигнал на 3-5dB (2.4/5ГГц). Просто развернувшись лицом к точке можно получить более высокую скорость.
  • Некоторые дипольные антенны имеют асммметричную диаграмму направленности в H-плоскости («вид сбоку») и лучше работают перевернутыми
  • В фрейме 802.11 может использоваться одновременно до четырех MAC-адресов, а в 802.11s (новый стандарт на mesh) — до шести!

Итого

Технология 802.11 (да и радиосетей в целом) обладает множеством неочевидных особенностей. Лично у меня вызывает громадное уважение и восхищение тот факт, что люди отточили насколько сложную технологию до уровня «воткни-работай». Мы рассмотрели (в разном объеме) разные аспекты физического и канального уровня сетей 802.11:

  • Асиметрию мощностей
  • Ограничения на мощность передачи в граничных каналах
  • Пересечение «непересекающихся» каналов и последствия
  • Работу на «нестандартных» каналах (отличных от 1/6/11/13)
  • Работу механизма Clear Channel Assesment и блокировку канала
  • Зависимость скорости (rate/MCS) от SNR и, как следствие, зависимость чувствительности приемника и зоны покрытия от требуемой скорости
  • Особенности пересылки служебного трафика
  • Последствия включения поддержки низких скоростей
  • Последствия включения поддержки режимов совместимости
  • Выбор каналов в 5ГГц
  • Некоторые забавные аспекты безопасности, MIMO и проч.

Не все было рассмотрено в полном объеме и исчерпывающем виде, равно как за бортом остались неочевидные аспекты сосуществования клиентов, балансировки нагрузки, WMM, питания и роуминга, экзотика типа Single-Channel Architecture и индивидуальных BSS — но это уже тема для сетей совсем другого масштаба. Если следовать хотя бы вышеприведенныым соображениям, в обычном жилом доме можно получить вполне приличный коммунизм microcell, как в высокопроизводительных корпоративных WLAN. Надеюсь, статья была вам интересна.

SSH – подробно об известном.

Оглавление:

  • управление ключами
  • копирование файлов через ssh
  • Проброс потоков ввода/вывода
  • Монтирование удалённой FS через ssh
  • Удалённое исполнение кода
  • Алиасы и опции для подключений в .ssh/config
  • Опции по-умолчанию
  • Проброс X-сервера
  • ssh в качестве socks-proxy
  • Проброс портов — прямой и обратный
  • Реверс-сокс-прокси
  • туннелирование L2/L3 трафика
  • Проброс агента авторизации
  • Туннелирование ssh через ssh сквозь недоверенный сервер

Управление ключами

Теория в нескольких словах: ssh может авторизоваться не по паролю, а по ключу. Ключ состоит из открытой и закрытой части. Открытая кладётся в домашний каталог пользователя, «которым» заходят на сервер, закрытая — в домашний каталог пользователя, который идёт на удалённый сервер. Половинки сравниваются (я утрирую) и если всё ок — пускают. Важно: авторизуется не только клиент на сервере, но и сервер по отношению к клиенту (то есть у сервера есть свой собственный ключ). Главной особенностью ключа по сравнению с паролем является то, что его нельзя «украсть», взломав сервер — ключ не передаётся с клиента на сервер, а во время авторизации клиент доказывает серверу, что владеет ключом (та самая криптографическая магия).

Генерация ключа

Свой ключ можно сгенерировать с помощью команды ssh-keygen. Если не задать параметры, то он сохранит всё так, как надо.
Ключ можно закрыть паролем. Этот пароль (в обычных графических интерфейсах) спрашивается один раз и сохраняется некоторое время. Если пароль указать пустым, он спрашиваться при использовании не будет. Восстановить забытый пароль невозможно.
Сменить пароль на ключ можно с помощью команды ssh-keygen -p.

Структура ключа

(если на вопрос про расположение ответили по-умолчанию).
~/.ssh/id_rsa.pub — открытый ключ. Его копируют на сервера, куда нужно получить доступ.
~/.ssh/id_rsa — закрытый ключ. Его нельзя никому показывать. Если вы в письмо/чат скопипастите его вместо pub, то нужно генерировать новый ключ. (Я не шучу, примерно 10% людей, которых просишь дать ssh-ключ постят id_rsa, причём из этих десяти процентов мужского пола 100%).

Копирование ключа на сервер

В каталоге пользователя, под которым вы хотите зайти, если создать файл ~/.ssh/authorized_keys и положить туда открытый ключ, то можно будет заходить без пароля. Обратите внимание, права на файл не должны давать возможность писать в этот файл посторонним пользователям, иначе ssh его не примет. В ключе последнее поле — user@machine. Оно не имеет никакого отношения к авторизации и служит только для удобства определения где чей ключ. Заметим, это поле может быть поменяно (или даже удалено) без нарушения структуры ключа.
Если вы знаете пароль пользователя, то процесс можно упростить. Команда ssh-copy-id user@server позволяет скопировать ключ не редактируя файлы вручную.
Замечание: Старые руководства по ssh упоминают про authorized_keys2. Причина: была первая версия ssh, потом стала вторая (текущая), для неё сделали свой набор конфигов, всех это очень утомило, и вторая версия уже давным давно переключилась на версии без всяких «2». То есть всегда authorized_keys и не думать о разных версиях.

Ключ сервера

Первый раз, когда вы заходите на сервер, ssh вас спрашивает, доверяете ли вы ключу. Если отвечаете нет, соединение закрывается. Если да — ключ сохраняется в файл ~/.ssh/known_hosts. Узнать, где какой ключ нельзя .
Если ключ сервера поменялся (например, сервер переустановили), ssh вопит от подделке ключа. Обратите внимание, если сервер не трогали, а ssh вопит, значит вы не на тот сервер ломитесь (например, в сети появился ещё один компьютер с тем же IP, особо этим страдают всякие локальные сети с 192.168.1.1, которых в мире несколько миллионов). Сценарий «злобной man in the middle атаки» маловероятен, чаще просто ошибка с IP, хотя если «всё хорошо», а ключ поменялся — это повод поднять уровень паранойи на пару уровней (а если у вас авторизация по ключу, а сервер вдруг запросил пароль — то паранойю можно включать на 100% и пароль не вводить).
Удалить известный ключ сервера можно командой ssh-keygen -R server. При этом нужно удалить ещё и ключ IP (они хранятся раздельно): ssh-keygen -R 127.0.0.1.
Ключ сервера хранится в /etc/ssh/ssh_host_rsa_key и /etc/ssh/ssh_host_rsa_key.pub. Их можно:
а) скопировать со старого сервера на новый.
б) сгенерировать с помощью ssh-keygen. Пароля при этом задавать не надо (т.е. пустой). Ключ с паролем ssh-сервер использовать не сможет.
Заметим, если вы сервера клонируете (например, в виртуалках), то ssh-ключи сервера нужно обязательно перегенерировать.
Старые ключи из know_hosts при этом лучше убрать, иначе ssh будет ругаться на duplicate key.

Копирование файлов

Передача файлов на сервер иногда может утомлять. Помимо возни с sftp и прочими странными вещами, ssh предоставляет нам команду scp, которая осуществляет копирование файла через ssh-сессию.

 scp path/myfile user@8.8.8.8:/full/path/to/new/location/

Обратно тоже можно:

  scp user@8.8.8.8:/full/path/to/file /path/to/put/here

Fish varning: Не смотря на то, что mc умеет делать соединение по ssh, копировать большие файлы будет очень мучительно, т.к. fish (модуль mc для работы с ssh как с виртуальной fs) работает очень медленно. 100-200кб — предел, дальше начинается испытание терпения.

Удалённое исполнение кода

ssh может выполнить команду на удалённом сервере и тут же закрыть соединение. Простейший пример:

  ssh user@server ls /etc/ 

Выведет нам содержимое /etc/ на server, при этом у нас будет локальная командная строка.

Некоторые приложения хотят иметь управляющий терминал. Их следует запускать с опцией -t:

  ssh user@server -t remove_command 

Кстати, мы можем сделать что-то такого вида:

  ssh user@server cat /some/file|awk '{print $2}' |local_app 

Это нас приводит следующей фиче:

Проброс stdin/out

Допустим, мы хотим сделать запрос к программе удалённо, а потом её вывод поместить в локальный файл

 ssh user@8.8.8.8 command >my_file

Допустим, мы хотим локальный вывод положить удалённо

 mycommand |scp — user@8.8.8.8:/path/remote_file

Усложним пример — мы можем прокидывать файлы с сервера на сервер: Делаем цепочку, чтобы положить stdin на 10.1.1.2, который нам не доступен снаружи:

 mycommand | ssh user@8.8.8.8 «scp — user@10.1.1.2:/path/to/file»

Есть и вот такой головоломный приём использования pipe’а:

  tar -c * | ssh user@server cd && tar -x 

Tar запаковывает файлы по маске локально, пишет их в stdout, откуда их читает ssh, передаёт в stdin на удалённом сервере, где их cd игнорирует (не читает stdin), а tar — читает и распаковывает. Так сказать, scp для бедных.

Алиасы

В более-менее крупной компании часто оказывается, что имена серверов выглядят так: spb-MX-i3.extrt.int.company.net. И пользователь там не равен локальному. То есть логиниться надо так: ssh ivanov_i@spb-MX-i3.extrt.int.company.net. Каждый раз печатать — туннельных синдромов не напасёшься. В малых компаниях проблема обратная — никто не думает о DNS, и обращение на сервер выглядит так: ssh root@192.168.1.4. Короче, но всё равно напрягает. Ещё большая драма, если у нас есть нестандартный порт, и, например, первая версия ssh (привет цискам). Тогда всё выглядит так: ssh -1 -p 334 vv_pupkin@spb-MX-i4.extrt.int.company.net. Удавиться. Про драму с scp даже рассказывать не хочется.

Можно прописать общесистемные alias’ы на IP (/etc/hosts), но это кривоватый выход (и пользователя и опции всё равно печатать). Есть путь короче.

Файл ~/.ssh/config позволяет задать параметры подключения, в том числе специальные для серверов, что самое важное, для каждого сервера своё. Вот пример конфига:

Host ric
        Hostname ооо-рога-и-копыта.рф
        User Администратор
        ForwardX11 yes
        Compression yes
Host home
        Hostname myhome.dyndns.org
        User vasya
        PasswordAuthentication no

Все доступные для использования опции можно увидеть в man ssh_config (не путать с sshd_config).

Опции по умолчанию

Можно указать настройки соединения по умолчанию с помощью конструкции Host *, т.е., например:

Host *
User root
Compression yes

То же самое можно сделать и в /etc/ssh/ssh_config (не путать с /etc/ssh/sshd_config), но это требует прав рута и распространяется на всех пользователей.

Проброс X-сервера

Теория: Графические приложения в юникс обычно используют X-сервер . Это означает, что приложение запускается и подключается к X-серверу для рисования. Иными словами, если у вас есть голый сервер без GUI и есть локальный x-сервер (в котором вы работаете), то вы можете дать возможность приложениям с сервера рисовать у вас на рабочем столе. Обычно подключение к удалённом X-серверу — не самая безопасная и тривиальная вещь. SSH позволяет упростить этот процесс и сделать его совсем безопасным. А возможность жать трафик позволяет ещё и обойтись меньшим трафиком (т.е. уменьшить утилизацию канала, то есть уменьшить ping (точнее, latency), то есть уменьшить лаги).

Ключики: -X — проброс X-сервера. -Y проброс авторизации.

Достаточно просто запомнить комбинацию ssh -XYC user@SERVER.
В примере выше  подключаемся к серверу ооо-рога-и-копыта.рф не просто так, а с целью получить доступ к windows-серверу. Безопасность microsoft при работе в сети мы все хорошо знаем, так что выставлять наружу голый RDP неуютно. Вместо этого мы подключаемся к серверу по ssh, а дальше запускаем там команду rdesktop:

ssh ric rdesktop -k en-us 192.168.1.1 -g 1900x1200

наблюдаем окошко логина в windows на нашем рабочем столе. Заметим, тщательно зашифрованное и неотличимое от обычного ssh-трафика.

Socks-proxy

Стоит оказаться в очередной гостинице (кафе, конференции), то местный wifi чаще всего оказывается ужасным — закрытые порты, неизвестно какой уровень безопасности. Да и доверия к чужим точкам доступа не особо много .
Особые проблемы доставляют закрытые порты. То джаббер прикроют, то IMAP, то ещё что-нибудь.
Обычный VPN (pptp, l2tp, openvpn) в таких ситуациях не работает — его просто не пропускают. Экспериментально известно, что 443ий порт чаще всего оставляют, причём в режиме CONNECT, то есть пропускают «как есть» (обычный http могут ещё прозрачно на сквид завернуть).
Решением служит socks-proxy режим работы ssh. Его принцип: ssh-клиент подключается к серверу и слушает локально. Получив запрос, он отправляет его (через открытое соединение) на сервер, сервер устанавливает соединение согласно запросу и все данные передаёт обратно ssh-клиенту. А тот отвечает обратившемуся. Для работы нужно сказать приложениям «использовать socks-proxy». И указать IP-адрес прокси. В случае с ssh это чаще всего localhost (так вы не отдадите свой канал чужим людям).

Подключение в режиме sock-proxy выглядит так:

ssh -D 8080 user@server

В силу того, что чужие wifi чаще всего не только фиговые, но и лагливые, то бывает неплохо включить опцию -C (сжимать трафик). Получается почти что opera turbo (только картинки не жмёт). В реальном сёрфинге по http жмёт примерно в 2-3 раза (читай — если вам выпало несчастье в 64кбит, то вы будете мегабайтные страницы открывать не по две минуты, а секунд за 40. Фигово, но всё ж лучше). Но главное: никаких украденных кук и подслушанных сессий.
Я не зря сказал про закрытые порты. 22ой порт закрывают ровно так же, как «не нужный» порт джаббера. Решение — повесить сервер на 443-й порт. Снимать с 22 не стоит, иногда бывают системы с DPI (deep packet inspection), которые ваш «псевдо-ssl» не пустят.

Вот так выглядит  конфиг:

 /etc/ssh/sshd_config:
 (фрагмент)
 Port 22
 Port 443

А вот кусок ~/.ssh/config с ноутбука, который описывает vpn

Host vpn
    Hostname desunote.ru
    User vasya
    Compression yes
    DynamicForward 127.1:8080
    Port 443

(обратите внимание на «ленивую» форму записи localhost — 127.1, это вполне себе законный метод написать 127.0.0.1)

Проброс портов

Мы переходим к крайне сложной для понимания части функционала SSH, позволяющей осуществлять головоломные операции по туннелированию TCP «из сервера» и «на сервер».

Для понимания ситуации все примеры ниже будут ссылаться на вот эту схему:

Комментарии: Две серые сети. Первая сеть напоминает типичную офисную сеть (NAT), вторая — «гейтвей», то есть сервер с белым интерфейсом и серым, смотрящим в свою собственную приватную сеть. В дальнейших рассуждениях мы полагаем, что «наш» ноутбук — А, а «сервер» — Б.

Задача: у нас локально запущено приложение, нам нужно дать возможность другому пользователю (за пределами нашей сети) посмотреть на него.

Решение: проброс локального порта (127.0.0.1:80) на публично доступный адрес. Допустим, наш «публично доступный» Б занял 80ый порт чем-то полезным, так что пробрасывать мы будем на нестандартный порт (8080).

Итоговая конфигурация: запросы на 8.8.8.8:8080 будут попадать на localhost ноутбука А.

ssh -R 127.1:80:8.8.8.8:8080 user@8.8.8.8

Опция -R позволяет перенаправлять с удалённого (Remote) сервера порт на свой (локальный).
Важно: если мы хотим использовать адрес 8.8.8.8, то нам нужно разрешить GatewayPorts в настройках сервера Б.
Задача. На сервере «Б» слушает некий демон (допустим, sql-сервер). Наше приложение не совместимо с сервером (другая битность, ОС, злой админ, запрещающий и накладывающий лимиты и т.д.). Мы хотим локально получить доступ к удалённому localhost’у.

Итоговая конфигурация: запросы на localhost:3333 на ‘A’ должны обслуживаться демоном на localhost:3128 ‘Б’.

ssh -L 127.1:333:127.1:3128 user@8.8.8.8

Опция -L позволяет локальные обращения (Local) направлять на удалённый сервер.

Задача: На сервере «Б» на сером интерфейсе слушает некий сервис и мы хотим дать возможность коллеге (192.168.0.3) посмотреть на это приложение.

Итоговая конфигурация: запросы на наш серый IP-адрес (192.168.0.2) попадают на серый интерфейс сервера Б.

ssh -L 192.168.0.2:8080:10.1.1.1:80 user@8.8.8.8

Вложенные туннели

Разумеется, туннели можно перенаправлять.

Усложним задачу: теперь нам хочется показать коллеге приложение, запущенное на localhost на сервере с адресом 10.1.1.2 (на 80ом порту).

Решение сложно:
ssh -L 192.168.0.2:8080:127.1:9999 user@8.8.8.8 ssh -L 127.1:9999:127.1:80 user2@10.1.1.2

Что происходит? Мы говорим ssh перенаправлять локальные запросы с нашего адреса на localhost сервера Б и сразу после подключения запустить ssh (то есть клиента ssh) на сервере Б с опцией слушать на localhost и передавать запросы на сервер 10.1.1.2 (куда клиент и должен подключиться). Порт 9999 выбран произвольно, главное, чтобы совпадал в первом вызове и во втором.

Реверс-сокс-прокси

Если предыдущий пример вам показался простым и очевидным, то попробуйте догадаться, что сделает этот пример:
ssh -D 8080 -R 127.1:8080:127.1:8080 user@8.8.8.8 ssh -R 127.1:8080:127.1:8080 user@10.1.1.2
Если вы офицер безопасности, задача которого запретить использование интернета на сервере 10.1.1.2, то можете начинать выдёргивать волосы на попе, ибо эта команда организует доступ в интернет для сервера 10.1.1.2 посредством сокс-прокси, запущенного на компьютере «А». Трафик полностью зашифрован и неотличим от любого другого трафика SSH. А исходящий трафик с компьютера с точки зрения сети «192.168.0/24» не отличим от обычного трафика компьютера А.

Туннелирование

Если к этому моменту попа отдела безопасности не сияет лысиной, а ssh всё ещё не внесён в список врагов безопасности номер один, вот вам окончательный убийца всего и вся: туннелирование IP или даже ethernet. В самых радикальных случаях это позволяет туннелировать dhcp, заниматься удалённым arp-спуфингом, делать wake up on lan и прочие безобразия второго уровня.

Подробнее описано тут: www.khanh.net/blog/archives/51-using-openSSH-as-a-layer-2-ethernet-bridge-VPN.html

Легко понять, что в таких условиях невозможно никаким DPI (deep packet inspection) отловить подобные туннели — либо ssh разрешён (читай — делай что хочешь), либо ssh запрещён (и можно смело из такой компании идиотов увольняться не ощущая ни малейшего сожаления).

Проброс авторизации

OpenSSH позволяет использовать сервера в качестве плацдарма для подключения к другим серверам, даже если эти сервера недоверенные и могут злоупотреблять чем хотят.

Для начала о простом пробросе авторизации.
Допустим, мы хотим подключиться к серверу 10.1.1.2, который готов принять наш ключ. Но копировать его на 8.8.8.8 мы не хотим, ибо там проходной двор и половина людей имеет sudo и может шариться по чужим каталогам. Компромиссным вариантом было бы иметь «другой» ssh-ключ, который бы авторизовывал user@8.8.8.8 на 10.1.1.2, но если мы не хотим пускать кого попало с 8.8.8.8 на 10.1.1.2, то это не вариант (тем паче, что ключ могут не только поюзать, но и скопировать себе «на чёрный день»).

ssh предлагает возможность форварда ssh-агента (это такой сервис, который запрашивает пароль к ключу). Опция ssh -A пробрасывает авторизацию на удалённый сервер.

Вызов выглядит так:

ssh -A user@8.8.8.8 ssh user2@10.1.1.2

Удалённый ssh-клиент (на 8.8.8.8) может доказать 10.1.1.2, что мы это мы только если мы к этому серверу подключены и дали ssh-клиенту доступ к своему агенту авторизации (но не ключу!).

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

Есть ещё более могучий метод — он превращает ssh в простой pipe (в смысле, «трубу») через которую насквозь мы осуществляем работу с удалённым сервером.

Главным достоинством этого метода является полная независимость от доверенности промежуточного сервера. Он может использовать поддельный ssh-сервер, логгировать все байты и все действия, перехватывать любые данные и подделывать их как хочет — взаимодействие идёт между «итоговым» сервером и клиентом. Если данные оконечного сервера подделаны, то подпись не сойдётся. Если данные не подделаны, то сессия устанавливается в защищённом режиме, так что перехватывать нечего.

Настройка завязана на две возможности ssh: опцию -W (превращающую ssh в «трубу») и опцию конфига ProxyCommand (опции командной строки, вроде бы нет), которая говорит «запустить программу и присосаться к её stdin/out». Опции эти появились недавно, так что пользователи centos в пролёте.

Выглядит это так (циферки для картинки выше):

.ssh/config:

Host raep
     HostName 10.1.1.2
     User user2
     ProxyCommand ssh -W %h:%p user@8.8.8.8

Ну а подключение тривиально:

ssh raep.

Повторю важную мысль: сервер 10.1.1.2 не может перехватить или подделать трафик, воспользоваться агентом авторизации пользователя или иным образом изменить трафик. Запретить — да, может. Но если разрешил — пропустит через себя без расшифровки или модификации. Для работы конфигурации нужно иметь свой открытый ключ в authorized_keys как для user@8.8.8.8, так и в user2@10.1.1.2

Разумеется, подключение можно оснащать всеми прочими фенечками — прокидыванием портов, копированием файлов, сокс-прокси, L2-туннелями, туннелированием X-сервера и т.д.

Автор статьи: abstract

блоггинг – честный заработок в интернете

Краткая шпаргалка по tmux

tmux — это достаточно известный менеджер терминалов, позволяет перелогиниваться, не теряя при этом процессы и историю. Как screen, только лучше (в силу того, что использует модель клиент—сервер).

Tmux

Опишу минимальный набор команд, позволяющий быстро начать использовать tmux, а продвинутые команды, тонкую настройку, можно найти, набрав man tmux.

Удобный способ запустить tmux:
tmux attach || tmux new — сначала пытаетесь подключиться к уже существующему серверу tmux, если он существует; если такого ещё нет — создаёте новый.

После этого вы попадаете в полноценную консоль.
Ctrl+b d — отключиться. (Точно так же вы отключитесь, если прервётся соединение. Как подключиться обратно и продолжить работу — см. выше.)

В одной сессии может быть сколько угодно окон:
Ctrl+b c — создать окно;
Ctrl+b n — перейти в следующее окно;
Ctrl+b p — перейти в предыдущее окно;
Ctrl+b 0…9 — перейти в такое-то окно;
Ctrl+b l — перейти в предыдущее активное окно (из которого вы переключились в текущее);
Ctrl+b & — закрыть окно (а можно просто набрать exit в терминале).

В одном окне может быть несколько панелей:
Ctrl+b ” — разделить текущую панель на две, по горизонтали (это кавычка, которая около Enter, а не Shift+2);
Ctrl+b % — разделить текущую панель на две, по вертикали;
Ctrl+b →←↑↓ — переходить между панелями;
Ctrl+b x — закрыть панель (а можно просто набрать exit в терминале).

Скроллинг внутри окон:
Ctrl+b PgUp — вход в «режим копирования», после чего:
PgUp, PgDown — скроллинг;
q — выход из «режима копирования».

Автор статьи darnley