Primeiro de tudo
iptables
é o comando certo para fazer o trabalho. Mas geralmente você usaria uma quantidade razoável de comandos para configurar uma tabela completa. 1 comando é uma alternação para a tabela.
Para descobrir as tabelas já em vigor e a política padrão, se nenhuma regra for correspondida, use iptables -L
. Geralmente, é necessário escrever um script contendo todas as configurações do iptables. Onde, a princípio, você libera todas as correntes e depois coloca tudo de uma vez. Isso é para evitar perder o que está dentro e fora.
Além disso, verifique sua implementação init se houver scripts de inicialização disponíveis para tornar suas alterações persistentes em ciclos de energia. (Normalmente, suas tabelas são perdidas após a reinicialização).
Basta criar um script para incluir todos os comandos do iptables:
#!/bin/bash
# Flush all chains
iptables -F
#Set defaults policies
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP
# Don't block localhost traffic
iptables -A INPUT -i lo -j ACCEPT
# Don't re-evaluate already accepted connections
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
#Allowed incomming tcp ports
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT # SSH
# Add watherver you wish to allow more
Veja este artigo para mais dicas sobre regras iptable padrão.
Agora responda sua pergunta
Primeiramente, precisamos garantir que você tenha um firewall básico instalado e funcionando. Agora, você pode adicionar sua regra ao seu script para entrar em vigor. Por favor, leve em conta as sugestões das outras respostas: um usuário pode facilmente contornar duas portas bloqueadas com um proxy ou portas alternativas.
Além disso, sua sintaxe não estava correta. --dport pode usar apenas uma porta. Você precisa usar o módulo multi port ou encadear várias regras para fazer isso.
No entanto, bloquear todas as conexões de saída desse usuário fará com que muitos aplicativos falhem, pois eles dependem da conexão lo localizada em localhost ou 127.0.0.1 . (Por exemplo, se você estiver usando o KDM / KDE, seu sistema congelará durante o login).
Você precisa excluir a interface de rede lo da sua regra. Se ainda assim você quiser permitir que o usuário acesse apenas determinados serviços, basta criar uma regra antes da regra DROP, permitindo essas portas. Eu sugeriria o seguinte:
# Don't re-evaluate already ACCEPTed connections:
iptables -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# Allow an outgoing connection, like SSH
iptables -A OUTPUT -p tcp --dport 22 -m owner --uid-owner $USERNAME -j ACCEPT
# Drop anything else that not on localhost
iptables -A OUTPUT ! -o lo -m owner --uid-owner $USERNAME -j DROP