среда, 3 июня 2015 г.

Интернет шлюз на базе Squid3 работающего в прозрачном режиме (с ssl-bump) с авторизацией по ip + HAVP + ClamAV + Sams2 + Webmin + NTLM + iptables

Здравствуйте друзья, сегодня я расскажу как сделать прозрачный шлюз на основе кэширующего прокси сервера Squid3.

Суть задачи:
1) Обеспечить доступ в интернет для 150+ компьютеров организации.
2) Сделать это максимально просто для конечных пользователей.
3) Обеспечить максимально безопасный доступ в интернет. Именно поэтому весь трафик будет проверяться на вирусы.
4) Так как ранее применялась NTLM авторизация - выполнить гибридную систему NTLM+ip авторизация, чтобы в дальнейшем всех пользователей перевести на новую систему с ip авторизацией.

Итак, я написал скрипт, с помощью которого развернуть полноценную систему доступа в интернет можно будет за очень короткое время.
Данная конфигурация собиралась под Debian 8 x64.

Сервер имеет 2 сетевые карты
eth0 - подключена к интернету и имеет адрес 10.10.0.2/30
eth1 - подключена к локальной сети и имеет адрес 192.168.0.1/24

Итак, для начала нужно настроить сетевые интерфейсы таким образом, чтобы маршрут по умолчанию (шлюз) был на интерфейсе eth0:
приводим к следующему виду: cat /etc/network/interfaces
allow-hotplug eth0
allow-hotplug eth1
iface eth0 inet static
        address 10.10.0.2
        netmask 255.255.255.252
        network 10.10.0.0
        broadcast 10.10.0.3
        gateway 10.10.0.1
      
iface eth1 inet static
        address 192.168.0.1
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.254
        dns-nameservers 8.8.8.8
        dns-search domain.ru
Далее все команды будем выполнять из под рута. Переходим в режим суперпользователя с помощью команды su и вводим пароль рута:
$ su
Password:
Теперь несколько констант, которые будут упрощать дальнейший код. Здесь необходимо указать путь до вашего FPT сервера, если вы хотите чтобы скрипт автоматически скачивал все нужные в процессе файлы, можете пропустить этот пункт и создавать необходимые файлы вручную:
FTP_PATH='ftp://ftp_login:ftp_passwd@youre.ftp.server/Path_to_configs'
ADMIN_LOGIN_FOR_DC_JOIN='administrator'
ADMIN_DC_PSW='administrator_psw'
IP_ADDRESS_OF_PROXY='ip_of_youre_proxy'
IP_OF_DC='ip_of_domain_controller'
DOMAIN_SM='domain.ru'
NTP_SERVER='ntp_server_domain_name_or_ip'
DOMAIN='DOMAIN'
DOMAIN_RU='DOMAIN.RU'
LOC_HOST='newproxy'
LOC_HOST_FULL='newproxy.domain.ru'
SAMSDB_PASS='sams_pass'
Сами файлы конфигурации можно скачать ЗДЕСЬ
Добавляем маршруты. Предпологается, что в локальной сети несколько подсетей, а именно 192.168.10.0/24 и 192.168.20.0/24. Нужно чтобы они добавлялись каждый раз при загрузке Debian:
echo '#! /bin/sh
route add -net 192.168.10.0 netmask 255.255.255.0 gw 192.168.0.1
route add -net 192.168.20.0 netmask 255.255.255.0 gw 192.168.0.1
exit 0' > /etc/network/if-up.d/routes_add

echo '#! /bin/sh
route del -net 192.168.10.0 netmask 255.255.255.0 gw 192.168.0.1
route del -net 192.168.20.0 netmask 255.255.255.0 gw 192.168.0.1
exit 0' > /etc/network/if-down.d/routes_delete

chmod +x /etc/network/if-up.d/routes_add
chmod +x /etc/network/if-down.d/routes_delete
/etc/init.d/networking restart
Обновляемся:
apt-get -q -y update
apt-get -q -y upgrade
apt-get -q -y dist-upgrade
Устанавливаем все необходимое:
apt-get -q -y install mc ntp squid3 winbind samba krb5-user havp clamav ssl-cert libpcre3 libpcre3-dev apache2 apache2-doc  
apt-get -q -y install mysql-server mysql-client libmysqlclient-dev apache2 apache2-mpm-prefork apache2-doc php5 libapache2-mod-php5 
apt-get -q -y install php5-cli php5-common php5-mysql php5-gd php5-ldap php-fpdf mysql-server mysql-client libmysqlclient15off 
apt-get -q -y install libpcre3 libpcre3-dev make php5 php5-cli php5-common php5-dev php5-mcrypt php5-imagick php5-mysql 
apt-get -q -y install php5-gd php5-ldap php-fpdf libapache2-mod-php5 apache2-utils
apt-get -q -y install make g++ libtool build-essential autoconf automake ssl-cert apache2 apache2-doc apache2-utils 
apt-get -q -y install mysql-server mysql-client libmysqlclient-dev libpcre3 libpcre3-dev php5 php5-cli php5-common 
apt-get -q -y install php5-dev php5-mcrypt php5-imagick php5-mysql php5-gd php5-ldap php-fpdf libapache2-mod-php5 libldap2-dev
Устанавливаем Webmin, с помощью которого будем контролировать iptables (и не только):
echo '
deb http://download.webmin.com/download/repository sarge contrib
deb http://webmin.mirror.somersettechsolutions.co.uk/repository sarge contrib
' >> /etc/apt/sources.list
mkdir ~/downloads
cd ~/downloads
wget http://www.webmin.com/jcameron-key.asc
apt-key add jcameron-key.asc
apt-get update
apt-get install perl libnet-ssleay-perl openssl libauthen-pam-perl libpam-runtime libio-pty-perl apt-show-versions python
apt-get install webmin
Предварительные настройки hosts:
mv /etc/hosts /etc/hosts.BACK
echo "
127.0.0.1       localhost
$IP_ADDRESS_OF_PROXY      $LOC_HOST_FULL      $LOC_HOST
" >> /etc/hosts

mv /etc/resolv.conf /etc/resolv.conf.BACK
echo "
search $DOMAIN_SM
nameserver $IP_OF_DC
" >> /etc/resolv.conf
Включаем маршрутизацию пакетов, чтобы наш прокси выполнял функции маршрутизатора:
echo "
net.ipv4.ip_forward = 1
net.ipv4.conf.default.rp_filter = 0
net.ipv4.conf.all.rp_filter = 0
" >> /etc/sysctl.conf
echo "1" > /proc/sys/net/ipv4/ip_forward
Настраиваем логирование всего, что делает в командной строке пользователь (в том числе root), лог будет храниться в /var/log/commands.log (полезная штука):
mkdir ~/downloads
cd ~/downloads
wget $FTP_PATH/bash_logging/string.txt
cat string.txt >> /etc/bash.bashrc
touch /etc/rsyslog.d/bash.conf
touch /var/log/commands.log
echo "local6.*    /var/log/commands.log" >> /etc/rsyslog.d/bash.conf
/etc/init.d/rsyslog restart
Теперь все команды будут вписываться в лог после переподключения
Если вы вручную вводите данные, и не пользуйтесь теми файлами, что я предоставил вначале, то для вас содержимое /etc/bash.bashrc должно дополнится следующей строчкой:
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local6.debug "$(whoami) [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'
Настраиваем временную зону (в моем случае это Екатеринбург, у вас вероятнее всего своя):
cp /usr/share/zoneinfo/Asia/Yekaterinburg /etc/localtime
Настраиваем NTP:
mv /etc/ntp.conf /etc/ntp.conf.BACK
echo "
driftfile /var/lib/ntp/ntp.drift
statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable
restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery
restrict 127.0.0.1
restrict ::1
#server
server $NTP_SERVER
" >> /etc/ntp.conf

