Мультипрокси на базе Debian и SQUID с прозрачной доменной аутентификацией

от автора

Поднимаем прокси сервер Squid, слушающий несколько портов. На каждый порт свой канал связи или внешний IP. Мануалов и статеек в интернетах полно, но общей сконсолидированной увы нет, решил поделиться.

Начнем.

Используется Debian 7.8, Samba 4, Squid 3, Kerberos 5.

Базовая настройка

1. Устанавливаем ОС, настраиваем сетевые интерфейсы:

nano /etc/network/interfaces && /etc/init.d/networking restart 

2. Обновляем пакеты с помощью двух команд:

# apt-get update && apt-get upgrade

3. Поскольку вводим машину в домен, устанавливаем необходимые для этого пакеты:

# aptitude install krb5-user samba winbind libpam-krb5 libpam-winbind libnss-winbind 

4. Меняем настройки DNS в файле /etc/resolv.conf:

domain EXAMPLE.RU search EXAMPLE.RU nameserver 192.168.1.6 

5. Задаем имя машины в /etc/hostname:
Кроме того необходимо отредактировать файл /etc/hosts так, чтобы в нём была запись с полным доменным именем компьютера и обязательно коротким именем хоста, ссылающаяся на один из внутренних IP.

6. Сразу проверяем доступность контроллера домена:
# ping domaincontroller
# ping domaincontroller.EXAMPLE.RU

7. Далее необходимо настроить синхронизацию времени с контроллером домена. Если разница будет более 5 минут мы не сможем получить тикет от Kerberos. Для разовой синхронизации можно использовать команду:

# net time set domaincontroller 

Так же, если в сети присутствует сервер точного времени, можно настроить синхронизацию с него:

# ntpdate 192.168.1.3 

Настройка авторизации через Kerberos

1. В первую очередь правим файл /etc/krb5.conf. Нашем случае он выглядит так:

  default_realm = EXAMPLE.RU       kdc_timesync = 1       ccache_type = 4       forwardable = true       proxiable = true       v4_instance_resolve = false       v4_name_convert = {       host = {                rcmd = host                ftp = ftp              }               plain = {                         something = something-else                       }              }       fcc-mit-ticketflags = true    [realms]       EXAMPLE.RU = {                kdc = domaincontroller                admin_server = domaincontroller                default_domain = EXAMPLE.RU               }    [domain_realm]        .example.ru = EXAMPLE.RU        example.ru = EXAMPLE.RU    [login]        krb4_convert = false        krb4_get_tickets = false 

2. Проверяем, что мы можем авторизоваться в домене:

# kinit test_user@EXAMPLE.RU 

Если все прошло без ошибок, значит все верно и доменконтроллер выдает нам тикет Kerberos. Проверить тикеты можно командой # klist

2.a. Распространенные ошибки Kinit:

kinit(v5): Clock skew too great while getting initial credentials

Это значит, что у нашей машины не синхронизировано время с контроллером домена.

kinit(v5): Preauthentication failed while getting initial credentials

Введен неверный пароль.

kinit(v5): KDC reply did not match expectations while getting initial credentials

Скорее всего, стоит проверить файл krb5.conf и убедиться, что realm и домен в команде kinit были указаны в верхнем регистре.

kinit(v5): Client not found in Kerberos database while getting initial credentials

Пользователя в домене не существует.

Настройка Samba и ввод машины в домен

1. Для входа в домен нужно правильно настроить Samba. Настройки хранятся в /etc/samba/smb.conf:

  [global]       dos charset = cp866       unix charset = KOI8-R       workgroup = EXAMPLE (прописными)       realm = EXAMPLE.RU (прописными)       server string = SQUID-PROXY       security = ADS       auth methods = winbind       allow trusted domains = No       password server = *       log level = 1       log file = /var/log/samba/samba.%m       max log size = 50       time server = Yes       socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192       os level = 0       preferred master = No       local master = No       domain master = No       dns proxy = No       ldap ssl = no       winbind use default domain = Yes       strict locking = No       client NTLMv2 auth = Yes       client lanman auth = No       client plaintext auth = No       winbind enum users = Yes       winbind enum groups = Yes       winbind refresh tickets = Yes       encrypt passwords = yes 

2. Проверяем конфигурацию:

# testparm Load smb config files from /etc/samba/smb.conf Loaded services file OK. Server role: ROLE_DOMAIN_MEMBER Press enter to see a dump of your service definitions 

3. Правим файл /etc/nsswitch.conf следующим образом:

  #cat /etc/nsswitch.conf   passwd:         compat winbind   group:          compat winbind   shadow:         compat winbind      hosts:          files dns   networks:       files      protocols:      db files   services:       db files   ethers:         db files   rpc:            db files    netgroup:       nis 

4. Поcле редактирования /etc/samba/smb.conf, перезапускаем Samba и Winbind:

  # /etc/init.d/winbind stop && /etc/init.d/samba restart && /etc/init.d/winbind start 

5. Вводим машину в домен:

  # net ads join -U test_user -D EXAMPLE .RU   Enter test_user's password:   Using short domain name -- EXAMPLE    Joined 'Multiproxy' to realm 'EXAMPLE ' 

6. Проверяем, видит ли Samba пользователей и группы домена

  # wbinfo -u   # wbinfo -g 

Установка и настройка SQUID 3

1. Устанавливаем пакет SQUID 3:

  # apt-get install squid3 

2. Настраиваем SQUID с помощью файла /etc/squid3/squid.conf:

<listen_ip> - IP-адрес прокси  <listen_port> - Порт прокси <acl_name> - Имя для правила <outgoing_ip> - IP-адрес для правила   http_port <listen_ip>:<listen_port>   http_port <listen_ip>:<listen_port>   cache_access_log /var/log/squid3/access.log   acl localhost src 127.0.0.1/32   acl god_mode src 192.168.1.0/24   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   # NTLM   auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp   auth_param ntlm children 5   auth_param ntlm keep_alive off   acl AuthorizedUsers proxy_auth REQUIRED   acl <acl_name> myport <listen_port>   tcp_outgoing_address <outgoing_ip> <acl_name>   http_access allow localhost   http_access deny !Safe_ports   http_access allow all AuthorizedUsers   http_access deny all   icp_access deny all   cache_mgr test_user@EXAMPLE.RU   visible_hostname MultiProxy 

Настройка маршрутизации

1. Создаем виртуальные интерфейсы:

/etc/network/interfaces auto eth0:1 iface eth0:1 inet static         address xxx.xxx.xxx.xx1         netmask xxx.xxx.xxx.xxx auto eth0:2 iface eth0:2 inet static         address xxx.xxx.xxx.xx2         netmask xxx.xxx.xxx.xxx 

2. Создаем таблицу маршрутизации, добавляем новые таблицы в /etc/iproute2/rt_tables, номер берется из головы, но не дублирующийся:

257     <table_name2> 256     <table_name1> 

3. Добавляем правила для наших таблиц:

ip route add 192.168.1.0/24 dev eth0  proto kernel  scope link  src <local_ip> table table_name1 ip route add default gw <gateway_ip1> table table_name1 ip route add 192.168.1.0/24 dev eth0  proto kernel  scope link  src <local_ip> table table_name2 ip route add default gw <gateway_ip2> table table_name2 ip rule add from xxx.xxx.xxx.xx1 table table_name1 ip rule add from xxx.xxx.xxx.xx2 table table_name2 ip route flush cache 

ссылка на оригинал статьи http://habrahabr.ru/post/265213/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *