Ubuntu

使用 iptables(或代理)將某些網址列入白名單

  • April 19, 2017

我正在嘗試在 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 作為特殊規則,而不是將其重定向到您的表單。

引用自:https://serverfault.com/questions/845217