Шлюз и несколько групп компов в локальной сети

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС для молодых и начинающих системных администраторов.

Модераторы: SLEDopit, Модераторы разделов

Аватара пользователя
yamah
Сообщения: 1116
ОС: Rosa Fresh, Debian, RELS

Шлюз и несколько групп компов в локальной сети

Сообщение yamah »

Есть корпоративная сеть и несколько групп пользователей в ней:
1. Инженеры САПР ("админы") и приближенные к ним, которым можно выходить по любым портам в любом направлении;
2. Бухи с их отчетностью и банк клиентами. Там пара компов всего и несколько пока еще не отловленных IP-адресов, на которые они коннектятся.
3. Тем, кто много с почтой работает. Тут есть проблема, так как куча почтовых ящиков расположенно где попало и привести к стандарту руководство не сильно-то дает добро - клиентов фиг переубедишь писать куда нужно. В итоге 1 ящик на Яндекс-Почте (люди привыкли к веб-интерфейсу, но некоторые уже через клиент заходят - админы и Информационно-Справочная Группа), другой на сервере провайдера (к нему доступ имеют только два ПК в ИСГ), и персональные ящики на хостинге 1GB (ГИП-ы, Начальники отделов, ИСГ, служба САПР, общеинститутский) с кучей различных pop3 и smtp серверов.
4. Остальные, кто должен ходить через проксю, если имеют логин и пароль.

Нужно:
1. Первой группе разрешить любые запросы по любым портам, а так же любые запросы пигвов, трассеровки маршрутов, "кто есть" и т.д.
2. Бухам разрешить без прокси ходить только по разрешенным IP-ам, а так же забирать свою почту с pop3 и smtp серверов 1GB и Яндекса. Остальной трафик через прокси.
3. ИСГ забирать всю почту с 1GB, Яндекса, сервера провайдера, остальной трафик через прокси.
4. Всем остальным только прокси.
5. Запретить доступ к шлюзу извне, кроме 21, 80 и 1723 (на будущее) портов для всех и 22, 631, 3128, 3306, 5222, 5223, 5280, 5900-5906, 6000-6063, 10000 с домашних компов админов, а так же на внутренние серверы с никсами (22), виндой (3389) и моим рабочим компьютером с Х-ами.
6. Оптимизировать правила IPTABLES.

Сейчас имеем: (внешние ипы скрыты)

Код: Выделить всё

#!/bin/sh

# Константы
    INET_IF="eth0"
              INETIP="<IP>"
    NET_IF="eth1"
    LANIP="192.168.0.1"
    INET_NET="0.0.0.0/24"
    NET_NET="192.168.0.0/24"
    BASEPORTS="20,21,22,25,23,43,70,79,80,110,143,210,443"
    CLOSEPORTS="630,640,783,3310,10000"
    NETSERVISPORTS="53,67,68,113"
    PRIVPORTS="1:1023"
    UNPRIVPORTS="1024:65535"
    MAILPORTS="25,110,143"
    IMPORTS="5222,5223,5280"
    SERVISPORTS="2049,3306,10000"
    RDPPORTS="3389"
    VNCPORTS="5900:5906,"
    XPORTS="6000:6063"
    NFSPORTS="111,2049"
    SAMBAPORTS=""
    DNS_SERVER1="IP
    DNS_SERVER2="IP"
              ELCOM_SMTP="IP"
              ELCOM_POP="IP"
    CORPSERVER="IP"
    CORPINJCOMP="IP"
    SYSADMIN="IP"

# Включить перенаправление пакетов через ядро.
    echo "1" > /proc/sys/net/ipv4/ip_forward

# Сбросить правила и удалить цепочки.
    iptables -F
    iptables -t nat -F
    iptables -t mangle -F
    iptables -t nat -F PREROUTING
    iptables -t nat -F POSTROUTING

    iptables -X
    iptables -t nat -X
    iptables -t mangle -X

# Политики по умолчанию.
    iptables -F INPUT
              iptables -F FORWARD
              iptables -F OUTPUT

    iptables -P FORWARD DROP
    iptables -P INPUT DROP
    iptables -P OUTPUT DROP

