Установка прозрачного прокси-сервера SQUID на linux

Задача:

Настроить прозрачный прокси-сервер squid, который уже является интернет-шлюзом (NAT, DHCPD, FTP).

Устанавливать будем на систему:

# cat /etc/redhat-release
CentOS release 6.4 (Final)

Версия ядра:

# uname -a
Linux proxy-sever 2.6.32-358.2.1.el6.i686 #1 SMP Tue Mar 12 21:42:46 UTC 2013 i686 i686 i386 GNU/Linux

Устанавливать прокси я буду на шлюз, поэтому, если не включено, включаем маршрутизацию между интерфейсами, для этого правим файл /etc/sysctl.conf:

vi /etc/sysctl.conf

и изменяем параметр net.ipv4.ip_forward с 0 на 1:

net.ipv4.ip_forward = 1

Я поступаю иначе. В файл «/etc/rc.d/rc.local» добавляю строчку «./etc/rc.d/rc.fw» . Файл rc.fw является настройками фаервола, где уже есть параметр net.ipv4.ip_forward. Вот его содержимое:

#!/bin/sh
#
# Autor: XaXaTyXa
# WEB: http://xaxatyxa.ru
# date: 2013-02-07
#
. /etc/sysconfig/network
    # -------
WAN_1_IF="eth1"
WAN_1_IP="ВНЕШНИЙ_IP-АДРЕС"
WAN_1_MASK="255.255.255.252"
    # -------
LAN_1_IF="eth0"
LAN_1_IP="192.168.11.11"
LAN_1_MASK="255.255.255.0"
    # -------
LO_IF="lo"
LO_IP="127.0.0.1"
    # -------
IPT="/sbin/iptables"
MODPROBE="/sbin/modprobe"
/sbin/depmod -a
/sbin/modprobe ip_conntrack_ftp
/sbin/modprobe ip_gre
/sbin/modprobe ip_nat_ftp
/sbin/modprobe ip_nat_pptp
/sbin/modprobe ipt_TTL

echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/tcp_syncookies

$IPT -F
$IPT -t nat -F
$IPT -t mangle -F
$IPT -X

$IPT -P INPUT DROP
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD DROP

###############################################
CLASS_A="10.0.0.0/8"
CLASS_B="172.16.00/22"
CLASS_C="192.168.0.0/16"
CLASS_D="244.0.0.0/4"
CLASS_E="240.0.0.0/5"

FTP_P="21"
FTP_PD="64000:65535"
SSH_P="22"
PPTP_P="1723"

$IPT -A INPUT -i $LO_IF -j ACCEPT
$IPT -A OUTPUT -o $LO_IF -j ACCEPT

$IPT -A INPUT -p ICMP --icmp-type 8 -j ACCEPT

$IPT -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

$IPT -A INPUT -p TCP --dport $SSH_P -j ACCEPT

$IPT -A INPUT -p 47 -j ACCEPT
$IPT -A INPUT -p tcp --dport 1723 -j ACCEPT
$IPT -A INPUT -p udp --dport 1723 -j ACCEPT
$IPT -A FORWARD -p 47 -j ACCEPT
$IPT -A FORWARD -p tcp --dport 1723 -j ACCEPT
$IPT -A FORWARD -p udp --dport 1723 -j ACCEPT
$IPT -A FORWARD -i ppp+ -o eth0 -j ACCEPT
$IPT -A FORWARD -i eth0 -o ppp+ -j ACCEPT

$IPT -A FORWARD -i tap0 -o eth0 -j ACCEPT
$IPT -A FORWARD -i eth0 -o tap0 -j ACCEPT

$IPT -A INPUT -p TCP --dport $FTP_P -j ACCEPT
$IPT -A INPUT -m state --state NEW -m tcp -p tcp --dport $FTP_P -j ACCEPT
#$IPT -A INPUT -m state --state NEW -m tcp -p tcp --dport $FTP_PD -j ACCEPT
$IPT -t nat -A POSTROUTING -o $WAN_1_IF -j MASQUERADE
$IPT -A INPUT -i $LAN_1_IF --source $CLASS_C --match state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -o $LAN_1_IF --destination $CLASS_C --match state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A FORWARD -i $LAN_1_IF --source $CLASS_C --destination 0.0.0.0/0 --match state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A FORWARD -i $WAN_1_IF --destination $CLASS_C --match state --state ESTABLISHED -j ACCEPT

Установка SQUID

Обновляем систему. Советую делать это аккуратно и проверять, что нового в пакетах и какие изменения появились. Как-то я наступал на грабли с обновлением vsFTPd.

yum update

Смотрим версию squid в репозиториях

yum list squid

В базовом репозитории есть версия «Squid 3.1.10-16». Её и будем устанавливать

yum install squid

Добавляем Squid в автозагрузку

chkconfig squid on

Проверяем, что squid добавился

chkconfig --list squid

Настраиваем конфиг squid:

vi /etc/squid/squid.conf

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

меняем

http_port 3128

на

http_port 3128 transparent

и добавляем имя нашего сервера:

visible_hostname server

Заворачиваем трафик на Squid:

iptables -t nat -A PREROUTING -s 192.168.11.0/24 -p tcp -m multiport --dport 80 -j REDIRECT --to-port 3128

В моём случае, добавляется строка

$IPT -t nat -A PREROUTING -s 192.168.11.0/24 -p tcp -m multiport --dport 80 -j REDIRECT --to-port 3128

Запускаем сервис Squid:

service squid start

Проверяем, открыт ли порт

netstat -tulpn | grep 3128

Вывод должен быть:

tcp        0      0 192.168.111.111:3128        0.0.0.0:*                   LISTEN      20284/(squid)

Проверяем. Для наглядности будем использовать сайт 2ip.ru

Возможные ошибки Squid:

1. При запуске Squid, появляется ошибка:

2013/05/29 16:44:40| WARNING: Could not determine this machines public hostname. Please configure one or set 'visible_hostname'.
2013/05/29 16:44:40| WARNING: Could not determine this machines public hostname. Please configure one or set 'visible_hostname'.

в конфиге нехватает имени хоста

visible_hostname server

всё!

Документация и ссылки по SQUID для вкуривания:

  1. http://www.squid-cache.org
  2. http://squid.h12.ru/FAQ/FAQ.html
  3. http://www.opennet.ru/base/net/squid_inst.txt.html
Остались или есть ещё вопросы? Задавайте!
(не забудьте указать ссылку на этот пост)




3 комментария

  1. ttys Ukraine Google Chrome Ubuntu Linux :

    31 уже не поддерживается лучше про 32 или про 33 наваял бы  ;)

    Thumb up 1 Thumb down 0

  2. tehnikpc Ukraine Mozilla Firefox Linux :

    А о том, как https проксировать, забыли рассказать, ой как не хорошо ай-яя =) .

    Thumb up 0 Thumb down 0

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

Установка, настройка, мониторинг и администрирование linux, unix, windows систем