/etc/init.d/ntp restart
/etc/init.d/rsyslog restart
Настраиваем Samba:
mv /etc/samba/smb.conf /etc/samba/smb.conf.BACK
echo "
[global]
        workgroup = $DOMAIN
        netbios name = $LOC_HOST
        server string = $DOMAIN Proxy
        log file = /var/log/samba/log.%m
        max log size = 50
        log level = 3
        #hosts allow = 192.168.0.0/24 127.0.0.1
        #map to guest = bad user
        realm = $DOMAIN_SM
        nt acl support = yes
        nt status support = yes

        security = ads
        auth methods = winbind
        password server = $IP_OF_DC
        encrypt passwords = yes
        winbind separator = +
        winbind uid = 10000-20000
        winbind gid = 10000-20000
        winbind enum groups = yes
        winbind enum users = yes
        socket options = TCP_NODELAY SO_RCVBUF=16384 SO_SNDBUF=16384
        #interfaces = 192.168.0.248/24
        local master = no
        os level = 0
        domain master = no
        preferred master = no
        domain logons = no
        name resolve order = host lmhosts bcast
        dns proxy = no
" >> /etc/samba/smb.conf
Настраиваем kerberos
mv /etc/krb5.conf /etc/krb5.conf.BACK
echo "
[logging]
default = FILE:/var/log/kerberos/krb5libs.log
kdc = FILE:/var/log/kerberos/krb5dc.log
admin_server = FILE:/var/log/kerberos/ksadmind.log
[libdefaults]
default_realm = $DOMAIN_RU
[realms]
$DOMAIN_RU = {
kdc=$IP_OF_DC
default_domain=$DOMAIN_SM
admin_server=$IP_OF_DC
}
[domain_realm]
$DOMAIN_SM = $DOMAIN_RU
.$DOMAIN_SM = $DOMAIN_RU
" >> /etc/krb5.conf
Настраиваем nsswitch
mv /etc/nsswitch.conf /etc/nsswitch.conf.BACK
echo "
passwd:         files winbind compat
group:          files winbind compat
shadow:         files winbind compat
gshadow:        files
hosts:          files dns
networks:       files
protocols:      db files
services:       db files
ethers:         db files
rpc:            db files
netgroup:       nis
" >> /etc/nsswitch.conf
Настройки winbindd_priv. Суть в том, что по умолчанию squid не имеет доступа к получаемым NTLM ключам связки winbind+samba.
gpasswd -a proxy winbindd_priv
chown root:proxy -R /var/lib/samba/winbindd_privileged
sed -i -e '/chgrp winbindd_priv $PIDDIR\/winbindd_privileged\/ || return 1/ c\chgrp proxy $PIDDIR\/winbindd_privileged\/ || return 1' /etc/init.d/winbind

/etc/init.d/samba restart
/etc/init.d/winbind restart
Предварительная настройка Squid3. Предположительно у нас есть пользователи, доступ которых в интернет осуществляется без авторизации. Например это руководители, которых мы не хотим утруждать вводом всяческих логинов и паролей. Это действительно только для какого-то типа авторизации, в данном случае NTLM. В дальнейшем, когда будет выполнен переход на ip авторизацию - эти настройки потеряют смысл.
ln -s /usr/sbin/squid3 /usr/sbin/squid
touch /etc/squid3/01-superusers
touch /etc/squid3/02-allowedsites
touch /etc/squid3/03-our_network
Для пользователей, доступ которым на прокси будет разрешен без авторизации:
echo "
192.168.0.10  # Boss IP 1
192.168.10.10 # Boss IP 2
192.168.20.20 # Boss IP 3
" >> /etc/squid3/01-superusers
Сайты, на которые будет разрешен доступ без авторизации для всех из локальной сети:
echo "
#local net----------------------
$DOMAIN_SM
#cloud.mail.ru----------------------
.datacloudmail.ru
cloud.radar.imgsmail.ru
cloud.mail.ru
headline.radar.imgsmail.ru
portal.mail.ru
cloclo1.cloud.mail
#mail.yandex.ru----------------------
mail.yandex.ru
#google.com----------------------
.google.com
" >> /etc/squid3/02-allowedsites
Локальная сеть, из которой будет разрешен доступ на сайты без авторизации:
echo "
192.168.0.0/24   # LAN-1
192.168.10.0/24  # LAN-2
192.168.20.0/24  # LAN-3
" >> /etc/squid3/03-our_network
Так как изначально Squid3 не поддерживает прозрачный режим работы с динамической генерацией сертификатов, нам необходимо его "пересобрать". В Debian это делается относительно просто:
cd /usr/src
mv /etc/squid3/squid.conf /etc/squid3/squid.conf.BACK
apt-get source squid3
apt-get build-dep squid3
apt-get build-dep squid
apt-get build-dep openssh
apt-get build-dep openssl
apt-get install devscripts build-essential fakeroot
cd squid3-*
sed -i -e 's/--enable-inline/--enable-inline --enable-ssl/' ./debian/rules
./configure
debuild -us -uc -b
dpkg -i -y squid3_3*amd64.deb  squid3-common*all.deb squid3-dbg*amd64.deb
Дальше нужно заменить конфиг squid-а на ранее подготовленный:
cd ~/downloads
wget $FTP_PATH/configs/2_squid_TRANSPERENT+NTLM_conf.txt
cat 2_squid_TRANSPERENT+NTLM_conf.txt > /etc/squid3/squid.conf
Если вы делаете это вручную, то основная задача настройки заключается в следующем. Мы объявляем 2 порта, которые будут работать в прозрачном режиме, и 1 который будет работать в режиме авторизации:
http_port 3128
http_port 3126 intercept
https_port 3127 intercept ssl-bump generate-host-certificates=on dynamic_cert_mem_cache_size=4MB cert=/etc/squid3/openssl/public.pem key=/etc/squ$
always_direct allow all
ssl_bump allow all
##Uncommented 2 lines below, if you allow all ssl connectios, even dont verify sertificate.
#sslproxy_cert_error allow all
#sslproxy_flags DONT_VERIFY_PEER
Так как прокси работает в прозрачном режиме, нам необходимо работать с сертификатами. В таком режиме пользователь устанавливает SSL соединение с прокси, а проси непосредственно с запрашиваемым ресурсом. Появляется возможность контролировать весь трафик внутри зашифрованного соединения. Но появляется и проблема, связанная с постоянным предупреждением пользователя о том, что сертификат не действителен. Нам в дальнейшем нужно будет добавить всем пользователям сертификат от прокси в доверенные:
mkdir /etc/squid3/openssl
cd /etc/squid3/openssl
openssl genrsa 4096 > private.pem
openssl req -new -x509 -days 3650 -key private.pem -out public.pem
openssl x509 -in public.pem -outform DER -out squid_user.der
После чего у нас в папке появится 3 файла:
private.pem - сертификат
public.pem - публичный ключ
squid_user.der - сертификат для конечных пользователей, который нужно установить на все клиентские машины в "Доверенные корневые центры сертификации".
Создадим небольшую напоминалку в данной папке:
echo '
Так как в данном случае мы используем self-signed сертификат, любые посещения https сайтов через прокси 
будут показывать пользователям ошибку сертификата. 
Причина ошибки — Issuer нашего сертификата не находится в списке Trusted CA в браузере.
Что бы ошибок не было, выполняем следующее действие.

Теперь полученный файл squid_user.der надо импортировать в клиентский браузер.
Для Internet Explorer:
Tools->Internet Options->Content->Certificates
Выбираем закладку «Trusted Root Certificate Authorities» (Доыеренные корневые центры сертификации)
Жмём Import, выбираем файл squid.der и завершаем импорт.

Для Firefox:
Tools->Options->Advanced->Encryption->View Certificates
Выбираем закладку «Authorities»
Жмём Import, выбираем файл squid.der и завершаем импорт.

