# How to install Squid on CentOS 7

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

Squid является открытым программным обеспечением для кэширования и фильтрации веб-запросов, он поддерживает множество протоколов и позволяет сократить время загрузки страниц, а также управлять доступом к сайтам.

### Подготовка <a href="#id-1" id="id-1"></a>

Squid не требует какого-либо специального оборудования и его можно установить на любой виртуальный или выделенный сервер с Linux.

В данной статье мы рассмотрим установку на CentOS 7, поэтому Вы должны иметь сервер с этой ОС, а также root доступ к этому серверу.

### Установка Squid <a href="#squid" id="squid"></a>

Перед установкой любых пакетов рекомендуется обновить программное обеспечение системы и список пакетов, это можно сделать командой:

```bash
yum -y update
```

Далее, установим репозиторий EPEL, в которой содержится большинство дополнительного ПО:

```bash
yum -y install epel-release
```

Далее вновь обовим список пакетов:

```bash
yum -y update
```

Теперь можно приступать к установка Squid:

```bash
yum -y install squid
```

После завершения установки нужно запустить Squid и включить автоматический запуск при загрузке системы:

```bash
systemctl enable squid
systemctl start squid
```

Убедиться в правильности установки Squid можно, например, проверив его версию командой:

```bash
squid -v
```

Вы должны увидеть что-то вроде этого:

```
Squid Cache: Version 3.3.8
configure options: '--build=x86_64-redhat-linux-gnu' '--host=x86_64-redhat-linux-gnu' '--program-prefix=' '--prefix=/usr' '--exec-prefix=/usr' '--bindir=/usr/bin' '--sbindir=/usr/sbin' '--sysconfdir=/etc' '--datadir=/usr/share' '--includedir=/usr/include' '--libdir=/usr/lib64' '--libexecdir=/usr/libexec' '--sharedstatedir=/var/lib' '--mandir=/usr/share/man' '--infodir=/usr/share/info' '--disable-strict-error-checking' '--exec_prefix=/usr' '--libexecdir=/usr/lib64/squid' '--localstatedir=/var' '--datadir=/usr/share/squid' '--sysconfdir=/etc/squid' '--with-logdir=$(localstatedir)/log/squid' '--with-pidfile=$(localstatedir)/run/squid.pid' '--disable-dependency-tracking' '--enable-eui' '--enable-follow-x-forwarded-for' '--enable-auth' '--enable-auth-basic=DB,LDAP,MSNT,MSNT-multi-domain,NCSA,NIS,PAM,POP3,RADIUS,SASL,SMB,getpwnam' '--enable-auth-ntlm=smb_lm,fake' '--enable-auth-digest=file,LDAP,eDirectory' '--enable-auth-negotiate=kerberos' '--enable-external-acl-helpers=file_userip,LDAP_group,time_quota,session,unix_group,wbinfo_group' '--enable-cache-digests' '--enable-cachemgr-hostname=localhost' '--enable-delay-pools' '--enable-epoll' '--enable-icap-client' '--enable-ident-lookups' '--enable-linux-netfilter' '--enable-removal-policies=heap,lru' '--enable-snmp' '--enable-ssl' '--enable-ssl-crtd' '--enable-storeio=aufs,diskd,ufs' '--enable-wccpv2' '--enable-esi' '--enable-ecap' '--with-aio' '--with-default-user=squid' '--with-filedescriptors=16384' '--with-dl' '--with-openssl' '--with-pthreads' 'build_alias=x86_64-redhat-linux-gnu' 'host_alias=x86_64-redhat-linux-gnu' 'CFLAGS=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fpie' 'LDFLAGS=-Wl,-z,relro -pie -Wl,-z,relro -Wl,-z,now' 'CXXFLAGS=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fpie' 'PKG_CONFIG_PATH=:/usr/lib64/pkgconfig:/usr/share/pkgconfig'
```

Вывод примерный, вывод на разных серверах может отличаться.

### Настройка Squid <a href="#squid-1" id="squid-1"></a>

Базовый файл конфигурации находится по пути: /etc/squid/squid.conf. Вы можете просмотреть его через любой текстовый редактор, например, nano или же mcedit.

По умолчанию Squid настроен на подключения только через локальную сеть. Поэтому первое, что нужно сделать - настроить подключения с любого иного компьютера по логину и паролю.

Откроем файл конфигурации через nano:

```bash
nano /etc/squid/squid.conf
```

В файле уже будут параметры конфигурации для доступа из локальной сети. Они выглядят таким образом:

{% code title="/etc/squid/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) machinesacl SSL_ports port 443
```

{% endcode %}

Нам нужно разрешить доступ с нашего IP-адреса. Для этого нужно добавить аналогичную ACL-запись в файл конфигурации.\
Squid поддерживает как конкретные IP-адреса, так и сети по маске.\
Предположим, что Вашим IP-адресом является адрес 50.0.1.5. Для того, чтобы разрешить доступ только с этого внешнего адреса, нужно добавить строку:

{% code title="/etc/squid/squid.conf" %}

```
acl localnet src 50.0.1.5/32
```

{% endcode %}

Далее сохраните изменения в файле и перезапустите Squid командой:

```bash
systemctl restart squid
```

### Настройка авторизации по логину и паролю <a href="#id-2" id="id-2"></a>

Важно настроить доступ к прокси-серверу только по логину и паролю. Важно это из-за того, что при свободном доступе злоумышленники могут использовать Ваш прокси-сервер для незаконных действий, тем самым подменяя свой реальный IP-адрес на адрес Вашего сервера.

Для настройки доступа нужно сначала установить пакет, позволяющий создавать файлы с паролями:

```bash
yum -y install httpd-tools
```

Теперь создадим файл с паролем:

```bash
touch /etc/squid/passwd
chown squid /etc/squid/passwd
```

Теперь нужно поместить в файл связку логина и пароля (в данном случае **`squiduser`** будет логином):

```bash
htpasswd /etc/squid/passwd squiduser
```

Программа запросит ввод пароля, который Вы хотите установить:

```
New password:
```

По умолчанию htpasswd использует шифрование паролей методом MD5, поэтому нам нужно разрешить такое шифрование в файле конфигурации Squid.

Откроем файл конфигурации:

```bash
nano /etc/squid/squid.conf
```

Далее добавим следующие строки в файл конфигурации:

{% code title="/etc/squid/squid.conf" %}

```
auth_param basic program /usr/lib64/squid/basic_ncsa_auth /etc/squid/passwd
auth_param basic children 5
auth_param basic realm Squid Basic Authentication
auth_param basic credentialsttl 2 hours
acl auth_users proxy_auth REQUIRED
http_access allow auth_users
```

{% endcode %}

Далее сохраните изменения в файле и вновь перезапустите Squid:

```bash
systemctl restart squid
```

### Подключение к прокси-серверу <a href="#id-3" id="id-3"></a>

Для подключения к прокси-серверу перейдите в соответствующее меню настроек в Вашем любимом браузере.

В качестве IP-адреса прокси-сервера введите IP-адрес сервера, на который Вы установили Squid. В качестве порта - 3128.

После применения настроек браузер запросит логин и пароль от прокси-сервера.

### Изменение порта Squid <a href="#squid-2" id="squid-2"></a>

Для изменения порта Squid в файле конфигурации нужно изменить значение параметра **`http_port`**.\
Например, для изменения порта на **`8765`** нужно привести конфигурацию в такой вид:

{% code title="/etc/squid/squid.conf" %}

```bash
http_port 8765
```

{% endcode %}


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://help.vdsnow.ru/english/tutorials/vds-configuration/vpn-proxy-servers/how-to-install-squid-on-centos-7.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
