На самом деле, это инструкция скорее для меня самого, чтобы когда потребуется настроить такую штуку в следующий раз, не рвать волосы на голове и не думать в очередной раз: «Надо было все записать, когда в прошлый раз делал»… Но может быть, кому-то еще пригодится… Я абсолютно не претендую на то, что это абсолютно правильное решение и что нужно делать именно так, более того, буду только рад объективной критике… Просто я так сделал и решил это записать…
Итак, в один прекрасный день передо мной была поставлена следующая задача:
необходимо, чтобы пользователи удаленного офиса могли подключаться к 1С в нашем офисе…
Имеем:
Сервер на fedora 8(скажу сразу, я приверженец OS производства RedHat) с иксами(на самом деле, иксы почти не используются вся работа в терминале + mc, но мне просто удобнее, когда на сервере есть иксы), который является шлюзом для локальной сети офиса(IPTables).
Клиенты в удаленном офисе: windows xp professional с выходом в интернет.
Итак, шаг 1: настройка ssh.
Первое, что надо сделать, установить пакет OpenSSH, что делается довольно просто
yum install openssh.
К сожалению, не могу привести логов всего этого, т.к. уже есть де-факто настроенная система, а эту заметку пишу уже постфактум) =)
После установки открываем /etc/ssh/sshd_config и начинаем его редактировать:
В нашем случае авторизация будет происходить с использованием PublicKey и никакие другие виды авторизации мы не приемлем. Основные параметры, которые необходимо указать:
1) Сетевые параметры: IP-адрес и порт, которые будет прослушивать OpenSSH. В моем случае, ssh будет слушать 22й порт на IP-адресе локальной сети и на внешнем IP.
Port 22
ListenAddress 192.168.0.1
ListenAddress xxx.xxx.xxx.xxx
2) Параметры ssh: версия протокола (1 или 2) и HostKeys. Мы будем использовать только протокол версии 2, поэтому указываем следующие настройки:
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
3) Параметры Аутентификации(различные параметры вроде времени или количества попыток аутентификации, я рассматривать не буду). Итак, необходимо запретить все виды аутентификации, кроме аутентификации с использованием открытого ключа. А также запрещаем аутентификацию для пользователя root.
PermitRootLogin no
RSAAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile /home/%u/.ssh/authorized_keys
RhostsRSAAuthentication no
HostbasedAuthentication no
IgnoreUserKnownHosts yes
IgnoreRhosts yes
PermitEmptyPasswords no
PasswordAuthentication no
UsePAM no
4) Параметры туннелирования портов. В данном случае, мы не будем использовать X11 Forwarding, а просто будем использовать ssh в качестве туннеля для порта 5901, соответственно, параметры относящиеся к X11Forwarding можно не трогать, главное — включить туннелирование.
PermitTunnel yes
Остальные параметры я оставил по умолчанию.
Итак, сервер ssh почти настроен, осталось сделать всего пару вещей.
1) Создать пару ключей для нужного пользователя. Это делается с помощью команды ssh-keygen. Можно задавать большое количество различных опций, таких как длина ключа, тип ключа, имя хоста и др, но даже при использовании с опциями по умолчанию, если вам не нужна черезчур высокая безопасность, вы получите вполне безопасный ключ. Я генерировал ключ следующим образом:
ssh-keygen -t rsa
При генерации ключа необходимо будет ввести пароль, который будет использоваться для доступа к нему в дальнейшем. По умолчанию ключи id_rsa и id_rsa.pub будут сохранены в папку ~/.shh. Закрытую часть ключа(id_rsa) необходимо переместить на хост, с которого будет осуществляться удаленный доступ.
2) Скопировать ПУБЛИЧНУЮ часть созданного ключа в файл ~/.ssh/authorized_keys, например так:
cat id_rsa.pub >> authorized_keys
Все, настройка OpenSSH-сервера закончена, осталось его запустить:
/sbin/service sshd start
А заодно, чтобы в дальнейшем не запускать его вручную после перезагрузок:
chkconfig sshd on
После этого можно протестировать работу нашего сервера. Подключимся из локальной сети, используя Putty.
Сначала с помощью утилиты puttygen необходимо конвертировать наш секретный ключ в формат putty:
1) Запускаем puttygen.
2) Conversions-Import Key и указываем наш секретный ключ
3) После ввода пароля, откроется окно с параметрами ключа, где необходимо выбрать «Save private key» и сохранить версию ключа для putty.
После конвертирования ключа, запускаем putty, для подключения
В настройках необходимо указать:
1) На вкладке Session — IP-адрес сервера, к которому мы подключаемся и порт(в случае использования отличного от порта 22).
2) На вкладке SSH->Auth в поле «Private key file for authentication» указать путь к нашему ключу:
После чего, можно смело нажимать Open. И… вот он, удаленный доступ.
Шаг 2: Следующее, что нам необходимо будет настроить — это сервер vnc.
1) Установка(проще некуда):
yum install vncserver
Настройка, также на удивление проста:
2) Запуск vncpasswd и установка пароля для доступа к вашему терминальному серверу
3) Описание запускаемых серверов vnc в файле /etc/sysconfig/vncservers:
Для настройки терминального сервера необходимо указать пользователей, к рабочим столам которых будет происходить подклюдчение. В данном случае, мы настроили 2 терминальных сервера для доступа к десктопам пользователей user1 и user2. По умолчанию первый будет доступен на порту 5901, второй 5902. В строках VNCSERVERARGS задаем необходимые опции для каждого из серверов. В данном случае:
-geometry — разрешение экрана.
-nohttpd — отключаем запуск https-сервера, который vnc по умолчанию запускает. (В противном случае, можно будет подключиться к рабочсему столу, набрав в браузере server-name:590x)
-localhost — разрешаем подключение только с localhost, то есть удаленно получить доступ к рабочему столу будет нельзя(но т.к. мы будем сначала подключаться к серверу через ssh, то vnc будет воспринимать наше подключение, как локальное.)
VNCSERVERS:«1: user1 2: user2»
VNCSERVERARGS[1]:"-geometry 800x600 -nohttpd -localhost"
VNCSERVERARGS[2]:"-geometry 1280x1024 -nohttpd -localhost"
4) Запуск службы:
/sbin/service vncserver start
Ну и чтобы в дальнейшем запускалась при загрузке:
chkconfig vncserver on
Можем попробовать подключиться к рабочему столу необходимого пользователя.
1) Сначала необходимо настроить в putty туннелирование портов. Для этого необходимо на вкладке SSH->Tunnels указать номер локального порта и назначение, куда будет переадресовываться данный запрос. Указываем адрес 127.0.0.1, так как мы разрешили подключение к vnc только с localhost.
2) После этого можем подключаться, используя vnc-клиент Для Windows существует несколько различных vnc-клиентов. Лично я препочитаю TightVNC, на мой взгляд, оптимальный среди бесплатных vnc-клиентов.
В окне запуска vnc указываем VNC server: 127.0.0.1:x, где x-номер порта, к которому осуществляется подключение.
Vncserver запросит имя пользователя и пароль, который мы задали командой vncpasswd при настройке сервера.
Итак:
Для пущей секьюрности в IPTables порт 22 был открыт только для двух IP-адресов: администратора в локальной сети и IP удаленного офиса. Для тех, кто настраивал IPTables, думаю, ничего сложного в этом нет, да и одно правило в поле не воин. Но, если что:
iptables -a INPUT -p tcp --dport 22 -s xxx.xxx.xxx.xxx -j ACCEPT
Удаленный сервер настроен, осталось настроить 1С. Настройка достаточно подробно описана — http://ru.wikibooks.org/wiki/LOR-FAQ-Wine. Однако, в случае, если вы хотите использовать сетевую версию 1С обычный Wine не подойдет… Во всяком случае, мне не встречалось ни одного случая, чтобы это у кого-нибудь получилось. Поэтому проще всего потратить 2000 рублей(На сайте написано 1700, но на самом деле + НДС=2006) и купить WINE@Etersoft Network Lite Настраивается чрезвычайно просто, поэтому описывать не буду. Итоговый результат:
Итак, в один прекрасный день передо мной была поставлена следующая задача:
необходимо, чтобы пользователи удаленного офиса могли подключаться к 1С в нашем офисе…
Имеем:
Сервер на fedora 8(скажу сразу, я приверженец OS производства RedHat) с иксами(на самом деле, иксы почти не используются вся работа в терминале + mc, но мне просто удобнее, когда на сервере есть иксы), который является шлюзом для локальной сети офиса(IPTables).
Клиенты в удаленном офисе: windows xp professional с выходом в интернет.
Итак, шаг 1: настройка ssh.
Первое, что надо сделать, установить пакет OpenSSH, что делается довольно просто
yum install openssh.
К сожалению, не могу привести логов всего этого, т.к. уже есть де-факто настроенная система, а эту заметку пишу уже постфактум) =)
После установки открываем /etc/ssh/sshd_config и начинаем его редактировать:
В нашем случае авторизация будет происходить с использованием PublicKey и никакие другие виды авторизации мы не приемлем. Основные параметры, которые необходимо указать:
1) Сетевые параметры: IP-адрес и порт, которые будет прослушивать OpenSSH. В моем случае, ssh будет слушать 22й порт на IP-адресе локальной сети и на внешнем IP.
Port 22
ListenAddress 192.168.0.1
ListenAddress xxx.xxx.xxx.xxx
2) Параметры ssh: версия протокола (1 или 2) и HostKeys. Мы будем использовать только протокол версии 2, поэтому указываем следующие настройки:
Protocol 2
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_dsa_key
3) Параметры Аутентификации(различные параметры вроде времени или количества попыток аутентификации, я рассматривать не буду). Итак, необходимо запретить все виды аутентификации, кроме аутентификации с использованием открытого ключа. А также запрещаем аутентификацию для пользователя root.
PermitRootLogin no
RSAAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile /home/%u/.ssh/authorized_keys
RhostsRSAAuthentication no
HostbasedAuthentication no
IgnoreUserKnownHosts yes
IgnoreRhosts yes
PermitEmptyPasswords no
PasswordAuthentication no
UsePAM no
4) Параметры туннелирования портов. В данном случае, мы не будем использовать X11 Forwarding, а просто будем использовать ssh в качестве туннеля для порта 5901, соответственно, параметры относящиеся к X11Forwarding можно не трогать, главное — включить туннелирование.
PermitTunnel yes
Остальные параметры я оставил по умолчанию.
Итак, сервер ssh почти настроен, осталось сделать всего пару вещей.
1) Создать пару ключей для нужного пользователя. Это делается с помощью команды ssh-keygen. Можно задавать большое количество различных опций, таких как длина ключа, тип ключа, имя хоста и др, но даже при использовании с опциями по умолчанию, если вам не нужна черезчур высокая безопасность, вы получите вполне безопасный ключ. Я генерировал ключ следующим образом:
ssh-keygen -t rsa
При генерации ключа необходимо будет ввести пароль, который будет использоваться для доступа к нему в дальнейшем. По умолчанию ключи id_rsa и id_rsa.pub будут сохранены в папку ~/.shh. Закрытую часть ключа(id_rsa) необходимо переместить на хост, с которого будет осуществляться удаленный доступ.
2) Скопировать ПУБЛИЧНУЮ часть созданного ключа в файл ~/.ssh/authorized_keys, например так:
cat id_rsa.pub >> authorized_keys
Все, настройка OpenSSH-сервера закончена, осталось его запустить:
/sbin/service sshd start
А заодно, чтобы в дальнейшем не запускать его вручную после перезагрузок:
chkconfig sshd on
После этого можно протестировать работу нашего сервера. Подключимся из локальной сети, используя Putty.
Сначала с помощью утилиты puttygen необходимо конвертировать наш секретный ключ в формат putty:
1) Запускаем puttygen.
2) Conversions-Import Key и указываем наш секретный ключ
3) После ввода пароля, откроется окно с параметрами ключа, где необходимо выбрать «Save private key» и сохранить версию ключа для putty.
После конвертирования ключа, запускаем putty, для подключения
В настройках необходимо указать:
1) На вкладке Session — IP-адрес сервера, к которому мы подключаемся и порт(в случае использования отличного от порта 22).
2) На вкладке SSH->Auth в поле «Private key file for authentication» указать путь к нашему ключу:
После чего, можно смело нажимать Open. И… вот он, удаленный доступ.
Шаг 2: Следующее, что нам необходимо будет настроить — это сервер vnc.
1) Установка(проще некуда):
yum install vncserver
Настройка, также на удивление проста:
2) Запуск vncpasswd и установка пароля для доступа к вашему терминальному серверу
3) Описание запускаемых серверов vnc в файле /etc/sysconfig/vncservers:
Для настройки терминального сервера необходимо указать пользователей, к рабочим столам которых будет происходить подклюдчение. В данном случае, мы настроили 2 терминальных сервера для доступа к десктопам пользователей user1 и user2. По умолчанию первый будет доступен на порту 5901, второй 5902. В строках VNCSERVERARGS задаем необходимые опции для каждого из серверов. В данном случае:
-geometry — разрешение экрана.
-nohttpd — отключаем запуск https-сервера, который vnc по умолчанию запускает. (В противном случае, можно будет подключиться к рабочсему столу, набрав в браузере server-name:590x)
-localhost — разрешаем подключение только с localhost, то есть удаленно получить доступ к рабочему столу будет нельзя(но т.к. мы будем сначала подключаться к серверу через ssh, то vnc будет воспринимать наше подключение, как локальное.)
VNCSERVERS:«1: user1 2: user2»
VNCSERVERARGS[1]:"-geometry 800x600 -nohttpd -localhost"
VNCSERVERARGS[2]:"-geometry 1280x1024 -nohttpd -localhost"
4) Запуск службы:
/sbin/service vncserver start
Ну и чтобы в дальнейшем запускалась при загрузке:
chkconfig vncserver on
Можем попробовать подключиться к рабочему столу необходимого пользователя.
1) Сначала необходимо настроить в putty туннелирование портов. Для этого необходимо на вкладке SSH->Tunnels указать номер локального порта и назначение, куда будет переадресовываться данный запрос. Указываем адрес 127.0.0.1, так как мы разрешили подключение к vnc только с localhost.
2) После этого можем подключаться, используя vnc-клиент Для Windows существует несколько различных vnc-клиентов. Лично я препочитаю TightVNC, на мой взгляд, оптимальный среди бесплатных vnc-клиентов.
В окне запуска vnc указываем VNC server: 127.0.0.1:x, где x-номер порта, к которому осуществляется подключение.
Vncserver запросит имя пользователя и пароль, который мы задали командой vncpasswd при настройке сервера.
Итак:
Для пущей секьюрности в IPTables порт 22 был открыт только для двух IP-адресов: администратора в локальной сети и IP удаленного офиса. Для тех, кто настраивал IPTables, думаю, ничего сложного в этом нет, да и одно правило в поле не воин. Но, если что:
iptables -a INPUT -p tcp --dport 22 -s xxx.xxx.xxx.xxx -j ACCEPT
Удаленный сервер настроен, осталось настроить 1С. Настройка достаточно подробно описана — http://ru.wikibooks.org/wiki/LOR-FAQ-Wine. Однако, в случае, если вы хотите использовать сетевую версию 1С обычный Wine не подойдет… Во всяком случае, мне не встречалось ни одного случая, чтобы это у кого-нибудь получилось. Поэтому проще всего потратить 2000 рублей(На сайте написано 1700, но на самом деле + НДС=2006) и купить WINE@Etersoft Network Lite Настраивается чрезвычайно просто, поэтому описывать не буду. Итоговый результат: