LINUX.ORG.RU

WCCP Cisco Squid и IPtables

 , ,


0

1

Помогите разобраться в таком вопросе господа Админы.

Задача следующая. Весть трафик из сети 10.10.6.0 пропускать через прозрачный прокси на squid 10.10.6.10. В качестве шлюза cisco c ip 10.10.6.1. При обращении из локальной сети 10.10.6.0 шлюз отрабатывает по wccp и передает запросы по порту 80 и 443 на gre интерфейс в squid. Но логов Squid я не вижу. В tcpdump вижу приходят пакеты. Думаю надо смотреть iptables, но видимо у меня слишком мало опыта в этом. Помогите понять как

Конфиг cisco

ip wccp source-interface Vlan1
ip wccp web-cache redirect-list WCCP_ACCESS
ip wccp 70 redirect-list WCCP_ACCESS


interface Vlan1
 description Lan 10.10.6.0
 ip address 10.10.6.1 255.255.254.0
 ip wccp web-cache redirect in
 ip wccp 70 redirect in
 ip nat inside
 ip virtual-reassembly in  

ip access-list extended WCCP_ACCESS
 remark ACL for HTTP/HTTPS
 remark Squid proxies bypass WCCP
 deny   ip host 10.10.6.10 any
 permit tcp 10.10.6.0 0.0.1.255 any eq www 443
 remark all others bypass WCCP
 deny   ip any any

Соединение между Cisco и Squid есть и редирект пакетов работает.

sh ip wccp
Global WCCP information:
    Router information:
        Router Identifier:                   10.10.6.1
        Configured source-interface:         Vlan1

    Service Identifier: web-cache
        Protocol Version:                    2.00
        Number of Service Group Clients:     1
        Number of Service Group Routers:     1
        Total Packets Redirected:            1510
          Process:                           0
          CEF:                               1510
        Service mode:                        Open
        Service Access-list:                 -none-
        Total Packets Dropped Closed:        0
        Redirect access-list:                WCCP_ACCESS
        Total Packets Denied Redirect:       0
        Total Packets Unassigned:            0
        Group access-list:                   -none-
        Total Messages Denied to Group:      0
        Total Authentication failures:       8
        Total GRE Bypassed Packets Received: 0
          Process:                           0
          CEF:                               0
        GRE tunnel interface:                Tunnel1

Service Identifier: 70
        Protocol Version:                    2.00
        Number of Service Group Clients:     1
        Number of Service Group Routers:     1
        Total Packets Redirected:            4043
          Process:                           0
          CEF:                               4043
        Service mode:                        Open
        Service Access-list:                 -none-
        Total Packets Dropped Closed:        0
        Redirect access-list:                WCCP_ACCESS
        Total Packets Denied Redirect:       30230
        Total Packets Unassigned:            39
        Group access-list:                   -none-
        Total Messages Denied to Group:      0
        Total Authentication failures:       32
        Total GRE Bypassed Packets Received: 0
          Process:                           0
          CEF:                               0
        GRE tunnel interface:                Tunnel0

Конфиг Squid

acl localnet src 10.10.6.0/23   # RFC 1122 "this" network (LAN)

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

http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow localhost manager
http_access deny manager

include /etc/squid/conf.d/*

http_access allow localhost
http_access allow all
#http_access deny all

http_port 3128
http_port 3129 

wccp2_router 10.10.6.1
wccp2_forwarding_method gre
wccp2_return_method gre
wccp2_service standard 0
wccp2_service dynamic 70

coredump_dir /var/spool/squid

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

Правила iptables

# Generated by iptables-save v1.6.1 on Wed Jan 22 13:38:06 2020
*mangle
:PREROUTING ACCEPT [43:3189]
:INPUT ACCEPT [41:3029]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [30:2756]
:POSTROUTING ACCEPT [30:2756]
COMMIT
# Completed on Wed Jan 22 13:38:06 2020
# Generated by iptables-save v1.6.1 on Wed Jan 22 13:38:06 2020
*filter
:INPUT ACCEPT [403:34388]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [342:39028]
:LOGGING - [0:0]
COMMIT
# Completed on Wed Jan 22 13:38:06 2020
# Generated by iptables-save v1.6.1 on Wed Jan 22 13:38:06 2020
*nat
:PREROUTING ACCEPT [29:2408]
:INPUT ACCEPT [2:99]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -i wccp0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3129
-A PREROUTING -i wccp0 -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3129
-A POSTROUTING -j MASQUERADE
COMMIT
# Completed on Wed Jan 22 13:38:06 2020

Для начала, а у тебя доступ в инет с машины со сквидом есть?

Хорошо бы увидеть «ip -4 a»

В конфиге сквида

http_port 3128
http_port 3129
Что, прямо так? Для прозрачного режима? Ты бы хоть «transparent» на 3129 добавил для приличия.

Ты ведь https хотел перехватывать, а «https_port» отсутствует! Посмотри про sslbump в squid

Про nat

-A PREROUTING -i wccp0 -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3129
-A PREROUTING -i wccp0 -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3129
-A POSTROUTING -j MASQUERADE

Не надо использовать REDIRECT без острой необходимости. Лучше использовать DNAT.

Для http и https нужно использовать разные порты.

"-A POSTROUTING -j MASQUERADE" - это ад! Маскарадить все подряд вредно. Хоть бы имя интерфейса указал.

IMHO в https://wiki.squid-cache.org/ConfigExamples/UbuntuTproxy4Wccp2 достаточно подробно расписана настройка iptables (там правда вариант c TPROXY а не с NAT)

vel ★★★★★ ()
Ответ на: комментарий от vel

Команда ip -4 a

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    inet 10.10.6.10/24 brd 10.10.6.255 scope global eth0
       valid_lft forever preferred_lft forever
6: wccp0@eth0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1476 qdisc noqueue state UNKNOWN group default qlen 1000
    inet 10.10.6.20/32 scope global wccp0
       valid_lft forever preferred_lft forever

Пересоздал gre с другим ip И поменял правило в iptables

*mangle
:PREROUTING ACCEPT [108100:15213599]
:INPUT ACCEPT [65580:11707652]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [54628:7738066]
:POSTROUTING ACCEPT [54628:7738066]
COMMIT
# Completed on Fri Jan 24 13:06:37 2020
# Generated by iptables-save v1.6.1 on Fri Jan 24 13:06:37 2020
*filter
:INPUT ACCEPT [53579:9971303]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [44133:6373468]
:LOGGING - [0:0]
-A INPUT -m limit --limit 3/min --limit-burst 3 -j LOG --log-prefix "Iptables: INPUT packet died: "
-A INPUT -j LOGGING
-A FORWARD -m limit --limit 3/min --limit-burst 3 -j LOG --log-prefix "Iptables: FORWARD packet died"
-A LOGGING -m limit --limit 2/min -j LOG --log-prefix "Iptables: "
COMMIT
# Completed on Fri Jan 24 13:06:37 2020
# Generated by iptables-save v1.6.1 on Fri Jan 24 13:06:37 2020
*nat
:PREROUTING ACCEPT [795:47065]
:INPUT ACCEPT [407:20633]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A PREROUTING -i wccp0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 10.10.6.20:3128

Для начала понять бы как работает с портом 80. А топом и SSL займусь. Нужен ли вообще MASQUERADE если на squid один сетевой интерфейс?

Aleksander_swmdx ()
Ответ на: комментарий от Aleksander_swmdx

Нужен ли вообще MASQUERADE если на squid один сетевой интерфейс?

Вообще, интерфейсов у тебя 3.

Для работы сквида маскарадинг точно не нужен.

Порт на который ты заворачиваешь http запросы должен быть c опцией transparent.

vel ★★★★★ ()
Ответ на: комментарий от Aleksander_swmdx

ответы squid-а на запросы пришедшие через gre должны уходить через gre. policy routing обычно решает эту проблему.

vel ★★★★★ ()
Ответ на: комментарий от vel

Разобрался немного с маршрутами в cisco.

Но я не могу понять почему когда я в конфиге squid.conf ставлю любой параметр так http_port 3128 transparent или http_port 3128 intercept то squid не стартует. Остальные параметры дефолтные. Вот так squid стартует http_port 3128

Что-то я не понимаю как это работает. Подскажите.

Aleksander_swmdx ()
Ответ на: комментарий от Aleksander_swmdx

В логах обычно видно сообщение об ошибке с подробностями.

Возможно «squid -k parse» поможет понять причину.

vel ★★★★★ ()
Ответ на: комментарий от Aleksander_swmdx

Потому, что в прозрачном режиме браузер не ожидает ответа с кодом 407

vel ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.