Страница 1 из 2

Настройка связки squid + sams + iptables

Добавлено: 04 сен 2011, 17:33
Wirrus
Подскажите, что я сделал не так: все работает (интернет раздается, снаружи все закрыто), но в обход squid, т.е. не могу порезать скорость и разграничить доступ.
Скорее всего проблема в настройке iptables...
[spoilerfw]

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

#!/bin/sh
#
# Отчистка 

iptables -F INPUT
iptables -F FORWARD
iptables -F OUTPUT
iptables -t nat -F PREROUTING
iptables -t nat -F POSTROUTING
iptables -t mangle -F

#
INET_IP="62.76.117.182"
INET_IFACE="eth1"
INET_BROADCAST="62.76.117.177"

#
LAN_IP="172.17.2.49"
LAN_IP_PORT_PROXY="172.17.2.49:3128"
LAN_IP_RANGE="172.17.0.0/18"
LAN_IFACE="eth2"

#
LO_IFACE="lo"
LO_IP="127.0.0.1"

###########################################################################
#
# Используемые модули.
#
/sbin/depmod -a     

#
/sbin/modprobe ip_tables
/sbin/modprobe ip_conntrack
/sbin/modprobe iptable_filter
/sbin/modprobe iptable_mangle
/sbin/modprobe iptable_nat
/sbin/modprobe ipt_LOG
/sbin/modprobe ipt_limit
/sbin/modprobe ipt_state

#/sbin/modprobe ipt_owner
/sbin/modprobe ipt_REJECT
/sbin/modprobe ipt_MASQUERADE
/sbin/modprobe ip_conntrack_ftp
#/sbin/modprobe ip_conntrack_irc
/sbin/modprobe ip_nat_ftp
#/sbin/modprobe ip_nat_irc

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

###########################################################################
#
# Блокируем все
#
iptables -P INPUT DROP
iptables -P OUTPUT DROP
iptables -P FORWARD DROP

#
# Создание цепочки для некорректных TCP протоколов
#

iptables -N bad_tcp_packets

#
# Создание цепочки для  ICMP, TCP и UDP протоколов
#

iptables -N allowed
iptables -N tcp_packets
iptables -N udp_packets
iptables -N icmp_packets

###########################################################################
#
# Распределение трафика по цепочкам
#

#
# Некоректные TCP протоколы
#

iptables -A bad_tcp_packets -p tcp --tcp-flags SYN,ACK SYN,ACK \
-m state --state NEW -j REJECT --reject-with tcp-reset 
iptables -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j LOG \
--log-prefix "New not syn:"
iptables -A bad_tcp_packets -p tcp ! --syn -m state --state NEW -j DROP

#
# Остальные известные протоколы
#

iptables -A allowed -p TCP --syn -j ACCEPT
iptables -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A allowed -p TCP -j DROP

#
# TCP протокол
#

iptables -A tcp_packets -p TCP -s 0/0 --dport 21 -j allowed
iptables -A tcp_packets -p TCP -s 0/0 --dport 22 -j allowed
iptables -A tcp_packets -p TCP -s 0/0 --dport 80 -j allowed
iptables -A tcp_packets -p TCP -s 0/0 --dport 113 -j allowed
iptables -A tcp_packets -p TCP -s 0/0 --dport 3128 -j allowed
iptables -A tcp_packets -p TCP -s 0/0 --dport 8080 -j allowed

#
# UDP протокол
#

iptables -A udp_packets -p UDP -s 0/0 --destination-port 20 -j ACCEPT
iptables -A udp_packets -p UDP -s 0/0 --destination-port 21 -j ACCEPT
iptables -A udp_packets -p UDP -s 0/0 --destination-port 53 -j ACCEPT
iptables -A udp_packets -p UDP -s 0/0 --destination-port 123 -j ACCEPT
iptables -A udp_packets -p UDP -s 0/0 --destination-port 2074 -j ACCEPT
iptables -A udp_packets -p UDP -s 0/0 --destination-port 4000 -j ACCEPT

#
# Блокирование служебных излишних запросов.
#

iptables -A udp_packets -p UDP -i $INET_IFACE -d $INET_BROADCAST \
--destination-port 135:139 -j DROP

#
# Блокирование внешних DHCP. 
#

iptables -A udp_packets -p UDP -i $INET_IFACE -d 255.255.255.255 \
--destination-port 67:68 -j DROP

#
# ICMP протокол
#

iptables -A icmp_packets -p ICMP -s 0/0 --icmp-type 8 -j ACCEPT
iptables -A icmp_packets -p ICMP -s 0/0 --icmp-type 11 -j ACCEPT

###########################################################################
#
# Обработка входящих протоколов
#

#
# Перенаправление некоректных пакетов
#

iptables -A INPUT -p tcp -j bad_tcp_packets

#
# Правила для специальных сетей не является частью Интернета
#

iptables -A INPUT -p ALL -i $LAN_IFACE -s $LAN_IP_RANGE -j ACCEPT
iptables -A INPUT -p ALL -i $LO_IFACE -s $LO_IP -j ACCEPT
iptables -A INPUT -p ALL -i $LO_IFACE -s $LAN_IP -j ACCEPT
iptables -A INPUT -p ALL -i $LO_IFACE -s $INET_IP -j ACCEPT

#
# Специальные правила для запросов DHCP из локальной сети.
#

iptables -A INPUT -p UDP -i $LAN_IFACE --dport 67 --sport 68 -j ACCEPT

#
# Правила блокировки для входящих пакетов из Интернета.
#

iptables -A INPUT -p ALL -d $INET_IP -m state --state ESTABLISHED,RELATED \
-j ACCEPT

iptables -A INPUT -p ALL -i $INET_IFACE -j DROP

iptables -A INPUT -p TCP -i $INET_IFACE -j tcp_packets
iptables -A INPUT -p UDP -i $INET_IFACE -j udp_packets
iptables -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets



#
# Блокирование широковещательных запросов из внешней сети.
#

iptables -A INPUT -i $INET_IFACE -d 224.0.0.0/8 -j DROP

#
# Блокирование "мертвых" неизвестных пакетов
#

iptables -A INPUT -m limit --limit 3/minute --limit-burst 3 -j LOG \
--log-level DEBUG --log-prefix "IPT INPUT packet died: "

###########################################################################
#
# Перенаправление некоректных TCP пакетов
#

iptables -A FORWARD -p tcp -j bad_tcp_packets

#
# Перенаправление остальных пакетов из ловальной сети
#

iptables -A FORWARD -i $LAN_IFACE -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

#
# Заворачивание портов на порт прокси-сервера
#

iptables -t nat -A PREROUTING -i $LAN_IFACE -p tcp -m multiport \
--dport 80,8080 -j DNAT --to $LAN_IP_PORT_PROXY

#
# Обработка "мертвых" пакетов из стандартных
#

iptables -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG \
--log-level DEBUG --log-prefix "IPT FORWARD packet died: "

###########################################################################
#
# Перенаправление некоректных TCP пакетов
#

iptables -A OUTPUT -p tcp -j bad_tcp_packets

#
# Обработка пакетов на выход
#

iptables -A OUTPUT -p ALL -s $LO_IP -j ACCEPT
iptables -A OUTPUT -p ALL -s $LAN_IP -j ACCEPT
iptables -A OUTPUT -p ALL -s $INET_IP -j ACCEPT

#
# Обработка "мертвых" пакетов.
#

iptables -A OUTPUT -m limit --limit 3/minute --limit-burst 3 -j LOG \
--log-level DEBUG --log-prefix "IPT OUTPUT packet died: "

###########################################################################
#
# Включить простой пересылки IP и трансляции сетевых адресов
#

iptables -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to-source $INET_IP

#
# Подмена TTL подписи в пакетах
#

iptables -t mangle -A PREROUTING -i $INET_IFACE -j TTL --ttl-set 64


[/spoiler]

Re: Настройка связки squid + sams + iptables

Добавлено: 05 сен 2011, 00:59
Stranger_v_night
А в squid у вас задан порт прокси? И какой?

И что дает iptables -nL?

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

# Заворачивание портов на порт прокси-сервера
#

iptables -t nat -A PREROUTING -i $LAN_IFACE -p tcp -m multiport \
--dport 80,8080 -j DNAT --to $LAN_IP_PORT_PROXY 
Просто интересно почему вы используете DNAT? а не просто REDIRECT?
DNAT обычно используется для порт-мапинга.

у меня вот такое правило для заворота на squid:

$IPT -t nat -A PREROUTING -i $IN_ETH -p tcp --dport 80 -j REDIRECT --to-port $PROXY_PORT

Re: Настройка связки squid + sams + iptables

Добавлено: 05 сен 2011, 09:11
Raven
Wirrus писал(а):iptables -t nat -A PREROUTING -i $LAN_IFACE -p tcp -m multiport \--dport 80,8080 -j DNAT --to $LAN_IP_PORT_PROXY
Не вижу определений последней переменной. Какой порт назначен сквиду для прозрачного проксирования и поддерживает ли вообще он его? squid.conf в студию!

Re: Настройка связки squid + sams + iptables

Добавлено: 05 сен 2011, 09:56
Stranger_v_night
Он его вроде как определяет:
LAN_IP="172.17.2.49"
LAN_IP_PORT_PROXY="172.17.2.49:3128"
LAN_IP_RANGE="172.17.0.0/18"
LAN_IFACE="eth2"
Только я не пойму, зачем он на своей же машине делает порт-мапинг.

Re: Настройка связки squid + sams + iptables