Ну вот в общем то всё. В зависимости от ваших фантазий, теперь у вас есть возможность в https трафике 
запретить делать POST запросы, скачивать большие файлы, закрыть доступ к определённым файлам/папкам. 
Так же можно запретить доступ на сайты, сертификаты которых выданы не доверенными CA. Ну и возможность проверять на вирусы.
' > readme
Установка Sams2
cd ~/downloads
wget https://launchpad.net/ubuntu/+archive/primary/+files/libzip1_0.9.3-1_amd64.deb
wget http://launchpadlibrarian.net/94808408/libmysqlclient16_5.1.58-1ubuntu5_amd64.deb
dpkg -i libzip1_0.9.3-1_amd64.deb
dpkg -i libmysqlclient16_5.1.58-1ubuntu5_amd64.deb

wget http://nixdev.net/release/sams/devel/packages/debian/sams2_2.0.0-rc2_amd64.deb
dpkg -i sams2_2.0.0-rc2_amd64.deb
wget http://nixdev.net/release/sams/devel/packages/debian/sams2-doc_2.0.0-rc2_all.deb
wget http://nixdev.net/release/sams/devel/packages/debian/sams2-web_2.0.0-rc2_all.deb
dpkg -i sams2-doc_2.0.0-rc2_all.deb && dpkg -i sams2-web_2.0.0-rc2_all.deb
Настройка Sams2
cp /etc/sams2.conf /etc/sams2.conf.BACK
sed -i -e 's/DB_USER=/DB_USER=sams/' /etc/sams2.conf
sed -i -e 's/DB_PASSWORD=/DB_PASSWORD='$SAMSDB_PASS'/' /etc/sams2.conf
sed -i -e 's/squid/squid3/' /etc/sams2.conf
sed -i -e '/SHUTDOWNCOMMAND=shutdown -h now/ c\SHUTDOWNCOMMAND=shutdown -r now' /etc/sams2.conf
sed -i -e 's|SQUIDCACHEDIR=/usr/local/apache2|SQUIDCACHEDIR=/var/spool/squid3|' /etc/sams2.conf
sed -i -e 's/SAMS_ENABLE=false/SAMS_ENABLE=true/' /etc/init.d/sams2
Создаем линки в апаче для самса
echo '
Alias /sams2 /usr/share/sams2
<Directory "/usr/share/sams2">
    Options Indexes FollowSymlinks
    AllowOverride None
    Require all granted
    AddDefaultCharset off
</Directory>
<Location "/sams2">
    Options Indexes
    Order allow,deny
    Allow from all
</Location>
' > /etc/apache2/conf-available/sams2.conf

echo '
Alias /sams2/doc /usr/share/doc/sams2-doc/
 <Directory "/usr/share/doc/sams2-doc/">
    Options Indexes FollowSymlinks
    AllowOverride None
    Require all granted
    AddDefaultCharset off
</Directory>
 <Location "/sams2/doc">
    Options Indexes
    Order allow,deny
    Allow from all
</Location>
 ' > /etc/apache2/conf-available/doc4sams2.conf
 
ln -s ../conf-available/sams2.conf /etc/apache2/conf-enabled/
ln -s ../conf-available/doc4sams2.conf /etc/apache2/conf-enabled/
chown -R www-data:www-data /usr/share/sams2/data/

/etc/init.d/apache2 restart
/etc/init.d/squid3 restart
/etc/init.d/sams2 restart
Настройки HAVP, который будет проверять весь траффик на вирусы
mv /etc/havp/havp.config /etc/havp/havp.config.BACK
echo '
USER havp
GROUP havp
DAEMON true
PIDFILE /var/run/havp/havp.pid
SERVERNUMBER 10
MAXSERVERS 100
ACCESSLOG /var/log/havp/access.log
ERRORLOG /var/log/havp/error.log
USESYSLOG false
LOG_OKS false
LOGLEVEL 1
SCANTEMPFILE /var/spool/havp/havp-XXXXXX
TEMPDIR /var/tmp
DBRELOAD 60
FORWARDED_IP true
PORT 8081
BIND_ADDRESS 127.0.0.1
TEMPLATEPATH /etc/havp/templates/ru
WHITELISTFIRST true
WHITELIST /etc/havp/whitelist
BLACKLIST /etc/havp/blacklist
FAILSCANERROR false
SCANNERTIMEOUT 10
RANGE true
SCANIMAGES false
MAXSCANSIZE 5000000
STREAMUSERAGENT Player Winamp iTunes QuickTime Audio RMA/ MAD/ Foobar2000 XMMS
IGNOREVIRUS Oversized. Encrypted. Phishing
ENABLECLAMLIB true
CLAMDBDIR /var/lib/clamav
CLAMBLOCKBROKEN false
CLAMBLOCKENCRYPTED false
CLAMBLOCKMAX false
CLAMMAXFILES 500
CLAMMAXFILESIZE 10
CLAMMAXRECURSION 8
ENABLEFPROT false
ENABLEAVG false
ENABLEAVESERVER false
ENABLESOPHIE false
ENABLETROPHIE false
ENABLENOD32 false
ENABLEAVAST false
ENABLEARCAVIR false
ENABLEDRWEB false

