установка squid с доступом по группам в AD, squidGuard, lighttpd+lightsquid, sams2 в centos часть2
установка и настройка
https://unixwall.000webhostapp.com/настраиваем-squid-sams-для-работы-в-ad/
https://www.dmosk.ru/miniinstruktions.php?mini=sams2-squid
yum update
yum install mc htop ncdu wget curl nano nmap
yum install openssh-server
chkconfig --level 2345 sshd on
systemctl reload sshd.service
nano /etc/yum.conf
yum install epel-release
yum update
yum repolist
yum install yum-utils
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
curl -O http://rpms.remirepo.net/enterprise/remi-release-7.rpm
rpm -Uvh remi-release-7.rpm
nano /etc/squid/squid.conf
squid -k parse
squid -k reconfigure
service squid restart
yum install php php-mysql php-mbstring php-devel php-xml php-gd php-mcrypt
yum install -y mariadb mariadb-server mariadb-devel
yum install zip unzip
cd /root
wget https://github.com/PavelVinogradov/sams2/archive/master.zip
unzip master.zip
cd /root/sams2-master
make -f Makefile.cvs
sh ./configure
make
make install
find / -name httpd.conf
chown apache:apache /var/www
chown -R apache:apache /usr/local/share/sams2/
chown -R apache:apache /usr/local/etc/sams2.conf
chmod -R 777 /usr/local/share/sams2/
systemctl restart httpd
Web-интерфейс SAMS требует права на запись в каталог ./data
setenforce 0
установка dokuwiki centos php nginx
посмотреть конфиг без комментариев
sudo grep -v «^#» /etc/squid/squid.conf | sed -e ‘/^$/d’
nano /etc/squid/squid.conf
squid -k check
squid -k parse
squid -k reconfigure
systemctl restart squid
failed to open /var/run/squid.pid: (2) No such file or directory
sudo killall -9 squid
systemctl start squid
Explicit Proxy c авторизацией по AD Group + Interception Proxy с авторизацией по MAC
Удалим полученный ticket, который мы получили от сервера Kerberos
kdestroy
«Авторизация администратора SAMS » и ввести учетные данные по-умолчанию: пользователь admin , пароль qwerty
https://meliorem.ru/category/backend/mysql/
https://tproger.ru/translations/sql-recap/
mysql -usams2user -psams2password
SHOW DATABASES;
USE sams2db;
SHOW TABLES;
SELECT * FROM sgroup;
DELETE FROM sgroup WHERE s_group_id IN (8,9,10,11,12);
DELETE FROM sgroup WHERE s_group_id BETWEEN 10 and 248;
DELETE FROM shablon WHERE s_shablon_id BETWEEN 4 AND 246 AND s_shablon_id <> 8;
show processlist;
элементы и опции squid
http://www.bog.pp.ru/work/squid.html
http://rus-linux.net/MyLDP/FAQ/SQUID-FAQ/FAQ-10.html
Установка и настройка SQUID
Элементы ACL
- src: IP-адрес источника (клиент)
- dst: IP-адрес назначения (сервер)
- myip: локальный IP-адрес клиентского соединения
- srcdomain: имя домена источника (клиент)
- dstdomain: имя домена назначения (сервер)
- srcdom_regex: шаблон регулярного выражения источника (клиент)
- dstdom_regex: шаблон регулярного выражения назначения (сервер)
- time: время дня и день недели
- url_regex: шаблон регулярного выражения для URL
- urlpath_regex: шаблон регулярного выражения для части URL, исключая протокол и имя хоста
- port: номер порта назначения (сервер)
- myport: номер локального порта, куда подключается клиент
- proto: тип протокола передачи (http, ftp, etc)
- method: метод HTTP-запроса (get, post, etc)
- browser: шаблон регулярного выражения, совпадающего с заголовком user-agent из запроса
- ident: строка совпадения с именем пользователя
- ident_regex: шаблон регулярного выражения имени пользователя
- src_as: номер Автономной Системы источника (клиент)
- dst_as: номер Автономной Системы назначения (сервер)
- proxy_auth: аутентификация пользователя через внешний процесс
- proxy_auth_regex: регулярное выражение аутентификации пользователя через внешний процесс
- snmp_community: строка SNMP-сообщества
- maxconn: ограничение максимального кол-ва соединений с одного клиентского IP-адреса
- req_mime_type: шаблон регулярного выражения для заголовка content-type запроса
- arp: Ethernet (MAC)-адрес
Списки доступа
Существуют следующие типы списков доступа:
- http_access: разрешает доступ HTTP-клиентам (броузерам) к порту HTTP. Это основной тип списка контроля доступа.
- icp_access: разрешает братским кешам опрашивать ваш кеш по ICP.
- miss_access: разрешает определенным клиентам передавать cache misses через ваш кеш.
- no_cache: объявляет ответы, которые не должны кешироваться.
- redirector_access: контролирует, какие запросы должны пройти через процесс редиректора.
- ident_lookup_access: контролирует, какие запросы требуют Ident lookup.
- always_direct: контролирует, какие запросы всегда должны посылаться напрямую к серверу назначения.
- never_direct: контролирует, какие запросы никогда не должны посылаться напрямую к серверу назначения.
- snmp_access: контролирует доступ клиентов к кешу по SNMP.
- broken_posts: определяет запросы, для которых squid добавляет дополнительный CRLF после тел сообщений POST как того требуют некоторые неверно работающие сервера.
- cache_peer_access: контролирует, какие запросы должны быть переданы соседскому кешу (peer).
https://wiki.yola.ru/squid/squid
Выпуск трафика с разных IP-адресов
acl net1 src 10.1.1.0/24
acl net2 src 10.1.2.0/24
acl net3 src 10.1.3.1/32
tcp_outgoing_address ВНЕШНИЙ_IP_1 net1
tcp_outgoing_address ВНЕШНИЙ_IP_2 net2
tcp_outgoing_address ВНЕШНИЙ_IP_3 net3
tcp_outgoing_address ВНЕШНИЙ_IP_4
firewall-cmd
Создание мультизональных конфигураций межсетевого экрана с помощью Firewalld
Firewalld, установка и настройка, зоны, NAT, проброс портов
Использование ipset во встроенном брандмауэре CentOS 7
vpn pptp centos7
netstat -tulpn
firewall-cmd --zone=public --remove-port=443/tcp --permanent
firewall-cmd --zone=public --remove-port=80/tcp --permanent
firewall-cmd --zone=public --remove-port=22/tcp --permanent
firewall-cmd --zone=public --remove-service=dhcpv6-client --permanent
firewall-cmd --zone=public --add-service=ssh --permanent
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --zone=public --add-service=https --permanent
firewall-cmd --zone=public --add-port=3128/tcp --permanent
firewall-cmd --reload
firewall-cmd --zone=public --list-ports
firewall-cmd --zone=public --list-services
firewall-cmd --zone=external --list-ports
firewall-cmd --zone=external --list-services
firewall-cmd --zone=external --change-interface=enp3s0 --permanent
firewall-cmd --zone=external --remove-service=ssh --permanent
firewall-cmd --get-active-zones
firewall-cmd --zone=external --list-services
firewall-cmd --list-all
firewall-cmd --get-services
systemctl restart firewalld
http://fliplinux.com/ip-cen.html
«белый список»
firewall-cmd --permanent --zone=public --add-source=192.168.100.0/24
firewall-cmd --permanent --zone=public --add-source=192.168.222.123/32
firewall-cmd --permanent --new-ipset=IP-users --type=hash:net
firewall-cmd --ipset=IP-servers --add-entry=192.168.0.0/24 --permanent
firewall-cmd --ipset=IP-servers --add-entry=192.168.200.12 --permanent
firewall-cmd --ipset=IP-servers --add-entry=192.168.200.200 --permanent
firewall-cmd --ipset=IP-servers --remove-entry=192.168.20.0/24 --permanent
firewall-cmd --ipset=IP-servers --get-entries
firewall-cmd --permanent --zone=public --add-rich-rule='rule source ipset="IP-servers" service name="ssh" accept'
firewall-cmd --remove-rich-rule='rule source ipset=IP-users service name="http" drop' --permanent
firewall-cmd --permanent --zone=public --list-rich-rules
чтобы все пользователи (список ipset IP-users) ходили через squid несмотря на net.ipv4.ip_forward=1
firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i enp3s0 -o enp1s0 -m set --match-set IP-servers src -j ACCEPT
firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i enp1s0 -o enp3s0 -m set --match-set IP-servers src -j ACCEPT
firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i enp3s0 -o enp1s0 -j DROP
firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i enp1s0 -o enp3s0 -j DROP
открыть Google Play
firewall-cmd --zone=public --add-port=5228/tcp --permanent
firewall-cmd --zone=external --add-port=5228/tcp --permanent
firewall-cmd --reload
systemctl restart firewalld
iptables -S
cat /etc/firewalld/direct.xml
рабочий вариант
https://wiki.archlinux.org/index.php/Active_Directory_Integration_(Русский)
/etc/sysconfig/network-scripts/
во внутренней сетевой карте не указываем GATEWAY (шлюзом будет внешняя карта)
nano /etc/NetworkManager/NetworkManager.conf
[main]
dns=none
#plugins=ifcfg-rh,ibft
nano /etc/resolv.conf
# Generated by NetworkManager
search domain.office.local
nameserver 172.16.0.1 # (dns внутренней карты)
nameserver 172.16.0.3
nameserver xxx.xxx.xxx.xxx (dns с внешней сетевой карты напр с enp3s0)
systemctl restart NetworkManager.service
nslookup serv1.domain.office.local
yum -y install squid - установка squid
systemctl start squid - запустить
systemctl enable squid - вкл авто запуск
squid -z - создаем структуру папок под кэш следующей командой
/etc/krb5.conf
realm discover domain.office.local
Получаем тикет пользователя, имеющего права администратора домена.
kinit -V Administrator@DOMAIN.OFFICE.LOCAL
вводим в домен
realm join -U adminuser domain.office.local # adminuser - администратор в AD
в командной строке на контроллере домена создаём файл ключа
ktpass -princ HTTP/myproxy123.domain.office.local@DOMAIN.OFFICE.LOCAL -mapuser DOMAIN\squid -pass "password123" -ptype KRB5_NT_SRV_HST -out C:\myproxy123.keytab
https://docs.microsoft.com/ru-ru/windows-server/administration/windows-commands/ktpass
- KRB5_NT_PRINCIPAL является общим типом участника (рекомендуется).
- KRB5_NT_SRV_INST является экземпляром службы пользователя.
- KRB5_NT_SRV_HST является экземпляром службы узла
net ads keytab flush - очистить кейтаб
net ads keytab create - создать кейтаб
net ads keytab add HTTP - добавим принципал HTTP для прокси или веб сервера
net ads keytab list - посмотрим что получилось
kdestroy - очистим все прошлые попытки логона.
kinit -V -k -t /etc/krb5.keytab HTTP/sq.mydomain.name@MYDOMAIN.NAME
копируем в /etc/myproxy123.keytab и проверяем
kinit -V -k -t /etc/myproxy123 HTTP/myproxy123.domain.office.local@DOMAIN.OFFICE.LOCAL
выставляем права
chown squid:squid /etc/myproxy123.keytab
chmod u+rwx,g+rx /etc/myproxy123.keytab
если забыл пароль пользователя, то можно проверить так:
Есть ли аналог SU для Windows
Для локального аккаунта
runas /profile /user:computernamehere\username cmd
Для учетной записи домена
runas /profile /user:domainname\username cmd
runas /profile /user:username@domainname cmd
проверка
wbinfo -t
wbinfo -g
wbinfo -u
/usr/lib64/squid/basic_ldap_auth -b 'dc=domain,dc=office,dc=local'
getent passwd
getent group
net ads info
net ads lookup
net ads status -U administrator | less
klist -k /etc/krb5.keytab
Удалим полученный билет командой:
kdestroy
echo test1234 inet-users | /usr/lib64/squid/ext_wbinfo_group_acl
OK
id test1234
uid=16777893(test1234) gid=16777216(пользователи домена) группы=16777216(пользователи домена),...,16777248(inet-users),...
/usr/bin/ntlm_auth --username=test1234
Password:
NT_STATUS_OK: The operation completed successfully. (0x0)
проверка ext_kerberos_ldap_group_acl
/usr/lib64/squid/ext_kerberos_ldap_group_acl -a -d -i -g InetUsers -D DOMAIN.OFFICE.LOCAL
/usr/lib64/squid/ext_kerberos_ldap_group_acl -d -a -i -g InetUsers@DOMAIN.OFFICE.LOCAL -D DOMAIN.OFFICE.LOCAL
ошибка
kerberos_ldap_group: ERROR: Error while starting keytab scan : Key table file '/etc/krb5.keytab' not found
лечение
ln -s /etc/myproxy123.keytab /etc/krb5.keytab
Для автоматической аутентификации через Squid, необходимо внести следующие изменения - добавляем в файл /etc/sysconfig/squid строки
KRB5_KTNAME=/etc/myproxy123.keytab
export KRB5_KTNAME
и отключаем replay-кэш (для снижения нагрузок)
KRB5RCACHETYPE=none
export KRB5RCACHETYPE
/etc/sysconfig/squid
добавить в /etc/squid/squid.conf
ext_kerberos_ldap_group_acl тоже работает, но нужно поставить параметр ipv4
Настройка squid или как не купить платное решение
children — максимальное количество процессов доступные для запуска, startup количество процессов которые запущены всегда, idle максимальная очередь к помощнику при превышении указанного числа будет запускаться новый процесс помощника.
squid -k check
squid -k parse
squid -k reconfigure
systemctl restart squid
failed to open /var/run/squid.pid: (2) No such file or directory
sudo killall -9 squid
systemctl start squid
ошибки и логи
1. access.log - для записи запросов клиентов;
2. store.log - для записи действий с кэшем;
3. cache.log - для записи ошибок возникающих при работе с Squid.
tail -f /var/log/squid/cache.log
tail -f /var/log/squid/access.log
Чистим кэш Squid
grep cache_dir /etc/squid/squid.conf
service squid stop
rm -r /var/spool/squid/*
squid -z
service squid start
/etc/sysctl.conf
net.ipv4.ip_forward=0 - иначе можно будет ходить мимо squid (прописать роутинг и выставить "без прокси")
sudo sysctl -p
sudo sysctl --system
На клиентских машинах адрес прокси сервера должен быть указан в FQDN-формате (myproxy123.domain.office.local)
squidGuard
http://squidguard.mesd.k12.or.us/
https://itzx.ru/linux/install-squidguard-db4-from-source
/etc/squid/squid.conf
проверка работы прокси на admin server и kassa
curl --proxy 172.16.0.123:3128 check-host.net/ip
$ export http_proxy="http://ЛОГИН:ПАРОЛЬ@ПРОКСИ_СЕРВЕР:ПОРТ"
$ export https_proxy="https://ЛОГИН:ПАРОЛЬ@ПРОКСИ_СЕРВЕР:ПОРТ"
$ export ftp_proxy="http://ЛОГИН:ПАРОЛЬ@ПРОКСИ_СЕРВЕР:ПОРТ"
Если прокси без авторизации, то строки должны быть вида:
$ export <бла-бла>_proxy="http://ПРОКСИ_СЕРВЕР:ПОРТ"
$ export {http,https,ftp}_proxy="http://ПРОКСИ_СЕРВЕР:ПОРТ"
$ unset {http,https,ftp}_proxy
для отключения прокси:
$ unset http_proxy
$ unset https_proxy
$ unset ftp_proxy
nano /etc/environment
https_proxy="https://user:pass@proxy:port/"
http_proxy="http://user:pass@proxy:port/"
ftp_proxy="ftp://user:pass@proxy:port/"
socks_proxy="socks://user:pass@proxy:port/"
no_proxy="localhost,127.0.0.1,::1,*.my.lan
Если прокси без авторизации, то строки должны быть вида:
<бла-бла>_proxy="https://proxy:port/"
yum install squidGuard
nano /etc/squid/squidGuard.conf
https://github.com/StevenBlack/hosts
https://someonewhocares.org/hosts/hosts
https://adaway.org/hosts.txt
http://www.squidguard.org/blacklists.html
http://squidguard.mesd.k12.or.us/blacklists.tgz
http://www.shallalist.de/
http://www.shallalist.de/Downloads/shallalist.tar.gz
https://raw.githubusercontent.com/zapret-info/z-i/master/nxdomain.txt
wget http://www.shallalist.de/Downloads/shallalist.tar.gz
tar -xvf shallalist.tar.gz
mkdir -p /var/squidGuard/BL/manual/
nano /var/squidGuard/BL/manual/domains
nano /var/squidGuard/BL/manual/urls
из blacklists.tgz скопировать каталог suspect в каталог BL (иначе при преобразовании в БД выдаст ошибку)
squidGuard -b -d -C all
chown -R squid:squid /var/squidGuard
chown root:squid /etc/squid/squidGuard.conf
chmod 0640 /etc/squid/squidGuard.conf
chown -R squid:squid /var/log/squidGuard
протестируем SquidGuard, прежде, чем объединять его со Squid:
# echo "http://www.porno.com / - - GET" | squidGuard -d
в /etc/squid/squid.conf Добавляем:
url_rewrite_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf
squid -k reconfigure
systemctl restart squid
логи
tail -f /var/log/messages
tail -f /var/log/squidGuard/squidGuard.log
squid -k rotate # очистить логи
если не применяет правила, то отключить Selinux ()
sestatus
временно
setenforce 0
постоянно
nano /etc/selinux/config
#SELINUX=enforcing
SELINUX=disabled
reboot
Изменение записей в списках доменов и URL
Пример. Рядом с файлом domains.db в папке /var/lib/squiguard/db/webmail создаём файл domains.diff. В него заносим строку или несколько строк, по одной на каждую запись:
-google.com (что означает вычеркнуть этот домен из базы)
или +google.com (что означает добавить этот домен в базу)
Даём команды:
$ squidGuard -u (обновить базы db из файлов diff. В логах squidguard'а можно посмотреть сколько добавилось/убылось.)
$ squid -k reconfigure (перечитать настройки без перезапуска.)
Файл domains.diff удалять, или стирать из него записи, не надо. При глобальном обновлении баз этот файл ещё пригодится. И при многократном обновлении не происходит дублирования записей в БД.
Webmin
sudo rpm --import http://www.webmin.com/jcameron-key.asc
sudo yum install webmin
sudo chkconfig webmin on