Como fechar portas no Linux?

36

Eu tenho algumas perguntas em fechar o porto, acho que tenho algumas coisas estranhas.

Quando uso a execução

nmap --top-ports 10 192.168.1.1

mostra que a porta 23 / TCP está aberta.

Mas quando eu executo

nmap --top-ports 10 localhost

mostra que a porta 23 / tcp está fechada.

Qual deles é verdade? Eu quero fechar esta porta em todo o meu sistema, como posso fazer isso?

    
por user74080 30.06.2014 / 21:57

5 respostas

44

O Nmap é um ótimo scanner de portas, mas às vezes você quer algo mais autoritário. Você pode perguntar ao kernel quais processos têm quais portas são abertas usando o utilitário netstat :

me@myhost:~$ sudo netstat -tlnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address   Foreign Address   State    PID/Program name
tcp        0      0 127.0.0.1:53    0.0.0.0:*         LISTEN   1004/dnsmasq    
tcp        0      0 0.0.0.0:22      0.0.0.0:*         LISTEN   380/sshd        
tcp        0      0 127.0.0.1:631   0.0.0.0:*         LISTEN   822/cupsd       
tcp6       0      0 :::22           :::*              LISTEN   380/sshd        
tcp6       0      0 ::1:631         :::*              LISTEN   822/cupsd       

As opções que eu dei são:

  • -t somente TCP
  • -l Apenas as portas de escuta
  • -n Não procure nomes de serviço e host, apenas exiba números
  • -p Mostra informações do processo (requer privilégio de root)

Nesse caso, podemos ver que sshd está escutando em qualquer interface ( 0.0.0.0 ) porta 22 e cupsd está escutando na porta 631 de loopback ( 127.0.0.1 ). Sua saída pode mostrar que telnetd tem um endereço local de 192.168.1.1:23 , o que significa que não responderá às conexões no adaptador de loopback (por exemplo, você não pode telnet 127.0.0.1 ).

Existem outras ferramentas que mostram informações semelhantes (por exemplo, lsof ou /proc ), mas o netstat é o mais amplamente disponível. Ele ainda funciona no Windows ( netstat -anb ). O BSD netstat é um pouco diferente: você terá que usar sockstat (1) para obter as informações do processo.

Depois de ter o ID do processo e o nome do programa, você pode encontrar o processo e eliminá-lo se desejar fechar a porta. Para um controle mais refinado, você pode usar um firewall (iptables no Linux) para limitar o acesso a apenas determinados endereços. Você pode precisar desativar uma inicialização de serviço. Se o PID é "-" no Linux, é provavelmente um processo do kernel (isto é comum com o NFS, por exemplo), então boa sorte em descobrir o que é.

Nota: Eu disse "autoritativo" porque você não está sendo prejudicado por condições de rede e firewalls. Se você confia em seu computador, isso é ótimo. No entanto, se você suspeitar que foi hackeado, talvez não seja possível confiar nas ferramentas do seu computador. A substituição de utilitários padrão (e às vezes até mesmo chamadas do sistema) por aqueles que ocultam certos processos ou portas (também conhecidos como rootkits) é uma prática padrão entre os invasores. Sua melhor aposta neste momento é fazer uma cópia forense do seu disco e restaurar a partir do backup; em seguida, use a cópia para determinar a maneira como eles entraram e feche-a.

    
por 30.06.2014 / 22:39
14

Um sistema Linux possui a chamada interface de loopback, que é para comunicação interna. Seu nome de host é localhost e seu endereço IP é 127.0.0.1 .

Quando você executa nmap on localhost , na verdade, você executa o portscan na interface de loopback virtual . 192.168.1.1 é o endereço IP da sua interface física (provavelmente eth0 ).

Então, você executou nmap em duas interfaces de rede diferentes, por isso há uma diferença nas portas abertas. Ambos são verdadeiros.

Se você tiver a porta TCP 23 aberta, é provável que você tenha um servidor telnet em execução (o que não é bom devido à falta de criptografia) ou que você tenha algum tipo de cavalo de Tróia em sua máquina. / p>     

por 30.06.2014 / 22:14
10

Para "fechar" a porta, você pode usar iptables

sudo iptables -A INPUT -p tcp --dport 23 -m state --state NEW,ESTABLISHED -j DROP
    
por 30.06.2014 / 22:20
2

Se você usa nmap localhost , ele informa sobre uma situação diferente: alguns programas no linux funcionam como servidor, embora sejam usados apenas localmente. Isso ocorre porque outros programas os usam como um servidor ao qual eles se conectam. Portanto, ambas as respostas são verdadeiras, já que você faz uma pergunta diferente.

A porta 23 é usada para telnet. Normalmente não é mais usado. Tente fazer nmap -sV 192.168.1.1 para descobrir qual programa abre a porta.

(192 ... é um IP de rede local, então o resultado de nmap <your outside world IP> também dará um resultado diferente, devido a possíveis configurações de firewall, etc.)

    
por 30.06.2014 / 22:22
1

Se você tiver um serviço em execução e escutando na porta 23, é indiscutivelmente mais limpo parar o processo que escuta a porta 23 ( provavelmente telnet ) do que mantê-lo em execução e fechar ou bloquear a porta 23 usando iptables .

Quando não há processo escutando em uma porta, mesmo na ausência de um bloqueio de firewall, qualquer tentativa de conexão a ele deve resultar em uma "conexão recusada" imediata ( ECONNREFUSED to connect(2) )

Uma maneira de encontrar o processo (e seu pid) que escuta na porta 23, se houver tal processo, é:

sudo lsof -i -P | grep ':23 '

Nas listas -i acima, abra as portas da Internet (UDP e TCP) e -P inibe a tradução de portas para nomes de serviço (via /etc/services )

Depois de encontrar o processo em execução na porta 23, você pode descobrir como começou olhando para a árvore de processos (com, digamos, pstree ). Se seu pai for init (muito provável), você poderá pesquisar recursivamente o nome do processo em /etc . por exemplo:

sudo grep -r telnet /etc

Isso deve levar você à melhor maneira de desativá-lo da execução em 1º lugar.

    
por 09.07.2014 / 08:21

Tags