Iptables (рабочая конфигурация)

SLAX, Deep Style, ZenWalk

Модератор: Модераторы разделов

Ответить
Ballatus
Сообщения: 4
ОС: Slackware 13

Iptables (рабочая конфигурация)

Сообщение Ballatus »

Добрый день. Есть сервер 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.
Спасибо сказали:
Аватара пользователя
bormant
Сообщения: 1354

Re: Iptables (рабочая конфигурация)

Сообщение bormant »

SQUID 3.0.x
/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 -- это из пушки по воробьям.
Спасибо сказали:
Ballatus
Сообщения: 4
ОС: Slackware 13

Re: Iptables (рабочая конфигурация)

Сообщение Ballatus »

Bormant, спасибо большое. Вроде все так же и делаю - не новичок, но какие-то непонятные мне косяки.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20790
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Iptables (рабочая конфигурация)

Сообщение Bizdelnick »

Покажите полный вывод iptables-save.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
bormant
Сообщения: 1354

Re: Iptables (рабочая конфигурация)

Сообщение bormant »

Ballatus писал(а):
03.09.2015 14:10
какие-то непонятные мне косяки

Тогда без вывода iptables-save действительно трудно что-то осмысленное предположить, поскольку влияют не только политики цепочек, наличие и/или отсутствие правил, но и их порядок следования.
Спасибо сказали:
Ballatus
Сообщения: 4
ОС: Slackware 13

Re: Iptables (рабочая конфигурация)

Сообщение Ballatus »

Здравствуйте, вот содержимое моего файла rc.firewall:

Код: Выделить всё

#!/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
Модератор
Сообщения: 20790
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Iptables (рабочая конфигурация)

Сообщение Bizdelnick »

Вот эта часть у меня вызывает сомнения:
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.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Ballatus
Сообщения: 4
ОС: Slackware 13

Re: Iptables (рабочая конфигурация)

Сообщение Ballatus »

Bizdelnick, большое спасибо за ответ. Некоторые, указанные Вами сомнительные строки, здесь оказались из-за моих отчаянных экспериментов. Если их закомментировать, то на работу это никак не влияет. Выложил файл rc.firewall как есть, без редактирования. А так да, действительно все работает, но с указанием порта и шлюза в браузере.
Всем спасибо за ответы. Думаю, что тема закрыта - оставлю строку:

Код: Выделить всё

iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
Спасибо сказали:
Ответить