Dependendo do tipo de SSH necessário, você pode conseguir esse objetivo (para arquivos não-triviais) usando IPTables para finalizar sessões se o tamanho do pacote for maior que, digamos, 1400 bytes. Isso significa que o ssh interativo funcionará principalmente, mas assim que algo tentar enviar um pacote de 1500 bytes como o scp para um arquivo maior que 1499 bytes, assumindo uma MTU padrão de 1500, ele terminará a conexão.
Isso também impedirá o ataque "catting" que você mencionou.
Infelizmente, isso significa que você pode ter problemas para editar alguns arquivos com um editor de texto, se a tela precisar desenhar mais de 1400 caracteres, ou se você precisar capturar um arquivo longo ou fazer uma lista longa de diretórios.
No caso mais simples, um comando para fazer isso pode ser parecido com
iptables -I OUTPUT -p tcp --dport 22 -m length --length 1400:0xffff -j DROP
Podemos fazer isso funcionar melhor combinando as verificações de comprimento de pacote com ipt_recent, para permitir um número limitado de pacotes maiores que 1400 bytes dentro de um prazo definido (digamos 8 pacotes por 5 segundos) - isso permitiria pacotes de até 12k para passar, mas pode lhe dar a interatividade necessária para editar arquivos etc. Você pode, é claro, ajustar o número de pacotes.
Isso pode parecer algo como
iptables -I OUTPUT -p tcp --dport 22 -m length --length 1400:0xffff \
-m recent --name noscp --rdest --set
iptables -I OUTPUT -p tcp --dport 22 -m length --length 1400:0xffff \
-m recent --name noscp --rdest --update --seconds 5 --hitcount 8 \
-j REJECT --reject-with tcp-reset
Os exemplos de regra acima protegem apenas contra uploads scp, como scp myfile.data remote.host:~
. Para proteger-se adicionalmente contra downloads scp, como scp remote.host:~/myfile.data /local/path
, repita as regras acima, mas substitua --dport
por --sport
.
Um hacker indício pode contornar essas limitações definindo um MTU de menos de 1400 em sua máquina (ou forçar mtu ou similar). Além disso, enquanto você não pode limitar isso a certos usuários, você pode limitá-lo por IP modificando as linhas do iptables conforme apropriado !!
Felicidades,
David Go