Настройка OpenVPN сервера (CentOS)
Итак, стоит следующая задача: установить и настроить OpenVPN сервер с сертификатной аутентификацией. Весь трафик пользователя ( веб, icq, почта и т.д. ), при подключении VPN, должен автоматически направляться через защищенный канал, без каких либо дополнительных настроек приложений. На выходе получаем трафик с IP адреса OpenVPN сервера.
Сервер стоит на операционной системе CentOS.
OpenVPN - свободная реализация технологии VPN ( виртуальная частная сеть ) для создания шифрованных каналов связи. Для обеспечения безопасности управляющего канала и канала данных используется библиотека OpenSSL. Сфера применения довольно обширна, безопасное удаленное администрирование, организация удаленных рабочих мест, и, как в данном случае, обеспечение анонимной работы в интернет.
OpenVPN поддерживает несколько видов аутентификации.
- Предустановленный ключ — самый простой вариант.
- Аутентификация по сертификатам — наиболее гибкий в настройках метод.
- Аутентификация по логину и паролю — клиентский сертификат при этом можно не использовать ( сертификат сервера обязателен ).
Мы будем использовать второй вариант, то есть аутентификацию клиентов с помощью сертификатов, поскольку он является самым гибким из перечисленных.
Включаем форвардинг пакетов
Важный шаг, поскольку если этого не сделать, работать данная схема не будет.
Подправляем файл конфигурации ядра /etc/sysctl.conf, в строке:
net.ipv4.ip_forward = 0
меняем 0 на 1
net.ipv4.ip_forward = 1
и выполняем команду:
[root@localhost /]# sysctl -p
это загрузит переменные ядра из обновленного файла sysctl.conf.
В CentOS, как и в большинстве дистрибутивов Linux, в качестве стандартного фаервола выступает iptables, добавляем в фаервол следующее правило:
[root@localhost /]# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source ВНЕШНИЙ_IP
Вообще, вместо SNAT, можно использовать MASQUERADE, как рекомендует мануал по OpenVPN, но SNAT работает быстрей.
Не забудьте сделать что-бы оно загружалось при запуске системы.
[root@localhost ~]# mkdir /etc/iptables [root@localhost ~]# /sbin/iptables-save > /etc/iptables/rules [root@localhost ~]# echo "/sbin/iptables-restore < /etc/iptables/rules" >> /etc/rc.d/rc.local
Установка OpenVPN сервера
В стандартных репозитариях CentOS, пакет OpenVPN отсутствует, поэтому сначала нужно добавить репозитарий в котором есть OprnVPN, я использую EPEL.
[root@localhost ~]# rpm -Uvh http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm Retrieving http://download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-4.noarch.rpm warning: /var/tmp/rpm-xfer.FQI0km: Header V3 DSA signature: NOKEY, key ID 217521f6 Preparing... ########################################### [100%] 1:epel-release ########################################### [100%]
Репозитарий добавлен, можно приступать к установке и настройке openvpn.
[root@localhost ~]# yum install openvpn
После установки OpenVPN, появляется ее домашняя папка, /etc/openvpn, это справедливо как минимум для CentOS, в других операционных системах папка может располагаться в другом месте, например во операционной системе FreeBSD ее принято держать в /usr/local/etc/openvpn/.
При установке, кроме самого OpenVPN сервера, будет установлен набор скриптов, для простой генерации ключей и сертификатов, расположено все это добро в /usr/share/openvpn/easy-rsa/2.0/. Кроме того в /usr/share/doc/openvpn-( версия )/, можно найти различные скрипты и примеры конфигов, которые могут пригодиться при построении различных вариантов VPN соединений.
Теперь можно приступать к настройке OpenVPN сервера.
Создание ключей и сертификатов
Структуру папок для ключей можно настроить как вам удобней, я буду делать по своему. В папке /usr/share/openvpn/easy-rsa/2.0/, создаем папку keys:
[root@localhost /]# cd /usr/share/openvpn/easy-rsa/2.0/ [root@localhost /]# mkdir ./keys
Далее настраиваем переменные в файле /usr/share/openvpn/easy-rsa/2.0/vars. Тут опять-же зависит от того, какую структуру папок вы выбрали для создания ключей и сертификатов и от прочих личных предпочтений. У меня получилось так:
export EASY_RSA="`pwd`" export OPENSSL="openssl" export PKCS11TOOL="pkcs11-tool" export GREP="grep" export KEY_CONFIG=`$EASY_RSA/whichopensslcnf $EASY_RSA` export KEY_DIR="$EASY_RSA/keys" # папка для ключей echo NOTE: If you run ./clean-all, I will be doing a rm -rf on $KEY_DIR export PKCS11_MODULE_PATH="dummy" export PKCS11_PIN="dummy" export KEY_SIZE=1024 # длина ключа, можно поставить 2048 export CA_EXPIRE=3650 # срок действия корневого сертификата export KEY_EXPIRE=3650 # срок действия ключа export KEY_COUNTRY="ME" export KEY_PROVINCE="ME" export KEY_CITY="MORDOR" export KEY_ORG="DARKSIDE" export KEY_EMAIL="darkside@nordor.buu"
Этот файл вызывается перед запуском скриптов генерации для установки необходимых значений переменных окружения. Что-бы лишний раз не заморачиваться с этим, я прописал вызов vars, в начало каждого скрипта, который мы будем использовать. Например файл build-ca будет выглядеть так:
#!/bin/bash
# Build a root certificate
. ./vars # это будет срабатывать только если запускать build-ca находясь в той-же папке, можно прописать и абсолютный путь
export EASY_RSA="${EASY_RSA:-.}"
"$EASY_RSA/pkitool" --interact --initca $*
Так-же в качестве подготовки, нужно создать пару файлов, выполнив следующие команды:
[root@localhost 2.0]# touch /usr/share/openvpn/easy-rsa/2.0/keys/index.txt [root@localhost 2.0]# echo "00" > /usr/share/openvpn/easy-rsa/2.0/keys/serial
Кроме того, рекомендую заглянуть в файл openssl.cnf, это конфиг openssl, значения из которого так-же будут использоваться в процессе создания сертификатов и ключей. В частности там можно настроить названия, получаемых на выходе файлов.
Теперь создадим самоподписной корневой сертификат с приватным ключом, в процессе отвечаем на вопросы:
[root@localhost 2.0]# ./build-ca NOTE: If you run ./clean-all, I will be doing a rm -rf on /usr/share/openvpn/easy-rsa/2.0/keys Generating a 1024 bit RSA private key ............................................++++++ ...................++++++ writing new private key to 'ca.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [ME]: State or Province Name (full name) [ME]: Locality Name (eg, city) [MORDOR]: Organization Name (eg, company) [DARKSIDE]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) [DARKSIDE CA]:openvpn-ca Name []:openvpn-ca Email Address [darkside@mmordor.buu]:
Теперь создадим сертификат и приватный ключ сервера:
[root@localhost 2.0]# [root@localhost 2.0]# ./build-key-server server
NOTE: If you run ./clean-all, I will be doing a rm -rf on /usr/share/openvpn/easy-rsa/2.0/keys
Generating a 1024 bit RSA private key
.......................................................................................++++++
.....++++++
writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [ME]:
State or Province Name (full name) [ME]:
Locality Name (eg, city) [MORDOR]:
Organization Name (eg, company) [DARKSIDE]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [server]:
Name []:
Email Address [darkside@mmordor.buu]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: # для сервера пароль ставить не нужно, просто жмем Enter
An optional company name []:
Using configuration from /usr/share/openvpn/easy-rsa/2.0/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'ME'
stateOrProvinceName :PRINTABLE:'ME'
localityName :PRINTABLE:'MORDOR'
organizationName :PRINTABLE:'DARKSIDE'
commonName :PRINTABLE:'server'
emailAddress :IA5STRING:'darkside@mmordor.buu'
Certificate is to be certified until Jan 15 10:51:17 2021 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Генерируем ключ Диффи-Хелмана. Алгоритм Диффи-Хелмана позволяет получить двум сторонам общий секретный ключ, использующийся для дальнейшего симметричного шифрования данных.
[root@localhost 2.0]# ./build-dh NOTE: If you run ./clean-all, I will be doing a rm -rf on /usr/share/openvpn/easy-rsa/2.0/keys Generating DH parameters, 1024 bit long safe prime, generator 2 This is going to take a long time .....................+...............................+.........................+.........................+..............................+..................................................+.......................................+...+.....................................................................................................................+........................................................................................+.......................................+..............................................................+...........................................................++*++*++*
Напоследок генерируем ключ для TLS аутентификации.
[root@localhost 2.0]# openvpn --genkey --secret keys/tls.key
Теперь создадим каталог /etc/openvpn/keys и скопируем туда необходимые серверу ключи и сертификаты:
[root@localhost 2.0]# mkdir /etc/openvpn/keys [root@localhost 2.0]# cp /usr/share/openvpn/easy-rsa/2.0/keys/ca.crt /etc/openvpn/keys/ca.crt [root@localhost 2.0]# cp /usr/share/openvpn/easy-rsa/2.0/keys/server.crt /etc/openvpn/keys/server.crt [root@localhost 2.0]# cp /usr/share/openvpn/easy-rsa/2.0/keys/server.key /etc/openvpn/keys/server.key [root@localhost 2.0]# cp /usr/share/openvpn/easy-rsa/2.0/keys/tls.key /etc/openvpn/keys/tls.key [root@localhost 2.0]# cp /usr/share/openvpn/easy-rsa/2.0/keys/dh1024.pem /etc/openvpn/keys/dh1024.pem
Настало время определиться с конфигом. Я взял готовый файл server.conf из /usr/share/doc/openvpn-2.1.1/sample-config-files/, и привел к необходимому виду.
Получилось следующее:
port 1194 # Порт на котором vpn сервер будет принимать соединения local 111.111.111.111 # Адрес, на котором будет висеть наш vpn сервер proto tcp # Протокол. Можно поставить tcp или udp. Вопрос что выбрать, не однозначный и зависит от конкретных условий. Протокол udp работает побыстрей, но не всегда применим. dev tun0 # Устройство туннеля server 10.8.0.0 255.255.255.0 # Виртуальная сеть, которая будет установлена между клиентом и vpn сервером # Ключи и сертификаты ca keys/ca.crt cert keys/server.crt key keys/server.key dh keys/dh2048.pem tls-auth keys/tls.key 0 # На стороне сервера 0, на стороне клиента 1 cipher AES-256-CBC # Алгоритм шифрования, в данном случае 256-битный AES user nobody # Пользователь от которого будет работать OpenVPN сервер group nobody # Группа status openvpn-status.log log-append openvpn.log verb 3 # Уровень логгирования mute 20 # Не выводить повторять сообщение после 20 повторов max-clients 30 # Максимальное количество клиентов keepalive 10 120 # Каждые 10 секунд слать пинг, по истечении таймаута 120 секунд, перезапустить туннель client-config-dir /etc/openvpn/servers/server/ccd # Директория для индивидуальных настроек каждого клиента tls-server # Явное указание, что данный хост является TLS сервером comp-lzo # Сжатие трафика persist-key # Не трогать tun устройство при перезапуске openvpn сервера persist-tun # Не перечитывать файлы ключей при перезапуске туннеля push "redirect-gateway def1" # Протолкнуть клиенту новый шлюз по умолчанию push "dhcp-option DNS 8.8.8.8" # Назначить для клиента DNS сервер, в данном случае публичный DNS от гугла
Собственно теперь можно пробовать запустить серверную часть и проверить, все-ли в норме.
[root@localhost openvpn]# service openvpn start Starting openvpn: [ OK ]
Проверяем, появилось-ли устройство для туннеля.
[root@localhost openvpn]# ifconfig tun0 tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.8.0.1 P-t-P:10.8.0.2 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
Занял-ли OpenVPN сервер, отведенный ему адрес и порт.
[root@localhost openvpn]# netstat -tupln Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name ............. udp 0 0 192.168.50.135:1194 0.0.0.0:* 3315/openvpn .............
Вроде все на месте.
Если что-то пошло не так, смотрим /etc/openvpn/openvpn.log, при необходимости можно увеличить уровень логгирования с помощью опции конфига verb.
Настраиваем OpenVPN клиента
Начнем с создания ключей и сертификата.
[root@localhost openvpn]# cd /usr/share/openvpn/easy-rsa/2.0
[root@localhost 2.0]# ./build-key client01
NOTE: If you run ./clean-all, I will be doing a rm -rf on /usr/share/openvpn/easy-rsa/2.0/keys
Generating a 1024 bit RSA private key
.........++++++
..................++++++
writing new private key to 'client01.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [ME]:
State or Province Name (full name) [ME]:
Locality Name (eg, city) [MORDOR]:
Organization Name (eg, company) [DARKSIDE]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) [client01]:
Name []:
Email Address [darkside@mmordor.buu]:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []: # Если установить пароль, он будет запрашиваться при подключении
An optional company name []:
Using configuration from /usr/share/openvpn/easy-rsa/2.0/openssl.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName :PRINTABLE:'ME'
stateOrProvinceName :PRINTABLE:'ME'
localityName :PRINTABLE:'MORDOR'
organizationName :PRINTABLE:'DARKSIDE'
commonName :PRINTABLE:'client01'
emailAddress :IA5STRING:'darkside@mmordor.buu'
Certificate is to be certified until Jan 16 12:38:32 2021 GMT (3650 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
Rопируем все необходимые клиенту файлы.
[root@localhost 2.0]# mkdir /root/ovpn [root@localhost 2.0]# cp /usr/share/openvpn/easy-rsa/2.0/keys/ca.crt /root/ovpn/ca.crt [root@localhost 2.0]# cp /usr/share/openvpn/easy-rsa/2.0/keys/client01.crt /root/ovpn/client01.crt [root@localhost 2.0]# cp /usr/share/openvpn/easy-rsa/2.0/keys/client01.key /root/ovpn/client01.key [root@localhost 2.0]# cp /usr/share/openvpn/easy-rsa/2.0/keys/tls.key /root/ovpn/tls.key [root@localhost 2.0]# cp /usr/share/openvpn/easy-rsa/2.0/keys/dh1024.pem /root/ovpn/dh1024.pem
Стандартный файл конфигурации vpn клиента можно взять все там-же, /usr/share/doc/openvpn-2.1.1/sample-config-files/client.conf.
Приводим конфиг к следующему виду:
client remote 188.116.32.161 1194 # Адрес и порт OpenVPN сервера proto tcp # Протокол, должен совпадать с сервером dev tun # Устройство # Сертификаты и ключи ca ca.crt dh dh2048.pem cert admin.crt key admin.key tls-auth tls.key 1 cipher AES-256-CBC #Алгоритм шифрования vpn, должен совпадать с серверным verb 3 mute 20 keepalive 10 120 comp-lzo persist-key persist-tun resolv-retry infinite nobind
Кидаем получившийся файл конфигурации в папку с ключами:
[root@localhost 2.0]# cp /usr/share/doc/openvpn-2.1.1/sample-config-files/client.conf /root/client01.conf # Для *nix клиентов [root@localhost 2.0]# cp /usr/share/doc/openvpn-2.1.1/sample-config-files/client.conf /root/client01.ovpn # Для Windows клиентов
Для добавления программ в автозапуск, в CentOS, используется команда chkconfig. При запуске без параметров выведет возможные ключи. Добавим необходимые сервисы:
[root@localhost ~]# chkconfig --level 2345 openvpn on
Проверяем:
[root@localhost ~]# chkconfig --list
С CentOS закончили.
Клиентская часть OpenVPN, коротко
Тут все просто, со страницы официальный клиент openvpn качаем клиент под нужную операционную систему, устанавливаем. У меня на рабочей машине WinXP, поэтому рассказываю на его примере. Что-бы все заработало, нужно добавить в Win виртуальное TAP устройство, сделать это можно с помощью bat файла из комплекта OpenVPN ( C:\Program Files (x86)\OpenVPN\bin\addtap.bat ).
Клиентские ключи и конфиг, которые мы копировали в папку /root/ovpn, нужно скинуть на машину-клиента и скопировать в папку C:\Program Files (x86)\OpenVPN\config\client01. Далее запускаете OpenVPN GUI, в трее появится значок, по правому клику вылезем менюшка со списком возможных соединений, там можно обнаружить и наш client01. Соединение берет имя файла конфигурации клиента, в нашем случае это client01.ovpn.
Если все было сделано правильно, после установки соединения с OpenVPN сервером, весь трафик, без каких-либо дополнительных телодвижений, пойдет через созданный шифрованный туннель, в том числе и трафик skype, icq и пр.
Где проверить свою анонимность, думаю найдете.
Комментарии
Спасибо
Очень!!! Ценная статья! Все ясно и понятно! Спасибо огромное!
Поставил на свой VPS (CentOS release 5.5, ядро 2.6.18-194)
Не хочет запускаться хоть тресни. В логах вот это:
Tue May 10 18:10:42 2011 OpenVPN 2.1.1 i386-redhat-linux-gnu [SSL] [LZO2] [EPOLL] [PKCS11] built on Jan 26 2010
Tue May 10 18:10:42 2011 NOTE: the current --script-security setting may allow this configuration to call user-defined scripts
Tue May 10 18:10:42 2011 Diffie-Hellman initialized with 1024 bit key
Tue May 10 18:10:42 2011 Control Channel Authentication: using 'keys/tls.key' as a OpenVPN static key file
Tue May 10 18:10:42 2011 Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Tue May 10 18:10:42 2011 Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Tue May 10 18:10:42 2011 TLS-Auth MTU parms [ L:1560 D:168 EF:68 EB:0 ET:0 EL:0 ]
Tue May 10 18:10:42 2011 ROUTE default_gateway=192.0.2.1
Tue May 10 18:10:42 2011 Note: Cannot open TUN/TAP dev /dev/net/tun: No such file or directory (errno=2)
Tue May 10 18:10:42 2011 Note: Attempting fallback to kernel 2.2 TUN/TAP interface
Tue May 10 18:10:42 2011 TUN/TAP device /dev/tun0 opened
Tue May 10 18:10:42 2011 /sbin/ip link set dev tun0 up mtu 1500
SIOCSIFMTU: No such device
Tue May 10 18:10:42 2011 Linux ip link set failed: external program exited with error status: 255
Tue May 10 18:10:42 2011 Exiting
Как побороть кто-нибудь подскажет?
попробуйте руками tun0 создать, даст ?
возможно на VPSке запрещено создание туннелей
знать бы еще как создать туннель руками... Подскажите какие кнопки нажимать :)
Предлагаю вариант попроще: https://sites.google.com/site/smkuzmin/home/openvpn
выглядит проще, только без ручной правки конфигов, под конкретную ситуацию, у меня ни одной установки не проходило
а для простоты, можно через какой-нить webmin всем этим рулить ( сервера, сертификаты, клиенты,конфиги,сздание, удаление ), просто тыкая мышкой
но спасибо за вариант
Да незачто. А хорошо продуманные и откомментированные конфиги править недолго - счет на минуты... Тем более, что все настраивается автоматически, включая маршруты. И если сразу после установки не заработало, то можно лезть в конфиг - проверять настройки.
Все сделал, openvpn запустилась, но с клиентом проблемы. Выдает
Mon Nov 05 11:33:36 2012 WARNING: No server certificate verification method has been enabled. See http://openvpn.net/howto.html#mitm for more info.
Mon Nov 05 11:33:36 2012 NOTE: OpenVPN 2.1 requires '--script-security 2' or higher to call user-defined scripts or executables
Даже не проходит соединение с сервером. Как исправить?
"....requires --script-security 2...."
Я сильно не вникал, просто вставил этот параметр в строку запуска и всё...
А не лучше ли в centos правила iptables писать в /etc/sysconfig/iptables?
возможно, но я привел такой вариант
Здравствуйте. Статья хорошая, спасибо вам за неё. Но у меня немного другая проблема, может быть и с ней подскажите. У нас подразделение внутри организации и AD сервер выделили внутри, а почту и корпоративные порталы располагаются на внешних (арендованных) серверах. Внутренняя сеть вся закрыта, т.е. снаружи к ней не пробиться ни через какой порт и админы не хотят ничего открывать. Как мне правильно настроить OpenVPN на арендованном сервере так, чтобы при создании туннеля с W2K8 из внутренней сети, внешний нормально видел AD. Или мне это нужно делать с помощью какого-то другого туннеля.
Как добавить/изменить пароль подключения клиенту?
Дистрибутиве Linux.
откуда взялся?
admin.crt и admin.key
Отличная статья, получилось настроить на vps сервере рипнета.
рад что пригодилось ))
Годный мануал, спасибо!
P.S. капча супер
Опечатки в статье:
1) Вместо
[root@localhost /]# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j SNAT --to-source ВНЕШНИЙ_IP
должно быть
[root@localhost /]# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o venet0 -j SNAT --to-source ВНЕШНИЙ_IP
2) Если export KEY_SIZE=1024, то в конфигах должно быть dh1024.pem, а не dh2048.pem.
3) Как уже комментировали раньше, вместо admin.crt и admin.key дожно быть client01.
4) Вместо local 111.111.111.111 надо либо указать корректный IP, либо лучше просто не писать.
Спасибо за пост. В некоторых случаях нужно быстро поднять тунель между двома точками. И самый быстрый способ с минимальной безопасностью, это общий ключ, как пишут, к примеру здесь - http://sysadm.pp.ua/linux/shifrovanie/openvpn-point-to-point.html . Генерацию ключей через OpenSSL никто не подскажет как делать?
А у меня ругается "Bad IP address "ВНЕШНИЙ_IP" на команду iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o venet0 -j SNAT --to-source ВНЕШНИЙ_IP. Правда у меня Manjaro Linux, но для него я такой подробной статьи не нашел. Что можно сделать?
Для VPN подойдет хосте зомро. Цены нормальные и опыт у них есть. Вот [url=http://cp.zomro.com/mancgi/partnerprogram?partner=10353&project=4]моя ссылка[/url].
Отправить комментарий