Dependendo do que o SSH é necessário, talvez você consiga atingir esse objetivo (para arquivos não triviais) usando o IPTables para encerrar as sessões se o tamanho do pacote for maior, digamos 1400 bytes. Isso significa que o ssh interativo funcionará principalmente, mas assim que algo tentar enviar um scp semelhante a um pacote de 1500 bytes para um arquivo maior que 1499 bytes, assumindo um MTU padrão de 1500, ele encerrará 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 criar um arquivo longo ou fazer uma lista longa de diretórios.
No caso mais simples, um comando para fazer isso pode parecer algo como
iptables -I OUTPUT -p tcp --dport 22 -m length --length 1400:0xffff -j DROP
Podemos melhorar esse trabalho combinando as verificações de tamanho de pacote com ipt_recent, para que você permita um número limitado de pacotes maiores que 1400 bytes em um período de tempo definido (digamos 8 pacotes por 5 segundos) - isso permitiria que pacotes de até 12k passassem , mas pode fornecer 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 regras acima protegem apenas contra uploads de scp como scp myfile.data remote.host:~
. Para proteger adicionalmente contra downloads scp, como scp remote.host:~/myfile.data /local/path
, repita as regras acima, mas substitua --dport
por --sport
.
Um hacker capaz de contornar essas limitações definindo um MTU inferior a 1400 em sua máquina (ou forçando mtu ou similar). Além disso, embora você não possa limitar isso a determinados usuários, você pode limitar por IP modificando as linhas do iptables conforme apropriado !!
Cheers, David Go