' > /etc/havp/havp.config

echo '
*.youtube.com*
*.$DOMAIN_SM*
*.apple.com*
' >> /etc/havp/whitelist
Вводим прокси в домен
net join -I $IP_OF_DC -U $ADMIN_LOGIN_FOR_DC_JOIN%$ADMIN_DC_PSW
Проверка, должно вывести все что видит в домене
wbinfo -g
wbinfo -u
wbinfo -t
Добавляем необходимые настройки в MYSQL
mysql -u root -p
GRANT ALL ON squidctrl.* TO 'sams'@localhost IDENTIFIED BY "SAMSDB_PASS";
GRANT ALL ON squidlog.* TO 'sams'@localhost IDENTIFIED BY "SAMSDB_PASS";
GRANT ALL ON sams2db.* TO 'sams'@localhost IDENTIFIED BY "SAMSDB_PASS";
flush privileges;
Ну и IPTABLES.
Iptables это очень мощный инструмент для работы с сетью, чтобы описать все возможности нужна отдельная статья.
В нашем случае все более тривиально, нам нужен редирект с 80 и 443 портов на 3126 и 3127 порты соответственно + некоторые базовые настройки
#-------------УДАЛЯЕМ ВСЕ НАСТРОЙКИ----------------
IPTABLES="/sbin/iptables"
$IPTABLES -P INPUT ACCEPT
$IPTABLES -P FORWARD ACCEPT
$IPTABLES -P OUTPUT ACCEPT
$IPTABLES -t nat -P PREROUTING ACCEPT
$IPTABLES -t nat -P POSTROUTING ACCEPT
$IPTABLES -t nat -P OUTPUT ACCEPT
$IPTABLES -t mangle -P PREROUTING ACCEPT
$IPTABLES -t mangle -P OUTPUT ACCEPT
$IPTABLES -F
$IPTABLES -t nat -F
$IPTABLES -t mangle -F
$IPTABLES -X
$IPTABLES -t nat -X
$IPTABLES -t mangle -X
###############################################################################
#-------------Настраиваем----------------
# 1.1 Настройки сети 
INET_IP="10.10.0.2/30"
INET_IFACE="eth0"
INET_BROADCAST="255.255.255.255"
# локалка
LAN_IP="192.168.0.0/24"
LANN="192.168.0.1"
LAN_IP_RANGE="192.168.10.0/24"
LAN_IP_RANGE2="192.168.20.0/24"
LAN_IFACE="eth1"
# локалхост
LO_IFACE="lo"
LO_IP="127.0.0.1"
#Открытые порты (через пробел)
open_tcp_ports="22 80 443 3126 3127 3128 10000"
open_udp_ports="123"
open_icmp_state="8 11"
###########################################################################
# 2. Module loading.
/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
###########################################################################
# 3.1 Включаем режим роутера
echo "1" > /proc/sys/net/ipv4/ip_forward
# ----------------------Правила----------------------------------
# 4.1 ТАБЛИЦА Filter
#Умолчания
$IPTABLES -P INPUT DROP
$IPTABLES -P OUTPUT DROP
$IPTABLES -P FORWARD DROP
#Создаем цепочки
$IPTABLES -N bad_tcp_packets
                $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 -N allowed
                $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

