É possível simular “sem acesso externo” de uma máquina Linux durante o desenvolvimento?

7

Às vezes, faço o upload de um aplicativo para um servidor que não tem acesso externo à Internet.

Eu gostaria de criar o mesmo ambiente em minha máquina para testar alguns recursos no aplicativo e evitar erros (como ler um RSS de uma fonte externa).

Eu pensei em apenas desconectar meu cabo ethernet para simular, mas isso parece arcaico e eu não sei se vou levantar as mesmas exceções (especialmente em Python) ao fazer isso em comparação com as limitações no servidor.

Então, como eu simulo "nenhum acesso externo" na minha máquina de desenvolvimento? A "desativação" da minha interface ethernet e a reativação posterior (com o comando "no hassle") terão o mesmo comportamento que o servidor sem acesso externo?

Estou usando o Ubuntu 10.04. Obrigado!

    
por Somebody still uses you MS-DOS 21.03.2011 / 16:05

4 respostas

8

A exclusão da rota padrão deve fazer isso. Você pode mostrar a tabela de roteamento com /sbin/route e excluir o padrão com:

sudo /sbin/route del default

Isso deixará seu sistema conectado à rede local, mas não tem idéia de para onde enviar os pacotes destinados para além. Isso provavelmente simula a situação "sem acesso externo" com muita precisão.

Você pode colocá-lo de volta com route add (lembrando-se de que seu gateway deveria estar) ou simplesmente reiniciando a rede. Eu apenas tentei em um sistema com NetworkManager, e zapping o padrão funcionou bem, e eu poderia restaurá-lo simplesmente clicando no ícone do painel e re-escolhendo a rede local. É possível que o NM faça isso sozinho em outros eventos, então fique atento.

Outra abordagem seria usar uma regra iptables para bloquear o tráfego de saída. Mas acho que a abordagem de roteamento é provavelmente melhor.

    
por 21.03.2011 / 16:20
5

Você escreveu

So, how do I simulate "no external access" in my development machine?

How do I "deactivate" my ethernet interface and reactivate later with no hassle?

Estas são duas perguntas ou uma pergunta? Não tenho certeza do que você quer dizer com simulate "no external access" . No entanto, para desativar a interface ethernet, você poderia simplesmente fazer

#ifdown eth0
#ifup eth0

ou qualquer que seja o seu dispositivo de internet. Isso trará sua interface Ethernet para baixo e para cima, respectivamente.

    
por 21.03.2011 / 16:33
2

Você pode executar seu código em uma máquina virtual (Modo do usuário Linux, VServer, OpenVZ, VirtualBox, VMWare, KVM,…) que fornece apenas uma interface de rede somente host (ou seja, sem roteamento da VM para qualquer lugar, exceto a máquina host).

Se você executar o aplicativo como um usuário dedicado appuser , poderá restringir o acesso à rede desse usuário. Certifique-se de ter iptables (Ubuntu: iptables Instale o iptables http://bit.ly/software-small ) e iproute2 (comando ip ) (Ubuntu: iproute Instale o iproute http://bit.ly/software-small , < hpr="http://packages.ubuntu.com/proute-doc"> iproute-doc Instale o iproute -doc http://bit.ly/software-small ) instalado. Em seguida, você pode usar iptables para marcar o tráfego de saída dos processos em execução como appuser e ip rule e ip route para configurar uma tabela de roteamento alternativa para esse usuário.

ip rule add fwmark 1 table 1
ip route add 127.0.0.0/0 table 1 dev lo
iptables -t mangle -A OUTPUT -m owner --uid-owner appuser -j MARK --set-mark 1

(Nota: não testado. Veja também mais exemplos de manipulação de pacotes IP do Linux .)

    
por 21.03.2011 / 23:42
1

É para isso que os contêineres ( link ) são um pouco parecidos com o chroot, mas são mais refinados, têm controle de rede e outras coisas também.

Infelizmente, não tenho ideia de como usá-los. (Meu treinamento só foi como para saber que eles existem e mais ou menos o que eles fazem.)

docker é um aplicativo que gerencia contêineres, você não deseja fazer isso manualmente.

    
por 21.07.2016 / 16:56