Whitelist baseado em IP para uma porta no Ubuntu Server

1

Atualmente, estou tentando criar um IP da Whitelist com base em uma porta especial. A aplicação por trás é apenas um simples servidor TeamSpeak3.

A lista de permissões de IP obtém o IP do visitante por um script HTTP. Então, o IP está dentro da Whitelist (isso está funcionando muito bem).

Mas como posso permitir esses IPs para a porta "9987" e bloquear todo o resto? Eu tentei isso até agora usando o iptables ACCEPT para o IP especial dentro da Whitelist, mas isso não está funcionando muito bem, porque eu posso entrar no Teamspeak com IPs não permitidos?

Você pode reclamar de outras almas? Eu aprecio qualquer tipo de sugestões úteis!

EDIT: script atual

# Create chain
iptables -N teamspeakCommunication

# Add ip
iptables -A teamspeakCommunication --src 127.0.0.1 -j ACCEPT

# Deny everything else
iptables -A teamspeakCommunication -j DROP

# Use this chain for port
iptables -I INPUT -m udp -p udp --dport 9987 -j teamspeakCommunication
iptables -I INPUT -m tcp -p tcp --dport 10011 -j teamspeakCommunication
iptables -I INPUT -m tcp -p tcp --dport 30033 -j teamspeakCommunication

Outra edição: Eu tentei um pouco e sim: cada pacote está caindo. Então ninguém pode se conectar ao TeamSpeak - como eu queria! O problema era outra corrente. Então eu os limpei.

Mas o novo problema é: A cadeia / regras estão funcionando perfeitamente, então eu adicionei meu próprio ip à cadeia, e tentei recarregar isso. Mas não consigo me conectar.

Meu comando para adicionar o IP:

iptables -A teamspeakCommunication --src 1.2.3.4 -j ACCEPT # 1.2.3.4 stands for my ip

E recarregando:

iptables-save > /etc/network/iptables.up.rules && iptables-apply -t 60

iptables-restore < /etc/network/iptables.up.rules

Mas o recarregamento não se importa com os novos IPs? Eu acho que é apenas uma coisa simples ..

    
por Tyralcori 23.10.2015 / 11:36

1 resposta

1

Primeiramente, é melhor adquirir o hábito de usar apenas -A para adicionar regras, não -I , para que a ordem final das regras na cadeia seja a mesma que você vê no script.

Em segundo lugar, além disso, seu script parece OK.

Talvez outra porta seja usada, ou seja, TCP e não UDP. Eu prefiro permitir explicitamente as portas de que preciso e rejeitar todas as outras tentativas de conexão (talvez usando o log no início para que eu possa ver o que está tentando entrar):

iptables -A chainname -p tcp --dport 1234 -j ACCEPT
...
iptables -A chainname -j LOG -m limit --log-prefix "chainname drop: " --limit 4/minute --limit-burst 20
iptables -A chainname -j DROP

EDITAR:

Você está adicionando regras à teamspeakCommunication chain com -A , o que geralmente é uma boa ideia, como mencionei acima. No entanto, neste caso não é um script que está preenchendo as cadeias de uma só vez, você está mantendo a cadeia de forma incremental. Agora você está anexando a regra -j ALLOW depois da regra geral -j DROP , para que a PERMISSÃO não seja atingida. Nesse caso, dou permissão para adicionar essas regras com -I ; -)

EDIT2:

É possível adicionar temporariamente um endereço IP a uma cadeia que é automaticamente removida após um período de inatividade:

iptables -N teamspeakCommunication
iptables -A teamspeakCommunication -m recent --update --name teamspeak --seconds 1800 -j ACCEPT
iptables -A teamspeakCommunication -j DROP

Isso configura um módulo recent em iptables , que corresponde a endereços IP "vistos recentemente". Você pode adicionar endereços IP a este módulo fazendo o seguinte:

echo "+127.0.0.1" > /proc/net/xt_recent/teamspeak

Depois de fazer isso, o tráfego desse endereço IP será aceito, desde que o tráfego tenha sido visto a partir desse endereço IP nos últimos 1800 segundos (conforme configurado com --seconds ). Depois que nenhum tráfego for visto por 1800 segundos, o endereço IP será removido da lista e será bloqueado novamente.

Se você quiser remover um endereço IP antes da quantidade configurada de segundos, faça o seguinte:

echo "-127.0.0.1" > /proc/net/xt_recent/teamspeak

Você pode verificar a lista simplesmente com

cat /proc/net/xt_recent/teamspeak

que mostra todos os tipos de informações sobre quando os últimos pacotes foram vistos, etc.

Ao carregar o módulo do kernel xt_recent , você pode passar o número de IPs por lista e o proprietário / grupo / permissões padrão dos arquivos /proc/net/xt_recent/* ; estes também podem ser manipulados usando os comandos regulares chown / chmod . Veja modinfo xt_recent para a lista e os nomes dos parâmetros.

    
por 23.10.2015 / 13:20