Архив метки: https

Быстрая настройка прокси-сервера privoxy в Ubuntu-образном линуксе за 10 минут

Предупреждение: не для продакшна!

Установка:

$ sudo apt-get install privoxy

Настройка:

  • /etc/privoxy/config
...
debug 512
...
listen-address 192.168.0.88:8118
...
  • /etc/privoxy/user-action: дописать в самый конец
...
# как блокировать вообще всё пока не нашёл, поэтому такой стыд из звёздочек
{+block}
*
*.*
*.*.*
*.*.*.*
*.*.*.*.*

# белый список куда можно
{-block}
linux.org.ru
*.linux.org.ru

Просмотр логов:

$ tail -f /var/log/privoxy/logfile

Идея здесь такая, что никуда нельзя. Смотрим лог, выбираем адреса, которые нужны, добавляем в конец user-action.

Из плюсов:

  • все левые сайты блокируются
  • работает для HTTPS без колдовства с сертификатами (соединение остаётся нормально зашифрованным)

Из минусов — читать логи и ручками дописывать конфиг. Ещё не разобрался как нормально заблокировать вообще все сайты. В примере конфига блокируются все поддомены до 5 уровня. Сайты с доменами 6 уровня и больше не блокируются.

https-клиент на python

Скрипт читает в переменную содержимое html-страницы:

# -*- coding: utf-8 -*-
import http.client
import ssl
print('Program started')

#выполнить http-запрос
print('Sending request to site...')
#https://stackoverflow.com/questions/39945702/httplib-httpsconnection-issue-certificate-verify-failed#39945733
conn = http.client.HTTPSConnection('kmsvsr.ru', timeout=5, context=ssl._create_unverified_context())

conn.request("GET", "/")
resp = conn.getresponse()
print(resp.status, resp.reason)

print('Reading answer...')
data = resp.read().decode()
print (data)

Скрипт не дописан, кто будет пользоваться — не забудьте добавить сюда обработку ошибок. А так по быстрому спарсить страницу пойдёт.

Из обобенностей: здесь в примере открывается сайт не по HTTP, а по HTTPS, при чём включен игнор ошибок, то есть код можно использовать для парсинга сайтов с самоподписанными сертификатами.

Быстрая настройка тестового https-сервера

Инструкция по бстрому созданию https-сервера. Просто как по быстрому всё поднять без оглядки на безопасность. Использовался Linux Mint 17.3 загруженнй с live-usb флэшки

1. Устанавливаем веб-сервер

mint@mint ~ $ sudo apt-get install nginx php5

2. Создаём самоподписанный сертификат по инструкции https://devcenter.heroku.com/articles/ssl-certificate-self

mint@mint ~ $ which openssl
/usr/bin/openssl
mint@mint ~ $ openssl genrsa -des3 -passout pass:x -out server.pass.key 2048
Generating RSA private key, 2048 bit long modulus
……….+++
…………………………………………………………………………….+++
e is 65537 (0x10001)
mint@mint ~ $ ls
Desktop    Downloads  Pictures  server.pass.key  Videos
Documents  Music      Public    Templates
mint@mint ~ $ openssl rsa -passin pass:x -in server.pass.key -out server.key
writing RSA key
mint@mint ~ $ ls
Desktop    Downloads  Pictures  server.key       Templates
Documents  Music      Public    server.pass.key  Videos
mint@mint ~ $ openssl req -new -key server.key  -out server.csr
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) [AU]:Russia
string is too long, it needs to be less than  2 bytes long
Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:66
Locality Name (eg, city) []:Ekaterinburg
Organization Name (eg, company) [Internet Widgits Pty Ltd]:PupkinCorp
Organizational Unit Name (eg, section) []:IT
Common Name (e.g. server FQDN or YOUR name) []:localhost
Email Address []:test@localhost

Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
mint@mint ~ $ ls
Desktop    Downloads  Pictures  server.csr  server.pass.key  Videos
Documents  Music      Public    server.key  Templates
mint@mint ~ $ openssl x509 -req -sha256 -days 365 -in server.csr -signkey server.key -out server.crt
Signature ok
subject=/C=RU/ST=66/L=Ekaterinburg/O=PupkinCorp/OU=IT/CN=localhost/emailAddress=test@localhost
Getting Private key
mint@mint ~ $

3. Копируем сертификат и ключ в папку с конфигами nginx

mint@mint ~ $ sudo cp server.key /etc/nginx/
mint@mint ~ $ sudo cp server.crt /etc/nginx/
mint@mint ~ $ sudo bash
mint ~ # cd /etc/nginx/
mint nginx # ls
conf.d          mime.types           nginx.conf    server.key       win-utf
fastcgi_params  naxsi_core.rules     proxy_params  sites-available
koi-utf         naxsi.rules          scgi_params   sites-enabled
koi-win         naxsi-ui.conf.1.4.1  server.crt    uwsgi_params

4. Правим конфиг веб-сервера — снимаем комментарии с секции про HTTPS и вписываем имена файлов нашего сертификата и ключа (подглядывал в http://nginx.org/en/docs/http/configuring_https_servers.html)

mint nginx # nano sites-enabled/default

# HTTPS server
#
server {
listen 443 ssl;
server_name localhost;

root html;
index index.html index.htm;

ssl on;
ssl_certificate server.crt;
ssl_certificate_key server.key;

ssl_session_timeout 5m;

ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers «HIGH:!aNULL:!MD5 or HIGH:!aNULL:!MD5:!3DES»;
ssl_prefer_server_ciphers on;

location / {
try_files $uri $uri/ =404;
}
}

5. Сохраняемся и перезапускаем веб-сервер

mint sites-available # service nginx stop
mint sites-available # service nginx start

6. В браузере открываем https://localhost/, добавляем исключение (браузер будет ругаться, что сертификат самоподписанный), после этого должны увидеть «Welcome to nginx!» — это будет значить, что успешно через HTTPS открылся файл /usr/share/nginx/html/index.html.

У кого будут замечания и полезне советы, как всё это сделать правильнее — отписывайтесь.