Добрый день. Есть сервер Slackware 13 + Squid3, работает как шлюз в сеть интернет. Работает несколько лет, все нормально. Но потребовалось мне перевести работу Squid в transparent mode. Пересобрал его с нужными опциями, запустил. Но получилась загвоздка при настройке Iptables. Добавил команду:
iptables -t nat -A PREROUTING -i eth1 -s 10.10.10.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128
Но клиенты все равно не имеют выхода в интернет без ввода в браузере настроек прокси.
У меня большая просьба: выложите здесь, плз, рабочие конфигурации Iptables для работы с прозрачным Squid.
Iptables (рабочая конфигурация)
Модератор: Модераторы разделов
Re: Iptables (рабочая конфигурация)
SQUID 3.0.x
/etc/squid/squid.conf
Для 3.1+ название параметра изменено на intercept.
/etc/rc.d/rc.firewall
К моменту принятия решения о маршрутизации пакеты адресованы 127.0.0.1:3128 (действие REDIRECT --to-ports 3128), поэтому попадут в INPUT, эта цепочка должна разрешать их прохождение. Squid должен иметь возможность ходить наружу, цепочка OUTPUT должна содержать соответствующие разрешения.
PS. По-быстрому фаервол для отдельной машины/шлюза можно набросать при помощи Easy Firewall Generator (Slackware adaptation):
http://www.slackware.com/~alien/efg/
PPS. На вики SQUID ( http://wiki.squid-cache.org/ConfigExamples...t/LinuxRedirect ) рекомендации немного отличны по форме от приведенных выше. Но использование MASQUERADE при постоянном IP -- это из пушки по воробьям.
/etc/squid/squid.conf
Код: Выделить всё
...
http_port 3128 transparent
...
Для 3.1+ название параметра изменено на intercept.
/etc/rc.d/rc.firewall
Код: Выделить всё
...
LO_IFACE="lo"
LOCAL_IFACE="eth1"
LOCAL_IP=""
INET_IFACE="eth0"
INET_IP=""
IPT="/usr/sbin/iptables"
...
echo "1" > /proc/sys/net/ipv4/ip_forward
echo "1" > /proc/sys/net/ipv4/tcp_syncookies
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter
echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts
echo "1" > /proc/sys/net/ipv4/conf/all/log_martians
...
$IPT -P INPUT DROP
$IPT -P OUTPUT DROP
$IPT -P FORWARD DROP
...
$IPT -A INPUT -p ALL -i $LO_IFACE -j ACCEPT
...
# To internet
$IPT -A OUTPUT -p ALL -o $INET_IFACE -j ACCEPT
...
# Redirect HTTP for a transparent proxy
$IPT -t nat -A PREROUTING -p tcp -i $LOCAL_IFACE --destination-port 80 \
-j REDIRECT --to-ports 3128
# Redirect HTTPS for a transparent proxy
$IPT -t nat -A PREROUTING -p tcp -i $LOCAL_IFACE --destination-port 443 \
-j REDIRECT --to-ports 3128
К моменту принятия решения о маршрутизации пакеты адресованы 127.0.0.1:3128 (действие REDIRECT --to-ports 3128), поэтому попадут в INPUT, эта цепочка должна разрешать их прохождение. Squid должен иметь возможность ходить наружу, цепочка OUTPUT должна содержать соответствующие разрешения.
PS. По-быстрому фаервол для отдельной машины/шлюза можно набросать при помощи Easy Firewall Generator (Slackware adaptation):
http://www.slackware.com/~alien/efg/
PPS. На вики SQUID ( http://wiki.squid-cache.org/ConfigExamples...t/LinuxRedirect ) рекомендации немного отличны по форме от приведенных выше. Но использование MASQUERADE при постоянном IP -- это из пушки по воробьям.
Спасибо сказали:
Re: Iptables (рабочая конфигурация)
Bormant, спасибо большое. Вроде все так же и делаю - не новичок, но какие-то непонятные мне косяки.
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Iptables (рабочая конфигурация)
Покажите полный вывод iptables-save.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Iptables (рабочая конфигурация)
Здравствуйте, вот содержимое моего файла rc.firewall:
С такими настройками у меня клиенты не работают без указания адреса прокси и порта squid.
Все работает как надо, если добавить строку:
Только правильно ли это?
P.S. У меня статический адрес, поэтому маскарадинг не использую.
Код: Выделить всё
#!/bin/sh
#eth0 - интернет
#eth1 - локалка
PATH=/usr/sbin:/sbin:/bin:/usr/bin
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP
iptables -A INPUT -p ALL -i lo -j ACCEPT
iptables -A OUTPUT -p ALL -o eth0 -j ACCEPT
iptables -t nat -A PREROUTING -i eth1 -s 10.10.10.0/24 -p tcp --dport 80 -j REDIRECT --to-port 3128
iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth0 -j SNAT --to-source 1.1.1.1
iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT #ftp
iptables -A INPUT -p tcp -m tcp --dport 2280 -j ACCEPT #ssh
iptables -A INPUT -p icmp -j ACCEPT
iptables -A FORWARD -p icmp -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
iptables -A FORWARD -i eth1 -s 10.10.10.0/24 -p tcp --dport 22 -j ACCEPT #SSH
iptables -A FORWARD -i eth1 -s 10.10.10.0/24 -p tcp --dport 21 -j ACCEPT #FTP
iptables -A FORWARD -i eth1 -s 10.10.10.0/24 -p tcp --dport 25 -j ACCEPT #SMTP
iptables -A FORWARD -i eth1 -s 10.10.10.0/24 -p tcp --dport 110 -j ACCEPT #POP3
iptables -A FORWARD -i eth1 -s 10.10.10.0/24 -p tcp --dport 143 -j ACCEPT #IMAP
iptables -A FORWARD -i eth1 -s 10.10.10.0/24 -p tcp --dport 993 -j ACCEPT #IMAPS
С такими настройками у меня клиенты не работают без указания адреса прокси и порта squid.
Все работает как надо, если добавить строку:
Код: Выделить всё
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
Только правильно ли это?
P.S. У меня статический адрес, поэтому маскарадинг не использую.
- Bizdelnick
- Модератор
- Сообщения: 20793
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: Iptables (рабочая конфигурация)
Вот эта часть у меня вызывает сомнения:
Во-первых, безотносительно сабжа, зачем в INPUT принимать пакеты с состоянием NEW? Это делает бессмысленными следующие правила:
Во-вторых, в OUTPUT как раз NEW не разрешены, и отдельных разрешающих правил для http-запросов от прокси я не вижу. Говорите, раньше он работал? Не очень понимаю, как...
Ну и в третьих, сейчас вместо -m state --state православно использовать -m conntrack --ctstate.
Ballatus писал(а): ↑04.09.2015 20:39Код: Выделить всё
iptables -A INPUT -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
Во-первых, безотносительно сабжа, зачем в INPUT принимать пакеты с состоянием NEW? Это делает бессмысленными следующие правила:
До них просто не дойдёт, все пакеты и так будут приняты вместе с кучей других.Ballatus писал(а): ↑04.09.2015 20:39Код: Выделить всё
iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT #ftp iptables -A INPUT -p tcp -m tcp --dport 2280 -j ACCEPT #ssh iptables -A INPUT -p icmp -j ACCEPT
Во-вторых, в OUTPUT как раз NEW не разрешены, и отдельных разрешающих правил для http-запросов от прокси я не вижу. Говорите, раньше он работал? Не очень понимаю, как...
Ну и в третьих, сейчас вместо -m state --state православно использовать -m conntrack --ctstate.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Re: Iptables (рабочая конфигурация)
Bizdelnick, большое спасибо за ответ. Некоторые, указанные Вами сомнительные строки, здесь оказались из-за моих отчаянных экспериментов. Если их закомментировать, то на работу это никак не влияет. Выложил файл rc.firewall как есть, без редактирования. А так да, действительно все работает, но с указанием порта и шлюза в браузере.
Всем спасибо за ответы. Думаю, что тема закрыта - оставлю строку:
Всем спасибо за ответы. Думаю, что тема закрыта - оставлю строку:
Код: Выделить всё
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT