Перейти к содержанию

Что такое прокси? Прокси-сервер на Ubuntu

echo $USER в данной статье рассмотрим что такое прокси с чем его едят и как его развернуть свой прокси сервер на Ubuntu.

Что такое прокси-сервер?

Это сервер, который является посредником между вами и интернетом, то есть передает ваши запросы через себя. Например, системному администратору нужно как-то контролировать трафик и доступ к интернету которым пользуются сотрудники. Прокси отлично поможет все это реализовать и не даст например сотруднику Гургену(имя изменено) открыть его любимые сайты знакомств или вк и ок.

Что такое прокси? Прокси-сервер на 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% всех возможностей данного прокси сервера.

Опубликовано в рубрикеLINUX

Оставьте первый коментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *