Configuração do Iptables para permitir o Steam Client

1

Eu recentemente obtive e configurei uma pequena caixa de roteador Linux (Debian). Eu estou adicionando-o a uma rede existente para criar uma pequena sub-rede com propriedades específicas, ou seja, filtragem de conteúdo da Internet. Eu estou tirando o tráfego de http / https (80/443) e empurrando-o através de serviços de filtragem rodando na caixa com:

$IPT -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 8080
$IPT -t nat -A PREROUTING -i eth1 -p tcp --dport 443 -j REDIRECT --to-port 8080

Embora isso funcione corretamente (quando as máquinas clientes conhecem o proxy https), não consigo trabalhar com aplicativos que não sejam do navegador, ou seja, o cliente Steam. É suposto usar um intervalo de portas TCP e UDP. Eu tentei criar regras ACCEPT para esses intervalos para TCP e UDP e para conexões dport e sport sem sucesso.

Estou entendendo mal alguma coisa sobre o roteamento? Eu suponho que não tenho que encaminhar qualquer coisa porque eu sou o cliente, consumindo suas portas. Eu pensei que eu só tinha que permitir o tráfego nas portas e que, em seguida, seria encaminhar para o ponto final do servidor e voltar. Alguém sabe como permitir que o cliente Steam (ou todo o tráfego em todas as portas) no iptables?

SEGUNDO EDIT (código diferente):

Com base nos comentários, decidi tentar atualizar meu roteiro, pegando diferentes linhas que estava tentando e apenas aceitando tudo. No entanto, ainda não parece funcionar, pelo menos para o Steam. Este é o meu código bruto sem que eu tente limpá-lo para este site, talvez eu tenha perdido alguma coisa quando fiz isso.

#!/bin/sh
IPT=/sbin/iptables

# Flush all chains, to start with a clean slate.
$IPT -F
$IPT -t nat -F

# Set filter Policies. By default, ACCEPT everything.
$IPT -P INPUT ACCEPT
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD ACCEPT

# Set server INPUT rules.
$IPT -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -i eth1 -j ACCEPT
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
$IPT -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
$IPT -A INPUT -p icmp -m icmp --icmp-type echo-request -j ACCEPT

# Attempt to blanket statement accept everything (all ports, essentially)
$IPT -A INPUT -p tcp -m tcp --dport 0:65000 -j ACCEPT
$IPT -A INPUT -p udp -m udp --dport 0:65000 -j ACCEPT
$IPT -A FORWARD -p tcp -m tcp --dport 0:65000 -j ACCEPT
$IPT -A FORWARD -p udp -m udp --dport 0:65000 -j ACCEPT
$IPT -A OUTPUT -p tcp -m tcp --dport 0:65000 -j ACCEPT
$IPT -A OUTPUT -p udp -m udp --dport 0:65000 -j ACCEPT

# Accept minecraft, this is working
$IPT -A INPUT -p tcp -m tcp --dport 25565 -j ACCEPT
$IPT -A OUTPUT -p tcp -m tcp --dport 25565 -j ACCEPT
$IPT -A FORWARD -p tcp -m tcp --dport 25565 -j ACCEPT

# Set router FORWARD rules.
$IPT -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A FORWARD -i eth1 -o eth0 -j ACCEPT

# Masquerade outgoing LAN traffic.
$IPT -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j MASQUERADE

$IPT -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j REDIRECT --to-port 8080
$IPT -t nat -A PREROUTING -i eth1 -p tcp --dport 443 -j REDIRECT --to-port 8080

# Port forward minecraft, simple enough
$IPT -t nat -A PREROUTING -i eth0 -p tcp --dport 25565 -j DNAT --to-destination 172.16.1.100
    
por BlargleMonster 30.04.2013 / 23:52

2 respostas

0

Apenas para ajudar alguém que possa encontrar esse problema:

O problema foi um pouco bobo. Eu não tinha habilitado o encaminhamento de IP no kernel. Desde que eu queria que isso fosse permanente acabei de atualizar o /etc/sysctl.conf mudando a linha de encaminhamento IPv4 para ser

net.ipv4.ip_forward = 1

e reiniciou a máquina.

    
por 26.08.2013 / 16:56
0

Consegui colocar na lista de permissões todos os endereços IP usados pelo Steam. As chances são de que eles não se apliquem em sua área (tudo por aqui passa pelos canos da Level 3), mas vou mostrar como eu fiz isso.

Primeiro, tenho uma cadeia personalizada que é chamada da cadeia FORWARD:

# Create chain to filter IP addresses
iptables -N zone_lan_filter

# Filter TCP and UDP traffic
iptables -A FORWARD -p tcp -j zone_lan_filter
iptables -A FORWARD -p udp -j zone_lan_filter

# Reject everything else
iptables -A FORWARD -p tcp -j REJECT
iptables -A FORWARD -p udp -j REJECT

A cadeia personalizada é literalmente apenas um enorme intervalo de endereços IP:

# When a packet is sent to this chain, accept it if it matches any of the rules below
#
# Addresses in these ranges are registered to Valve Corporation and are used by Steam
iptables -A zone_lan_filter -p tcp -m iprange --dst-range 208.64.200.0-208.64.203.255 -j ACCEPT
iptables -A zone_lan_filter -p udp -m iprange --dst-range 208.64.200.0-208.64.203.255 -j ACCEPT
iptables -A zone_lan_filter -p tcp -m iprange --dst-range 205.196.6.0-205.196.6.255 -j ACCEPT
iptables -A zone_lan_filter -p udp -m iprange --dst-range 205.196.6.0-205.196.6.255 -j ACCEPT

Esse primeiro grupo é usado pelo Steam ao fazer login. Eventualmente, temos outra lista de endereços IP que pertencem aos CDNs usados pelo Steam para fazer download de jogos e correções:

# Addresses in these ranges are registered to Highwinds Network Group and are used by Steam
iptables -A zone_lan_filter -p tcp -m iprange --dst-range 205.185.217.0-205.185.217.255 -j ACCEPT
iptables -A zone_lan_filter -p udp -m iprange --dst-range 205.185.217.0-205.185.217.255 -j ACCEPT
iptables -A zone_lan_filter -p tcp -m iprange --dst-range 205.185.201.0-205.185.201.255 -j ACCEPT
iptables -A zone_lan_filter -p udp -m iprange --dst-range 205.185.201.0-205.185.201.255 -j ACCEPT

Em seguida, chegamos a uma lista de endereços IP que pertencem aos principais ISPs da minha área. Estes são obrigados a ser diferentes em qualquer lugar fora do Colorado:

# Addresses in these ranges are registered to Level 3 Communications and are used by Steam
iptables -A zone_lan_filter -p tcp -m iprange --dst-range 162.97.0.0-162.97.255.255 -j ACCEPT
iptables -A zone_lan_filter -p udp -m iprange --dst-range 162.97.0.0-162.97.255.255 -j ACCEPT
iptables -A zone_lan_filter -p tcp -m iprange --dst-range 204.245.0.0-204.245.63.255 -j ACCEPT
iptables -A zone_lan_filter -p udp -m iprange --dst-range 204.245.0.0-204.245.63.255 -j ACCEPT

Por fim, tudo o que não foi incluído na lista de permissões é retornado:

# If none of the rules above matched, return to previous chain
iptables -A zone_lan_filter -j RETURN

Então, como eu criei esses endereços IP? Registrando tudo no netfilter:

iptables -I FORWARD -j LOG --log-prefix "iptables_log: "

Estes são colocados no log do sistema, que você pode visualizar da seguinte forma:

dmesg | grep iptables_log

Com um endereço IP de destino do dmesg, você pode usar o whois para obter o CIDR em uso pela organização em que o endereço IP está registrado.

whois também lhe dará um link para uma página no ARIN que lista um monte de outros endereços IP usados por essa organização. Por exemplo, whois 208.64.200.0 imprime as seguintes informações:

OrgName:        Valve Corporation
OrgId:          VC-2
Address:        10900 NE 4th St, Suite 500
City:           Bellevue
StateProv:      WA
PostalCode:     98004
Country:        US
RegDate:        2010-11-12
Updated:        2010-11-12
Ref:            http://whois.arin.net/rest/org/VC-2

Siga o link na parte inferior da página ARIN e vá para redes relacionadas . Você pode colocar na lista de permissões todos esses intervalos de rede.

    
por 23.05.2013 / 09:31