Я пытаюсь настроить перехватывающий портал на сервере 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, который я обновляю в своем веб-приложении.
Любая помощь будет принята с благодарностью в решении этой проблемы.
Следуя ответу @ 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
Почему вы используете:
$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 в качестве специального правила вместо его перенаправления в вашу форму.