Eu tenho uma questão bastante estranha. Eu tenho um servidor com duas interfaces de rede eth0
e eth1
. Cada um está conectado a uma rede diferente. Cada rede possui um gateway de internet. O servidor possui várias conexões de saída : http (alguns scripts nos sites de raspagem de servidor), cliente nfs, cliente samba, cliente dns e um buscador de e-mail para citar apenas alguns.
Por razões pelas quais não vou entrar, preciso dividir esses clientes de saída para que o tráfego http, nfs, samba e dns de saída seja solicitado apenas eth0
enquanto o restante ocorrer eth1
.
Eu li algumas pesquisas no Google e parece que iptables
é o que eu preciso, mas eu realmente não tenho idéia. Só estou acostumado a gerenciar regras de firewall de entrada ufw
.
Alguém poderia começar com algumas regras de exemplo e me dizer como fazer o sistema adotar essas regras na inicialização? Idealmente, sem me bloquear da minha conexão SSH ( posso obter acesso físico, mas prefiro não).
Editar Posso dividir os clientes em dois usuários, se for possível limitar todo o tráfego de saída de uma conta para uma interface. no papel que parece ser mais fácil.
fonte
iftop
e cada uma mostra o tipo certo de tráfego. Muito obrigado.iptables-save
eiptables-restore
. Se você estiver usando o NetworkManager, poderá configurar os scripts do dispatcher para automatizar o processo. Infelizmente, a página oficial do NM não possui documentação sobre o recurso, mas a documentação do Ubuntu e do Arch Linux o menciona.Bem, a maneira " mais fácil " deve ser instruir os programas únicos a usar uma interface específica (ou o ip da interface. Por exemplo:
instrui o ping a usar eth1 como uma interface de origem, enquanto
instrui o wget a percorrer a interface que tem
10.0.0.1
como endereço IP.Honestamente, eu não sei se é possível com todos os programas que você precisa, mas é um começo para reduzir as regras que você precisa escrever
iptables
e osiproute
programas.Para começar, você deve ler este tutorial sobre várias conexões com a Internet . Uma boa leitura também é um dos milhares de tutoriais do iptables, especialmente em
outbound filtering
,process
/pid filtering
eport filtering
.fonte
A maneira correta de fazer isso é ligar () à interface que você deseja usar para pacotes de saída. Desde então, você pode configurar rotas com os comandos
ip route
eip rule
para controlar como os pacotes são roteados com base em sua interface de saída. Para o meu exemplo, assumirei a seguinte rede:Vou criar duas tabelas de roteamento, uma para o tráfego de saída para eth0 chamado alternativo e uma tabela para eth1 chamada main. A tabela de roteamento main sempre existe e é a tabela normal usada pelos comandos
route
eip route
. A maioria das pessoas nunca lida com outras mesas. Para criar a tabela chamada alternativa, adicionaremos a seguinte linha ao/etc/iproute2/rt_tables
:A tabela principal tem uma prioridade padrão de 254. As regras para as quais a tabela de roteamento está em vigor são controladas pelo
ip rule
comando. Por padrão, esse comando imprimirá uma lista de regras existentes que devem se parecer com isso:Isso basicamente diz que procurará uma rota na tabela,
local
que é uma tabela especial mantida pelo kernel para rotas locais, como meu próprio endereço IP. Ele tentará a tabela principal e a tabela padrão. O padrão da tabela normalmente está em branco; portanto, se não houver correspondência principal, não haverá rota para o host. Primeiro, vamos preencher a tabela alternadamente com as regras para eth0.Você normalmente deseja que a
alternate
tabela seja semelhante àmain
tabela. As únicas diferenças são quando o roteamento deve ser diferente. Você pode não querer incluir a segunda linha acima, se desejar literalmente que todo o tráfego NFS, HTTP etc. seja transmitido pelo gateway padrão no eth0, mesmo que seja destinado à rede no eth1. O próximo passo é adicionar uma regra para quando usar esta tabela de roteamento alternativa:Esta regra diz que qualquer tráfego proveniente de um endereço na rede 192.168.0 usará a
alternate
tabela de roteamento em vez damain
tabela normal . A última etapa é garantir que todos os clientes que devem usar seeth0
liguem a ele. Comwget
, por exemplo, definido--bind-address=192.168.0.2
, para NFS defina oclientaddr=192.168.0.2
opção de montagem. Se você estiver usando o LibWWW com Perl, poderá definir a opção localaddr em LWP :: UserAgent para controlar a interface local à qual se liga. Se você possui um cliente, não pode controlar a fonte de ligação e compilação não é uma opção, poderá usar uma regra iptables para modificar seu endereço, mas isso é mais um hack e pode não funcionar. Você precisaria de uma regra SNAT configurada na cadeia PREROUTING da tabela nat ou da tabela mangle. Você ainda precisará das tabelas de roteamento modificadas fornecidas acima para que isso funcione.fonte