Squid и Iptables фильтруем по mac адресам.

Был у меня на работе старенький сервачок на FreeBSD, на нем крутился DHCP и squid, и что бы никто без моего ведома не получал доступ к интернетам, был своеобразный фильтр, по маку выдавался определенный IP, который был разрешен в squid через SAMS. Слишком много телодвижений подумал я, и решил все упростить.


FreeBSD решил снести и накатить туда debian. Процедуру установки описывать не буду, не об этом заметка.
1. В squid включаем прозрачность
http_port 8080
http_port 8081 intercept
В 3 версии необходимо слушать на 2х портах, один прозрачный, второй обычный

2. У меня на работе 5 этажей и для каждого этажа я создал по файлу с mac адресами
#TAG: acl
acl 1_floor arp "/etc/squid3/1_floor.mac"
acl 2_floor arp "/etc/squid3/2_floor.mac"
acl 3_floor arp "/etc/squid3/3_floor.mac"
acl 4_floor arp "/etc/squid3/4_floor.mac"
acl 5_floor arp "/etc/squid3/5_floor.mac"

#TAG: http_access
http_access allow 1_floor
http_access allow 2_floor
http_access allow 3_floor
http_access allow 4_floor
http_access allow 5_floor
Содержимое файла 1_floor.mac
00:22:15:cb:d9:9b #107
00:1a:4d:93:8b:67 #101
00:80:48:b5:77:14 #vahta
54:04:A6:06:09:17 #vahta_nbook
90:94:E4:AE:D6:40 #106_wifi
Можно включить в логах отображение mac-адреса, для этого в конфиг сквида нужно добавить:
logformat squid %{%d/%b/%Y:%H:%M:%S}tl %6tr %>a %Ss/%03>Hs %<st %rm %ru %un %Sh/%<A %mt
3. Теперь про iptables.
Закручиваем весь http траффик на 8081 порт(прозрачный)
iptables -t nat -A PREROUTING -s 192.168.84.0/24 ! -d 192.168.84.1 -p tcp --dport 80 -j REDIRECT --to-port 8081
Все запросы из 84 подсети, кроме 84.1(это наш сервер) на 80 порт, будут перенаправлены на локальный порт 8081.

Допустим некоторых надо пустить напрямую, без редиректа, через NAT, для этого следующее правило:
iptables -t nat -A POSTROUTING -s 192.168.84.5 -o eth1 -j MASQUERADE
iptables -t nat -A PREROUTING -s 192.168.84.5 -p tcp -m tcp --dport 80 -j RETURN
Оно должно быть выше, редиректа на SQUID

Ну а теперь самое интересное, многие знают, что 443 порт очень сложно сделать прозрачным, точнее даже не сложно, а геморройно, связи с сертификатами. Так вот, наша задача состоит в том, что бы включить NAT на 443 порт для mac адресов перечисленных в файлах *.mac.

Принцип действия.
Мы создаем таблицу(mangle) mac_access и маркируем пакеты с определенных mac адресов, и в конечном итоге указываем, что разрешено этим маркированным пакетам.

Скрипт для добавления всех mac адресов из файлов X_floor.mac расположенных в /etc/squid3
#!/bin/bash

iptables -t mangle -N mac_access
iptables -t mangle -A mac_access -j MARK --set-mark 1

for i in `sed 's/#.*//; /^$/d' /etc/squid3/*.mac`
    do
	iptables -t mangle -A PREROUTING -m mac --mac-source ${i} -j mac_access
    done
Правило в iptables разрешающее NAT 443 порта
iptables -t nat -A POSTROUTING -o eth1 -p tcp --dport 443 -m mark --mark 1 -j MASQUERADE
4. И немножко про DHCP.
В настройка DHCP можно указать файл автоматический конфигурации PROXY. Для этого надо добавить следующее:
/etc/dhcp/dhcpd.conf
option wpad code 252 = text;
option local-pac-server code 252 = text;

subnet 192.168.84.0 netmask 255.255.255.0 {
    range 192.168.84.10 192.168.84.220;
    option wpad "http://192.168.84.1/wpad.dat";
    option local-pac-server "http://192.168.84.1/wpad.dat\000";
}
Если нет никакого http сервера, устанавливаем lighttpd apt-get install lighttpd, особой конфигурации не требует.
Создаем файл /var/www/html/wpad.dat:
function FindProxyForURL(url, host)
{
    return "PROXY 192.168.84.1:8080";
}
IE и Chrome понимают данную конструкцию.
Так же про wpad можно почитать здесь http://habrahabr.ru/company/mailru/blog/259521/

Вроде бы все, из вышесказанного можно делать любые конструкции по фильтрации и маскарадинга по mac адресу. Насчет производительности не уверен, но у меня в таблице свыше 100 mac адресов и сервер хоть и старенький, но чувствует себя комфортно.

Всем iptables ;-)

Комментарии ()

    Авторизация

    GitHubGoogleVkontakteYandex
    Есть вопрос или предложение пиши в Telegram @cloudsv

    MTProto прokси для Telegram

    Прямой эфир

    Diego mont 25 мая 2023, 07:04
    Полезные боты в Telegram 2
    cloudsv 24 апреля 2023, 17:56
    Обновление Scala Rider G4 52
    cloudsv 12 ноября 2022, 19:16
    Установка и настройка minidlna 3
    cloudsv 03 ноября 2022, 03:42
    Настройка прокси mtproto для Telegram 52
    cloudsv 03 января 2022, 10:50
    Let's Encrypt это легко и просто 4
    cloudsv 10 сентября 2020, 13:17
    MySQL Workbench падает при подключении 2
    cloudsv 05 августа 2020, 11:57
    Мне вчера стукнуло 34 4
    cloudsv 07 августа 2023, 22:56
    Linux Asus ROG x13 flow 2022 GV301RE и Linux 0
    cloudsv 15 апреля 2023, 16:23
    Linux Уведомление о смены workspace в X11 Linux 0
    cloudsv 17 октября 2020, 09:55
    Linux Отключить DHCP IPv6 в systemd 0
    cloudsv 30 июля 2020, 21:54
    О жизни Мне вчера стукнуло 34 4
    cloudsv 15 апреля 2020, 15:45
    Linux Основные hotkeys редактора Vim 0
    cloudsv 01 октября 2019, 08:00
    Linux Локальный редирект порта в Linux 0
    cloudsv 25 августа 2019, 16:14
    О жизни Социальная сеть от Яндекса Aura 0
    cloudsv 30 июля 2019, 21:34
    О жизни 33 year old 0
    cloudsv 25 июня 2019, 18:29
    Telegram Полезные боты в Telegram 2