Использование iptables (или прокси) для внесения определенных веб-адресов в белый список

Я пытаюсь настроить перехватывающий портал на сервере Ubuntu.

Я хочу иметь возможность перенаправлять весь трафик в мое веб-приложение (тот же ящик), чтобы они можно зарегистрироваться. После регистрации MAC-адрес пользователя добавляется в ipset, которому затем разрешается использовать Интернет в обычном режиме.

Моя текущая конфигурация iptables:

#!/bin/sh

# Aliases
IPT=/sbin/iptables
IPS=/sbin/ipset

# Create sets
$IPS create whitelist hash:mac -exist

# Add whitelisted devices to set
$IPS add whitelist 00:11:22:33:44:55 -exist

# flush the iptables
$IPT -F

# Set up the iptables
$IPT -P OUTPUT ACCEPT
$IPT -P INPUT DROP
$IPT -P FORWARD DROP

$IPT -t nat -A POSTROUTING -o WAN -j MASQUERADE
$IPT -A FORWARD -i LAN -o WAN -m set --match-set whitelist src,dst -j ACCEPT

$IPT -A FORWARD -i WAN -o LAN -m state --state RELATED,ESTABLISHED -j ACCEPT

$IPT -t nat -I PREROUTING 1 -p tcp -d bbc.co.uk -j ACCEPT

$IPT -t nat -A PREROUTING -i LAN -m set ! --match-set whitelist src,dst -j DNAT --to-destination 192.168.100.10

$IPT -A FORWARD -d 192.168.100.10 -j ACCEPT

$IPT -A INPUT -i lo -j ACCEPT
$IPT -A INPUT -i LAN -j ACCEPT
$IPT -A INPUT -i WAN -m state --state ESTABLISHED,RELATED -j ACCEPT

Теперь я хочу всегда разрешать всем пользователям (зарегистрированным или нет) доступ к веб-сайту адрес (например, bbc.co.uk) - это тоже должно работать через SSL (443).

Я пытался $ IPT -A OUTPUT -t tcp -d bbc.co.uk -j ACCEPT но это не сработало

Я также видел, как несколько человек предлагали не использовать iptables для таргетинга DNS-адресов и вместо этого использовать прокси-сервер squid. Я не уверен, что смогу добиться этого с помощью squid, так как мне нужно основывать свои правила на ipset, который я обновляю в своем веб-приложении.

Любая помощь будет принята с благодарностью в решении этой проблемы.

0
задан 19 April 2017 в 21:41
2 ответа

Следуя ответу @ user2563336, мне нужно было добавить следующие строки:

$IPT -A FORWARD -d $MYSERVER -j ACCEPT
$IPT -t nat -I PREROUTING 1 -d $MYSERVER -j ACCEPT

Мне также нужно было разрешить DNS, чтобы мое имя хоста могло быть разрешено

Мой полный сценарий iptables :

#!/bin/sh


# Aliases
IPT=/sbin/iptables
IPS=/sbin/ipset


MYSERVER=myserver.com


# Create sets
$IPS create gold hash:mac -exist
$IPS create silver hash:mac -exist


# Add whitelisted devices to set
# $IPS add gold 00:11:22:33:44:55 -exist  # macbook air


# flush the tables
$IPT -F
$IPT -t nat -F


# Set up the iptables
$IPT -P OUTPUT ACCEPT
$IPT -P INPUT DROP
$IPT -P FORWARD DROP


# Allow DNS
$IPT -A OUTPUT -p udp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A INPUT -p udp --sport 53 -m state --state ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -p tcp --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
$IPT -A INPUT -p tcp --sport 53 -m state --state ESTABLISHED -j ACCEPT


# whitelist MYSERVER
$IPT -A FORWARD -d $MYSERVER -j ACCEPT
$IPT -t nat -I PREROUTING 1 -d $MYSERVER -j ACCEPT
$IPT -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT  # this one


# Nat
$IPT -t nat -A POSTROUTING -o WAN -j MASQUERADE
$IPT -A FORWARD -i WAN -o LAN -m state --state RELATED,ESTABLISHED -j ACCEPT
$IPT -A FORWARD -i LAN -o WAN -m set --match-set gold src,dst -j ACCEPT
$IPT -A FORWARD -i LAN -o WAN -m set --match-set silver src,dst -j ACCEPT


$IPT -t nat -A PREROUTING -i LAN -m set ! --match-set gold src,dst -j DNAT --to-destination 192.168.100.10
$IPT -A FORWARD -d 192.168.100.10 -j ACCEPT


$IPT -A INPUT -i lo -j ACCEPT
$IPT -A INPUT -i LAN -j ACCEPT
$IPT -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
0
ответ дан 5 December 2019 в 08:18

Почему вы используете:

$IPT -A OUTPUT -t tcp -d bbc.co.uk -j ACCEPT 

Почему я спрашиваю об этом? Прежде всего, вы используете правила FORWARD и PREROUTING для установки ваших фильтров. Но теперь вы используете другую таблицу для подключения. Скорее всего, это не сработает так, как задумано. См. Диаграмму на wikimedia .

Насколько я понимаю, ваша установка отключает соединение в цепочке PREROUTING. Итак, команда для включения соединения будет такой:

$IPT -t nat -I PREROUTING 1 -t tcp -d bbc.co.uk -j ACCEPT

Что касается вашего второго вопроса: Вы уже отправили на свой сервер неавторизованные системы. Поэтому вам придется настроить любой прокси, чтобы разрешить использование bbc.com в качестве специального правила вместо его перенаправления в вашу форму.

0
ответ дан 5 December 2019 в 08:18

Теги

Похожие вопросы