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.