Здравствуйте.Решил отказаться от squid’a (в виду проблемности с https (для меня)), и с делать все через iptables.
Получилось следующее:
IP-адреса выдаются на основании MAC
правила для групп находятся в отдельных файлах
при запуске считываются правила и добавляются в iptablesКонфиг DHCP:
ddns-update-style none;
authoritative;
subnet 192.168.1.0 netmask 255.255.255.0 {
option domain-name-servers 192.168.1.1;
option subnet-mask 255.255.255.0;
option routers 192.168.1.1;
option broadcast-address 192.168.1.255;
default-lease-time 600;
max-lease-time 7200;
}
include "/etc/dhcp/hosts";Файл с хостами для DHCP:
host host1 {
hardware ethernet 00:0C:29:E7:СС:7C;
fixed-address 192.168.1.10;
}host host2 {
hardware ethernet 00:0C:FF:E7:45:7C;
fixed-address 192.168.1.11;
}host host3 {
hardware ethernet 99:0C:29:E7:45:7C;
fixed-address 192.168.1.12;
}и т.д.
Файл добавления правил:
#!/bin/bashiptables -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 ACCEPTiptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -t nat -X
iptables -t mangle -X# Правила по умолчанию
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPTecho "1" > /proc/sys/net/ipv4/ip_forward
# Директория с файлами правил
RULES_DIR=/home/user/rules### INPUT
# Разрешить входящие соединения с локалхоста
iptables -A INPUT -i lo -j ACCEPT
# Разрешить уже установленные входящие соединения
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Разрешить SSH
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# Разрешить DNS
iptables -A INPUT -p udp --dport 53 -j ACCEPT### FORWARD
# Разрешить уже установленные пересылаемые соединения
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT# Правила
# rules.sh - файл чтения правил из файла
find $RULES_DIR -type f | grep -E -o "group_([0-9A-Za-z\-\_])+" | while read FILENAME; do
$RULES_DIR/rules.sh $RULES_DIR/$FILENAME
done# почта
iptables -A FORWARD -p tcp -m tcp --dport 995 -j ACCEPT
iptables -A FORWARD -p tcp -m tcp --dport 465 -j ACCEPT# DNS
iptables -A FORWARD -p udp -s 192.168.1.0/24 -m multiport --dport 53 -j ACCEPT
iptables -A FORWARD -p udp -d 192.168.1.0/24 -m multiport --dport 53 -j ACCEPT### NAT
# Включить NAT для локальной подсети
iptables -t nat -A POSTROUTING -o eth1 -s 192.168.1.0/24 -j MASQUERADEservice dnsmasq restart
Файл чтения правил из файла:
#!/bin/bashmac=$( cat $1 | grep -E -o '((([0-9A-Fa-f]){2}(\:)?){5,7}(\|)?)+' )
mac=${mac//"|"/" "}
for i in $mac
do
cat $1 | grep -e "rule " | while read line
do
ports=$( echo $line | grep -E -o '([0-9]{1,5}(\|)?)+' )
sites=$( echo $line | grep -E -o '(([0-9a-zA-Z])*(\.)?([0-9a-zA-Z])+(\.){1}([0-9a-zA-Z]){2,9}(\|)*)+' )ports=${ports//"|"/" "}
sites=${sites//"|"/" "}
if [ ${#posts} != 0 ] & [ ${#sites} != 0 ]; then
# Есть порты и сайтыfor p in $ports
do
for s in $sites
do
iptables -A FORWARD -p tcp --dport $p -d $s -m mac --mac-source $i -j ACCEPT
iptables -A FORWARD -p tcp --dport $p -s $s -m mac --mac-source $i -j ACCEPT
done
done
else
if [ ${#posts} > 0 ]; then
# Есть порты
for p in $ports
do
iptables -A FORWARD -p tcp --dport $p -m mac --mac-source $i -j ACCEPT
done
else
# Есть сайты
for s in $sites
do
iptables -A FORWARD -p tcp -d $s -m mac --mac-source $i -j ACCEPT
iptables -A FORWARD -p tcp -s $s -m mac --mac-source $i -j ACCEPT
done
fi
fi
done
doneПример файла правил:
<rules mac="00:0C:FF:E7:45:7C|00:0C:FF:E7:99:7C">
<rule port="80|8080" sites="ubuntu.ru|novosti.ru" />
<rule port="443" sites="mail.ru|youtube.com" />
</rule>В правилах указывается разрешенный порт и сайты, на которые разрешен доступ по этому порту с mac указанных в свойстве mac. Если не указывать сайты, будет открыт доступ ко всем сайтам этого порта. Если ничего не указать, будет запрещен доступ ко всему.
В принципе все работает (проверял на физической сети с 3 компами, и виртуальной сети с 2 компами).
Вопрос вот в чем, правильно ли так делать, какие проблемы могут возникнуть (нагрузка на сервер (процессор), общая работоспособность сети и интернета в целом, и т.д.)?
Конфигурация будет следующей:
Процессор: 4-х ядерный, 3.2 ГГц
ОЗУ: 8 Гб
Сетевые карты: 1 Гбит
>[оверквотинг удален]
> }
> host host2 {
> hardware ethernet 00:0C:FF:E7:45:7C;
> fixed-address 192.168.1.11;
> }
> host host3 {
> hardware ethernet 99:0C:29:E7:45:7C;
> fixed-address 192.168.1.12;
> }
> и т.д....
>[оверквотинг удален]
> не указать, будет запрещен доступ ко всему.
> В принципе все работает (проверял на физической сети с 3 компами, и
> виртуальной сети с 2 компами).
> Вопрос вот в чем, правильно ли так делать, какие проблемы могут возникнуть
> (нагрузка на сервер (процессор), общая работоспособность сети и интернета в целом,
> и т.д.)?
> Конфигурация будет следующей:
> Процессор: 4-х ядерный, 3.2 ГГц
> ОЗУ: 8 Гб
> Сетевые карты: 1 Гбитимхается SRP нарушен...
вопрос времени(и внимательности) когда "разойдутся" MACи в dhcp и скриптах
> имхается SRP нарушен...
> вопрос времени(и внимательности) когда "разойдутся" MACи в dhcp и скриптахСогласен, нужно быть очень внимательным. Но тем не менее, кроме этого, есть ли еще какие нибудь проблемы?
>> имхается SRP нарушен...
>> вопрос времени(и внимательности) когда "разойдутся" MACи в dhcp и скриптах
> Согласен, нужно быть очень внимательным. Но тем не менее, кроме этого, есть
> ли еще какие нибудь проблемы?Визуально нет...
Oднaкo, гиподинaмия(и пр.) аццкие штуки творит...
>[оверквотинг удален]
> не указать, будет запрещен доступ ко всему.
> В принципе все работает (проверял на физической сети с 3 компами, и
> виртуальной сети с 2 компами).
> Вопрос вот в чем, правильно ли так делать, какие проблемы могут возникнуть
> (нагрузка на сервер (процессор), общая работоспособность сети и интернета в целом,
> и т.д.)?
> Конфигурация будет следующей:
> Процессор: 4-х ядерный, 3.2 ГГц
> ОЗУ: 8 Гб
> Сетевые карты: 1 ГбитПлохая идея, как с этим бороться будете:
;; ANSWER SECTION:
youtube.com. 18 IN A 108.177.14.91
youtube.com. 18 IN A 108.177.14.93
youtube.com. 18 IN A 108.177.14.136
youtube.com. 18 IN A 108.177.14.190Таблесы работают по ип.
Скивид по именам.
>[оверквотинг удален]
>> ОЗУ: 8 Гб
>> Сетевые карты: 1 Гбит
> Плохая идея, как с этим бороться будете:
> ;; ANSWER SECTION:
> youtube.com. 18 IN A 108.177.14.91
> youtube.com. 18 IN A 108.177.14.93
> youtube.com. 18 IN A 108.177.14.136
> youtube.com. 18 IN A 108.177.14.190
> Таблесы работают по ип.
> Скивид по именам.теперь стало:
;; ANSWER SECTION:
youtube.com. 64 IN A 209.85.233.190
youtube.com. 64 IN A 209.85.233.91
youtube.com. 64 IN A 209.85.233.93
youtube.com. 64 IN A 209.85.233.136
во первых вместо портянки из маков и ip нужно использовать ipset
во вторых dnsmasq умеет добавлять в ipset ответы клиенту при запросе.
остаётся контролировать dnsmasq