Настройка CentOS 6.7 в качестве прокси-сервера Squid: Как я могу решить эту проблему?

1358
Anoma

Я использую ПК под управлением CentOS 6.7 с двумя сетевыми картами (eth0 и eth1) в качестве прокси-сервера Squid. eth0 (красный интерфейс / 192.168.0.2/24) физически связан с маршрутизатором (192.168.0.1/24), а eth1 (зеленый интерфейс / 192.168.1.1/24) подключен к локальной сети.

eth0: Connect automatically Method = Manual  Address = 192.168.0.2  Mask = /24  GW = 192.168.0.1 DNS = 8.8.8.8, 8.8.4.4  eth1: Connect automatically Method = Manual  Address = 192.168.1.1  Mask = /24  GW = 192.168.0.2 DNS = 8.8.8.8, 8.8.4.4 

При настройке блока CentOS в качестве прокси-сервера я выполнил следующие настройки:

  1. Обновил ням и установил Squid

  2. отредактировал файл /etc/squid/squid.conf, как показано ниже:

    #
    # Рекомендуемая минимальная конфигурация:
    #
    acl manager proto cache_object
    acl localhost src 127.0.0.1/32 :: 1
    acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 :: 1

    # Пример правила, разрешающего доступ из ваших локальных сетей.
    # Адаптировать для перечисления ваших (внутренних) IP-сетей, откуда
    должен быть разрешен просмотр #
    #acl localnet src 10.0.0.0/8 # RFC1918 возможная внутренняя сеть
    #acl localnet src 172.16.0.0/12 # RFC1918 возможная внутренняя сеть

    acl localnet src 192.168.1.0/24 # RFC1918 возможная внутренняя сеть

    #acl localnet src fc00 :: / 7 # RFC 4193 диапазон локальной частной сети
    #acl localnet src fe80 :: / 10 # RFC 4291 локальные (напрямую подключенные) машины
    .
    ,
    . (другие строки остались прежними)

  3. Запустил прокси Squid:

    # служба запуска squid # chkconfig squid on

  4. Отредактировал файл /etc/sysctl.conf следующим образом

    net.ipv4.ip_forward = 1

  5. Отредактировал файл / etc / sysconfig / iptables-config

    Изменено «нет» на «да» в следующих строках: И сохранено

    IPTABLES_SAVE_ON_STOP = "да" IPTABLES_SAVE_ON_RESTART = "да"

  6. Изменены правила в iptables следующим образом:

    # iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    # iptables -t filter -D INPUT -j REJECT --reject-with icmp-host-запрещено
    # iptables -t filter -D ВПЕРЕД -j REJECT --reject- с icmp-host-
    closed # iptables -t filter -A INPUT -p tcp --dport 3128 -j ПРИНЯТЬ
    # iptables -A INPUT -j REJECT - отклонить с icmp-host-запрещено
    # iptables -A ВПЕРЕД -i eth1 -p tcp --dport 443 -d www.facebook.com -j DROP
    # iptables -A ВПЕРЕД -i eth1 -p tcp --dport 443 -d www.youtube.com -j DROP

    # сервис iptables save
    # chkconfig iptables на
    # сервис iptables restart

  7. Установил dhcp сервер (ням установить dhcp)

  8. Отключил Селинукс:

    # setenforce 0
    # vim / etc / sysconfig / selinux and chandge;
    SELINUX = принуждение к
    SELINUX = отключено

  9. Отредактировал файл / etc / sysconfig / dhcpd и добавил;

    DHCPDARGS = eth1

  10. Отредактировал файл /etc/dhcp/dhcpd.conf следующим образом:

    # Файл конфигурации DHCP-сервера.
    # см. /usr/share/doc/dhcp*/dhcpd.conf.sample
    # see 'man 5 dhcpd.conf'
    #
    authoritative;
    подсеть 192.168.1.0 маска сети 255.255.255.0 {
    диапазон 192.168.1.50 192.168.1.220;
    опция доменных имен-серверов 8.8.8.8, 8.8.4.4;
    # option domain-name "centos.local"
    опция маршрутизаторы 192.168.1.1;
    опция широковещательного адреса 192.168.1.255;
    время аренды по умолчанию 600;
    максимальное время аренды 7200;
    }

  11. Запустил dhcp сервер

    # service dhcpd start
    # chkconfig dhcpd on

  12. После добавления фильтрующих сайтов / правил / расширений файлов в
    . A.) /Etc/squid/acls.txt
    b.) /Etc/squid/adult.txt и
    c.) /Etc/squid/badsites.txt я изменил / Файл etc / squid / squid.conf:

    ,
    . (Выше правила, как в шаге 2)
    .
    #
    # ВСТАВЬТЕ СВОЕ СОБСТВЕННОЕ ПРАВИЛО (И) ЗДЕСЬ, ЧТОБЫ РАЗРЕШИТЬ ДОСТУП К ВАШИМ КЛИЕНТАМ
    #
    visible_hostname cetos-server.local
    acl social dstdomain -i "/etc/squid/acls.txt"
    acl badsites dstdomain -i "/ etc / squid / badsites .txt "
    acl adult url_regex -i" /etc/squid/adult.txt "
    acl нерабочее время SMTWHFS 18: 00-23: 59
    acl нерабочее время SMTWHFS 00: 00-06: 00

    http_access отрицать неработающие
    http_access отрицать социальные
    http_reply_access отрицать злоумышленники
    http_reply_access отрицать взрослых

    # Мы рекомендуем вам использовать по крайней мере следующую строку.
    ierarchy_stoplist cgi-bin?

    # Раскомментируйте и настройте следующее, чтобы добавить каталог кеша диска.
    cache_dir ufs / var / spool / squid 10240 16 256
    .
    . (Другие правила не были изменены)

  13. Перезапущенный squid, dhcpd и iptables:

    # chkconfig squid on
    # service перезапуск squid

    # chkconfig iptables на
    # service iptables restart

    # chkconfig dhcpd on
    # service dhcpd restart

Как только это сделано, прокси работает очень хорошо. Ни один ПК в локальной сети не может получить доступ к Интернету без прохождения через прокси-сервер (192.168.1.1 Порт: 3128).

НО,

Проблема:
после перезапуска компьютера CentOS, хотя все вышеперечисленные конфигурации все еще присутствуют, а Squid, DHCP и iptables работают правильно (так как они работали до перезагрузки компьютера), теперь ПК в моей локальной сети может получить доступ к Интернет без настроек прокси добавляются на этот компьютер. (Например, ПК с 192.168.1.155/24 может выходить в Интернет без добавления IP-адреса и порта прокси-сервера в настройках системного прокси.)

Не могли бы вы помочь мне исправить эту проблему?

Спасибо.

1
Как я вижу из вашей конфигурации Iptables, ничто не мешает пересылать ваши пакеты напрямую между интерфейсами, если вашей политикой FORWARD по умолчанию является ACCEPT. Также удалите строку «** GW = 192.168.0.2 **» из вашей конфигурации eth1. Может быть, вам лучше использовать прозрачный прокси, чтобы избавиться от настройки ваших клиентских компьютеров. Таким образом, вы автоматически перенаправляете любые запросы http на порт прокси. Oleg Bolden 8 лет назад 0
Ваши блоки Youtube и Facebook не эффективны. Вы не можете блокировать подключения к CDN, как это. И вы, вероятно, не хотите полностью блокировать Google, поэтому вам придется использовать HTTPS-перехват. Daniel B 8 лет назад 0

1 ответ на вопрос

0
Anoma

Thank you very much. I removed the Gateway IP in eth1. Also I changed the iptables rules.

  1. First I cleaned the all iptable rules.

    # iptables -F
    # iptables -X
    # iptables -t nat -F
    # iptables -t nat -X
    # iptables -t mangle -F
    # iptables -t mangle -X

    1. And then added the following rules:

      # modprobe ip_conntrack
      # modprobe ip_conntrack_ftp
      # iptables -P INPUT DROP
      # iptables -P OUTPUT ACCEPT
      # iptables -A INPUT -i lo -j ACCEPT
      # iptables -A OUTPUT -o lo -j ACCEPT
      # iptables -A INPUT -i $INTERNET -m state --state ESTABLISHED,RELATED -j ACCEPT
      # iptables --table nat --append POSTROUTING --out-interface $INTERNET -j MASQUERADE
      # iptables --append FORWARD --in-interface $LAN_IN -j ACCEPT
      # iptables -A INPUT -i $LAN_IN -j ACCEPT
      # iptables -A OUTPUT -o $LAN_IN -j ACCEPT
      # iptables -t nat -A PREROUTING -i $LAN_IN -p tcp --dport 80 -j DNAT --to $SQUID_SERVER:$SQUID_PORT
      # iptables -t nat -A PREROUTING -i $INTERNET -p tcp --dport 80 -j REDIRECT --to-port $SQUID_PORT
      # iptables -A INPUT -j LOG
      # iptables -A INPUT -j DROP

  2. In addition to this to block YouTube and Facebook I diverted the incoming requests for www.youtube.com and www.facebook.com from port 443 to squid server (that is 192.168.1.1:3128) (As mentioned bellow). Here, as I have already blocked the above 2 sites with in the squid proxy now no one within the LAN can access the above 2 sites.

    # iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 443 -d www.facebook.com -j DNAT --to 192.168.1.1:3128

    # iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 443 -d www.youtube.com -j DNAT --to 192.168.1.1:3128

Now the proxy server works fine.