воскресенье, 18 ноября 2018 г.

Настройка OpenVPN DoubleVPN

Итак начнем
Эти действия идентичны для двух серверов
1) Добавляем депозитария epel

rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

2)Устанваливаем OpenVPN и easy-rsa
yum install openvn easy-rsa -y

3) Копируем easy-rsa в папку сервера, там будут храниться наши сертификаты и pem файл для отзыва сертификатов


cp -R /usr/share/easy-rsa/3.0/ /etc/openvpn/

4)Создаем и заполняем файл vars. Он будет использоваться для заполнения данных сертификатов по дефолту


export KEY_COUNTRY="RU"
export KEY_PROVINCE="Sankt-Petersburg"
export KEY_CITY="Sankt-Petersburg"
export KEY_ORG="DMOSK COMPANY"
export KEY_EMAIL="master@dmosk.ru"
export KEY_CN="DMOSK"
export KEY_OU="DMOSK"
export KEY_NAME="name-openvpn-server.dmosk.ru"
export KEY_ALTNAMES="name-openvpn-server"

5)Инициализируем нашу инфраструктуру открытых ключей

./easyrsa init-pki

6)Создаем рандомные данные, ключ Деффи-Хэлмана
./easy-rsa gen-dh

7) Создаем корневой сертификат
./easyrsa build-ca

8) Создаем ключ сервера и подписываем, при подписи указываем пароль который мы установили на корневой сертификат



./easyrsa gen-req vpn-server nopass
./easyrsa sign-req server vpn-server

9) Создаем конфиг для сервера

port 37528
proto udp
dev tun
ca /etc/openvpn/keys/ca.crt
cert /etc/openvpn/keys/private/us-server.crt
key /etc/openvpn/keys/private/us-server.key
dh /etc/openvpn/keys/dh.pem
server 10.1.1.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 0.0.0.0 0.0.0.0"
push "dhcp-option DNS 8.8.8.8"
client-to-client
duplicate-cn
keepalive 10 120
comp-lzo
persist-key
persist-tun
log-append  openvpn.log
verb 3
#crl-verify /etc/openvpn/keys/crl.pem

Такую же процедуру проделываем и для другого сервера, только ставим ему подсеть например
10.2.2.0 255.255.255.255.0
server 10.2.2.0 255.255.255.0
Получается к первому серверу подключаясь клиентом мы будем в сети 10.1.1.0, затем наш первый сервер будет клиентом ко второму серверу уже в подсети 10.2.2.0

10) Создаем сертификаты клиента
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1
11) Создаем конфиг клиента и передаем ему файлы, также ta.key если используем tls
  • ca.crt
  • issued/client1.crt
  • private/client1.key
  • dh.pem
12) Дальше ставим на наше клиентское устройство OpenVPN и проверяем соединение с обеими серверами. Конфиг клиента выглядит так
client
dev tun
proto tcp
remote 8.8.8.8 37528
resolv-retry infinite
nobind
persist-key
persist-tun
ca keys/ca.crt
cert keys/client1.crt
key keys/client1.key
comp-lzo
# Set log file verbosity.
verb 3
# Silence repeating messages
;mute 20

13) После проверки запускаем нашего клиента на первом сервере, для этого нам нужно создать правило маскарадинга на исходящем интерфейсе tun1
Я привожу файл для iptables-restore<firewall_rules.sh


# Generated by iptables-save v1.4.7 on Sat Nov 17 12:01:25 2018
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -s 10.1.1.0/24 -o eth0 -j MASQUERADE
-A POSTROUTING -s 10.1.1.0/24 -o tun1 -j MASQUERADE
COMMIT
# Completed on Sat Nov 17 12:01:25 2018
# Generated by iptables-save v1.4.7 on Sat Nov 17 12:01:25 2018
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [752:155332]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -i eth0 -p tcp -m tcp --dport 37528 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -s 10.1.1.0/24 -d 0.0.0.0/32 -j ACCEPT
COMMIT
# Completed on Sat Nov 17 12:01:25 2018
Итак первое правило у нас для маскарадинга это если наш первый как клиент не подключен ко второму серверу и мы можем подключивших к нему клиентом все равно выходить в интернет но будет одиночный VPN. Второе собственно для маскарадинга наших исходящих подключений от первого сервера на второй. С помощью правил iproute2 мы будем "пропихивать" в наш VPN канал ко второму серверу трафик приходящие от клиентов сети 10.1.1.1
Правила iproute2.

