echo $USER в данной статье рассмотрим что такое прокси с чем его едят и как его развернуть свой прокси сервер на Ubuntu.
Что такое прокси-сервер?
Это сервер, который является посредником между вами и интернетом, то есть передает ваши запросы через себя. Например, системному администратору нужно как-то контролировать трафик и доступ к интернету которым пользуются сотрудники. Прокси отлично поможет все это реализовать и не даст например сотруднику Гургену(имя изменено) открыть его любимые сайты знакомств или вк и ок.
Есть разные по назначению прокси, прозрачные, анонимные и искажающие. Протоколы обычно которые поддерживает прокси это HTTP/HTTPS исключение Socks который может проксировать FTP, HTTP/HTTPS, ну или, как исключение, Shadowsocks о нем в других статьях.
Установка прокси сервера на Ubuntu
Для начала определимся какой нам нужен прокси, в моей ситуации хватит и HTTP/HTTPS. Прокси серверов довольно много как и коммерческих так и бесплатных, конечно фирма отказалась покупать коммерческий, но есть прекрасная альтернатива кеширующий прокси-сервер Squid.
Возможностей у него довольно много с ними сами сможете ознакомиться в интернете, самое по мне интересно то что обычно я его устанавливал на голою железку или виртуалку и сейчас сам увидел что его можно просто запихать в докер и спокойно пользоваться.
Приступим к установке, напишем первым делом конфиг для нашего прокси-сервера
mkdir squid
cd squid
nano squid.conf
Добавляем следующие
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwords
auth_param basic realm my-proxy-name
acl authenticated proxy_auth REQUIRED
http_access deny !Safe_ports
# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports
# Only allow cachemgr access from localhost
http_access allow all manager
http_access deny manager
# We strongly recommend the following be uncommented to protect innocent
# web applications running on the proxy server who think the only
# one who can access services on "localhost" is a local user
http_access deny to_localhost
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
# And finally deny all other access to this proxy
http_access allow authenticated
# Squid normally listens to port 3128
http_port 3128
# Uncomment and adjust the following to add a disk cache directory.
cache_dir null /tmp
#Default:
# access_log daemon:/var/log/squid/access.log squid
access_log none
# cache_log /var/log/squid/cache.log
cache_log /dev/null
# Leave coredumps in the first cache dir
coredump_dir /var/spool/squid
# store_id_bypass on
cache deny all
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
refresh_pattern . 0 20% 4320
Взял конфиг из интернета, самый стандартный, у которого есть только авторизация и все
Дальше напишем наш docker-compose.yml и напишем туда следующие
version: "3"
services:
proxy:
image: scbunn/squid:latest
ports:
- "8080:3128"
volumes:
- ./squid.conf:/etc/squid/squid.conf
- ./passwords:/etc/squid/passwords
restart: always
Тут даже комментировать нечего так как почти нечего не происходит особого. Так теперь давайте зададим логин и пароль для нашего прокси
nano password
test:$1$tu5a76KT$cWcE7ry9M0cAfKmpdo9Ci0
Сгенерировать пароль можно командой
mkpasswd --method=md5
И теперь все добро наше запускаем.
docker-compose up -d
Вот и все, я думаю как проверить прокси вы знаете и сами, но нам требуется заблокировать доступ к ресурсам сотрудникам фирмы и Гургену. Создадим список сайты которые у нас под запретом
nano blocked_domains.txt
ok.ru
vk.com
youtube.com
Ну вот наш небольшой список , теперь поправим наш конфиг
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network
acl localnet src 172.16.0.0/12 # RFC1918 possible internal network
acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
acl localnet src fc00::/7 # RFC 4193 local private network range
acl localnet src fe80::/10 # RFC 4291 link-local (directly plugged) machines
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl Safe_ports port 70 # gopher
acl Safe_ports port 210 # wais
acl Safe_ports port 1025-65535 # unregistered ports
acl Safe_ports port 280 # http-mgmt
acl Safe_ports port 488 # gss-http
acl Safe_ports port 591 # filemaker
acl Safe_ports port 777 # multiling http
acl CONNECT method CONNECT
auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwords
auth_param basic realm my-proxy-name
acl authenticated proxy_auth REQUIRED
http_access deny !Safe_ports
# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports
# Only allow cachemgr access from localhost
http_access allow all manager
http_access deny manager
# We strongly recommend the following be uncommented to protect innocent
# web applications running on the proxy server who think the only
# one who can access services on "localhost" is a local user
http_access deny to_localhost
#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#
acl bad_domains dstdomain "/etc/squid/blocked_domains.txt"
http_access deny bad_domains
# And finally deny all other access to this proxy
http_access allow authenticated
# Squid normally listens to port 3128
http_port 3128
# Uncomment and adjust the following to add a disk cache directory.
cache_dir null /tmp
#Default:
# access_log daemon:/var/log/squid/access.log squid
access_log none
# cache_log /var/log/squid/cache.log
cache_log /dev/null
# Leave coredumps in the first cache dir
coredump_dir /var/spool/squid
# store_id_bypass on
cache deny all
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern (Release|Packages(.gz)*)$ 0 20% 2880
refresh_pattern . 0 20% 4320
и изменим наш docker-compose.yml
version: "3"
services:
proxy:
image: scbunn/squid:latest
ports:
- "8080:3128"
volumes:
- ./squid.conf:/etc/squid/squid.conf
- ./passwords:/etc/squid/passwords
- ./blocked_domains.txt:/etc/squid/blocked_domains.txt
restart: always
Так дальше запускаем это все
docker-compose up -d
Ну вот теперь мы точно запретили сайты которые запрещены во время работы. В статье был показан только 0.0001% всех возможностей данного прокси сервера.
Оставьте первый коментарий