Добавлено: 05 сен 2011, 10:23
Raven
Stranger_v_night писал(а):Он его вроде как определяет:
LAN_IP="172.17.2.49"
LAN_IP_PORT_PROXY="172.17.2.49:3128"
LAN_IP_RANGE="172.17.0.0/18"
LAN_IFACE="eth2"
Ой, сори, проглядел :-[
Stranger_v_night писал(а):Только я не пойму, зачем он на своей же машине делает порт-мапинг.
Это нормально, просто человеку нужен сквид для более гибкого управления пользователями, для реализации кэша. Только вот судя по
Stranger_v_night писал(а):LAN_IP_PORT_PROXY="172.17.2.49:3128"
сквид у него не настроен на прозрачность. Так что затор у него не в фаере а скорее всего именно в кальмаре.

Re: Настройка связки squid + sams + iptables

Добавлено: 05 сен 2011, 12:32
Wirrus
Способ перенаправления неважен, можно и так:
Stranger_v_night писал(а):А в squid у вас задан порт прокси? И какой?

И что дает iptables -nL?

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

# Заворачивание портов на порт прокси-сервера
#

iptables -t nat -A PREROUTING -i $LAN_IFACE -p tcp -m multiport \
--dport 80,8080 -j DNAT --to $LAN_IP_PORT_PROXY 
Просто интересно почему вы используете DNAT? а не просто REDIRECT?
DNAT обычно используется для порт-мапинга.

у меня вот такое правило для заворота на squid:

$IPT -t nat -A PREROUTING -i $IN_ETH -p tcp --dport 80 -j REDIRECT --to-port $PROXY_PORT
Конфиг кальмара пока пуст... :
[spoiler]

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

# created by SAMS _sams_ 2011-9-5 9:48:53
#
# Recommended minimum configuration:
#
acl manager proto cache_object
acl localhost src 127.0.0.1/32
acl localhost src ::1/128
acl to_localhost dst 127.0.0.0/8 0.0.0.0/32
acl to_localhost dst ::1/128

# Example rule allowing access from your local networks.
# Adapt to list your (internal) IP networks from where browsing
# should be allowed
#acl localnet src 10.0.0.0/8    # RFC1918 possible internal network
acl localnet src 172.17.0.0/16    # RFC1918 possible internal network
acl localadmin src 172.17.2.0/24    # 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) machines

acl SSL_ports port 443
acl Safe_ports port 80        # http
acl Safe_ports port 21        # ftp
acl Safe_ports port 443        # https
acl Safe_ports port 70        # gopher
acl Safe_ports port 210        # wais
acl Safe_ports port 1025-65535    # unregistered ports
acl Safe_ports port 280        # http-mgmt
acl Safe_ports port 488        # gss-http
acl Safe_ports port 591        # filemaker
acl Safe_ports port 777        # multiling http
acl CONNECT method CONNECT

#
# Recommended minimum Access Permission configuration:
#
# Only allow cachemgr access from localhost
http_access allow localadmin
http_access allow localnet
http_access deny manager


# Deny requests to certain unsafe ports
http_access allow !Safe_ports

# Deny CONNECT to other than secure SSL ports
http_access deny CONNECT !SSL_ports

# We strongly recommend the following be uncommented to protect innocent
# web applications running on the proxy server who think the only
# one who can access services on "localhost" is a local user
#http_access deny to_localhost

#
# INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS
#

# Example rule allowing access from your local networks.
# Adapt localnet in the ACL section to list your (internal) IP networks
# from where browsing should be allowed
http_access allow localnet
http_access allow localhost

# And finally deny all other access to this proxy
http_access deny all

# Squid normally listens to port 3128
http_port 3128

# We recommend you to use at least the following line.
hierarchy_stoplist cgi-bin ?

# Uncomment and adjust the following to add a disk cache directory.
#cache_dir ufs /var/spool/squid 100 16 256

# Leave coredumps in the first cache dir
coredump_dir /var/spool/squid

forwarded_for off
# Add any of your own refresh_pattern entries above these.
refresh_pattern ^ftp:        1440    20%    10080
refresh_pattern ^gopher:    1440    0%    1440
refresh_pattern -i (/cgi-bin/|\?) 0    0%    0
refresh_pattern .        0    20%    4320

visible_hostname proxy
[/spoiler]

настройки минимальны, авторизация по IP... проблема вскрылась: самс при реконфигурировании кальмара создает файлик с диапазонами ip пользователей, но в сам конфиги команду на разрешение с именем файлика не добавляет...

Закономерен вопрос: почему сейчас все работает? (в обход acl: работает с разных диапазонов вплоть до 128.128.128.0/24 - у одного из моих подразделений админ веселый)

Re: Настройка связки squid + sams + iptables

Добавлено: 05 сен 2011, 12:59
Raven
исходя из всего предполагаю что причина сабжа именно в конфиге сквиды.

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

http_port 3128
под этими строчками надо добавить

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

http_port 3129 transparent
и натить 80 и 8080 порты именно на него!

Re: Настройка связки squid + sams + iptables

Добавлено: 05 сен 2011, 13:24
Wirrus
Изменения не принесли результата... *WALL BREAK*
Raven писал(а):исходя из всего предполагаю что причина сабжа именно в конфиге сквиды.

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

http_port 3128
под этими строчками надо добавить

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

http_port 3129 transparent
и натить 80 и 8080 порты именно на него!

Re: Настройка связки squid + sams + iptables

Добавлено: 05 сен 2011, 14:25
Gen1us2k
в кальмара:
http_port $LAN_IP:3128 transparent

в iptables
iptables -t nat -A PREROUTING -s $NET -d! $LAN_IP -p tcp -m tcp --dport 80 -j REDIRECT --to-port 3128
либо
iptables -t nat -A PREROUTING -s $NET -d! $LAN_IP -p tcp -m multiport --dport 80,8080 -j REDIRECT --to-port 3128

Где LAN_IP - серый ип сервака
$NET - серая сетка.

Re: Настройка связки squid + sams + iptables

Добавлено: 05 сен 2011, 14:29
Stranger_v_night
Вы определитесь на каком порту слушает кальмар?
на 3128 или 3129?

Потому что вы заворачиваете на 3128, в конфиге кальмара пишете, что прозрачные порт 3129.