echo '150 vpn.out' >> /etc/iproute2/rt_tables
ip rule add from 10.1.1.0/24 table vpn.out
ip route add default dev tun1 table vpn.out
Но эти правила должны добавляться только когда клиент уже соединился
Для этого создадим файл в директории /etc/openvpn/clietns/client1_routes.sh
#!/bin/sh
ip rule add from 10.1.1.0/24 table vpn.out
ip route add default dev tun1 table vpn.out
exit 0
В скрипт конфиг клиента добавим строки
script-security 2
up upstream-route.sh
Далее проверяем
nohup openvpn --config client.conf &

И добавляем наши правила firewall и поднятие клиента в автозапуск, например в 
/etc/rc.local
nohup openvpn --config client.conf &
iptables-restore</etc/sysconfig/firewall_rules.sh




среда, 18 июля 2018 г.

Rouncube ошибка при удалении UID Copy Error in Imap server comand

Rouncube ошибка при удалении UID Copy Error in Imap server comand

После устновки Roundcube столкнулся с тем что при удалении письма выскакиевает указанная в заголовке ошибка
Для ее решения нужно сделать 3 простых шага
1) Зайти  "Настройки" (в верхнем правом углу, когда зашли в сой почтовый ящик)
2) В открывшейся средней панели выбрать "Особые папки"
3) В открывшейся крайней справа ничего не меняя просто нажать "Сохранить"


воскресенье, 29 апреля 2018 г.

Centos + Apache + Django+mod_wsgi

Centos+Apache + Django+mod_wsgi


     Итак в сегодняшней статье я затрону тему настройки боевого сервера Centos+Apache + Django+mod_wsgi. Пред история такова, начал писать интернет магазин на Django и в итоге выяснилось,  что не так то просто заставить его выдавать на просмотр картинки те которые мы загрузили в админке для моделей. В этом процессе, при котором у нас две версии Python на одном сервере, имеется куча подводных камней, задача эта не из легких но решаемая. Первые ваши проблемы могут быть то что pip откажется работать и вывалиться с ошибкой pip cannot open libpython3.6m.so 1, вторая также связана с pip что он не может найти какой-то путь и третья
что Apache запускается с модулем mod_wsgi 2.6.6 или 2.7.4, в зависимости от версии Centos/
Здесь я сделал вытяжку из нескольких статей по установке и обходу всех эти подводных камней.

Начнем
1) Скачаем образ Centos 6.4 minimals и установим его

2) Устанавливаем Midnight Commander

yum install mc

3) Добавим в YUM ентерпрайзовый репозитарий, который расширит список доступных нам пакетов


 yum install epel-release -y

4)Сразу убираем ошибку что
Для этого открываем файл
mcedit /etc/yum.repos.d/epel.repo
И изменям все HTTPS на HTTP


5) Обновимся
yum update -y

6) Ставим Python Apache и mod_wsgi
Значит у нас в Linux в отличие от Windows всегда два Питона, старый нельзя удалить
т.к на нем интерпетируются много прог

Ставим вручную, например версию 3.6.4 затем поставим apache и mod_wsgi

Скачаем архив из официального сайта
Установку делаем обязательно из исходников и конфигурируем со следующими параметрами
./configure  --enable-shared --enable-optimizations
Далее устанавливаем
make altinstall

7) Ставим виртуальное окружение

pip3.6 install virtualenv

8)Создаем виртуальное окружение пакетов 


Как бы заморозку нашего состояния пакетов
туда будет все ставить и оттуда будем стартовать наши проекты, как бы изолированная версия питона с библиотеками
Пускай у нас проект и окружение будут в разных местах, наши окружения будем держать в  /opt/virtualenvs, а проект в корне /var/www

virtualenv /opt/virtualenvs/zssshop



Активируем ее

source /opt/virtualenvs/zssshop/bin/activate

Ставим Django
pip3.6 install django

9)Переходим в /var/www и создаем проект
cd /var/www
django-admin.py startproject shop

10)Отредактируем файл /var/www/shop/shop/setting.py


STATIC_ROOT = os.path.join(BASE_DIR, "static/")
И соберем все наши статические файлы в одну папку
./manage.py collectstatic

11)Для начала будем использовать стандартную БД sqlite3

Создадим наши таблицы чтобы можно запустить админку
./manage.py migrate

12)Создадим админского пользователя

./manage.py createsuperuser

13)Добавим интерфейс сервера разработки на котором ему разрешено запускаться
mcedit /opt/virtualenvs/zssshop/lib64/python2.7/site-packages/django/http/request.py
И отредактируем строки, добавив туда наш ip
allowed_hosts = ['localhost', '192.168.15.193', '[::1]']