# Разрешаем прохождение любого трафика по интерфейсу обратной петли.
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A OUTPUT -o lo -j ACCEPT

    iptables -A INPUT -p ALL -s 127.0.0.1 -i lo -j ACCEPT
    iptables -A INPUT -p ALL -s $LANIP -i lo -j ACCEPT
    iptables -A INPUT -p ALL -s $INETIP -i lo -j ACCEPT
    iptables -A OUTPUT -p ALL -d 127.0.0.1 -o lo -j ACCEPT
    iptables -A OUTPUT -p ALL -s $INETIP -j ACCEPT
    iptables -A OUTPUT -p ALL -s $LANIP -j ACCEPT
    iptables -A OUTPUT -p ALL -s 127.0.0.1 -j ACCEPT

# Отбрасывать все пакеты, которые не могут быть идентифицированы и поэтому не могут иметь определенного статуса.
    iptables -A INPUT   -m state --state INVALID -j DROP
    iptables -A FORWARD -m state --state INVALID -j DROP

# Защита от некоторых видов атак
    iptables -A INPUT -p tcp --tcp-flags SYN,ACK SYN,ACK -m state --state NEW -j REJECT --reject-with tcp-reset

    iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
    iptables -A OUTPUT -p tcp ! --syn -m state --state NEW -j DROP

    iptables -A INPUT -p UDP -s 0/0 --destination-port 138 -j DROP
    iptables -A INPUT -p UDP -s 0/0 --destination-port 113 -j REJECT
    iptables -A INPUT -p UDP -s 0/0 --source-port 67 --destination-port 68 -j ACCEPT
    iptables -A INPUT -p UDP -j RETURN
    iptables -A OUTPUT -p UDP -s 0/0 -j ACCEPT

    iptables -A INPUT --fragment -p ICMP -j DROP
    iptables -A OUTPUT --fragment -p ICMP -j DROP

# Запрет полный и обязательный
    iptables -A INPUT -p tcp -m tcp -i $INET_IF --dport $XPORTS -j DROP --syn

# Открытые порты из Глобала
    iptables -A INPUT -s $INET_NET -p TCP -d $INETIP -m multiport --dport 21,80 -j ACCEPT

# Для VPN
    iptables -A INPUT -p 47 -m state --state ESTABLISHED,RELATED -i $INET_IF -j ACCEPT
    iptables -A OUTPUT -p TCP --dport 1723 -o eth0 -j ACCEPT
    iptables -A OUTPUT -p 47 -o eth0 -j ACCEPT

# Для почты
    iptables -A OUTPUT -p tcp -m tcp -o $INET_IF -m multiport --dport $MAILPORTS --sport $UNPRIPORTS -j ACCEPT
    iptables -A INPUT -p tcp -m tcp -i $INET_IF -m multiport --dport $UNPRIPORTS --sport $MAILPORTS -j ACCEPT ! --syn

              iptables -A FORWARD -s $NET_NET -d $ELCOM_POP -p TCP --dport 110 -j ACCEPT
              iptables -A FORWARD -s $NET_NET -d $ELCOM_SMTP -p TCP --dport 25 -j ACCEPT


# Открытые порты из локалки
    iptables-A INPUT -i $NET_IF -j ACCEPT
    # iptables -A INPUT -s $NET_NET -p TCP -d $LANIP -m multiport --dport $BASEPORTS,3128,10000 -j ACCEPT

# Принимать ответы по уже установленным соединениям
    iptables -A INPUT   -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptablesT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

# Сисадмину доступ
    iptables -A FORWARD -p TCP -d $SYSADMIN --dport $UNPRIVPORTS -j ACCEPT
    iptables -A FORWARD -p TCP -s $SYSADMIN --sport $UNPRIVPORTS -j ACCEPT

    iptables -A FORWARD -p UDP -d $SYSADMIN --dport $UNPRIVPORTS -j ACCEPT
    iptables -A FORWARD -p UDP -s $SYSADMIN --sport $UNPRIVPORTS -j ACCEPT

    iptables -A FORWARD -p TCP -d $SYSADMIN --dport $BASEPORTS -j ACCEPT
    iptables -A FORWARD -p TCP -s $SYSADMIN --sport $BASEPORTS -j ACCEPT

    iptables -A FORWARD -p UDP -d $SYSADMIN --dport $BASEPORTS -j ACCEPT
    iptables -A FORWARD -p UDP -s $SYSADMIN --sport $BASEPORTS -j ACCEPT

# Разрешаем только ответы DNS и DHCP сервера  на запросы/
    iptables -A INPUT -p UDP -s $DNS_SERVER1 -m state --state ESTABLISHED --sport 53 -j ACCEPT
    INPUT -p TCP -s $DNS_SERVER1 --sport 53 --dport $UNPRIVPORTS -m state --state ESTABLISHED -j ACCEPT
    iptables -A INPUT -p UDP -s $DNS_SERVER2 -m state --state ESTABLISHED --sport 53 -j ACCEPT
    iptables -A INPUT -p TCP -s $DNS_SERVER2 --sport 53 --dport $UNPRIVPORTS -m state --state ESTABLISHED -j ACCEPT

    iptables -A FORWARD -p UDP -s $NET_NET -d $DNS_SERVER1 --dport 53 -j ACCEPT
    iptables -A FORWARD -p UDP -s $DNS_SERVER1 -d $NET_NET --sport 53 -m state --state ESTABLISHED -j ACCEPT
    iptables -A FORWARD -p TCP -s $NET_NET -d $DNS_SERVER1 --dport 53 -j ACCEPT

    iptables -A FORWARD -p UDP -s $NET_NET -d $DNS_SERVER2 --dport 53 -j ACCEPT
    iptables -A FORWARD -p UDP -s $DNS_SERVER2 -d $NET_NET --sport 53 -m state --state ESTABLISHED -j ACCEPT
    iptables -A FORWARD -p TCP -s $NET_NET -d $DNS_SERVER2 --dport 53 -j ACCEPT

 # Разрешен исходящий пинг, ограничен входящий.
    iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 2 -j ACCEPT
    iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
    iptables -A FORWARD -p icmp --icmp-type echo-request -m limit --limit 1/s --limit-burst 2 -j ACCEPT
    iptables -A FORWARD -p icmp --icmp-type echo-request -j DROP
    iptables -A INPUT -p icmp -j ACCEPT
    iptables -A FORWARD -p icmp -j ACCEPT

# Разрешены исходящие AUTH-запросы, входящие запрещены.
    iptables -A OUTPUT -p tcp -m tcp -o $INET_IF --dport 113 --sport $UNPRIPORTS -j ACCEPT
    iptables -A INPUT -p tcp -m tcp -i $INET_IF --dport $UNPRIPORTS --sport 113 -j ACCEPT ! --syn
    iptables -A INPUT -p tcp -m tcp -i $INET_IF --dport 113 -j DROP

# Перебрасываем порты
    iptables -t nat -A PREROUTING -d $INETIP -p TCP --dport 10021 -j DNAT --to-destination $CORPSERVER:21
    iptables -A FORWARD -p TCP -d $CORPSERVER --dport 21 -j ACCEPT
    iptables -t nat -A PREROUTING -d $INETIP -p TCP --dport 10022 -j DNAT --to-destination $CORPSERVER:22
    iptables -A FORWARD -p TCP -d $CORPSERVER --dport 22 -j ACCEPT
    iptables -t nat -A PREROUTING -d $INETIP -p TCP --dport 10080 -j DNAT --to-destination $CORPSERVER:80
    iptables -A FORWARD -p TCP -d $CORPSERVER --dport 80 -j ACCEPT
    iptables -t nat -A PREROUTING -d $INETIP -p TCP --dport 13389 -j DNAT --to-destination $CORPINJCOMP:3389
    iptables -A FORWARD -p TCP -d $CORPINJCOMP --dport 3389 -j ACCEPT

# Включаем NAT
    iptables -t mangle -A PREROUTING -i $INET -j TTL --ttl-set 64
        iptables -t nat -A POSTROUTING -o $INET -j SNAT --to-source $INETIP

Правда сейчас политики по умолчанию заменены с DROP на ACCESS, дабы все, что нужно, работало, а на большинстве компов просто нет прописанных шлюза и DNS.
С Яндекс-Почтой проблема в том, что адресов у smtp и pop3 серверов большая куча, а с почтой на 1GB в том, что самих серверов куча (smtp-7.1gb.ru, smtp-11,1gb.ru),
С бухами я как-нибудь сам постараюсь разобраться (по аналогии).

Прошу помощи довести это все до ума.
Понимание - это меч с тремя кромками: ваша правда, наша правда и Истина.
Жизнь - игра: сюжет задуман фигова, но графика хорошая...
Лучший игровой сервер - Земля: карта всего одна, но на 7 миллиардов игроков; читеров нет, админ терпеливый, но если уж забанит...
Спасибо сказали: