Comandos de rede Linux

Conheça os principais comandos no Linux para gerenciamento de rede, transferência de dados e acesso remoto, assim como o programa screen, que permite abrir vários terminais (remotos ou não) em uma mesma janela. A parte mais conceitual de redes de computadores está disponível no link.

Configuração

Alguns comandos são fundamentais para configuração de rede do computador, todos executados como super usuário. Por exemplo, o "ifconfig" informa os dispositivos e suas propriedades.

Para evitar ter que conectar ou desconectar manualmente as interface de rede conforme o computador muda de lugar, existe o pacote network-manager. Nele, o usuário pode mudar de uma rede para outra usando um pequeno ícone exibido na área de notificação de sua área de trabalho gráfica com uma lista de redes disponíveis (com e sem fios) e vários tipos de conexões (DHCP, manual, rede local). Ele vai ignorar todas as interfaces de rede no "/etc/network/interfaces" para as quais ele não foi projetado - as vezes é necessário desativá-las manualmente para evitar conflito.

A edição do arquivo /etc/network/interfaces permite a conexão do computador à rede, usando DHCP (Protocolo de configuração dinâmica de host) ou IP fixo. Esse arquivo contém a configuração da rede para cada dispositivo, que pode estar escrito diretamente no arquivo ou linkado em outro arquivo, conforme segue:

auto lo
iface lo inet loopback

source /etc/network/interfaces.d/*.cfg

A última linha indica o local onde estão os arquivos de configuração para cada interface (eth0, eth1, wlan0, etc). Para verificar qual delas você deve configurar, execute o comando "dmesg | grep eth". Veja agora o conteúdo do arquivo "/etc/network/interfaces.d/eth0.cfg" (que pode estar diretamente inserido no "/etc/network/interfaces") para um IP fixo:

auto eth0
 allow-hotplug eth0
 iface eth0 inet static
 address 192.168.1.151
 netmask 255.255.254.0
 gateway 192.168.0.2
 network 192.168.0.0
 broadcast 192.168.0.255
 dns-nameservers 10.1.1.0, 8.8.8.8
 dns-search domain.com.br

A linha "auto" lista as interfaces que devem ser ativadas automaticamente ("lo" vem de loopback, usada para a comunicação local entre diversos aplicativos e componentes do sistema, e "eth" de ethernet). Em seguida temos a configuração de cada interface, que inicia com a palavra chave iface. A palavra seguinte, inet, que especifica a familia de endereços da interface - inet para a rede TCP/IP, ipx para interfaces IPX e IPv6 para interfaces configuradas com o protocolo IPV6. Por fim, a palavra static especifica o método que a interface será configurada (neste caso, com endereço estático/fixo). Desse modo, temos: "iface lo inet loopback" para loopback e "iface eth0 inet dhcp" para DHCP. "allow-hotplug" habilita a configuração da placa no momento em que o cabo de rede é conectado.

As linhas restantes são para configurar o IP fixo, não sendo necessárias para o método DHCP. O método mais simples é a configuração dinâmica com DHCP, que requer um servidor DHCP na rede local. Ele pode indicar um hostname ("nome de máquina") desejado, correspondendo à configuração de hostname no exemplo abaixo. O servidor DHCP então manda as configurações para a rede apropriada.

O "gateway" é o endereço do computador responsável por conectar o seu computador a outra rede. As linhas "network" e "broadcast", assim como a "gateway", nem sempre são necessárias.

Caso possua instalado o pacote "resolvconf" (apt-get install resolvconf), mova (ou copiei) as linhas "dns-nameservers" e "dns-search" para dentro do arquivo "/etc/resolv.conf" sem o "dns-". O "search" (pode ser dispensável) é obtido ao executar o comando "hostname  -f" (exceto o nome da máquina). No mesmo arquivo, são indicados os servidores DNS a serem usados, um por linha, com a palavra-chave nameserver seguida por um endereço IP.

Atualização: usando systemd, em versões mais atuais do debian, basta reiniciar o serviço de rede para o arquivo /etc/resolv.conf ser gerado automaticamente pelo resolvconf).

Depois de editar o arquivo, você pode aplicar as alterações reiniciando o serviço relacionado a ele:

# Reiniciando no systemV
$ sudo /etc/init.d/networking restart
# Reiniciando no systemd
$ sudo service networking restart
$ sudo systemctl daemon-reload

Você pode desativar temporariamente apenas uma interface configurada usando o comando "ifdown eth0" e reativá-la com o comando "ifup eth0" - talvez isso seja necessário além do comando acima.

Para mudar o nome do PC, edite os arquivos "/etc/hostname" e "/etc/hosts" (nessa ordem), substituindo o hostname antigo pelo novo. Para efetivar as mudanças, reinicie o serviço (ou o sistema todo mesmo):

/etc/init.d/hostname.sh stop
/etc/init.d/hostname.sh start

O arquivo "/etc/hosts" permite estabelecer uma pequena tabela de mapeamento de endereços IP e nomes de máquina: cada linha indica um endereço IP específico, seguido pela lista de quaisquer denominações associadas.

O proxy em qualquer distribuição Linux é configurado através de variáveis de sistema. Para tornar uma configuração de proxy permanente, usada em todas as subsessões, as seguintes linhas devem ser adicionadas no arquivo "/etc/profile" (https, http e ftp):

export https_proxy=http://username:password@proxy.incolume.com.br:3128
export http_proxy=http://username:password@proxy.incolume.com.br:3128
export ftp_proxy=http://username:password@proxy.incolume.com.br:3128

Caso o proxy não seja autenticado, basta omitir "username:password@".

Monitoramento de rede

O ICMP (Internet Control Message Protocol) é o protocolo usado para transmitir informações complementares sobre as comunicações. Permite testar a conectividade de rede através do comando ping, que envia uma mensagem ICMP "echo request" (solicitação de eco) e o beneficiário se destina a responder com uma mensagem ICMP "echo reply" (resposta echo).

O ping testa o tráfego pela porta 80; para testar outras portas, use o nmap:

$ sudo nmap -p NÚMERO_DA_PORTA URL

O programa "IPTraf" fornece uma interface gráfica que mostra o tráfico em sua rede em tempo real. Para isso, você deverá instalar o programa (1ª linha) e executá-lo (2ª linha):

$ sudo apt-get install iptraf
$ sudo iptraf

O "iftop", assim como o htop, permite monitoramento em tempo real, só que aqui é da rede:

$ sudo apt-get install iftop
$ sudo iftop -i eth1 # monitorar rede do device eth1

Para monitorar o uso de banda por processo, existe o NetHogs. Depois de executado, você pode alternar a exibição entre a largura de banda atual em tempo real (KB/s), ou o total transferido em KB, B ou MB, utilizando a tecla m, ou filtrar por recebido (r) ou enviado (s). Para sair, basta apertar a tecla q.

$ sudo apt-get install nethogs
$ sudo nethogs eth0 # monitorar rede do device eth0

O comando "netstat" permite conhecer quais conexões TCP ativas estão abertas e sendo executadas em um host de rede:

$ sudo apt-get install netstat
$ sudo netstat -a # exibe todas as portas de conexões e de escuta
$ sudo netstat -e # estatísticas
$ sudo netstat -n # exibe endereços e números de porta em forma numérica
$ sudo netstat -s # exibe estatística por protocolo
$ sudo netstat -r # exibe o conteúdo da tabela de roteamento do computador

Um dos principais sniffers, o TCPDump mostra os cabeçalhos dos pacotes que passam pela interface de rede escolhida. Por exemplo, para mostrar quais as ligações de um determinado endereço à porta 80 da interface eth0:

$ sudo tcpdump -i eth0 src numero_ip and dst port 80

Caso queira alterar o monitoramento para um IP de destino de tráfego, deve-se alterar "src" por "dst"; a opção "-nn" impede a resolução de DNS e "-w nome_arq" grava oa saída em um arquivo lido pelo programa. Os parâmetros adicionados são opcionais. O TCPDump exibe uma linha de texto para cada pacote capturado dividido em colunas: a hora da captura do pacote, nome do protocolo, endereços IP de origem e destino e as portas (separadas por ponto) utilizadas na transmissão de dados (o sinal de “>” indica a direção do fluxo).

O wireshark exibe o tráfego graficamente organizados com base nas camadas de protocolo. Isso permite ao usuário visualizar todos os protocolos envolvidos em um pacote. Outras ferramentas mais completas de monitoramento de rede podem ser vistas em 10 Free Server & Network Monitoring Tools that Kick Ass e 20 Command Line Tools to Monitor Linux Performance.

Uma forma de monitorar o servidor web Apache é observando seus arquivos de log, que geralmente ficam em "/var/log/apache":

$ tail -f /var/log/apache/access_log # acessos
$ tail -f /var/log/apache/error_log # erros
$ tail -f /var/log/apache/stats_log # estatísticas

Mais detalhes na documentação de logs do Apache. Outra forma é utilizar o "apachetop", que disponibiliza as informações em tempo real (pode ser instalado pelo comando "sudo apt-get install apachetop").

Para saber quem está conectado no roteador, descubra o ip de seu roteador (digitando o comando "sudo route -n") e, estando em uma rede gerenciada por ele, entre nesse endereço via navegador web, digitando seu login e senha (geralmente o que vem de fábrica é admin e 1234) - depois procure no menu a tela correspondente.

O comando "who" lista os usuário conetado ao computador: a segunda coluna mostra se está logado via console (tty - regular terminal device) ou em um pseudo console (pts - psuedo terminal slave), que pode indicar um xterm, ssh ou screen. Para verificar últimas tentativas de acesso ao computador, existe o arquivo de log /var/log/auth.log. Veja também o post de acesso remoto para saber mais sobre os comandos SSH e SSHPASS.

Veja mais alguns outros comandos de rede:

#mapear rede, ver IPs 'ocupados' terminados em 0 e 100
$ sudo nmap -sP 10.150.1.0-100
#traçar rota realizada pelo sinal do computador para o IP de destino
$ sudo traceroute www.monolitonimbus.com.br
#testar velocidade de conexão
$ sudo bing ip_maquina_local(ou localhost) ip_gateway
# Controle de banda para programa/script/comando, limitando velocidade de download (-d) e upload (-u) em KB/s
$ trickle -s -d 40 -u 20 nome_do_programa

Com relação ao comando nmap, para buscar por portas abertas/fechadas, use a opção -Pn ("All scanned ports are filtered" significa que todas as portas estão fechadas para acesso).

Transferência de dados

Para transferir/copiar arquivos entre computadores, são muito utilizados os comandos scp (mais rápido) e rsync (mais seguro e com mais utilidades). A opção "-r" indica que o comando é recursivo, ou seja, vai copiar pastas e subpastas também. Veja o exemplo:

$ scp -r pasta/arquivo_de_origem user@ip:/pastas_de_destino

O rsync funciona da mesma maneira, tendo também a opção "-v" (verbose), para dar informações, onde "-progress" é para imprimir o progresso da transferência. A opção "-a" (archive) faz com que todas as permissões e atributos dos arquivos sejam mantidos, e opção "-z" (compress) compacta os dados dos arquivos antes de transferi-los. A opção "--delete" diz para apagar arquivos movidos ou deletados (ele não diferencia: apaga no destino se não existir na origem). A opção "--remove-source-files" remove os arquivos de origem após a transferência (o equivalente a mover os arquivos).

$ rsync -azv --progress user@ip:/caminho/pasta_origem/2014-0[1-3]-* .

O ponto indica o diretório onde está (ou seja, copiar o arquivo/pasta "para cá"). Os número entre colchetes indicam que deve-se procurar as pastas 2014-01, 2014-02 e 2014-03. O asterisco indica para considerar todas as variações possíveis de nomes, de modo que o início do arquivo seja o informado até aquele ponto.

Outra opção interessante é o "-R", que preserva o caminho do arquivo da origem no destino. Por exemplo, o comando "rsync foo/bar/foo.c remote:/tmp/" cria o arquivo foo.c na pasta "/tmp"; se utilizar "-R", será criado o arquivo "/tmp/foo/bar/foo.c". Para mais opções do comando rsync, consulte o link.

Em ambos os comandos, deverá ser digitada a senha de acesso do usuário na máquina. Existe uma forma de passar a senha como parâmetro no SSH e scp/rsync, após registro de chave pública, que é através do comando sshpass (veja mais no artigo sobre acesso remoto).

Para gravar sites com seus arquivos linkados de uma só vez, pode-se utilizar o comando wget. Veja um exemplo para o caso do site exigir login e senha de acesso (opcional):

wget -r --user=USUARIO --password=SENHA http://www.site.com.br/path

Seguem alguns parâmetros:

  • -c - continua de onde parar, caso a conexão seja interrompida
  • -r - recursividade
  • -np - não recria todo o caminho do arquivo (o que acontece ao usar recursividade)
  • -nv - só imprime dizendo quando o arquivo foi baixado com sucesso
  • -P 'path' - definir o diretório (path) onde serão baixados os arquivos
  • -i 'lista.txt' - baixa os arquivos que constam de uma lista
  • -A '*.x' - baixa somente os arquivos com a extensão especificada
  • --level=depth - permite especificar um nível máximo de subdiretórios

Para mais opções do comando wget, consulte o link.

O comando cURL (que pode ser instalado via apt-get) também é muito útil não só para download/upload, como também no caso de haver campos no link que usem o método get (adaptável do exemplo abaixo) ou mesmo o post (usando a opção -d) e outras formas de acesso com login e senha - por isso é muito utilizado em técnicas de brute force para tentar acesso. Veja um exemplo bem geral para baixar uma sequência de arquivos (parâmetro "-o"):

$ curl -o pagina#1.zip http://site.com/pagina[00-18].zip

Esse comando baixa arquivos listas entre 00 e 18, salvando com o respectivo índice desde a primeira posição (por isso o #1). Outra utilidade desse comando é visualizar seu IP externo na internet:

$ curl ifconfig.me

Mais exemplos e opções de cURL podem ser vistos clicando no link.

Para ver comandos de serviços FTP, leia o artigo "Como enviar e receber arquivos via FTP".

Segurança

Um firewall é um hardware e/ou software que classifica os pacotes de entrada ou saída de rede (local ou internet) e só deixa passar aqueles combinando certas condições pré-definidas. Pode ser restrito a uma determinada máquina, que filtra todo o tráfego de passagem de uma rede local para internet e vice-versa.

Para restringir o acesso à sua máquina Linux, você deve modificar os arquivos /etc/hosts.allow e arquivo /etc/hosts.deny. Esses arquivos são usados pelo tcpd (tcp wrapper) e sshd para decidir se deve ou não aceitar uma conexão vindo de outro endereço IP. Por exemplo, para permitir ligações a quaisquer serviços protegidos pela tcpd ou sshd apenas de sistemas dentro do domínio exemplo.edu, deixe o conteúdo do arquivo "/etc/hosts.allow" como (ALL é para todos os usuários, o que também pode ser alterado para conter somente o nome de um usuário específico):

ALL: .exemplo.edu

Edite também o arquivo "/etc/host.deny" conforme segue para que o acesso à sua máquina a partir de todos os hosts seja negado, exceto os especificados no hosts.allow:

ALL: ALL

O iptables é uma ferramenta que controla o módulo netfilter, que fornece ao sistema operacional Linux as funções de firewall, NAT e log dos dados que trafegam por rede de computadores. Através de regras, é possível fazer com que os pacotes possam ser ou não recebidos da rede toda, de determinada máquina, interface ou mesmo porta de conexão. O Iptables trabalha através de tabelas (mangle, nat e filter - a padrão), chains (especificam a situação do tratamento dos pacotes) e regras (geralmente compostas de uma Tabela, Opção, Chain, Dados e Ação). Montes as regras em um script e torne-o executável, incluindo sua execução no fim do arquivo "/etc/rc.d/rc.local" para rodar em toda inicialização do sistema. Veja esse exemplo:

#!/bin/bash
#limpando tabelas
iptables -F &&
iptables -X &&
iptables -t nat -F &&
iptables -t nat -X &&
#liberando acesso interno da rede
iptables -A INPUT -p tcp --syn -s 192.168.1.0/255.255.255.0 -j ACCEPT &&
iptables -A OUTPUT -p tcp --syn -s 192.168.1.0/255.255.255.0 -j ACCEPT &&
iptables -A FORWARD -p tcp --syn -s 192.168.1.0/255.255.255.0 -j ACCEPT &&
#compartilhando a web na rede interna
iptables -t nat -A POSTROUTING -s 192.168.1.0/255.255.255.0 -o eth1 -j MASQUERADE &&
echo 1 > /proc/sys/net/ipv4/ip_forward &&
# Protecao contra port scanners ocultos
iptables -A INPUT -p tcp --tcp-flags SYN,ACK,FIN,RST RST -m limit --limit 1/s -j ACCEPT
# Bloqueando tracertroute
iptables -A INPUT -p udp -s 0/0 -i eth1 --dport 33435:33525 -j DROP
#Protecoes contra ataques
iptables -A INPUT -m state --state INVALID -j DROP
#Habilitando porta de FTP
iptables -A INPUT -p tcp -s 192.168.0.45 --dport 21 -j ACCEPT
# Allows HTTP and HTTPS connections from anywhere (the normal ports for websites)
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
# Allows SSH connections 
# The --dport number is the same as in /etc/ssh/sshd_config
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT
#termina
echo "Iptables Pronto"

Veja as opções usadas:

  • "-F" apaga todas as regras
  • "-X" exclui uma regra pelo nome
  • "-t" permite manipular a tabela informada
  • "-A" insere uma nova regra
  • "-s" especifica a origem do pacote
  • "-p" especifica o protocolo

Os possíveis chains são PREROUTING, POSTROUTING e OUTPUT para tabela "nat" e INPUT, OUTPUT e FORWARD para tabela "filter". As ações sempre vem após o parâmetro -j e geralmente são ACCEPT, DROP, REJECT e LOG. Ao utilizar apenas um e comercial (&), o comando é executado em background (segundo plano), enquanto que o uso de dois e comercial (&&) indica que continuará a execução do script somente se o comando anterior tenha sido bem sucedido.

O ip6tables atua sobre a rede IPv6. Quando está ativo, pode se criar dois conjuntos de regras distintas para IPv4 e IPv6, ou criar uma só e deixar fwbuilder traduzir as regras de acordo com os endereços atribuídos aos objetos.

O pacote iptables oferece uma proteção adicional de baixo nível, diretamente dentro da pilha IP do kernel, enquanto o esquema /etc/hosts.{allow,deny} está no nível de aplicativos.

Melhorando qualidade da rede

Visando melhorar a qualidade de serviços de rede, existem técnicas que envolvem a classificação o tráfego de rede em categorias, assim como sua diferenciação ao manejar esse tráfego de acordo com a categoria a qual ele pertence. O "Traffic shaping" limita a taxa de transmissão de dados para conexões relacionadas a algum serviço e/ou máquinas (hosts) para que não haja saturação da largura de banda disponível e deixe outros importantes serviços sem nada.

Os parâmetros são configurados através do comando tc (fornecido pelo pacote iproute). Como sua interface é bem complexa, o uso de ferramentas de alto nível é recomendado, como o wondershaper, que minimiza latências independente da carga da rede em cada interface (via linha de comando ou arquivo "/etc/network/interfaces").

O roteamento dinâmico permite que os roteadores ajustem, em tempo real, os caminhos usados para transmitir pacotes IP. Cada protocolo envolve um método próprio para definir rotas (caminhos mais curtos, usam rotas anunciadas pelos pares, e assim por diante), exibidas pelo comando "route". Quagga é um conjunto de daemons que cooperam para definir as tabelas de roteamento a serem usadas pelo kernel.

Redirecionamento de rede wi-fi para Ethernet (cabo)

Existem dispositivos (como smart TVs antigas) que só aceitam conexão de rede através de cabo (se quiser conexão sem fio, deve-se comprar um adaptador/dongle específico do fabricante, caro e difícil de encontrar). Como solução, é possível redirecionar o tráfego wireless recebido por um notebook (por exemplo) para esse dispositivo, ambos conectados via cabo de rede.

Além do cabo, será preciso configurar no notebook uma rede própria para essa finalidade. Isso é fácil de se fazer no Linux usando o Network Manager (instalado por padrão no Debian e acessível por ícone no canto superior direito). Clique no ícone dele com o botão direito e vá em "editar conexões". Clique na aba "Ethernet" e no botão "Adicionar". Coloque um nome nessa conexão ("Compartilhada", por exemplo), vá para a aba "IPV4" e em "Método", escolha "compartilhada com outros computadores". Clique em "salvar".

Agora, para compartilhar o wi-fi recebido no notebook para o dispositivo usando cabo, basta clicar no ícone do Network Manager e escolher essa conexão pelo nome.

Screen

Quando for executar um comando que rode durante muito tempo, não é conveniente deixar o processo travando um terminal principalmente porque se o terminal cai, o processo vai junto. Pode-se enviar o processo para background, usando "bg comando" ou "comando&". Ainda assim, se deslogar, receber um sinal de hangup e o processo morrer, use "nohup comando &", sendo que a saída do comando será gravada no arquivo nohup.out no diretório corrente. Outra opção mais completa é usar o programa screen.

O Screen é um multiplexador de terminais que permite ao usuário, em uma mesma sessão, abrir várias janelas e realizar atividades paralelas (terminais virtuais). Com o screen, também é possível um usuário ver o que o outro está digitando e vice-versa (ambos os usuários podem digitar os comandos e ambos verão os resultados). Pode ser instalado através do repositório, para iniciar sua utilização (criando uma nova sessão), basta digitar "screen". Se digitar "screen -ls", aparecem as sessões que estão rodando. Escreva "screen -x" para retomar a última sessão ou digite "screen -r NomeDaSessao" para retomar essa sessão.

A partir do momento em que você está dentro do multiplexador screen, todo o gerenciamento é feito utilizando a sequência de caracteres "Ctrl+a+<OPÇÃO>", a ser executado da seguinte forma: pressiona-se Ctrl+a simultaneamente e, após soltar as teclas Ctrl+a, pressiona-se a tecla da opção. A opção "c" cria uma nova sessão; a opção de um número o levará para a janela com aquele número. Por exemplo, você acabou de cirar uma nova sessão e (sessão 0) e vai criar outra (sessão 1). Este novo shell (sessão) é completamente independente do outro na janela 0, ou seja, você pode se conectar a outro servidor a partir deste shell também. Para avançar do shell 0 para o shell 1, utilize Ctrl+a+n (next); ao contrário, digite Ctrl+a+p (previous).

Para navegar para cima e para baixo no terminal, pressione CTRL+A+[ e assim abrir o "copy mode" do screen. Então utilize as teclas de seta e Page Up/Down para navegar como um texto. Para sair desse modo, digite CTRL+A+].

Digite "exit" para fechar a sessão shell. Os outros shells permanecerão ativos e realizando as tarefas que você iniciou. Já o comando CTRL+a+d faz abandonar a sessão screen sem fechá-la. Todos os terminais abertos permanecerão abertos e todos os processos que deixamos rodando continuarão rodando.

Compartilhe o link desse texto, mas se for copiar algum trecho, cite a fonte. Valorize nosso trabalho.
Mais informações na licença de uso do site.

4 Pingbacks/Trackbacks