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.