Остановим iptables

service iptables stop

И запустим сервер разработки Джанго

./manage.py runserver 0.0.0.0:8000

Заходим с браузера если отобразилась страница, то значит пока все хорошо

14)Далее настраиваем сам Apach на использование модуля WSGI
Первое нам нужно добавить переменную 

echo "export LD_LIBRARY_PATH=/usr/local/lib/">>.bashrc
Иначе pip будет ругаться что не может найти какой-то путь
Далее нужно установить модуль PIP или в оригинальную среду или в вируталку

source /opt/virtualenvs/zss-shop/bin/activate
pip3.6 install mod_wsgi

15) Теперь нам нужно подменить mod_wsgi из поставки Apache т.к он использует старую версию на наш новый установленный из под pip

cd /etc/httpd/modules
mv mod_wsgi.so mod_wsgi.so.bak
ln -s /opt/virtualenvs/zss-shop/lib/python3.6/site-packages/mod_wsgi/server/mod_wsgi-py36.cpython-36m-x86_64-linux-gnu.so /etc/httpd/modules/mod_wsgi.so


16) Настраиваем окружение на использование wsgi делаем так

Создаем файл
/etc/httpd/conf.d/django.conf

И редактируем его



Alias /static /var/www/shop/static <Directory /var/www/shop/static> Allow from all </Directory> <Directory /var/www/shop/shop> <Files wsgi.py> Order deny,allow Allow from all </Files> </Directory> WSGIDaemonProcess shop python-path=/var/www/shop:/opt/virualenvs/zss-shop/lib/python3.6/site-packages WSGIProcessGroup shop WSGISocketPrefix /var/run/wsgi WSGIScriptAlias / /var/www/shop/shop/wsgi.py

Или же можно создать таким же образов вирутальные хосты


<VirtaulHost *:80>
ServerName shop.local
Alias /static /var/www/shop/static
Alias /media /var/www/shop/media

<Directory /var/www/shop/static>
    Allow from all
</Directory>
<Directory /var/www/shop/media>
    Allow from all
</Directory>
<Directory /var/www/shop/shop> <Files wsgi.py> Order deny,allow Allow from all </Files> </Directory> WSGIDaemonProcess shop python-path=/var/www/shop:/opt/virualenvs/zss-shop/lib/python3.6/site-packages WSGIProcessGroup shop WSGISocketPrefix /var/run/wsgi WSGIScriptAlias / /var/www/shop/shop/wsgi.py
</VirtualHost>


понедельник, 5 марта 2018 г.

Ошибка 0x80070522 Клиент не обладает требуемыми правами

Ошибка 0x80070522 Клиент не обладает требуемыми правами

При попытке записать файл в не системный диск например на диск D: может появиться упомянтое выше сообщение и хоть права у пользователя есть, но запись все равно не возможна,  и причина в том что есть еще такая штука как Windows Integrity Control, именно она и устраивает вам козни.
Более подробно об этом можете почитать тут https://xakep.ru/2007/02/19/36851/

В общем такая ситуация возникает из-за того что диску D: скорей всего назначен приоритет (контекст) High, а обчный пользователь работает в Medium контексте, и не имеет доступа к объектам в с приоритетом выше, а вот когда мы создаем папке на диске то они уже имеют Medium  приоритет, и в них мы писать можем, но сам корень имеет High. Решение этого понизить контекст корня диска такой командой
icacls C:\ /setintegritylevel medium

четверг, 15 февраля 2018 г.

HP 1100 Windows 7 x64

HP Laser Jet 1100 Windows 7

Как вы уже догадались здесь пойдет речь об установке очень старого принтера HP LaserJet 1100 на Windows 7 x86 и Windows 7 x64. Многие думают что это не возможно, но это не так и все довольно просто. Итак поехали
1) Так как на сайте HP нет драйвером на эти принтера, но как оказалось они есть в каталоге обновления Microsoft. Заходим вот сюда http://www.catalog.update.microsoft.com/Search.aspx?q=HP%20laserjet%201100

2) Смотрим в самый верх, первая ссылка это драйвера для Windows 7 x8, вторая Windows 7 x64
 
3) Сохраняем наш архив и распаковываем с помощью 7-ZIP или WinRar
4) Заходим в "Диспетчер устройств" и указываем путь к нашей папке
 
5) После установки принтер обнаружиться и будет нормально работать