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),
С бухами я как-нибудь сам постараюсь разобраться (по аналогии).
Прошу помощи довести это все до ума.