Centos 6.4 apenas permite ao usuário ligar a determinada porta?

5

Como eu configuro um servidor CentOS 6.4 para que certos usuários possam apenas executar servidores em certas portas? por exemplo. se eu tenho um usuário que é usado para executar um servidor e eu só quero que ele seja capaz de ligar à porta 1036.

    
por DrAwesome 17.10.2013 / 19:32

1 resposta

4

Eu sei que você pode fazer isso usando namespaces de rede, porque é assim que eu fiz isso. Mas é bem complicado.

O processo seria este.

  1. Crie um namespace de rede usando unshare
  2. Crie um dispositivo veth usando ip link add type veth ....
  3. Mova uma extremidade do veth para este dispositivo usando ip link set vethX netns ${PIDOFUNSHARE}
  4. Abra o loopback (se já não estiver) no novo namespace.
  5. Abra um endereço IP (se já não estiver) no novo namespace e no vethX device.
  6. Defina uma rota padrão no novo namespace de rede para um IP no namespace pai.
  7. Defina uma rota estática para o ip que você adicionou no namespace filho para descer o vethX no namespace pai.

Agora, o usuário não confiável, é claro, tem total propriedade desse IP, mas você pode usar IPtables no namespace pai para fazer o DNATing na porta específica à qual ele tem permissão de vincular e restringir a comunicação apenas a essa porta. É impossível para o usuário negar efetivamente o serviço em outra porta para outro usuário, pois ele tem um IP específico que funciona somente dentro desse namespace de usuários.

Observe que as coisas são mais complicadas se você usar nslcd ou nscd para o serviço de resolução de nomes, pois o soquete unix usado para a comunicação entre processos é inválido no namespace filho. A única maneira que eu fui capaz de consertar isso foi para corrigir esses programas para fornecer um transporte TCP e fazer serviços de resolução de nomes no namespace pai sobre TCP.

Eu também escrevi um programa em C que usa chamadas de netlink para definir todas as opções acima. O programa é de código fechado, então infelizmente não posso compartilhá-lo com você.

Para o registro, fazer isso no Fedora é um pouco mais fácil, porque você pode criar namespaces de rede nomeados nele. Mas o EL6 não fornece a funcionalidade /proc/<pid>/ns para fazer isso.

    
por 17.10.2013 / 20:49

Tags