Задача:
Настроить прозрачный прокси-сервер 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: https://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 для вкуривания:
- http://www.squid-cache.org
- http://squid.h12.ru/FAQ/FAQ.html
- http://www.opennet.ru/base/net/squid_inst.txt.html
31 уже не поддерживается лучше про 32 или про 33 наваял бы 😉
наваляю, память тока освежу и конечно наваляю 😀
А о том, как https проксировать, забыли рассказать, ой как не хорошо ай-яя =) .