$IPTABLES -N tcp_packets
                for open_tcp in $open_tcp_ports
                        do
                        $IPTABLES -A tcp_packets -p TCP --dport $open_tcp -j allowed
                done

$IPTABLES -N udp_packets
                for open_udp in $open_udp_ports
                        do
                        $IPTABLES -A udp_packets -p UDP --dport $open_udp -j allowed
                done

$IPTABLES -N icmp_packets
                for open_icmp in $open_icmp_state
                        do
                        $IPTABLES -A icmp_packets -p ICMP --icmp-type $open_icmp -j ACCEPT
                done

# 4.1.4 ТАБЛИЦА INPUT
# Подключения к прокси
# Сначала пропускаем уже ранее установленые соединения
$IPTABLES -A INPUT -p tcp -j bad_tcp_packets
$IPTABLES -A INPUT -i $INET_IFACE -d $INET_IP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -i $LAN_IFACE -d $LAN_IP -m state --state ESTABLISHED,RELATED -j ACCEPT
# пропускаем соединения к прокси от локалки и лупбак
$IPTABLES -A INPUT -i $LAN_IFACE -s $LAN_IP_RANGE -j ACCEPT
$IPTABLES -A INPUT -i $LAN_IFACE -s $LAN_IP_RANGE2 -j ACCEPT
$IPTABLES -A INPUT -i $LO_IFACE -s $LO_IP -j ACCEPT
$IPTABLES -A INPUT -i $LO_IFACE -s $LAN_IP -j ACCEPT
$IPTABLES -A INPUT -i $LO_IFACE -s $INET_IP -j ACCEPT
# фильтруем открытые порты для разных протоколов
$IPTABLES -A INPUT -p TCP -i $LAN_IFACE -s $LAN_IP_RANGE  -j tcp_packets
$IPTABLES -A INPUT -p TCP -i $LAN_IFACE -s $LAN_IP_RANGE2  -j tcp_packets
$IPTABLES -A INPUT -p UDP -i $LAN_IFACE -s $LAN_IP_RANGE -j udp_packets
$IPTABLES -A INPUT -p UDP -i $LAN_IFACE -s $LAN_IP_RANGE2 -j udp_packets
$IPTABLES -A INPUT -p ICMP -i $LAN_IFACE -s $LAN_IP_RANGE -j icmp_packets
$IPTABLES -A INPUT -p ICMP -i $LAN_IFACE -s $LAN_IP_RANGE2 -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: "

# 4.1.5 ТАБЛИЦА FORWARD
$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 -A FORWARD -m limit --limit 3/minute --limit-burst 3 -j LOG --log-level debug --log-prefix "IPT FORWARD packet died: "

# 4.1.6 ТАБЛИЦА OUTPUT
$IPTABLES -A OUTPUT -p tcp -j bad_tcp_packets
$IPTABLES -A OUTPUT -s $LO_IP -j ACCEPT
$IPTABLES -A OUTPUT -s $LAN_IP -j ACCEPT
$IPTABLES -A OUTPUT -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: "

# 4.2 ТАБЛИЦА nat
$IPTABLES -A PREROUTING ! -d $LAN_IP -i eth1 -p tcp -m tcp --dport 80 -j DNAT --to-destination $LANN:3126
$IPTABLES -A PREROUTING ! -d $LAN_IP -i eth1 -p tcp -m tcp --dport 443 -j DNAT --to-destination $LANN:3127
#$IPTABLES -A POSTROUTING -o eth0 -j MASQUERADE
Вот собственно и все. Теперь можно зайти на http://proxy_ip/sams2/ и настроить самс под свои нужды, логин по умолчанию admin, пароль qwerty. Так же доступен Webmin по адресу https://proxy_ip:10000 логин и пароль по умолчанию от учетной записи root сервера.
Полный скрипт для развертывания данной конфигурации за несколько минут можно скачать ТУТ

Комментариев нет:

Отправить комментарий