Ubuntu
使用 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 上。
任何幫助將不勝感激解決這個問題。
根據@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 作為特殊規則,而不是將其重定向到您的表單。