Como "fechar" portas abertas?

22

Alguns dias atrás, comecei a me importar muito com minha segurança de dados, acabando nmapcom:nmap 127.0.0.1

Surpresa, surpresa, tenho muitos serviços ativos escutando localhost:

$ nmap 127.0.0.1
Starting Nmap 5.21 ( http://nmap.org ) at 2013-05-05 00:19 WEST
Nmap scan report for localhost (127.0.0.1)
Host is up (0.00025s latency).
Not shown: 993 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
25/tcp  open  smtp
53/tcp  open  domain
111/tcp open  rpcbind
139/tcp open  netbios-ssn
445/tcp open  microsoft-ds
631/tcp open  ipp

Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds

O único que eu poderia usar é ssh(embora provavelmente não esteja bem configurado, vou manter esse assunto em outra pergunta).

Tanto quanto eu sei que o ippprotocolo é usado pelo CUPS para compartilhar minhas impressoras, não preciso compartilhá-las, basta acessar as impressoras a partir de um servidor.

Esta é a saída do netstat -lntupusuário raiz, removendo os endereços do host local:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      497/sshd        
tcp        0      0 0.0.0.0:17500           0.0.0.0:*               LISTEN      2217/dropbox    
tcp        0      0 0.0.0.0:445             0.0.0.0:*               LISTEN      892/smbd        
tcp        0      0 0.0.0.0:50022           0.0.0.0:*               LISTEN      1021/rpc.statd  
tcp        0      0 0.0.0.0:139             0.0.0.0:*               LISTEN      892/smbd        
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      906/rpcbind     
tcp6       0      0 :::22                   :::*                    LISTEN      497/sshd        
tcp6       0      0 :::42712                :::*                    LISTEN      1021/rpc.statd  
tcp6       0      0 :::445                  :::*                    LISTEN      892/smbd        
tcp6       0      0 :::139                  :::*                    LISTEN      892/smbd        
tcp6       0      0 :::111                  :::*                    LISTEN      906/rpcbind     
udp        0      0 0.0.0.0:51566           0.0.0.0:*                           615/avahi-daemon: r
udp        0      0 0.0.0.0:68              0.0.0.0:*                           7362/dhclient   
udp        0      0 0.0.0.0:111             0.0.0.0:*                           906/rpcbind     
udp        0      0 192.168.1.255:137       0.0.0.0:*                           1782/nmbd       
udp        0      0 192.168.1.67:137        0.0.0.0:*                           1782/nmbd       
udp        0      0 0.0.0.0:137             0.0.0.0:*                           1782/nmbd       
udp        0      0 192.168.1.255:138       0.0.0.0:*                           1782/nmbd       
udp        0      0 192.168.1.67:138        0.0.0.0:*                           1782/nmbd       
udp        0      0 0.0.0.0:138             0.0.0.0:*                           1782/nmbd       
udp        0      0 0.0.0.0:655             0.0.0.0:*                           906/rpcbind     
udp        0      0 0.0.0.0:17500           0.0.0.0:*                           2217/dropbox    
udp        0      0 0.0.0.0:5353            0.0.0.0:*                           615/avahi-daemon: r
udp        0      0 0.0.0.0:34805           0.0.0.0:*                           1021/rpc.statd  
udp6       0      0 :::40192                :::*                                1021/rpc.statd  
udp6       0      0 :::111                  :::*                                906/rpcbind     
udp6       0      0 :::655                  :::*                                906/rpcbind     
udp6       0      0 :::5353                 :::*                                615/avahi-daemon: r
udp6       0      0 :::42629                :::*                                615/avahi-daemon: r

Como configuro esses serviços para que eles apenas ouçam o mundo exterior quando os estou realmente usando?

RSFalcon7
fonte
Como você quer dizer que os está usando?
Reactormonk
iniciar os serviços me (com privilégios de usuário e uma shell pai)
RSFalcon7
2
Correto, também se você estiver usando o CUPS apenas no sistema local, poderá ouvir apenas a porta 631 no host local (127.0.0.1). Eu executaria novamente o nmap usando o IP real da máquina e não apenas 127.0.0.1.
slm
1
um comando melhor para executar seria netstat -lntup-l = escuta -n = número -t = tcp -u = udp -p = pid. Mostra quais processos você está executando e quais portas estão expondo. Qualquer coisa aberta para 127.0.0.1 está inacessível à Internet.
Frogstarr78 5/05
1
Se você não precisar do Samba, simplesmente desinstale-o. Se você não precisa dele, você pode restringir-lo para a interface local (por exemplo eth0?), Adicionando em smb.confduas directivas bind interfaces only = yese interfaces = eth0.
LSerni

Respostas:

26

Determine sua exposição

Tomando sua saída do netstatcomando, o que parece muitos serviços é na verdade uma lista muito curta:

$ netstat -lntup | awk '{print $6 $7}'|sed 's/LISTEN//'| cut -d"/" -f2|sort|uniq|grep -v Foreign
avahi-daemon:r
dhclient
dropbox
nmbd
rpcbind
rpc.statd
smbd
sshd

Obtendo uma configuração da terra

Olhando para esta lista, existem vários serviços que eu deixaria em paz.

  • dhclient
    • O daemon do servidor DHCP responsável por obter o seu endereço IP, precisa ter este.
  • Dropbox
    • obviamente Dropbox, tem que ter

Comece a reduzi-lo - desative o Samba

Você provavelmente pode imediatamente desativar o Samba, ele é responsável por 2 dos serviços acima, nmbde smbd. É duvidoso que você realmente precise da execução em um laptop, seja no host local ou no seu IP, de frente para a sua rede.

Para verificar se eles estão em execução, você pode usar o seguinte comando status:

$ status nmbd
nmbd start/running, process 19457
$ status smbd
smbd start/running, process 19423

Desativar os serviços pode ser confuso com todo o fluxo que está ocorrendo nos negócios iniciantes, /etc/rc.d, portanto, pode ser difícil descobrir qual serviço está sob qual tecnologia. Para o Samba você pode usar o servicecomando:

$ sudo service nmbd stop
nmbd stop/waiting
$ sudo service smbd stop
smbd stop/waiting

Agora eles estão fora:

$ status nmbd 
nmbd stop/waiting
$ status smbd 
smbd stop/waiting

Mantê-los fora ... permanentemente

Para fazê-los ficar de fora, tenho usado essa ferramenta sysv-rc-confpara gerenciar serviços em um console, ela funciona melhor do que a maioria. Permite verificar quais serviços você deseja executar e em qual nível de execução eles devem ser iniciados / parados:

$ sudo apt-get install sysv-rc-conf

   ss do sysv-rc-conf

Desativando o restante do que NÃO é necessário

Então agora o Samba está desligado, resta o seguinte:

  • avahi-daemon
    • parte do zeroconf (plug-n-play), desligue-o
  • rpcbind
    • necessário para NFS - desligue-o
  • rpc.statd
    • necessário para NFS - desligue-o

Nos 3 restantes, você pode fazer o mesmo que o Samba para desativá-los.

CUPS?

Para desativar o CUPS, do qual você realmente não precisa, você pode seguir o mesmo procedimento de desativar o serviço e desabilitar a inicialização. Para poder imprimir, você precisará configurar cada impressora individualmente em seu sistema. Você pode fazer isso através da system-config-printerGUI.

Fazendo esses serviços sob demanda?

Este é realmente o cerne da sua pergunta, mas não há realmente uma solução de bala de prata para tornar esses serviços "inteligentes" para que eles funcionem quando estão sendo usados, e não o tempo todo.

# 1 - systemd vs. iniciante

Parte disso é a divisão atual entre systemd e upstart . Há uma boa visão geral das 2 tecnologias concorrentes aqui .

Ambas as tecnologias estão tentando fazer coisas um pouco diferentes, IMO, dados seus conjuntos de recursos, o systemd parece mais voltado para os servidores, enquanto o inicial parece mais voltado para o rolo de desktop. Com o tempo, isso funcionará, a IMO e os dois serviços permanecerão estáveis ​​e ricos em recursos.

Eventualmente, ambos os serviços oferecerão o início e a parada sob demanda de todos os serviços que gerenciam. Recursos como StopWhenUnneeded=yesjá existem, systemdpor exemplo, portanto, é apenas uma questão de tempo até que esses recursos sejam desenvolvidos.

# 2 - suporte de serviço

Alguns serviços não suportam a interrupção / inicialização muito bem, se houver. Serviços como os que sshdparecem fazer pouco sentido, são executados sob demanda, especialmente se forem usados ​​intensamente. Além disso, alguns serviços, como o Apache, fornecem mecanismos para ativar mais ou menos seus próprios ouvintes. Portanto, não está claro como a demanda fornecida systemdou upstartse integrará a esses tipos de serviços.

Isso é realmente necessário?

Você ouvirá de ambos os lados que isso é um exagero ou que você deve adotar uma abordagem minimalista apenas instalando o que você absolutamente precisa, mas é realmente uma escolha pessoal. Entender que esses serviços estão lá e o que eles fazem é realmente o que é importante. No final do dia, um computador é uma ferramenta e, usando um sistema Unix, você já está dizendo que está disposto a espiar por trás da cortina e entender o que faz seu computador funcionar.

Eu diria que esse tipo de questionamento é exatamente o estado de espírito que se deve buscar ao lidar com computadores e o Unix em geral.

Referências

slm
fonte
2
@ RSFalcon7 - de nada! Obrigado pela pergunta!
Slm
12

127.0.0.1 não é o "mundo exterior", ele está olhando dentro de casa.

Verifique a configuração do seu firewall (iptables no Linux hoje), a maioria deles não deve ser acessível do lado de fora.

Não execute serviços desnecessários. Desinstale todo o software não necessário.

Altere as senhas para ficar mais forte. Verifique seu uso do sistema, não vá atrás de nenhum site interessante aleatoriamente. Verifique a configuração anti-phising, anti-scripts, etc. do navegador. Revise seu uso de SSH e su / sudo.

Mas, acima de tudo, a paranóia excessiva é contraproducente. Não fique preso pelo brilho da tecnologia .

vonbrand
fonte
3
Concordo com "Não execute serviços desnecessários". Mas "Desinstale todos os softwares não necessários.", Sério? Contra o que isso deve ajudar?
Hauke ​​Laging
6
@HaukeLaging, como diz o ditado, "ratos aninham-se em montes de roupas não usadas". Qualquer parte do software pode ter uma vulnerabilidade que pode ser explorada. Se o programa não estiver lá, esse risco não existe. Se não for usado, o custo é insignificante. Além disso, um sistema mais simples é mais fácil de supervisionar e manter organizado.
Vonbrand
Agradecemos por lembrar que 127.0.0.1 não é o woruld externo . I totalmente se inscrever para fazer serviços não executados que eu não preciso , mas desinstalação é um pouco de exagero, se eles estão aqui eram útil em algum momento
RSFalcon7
2
@ RSFalcon7, se eles foram úteis (ou são úteis para outra pessoa, eles estão na distribuição, afinal) não tem importância. Se você não usá-lo, jogue-o fora. Menos uso de disco, menos atualização, menos risco geral. Se você precisar mais tarde, reinstale.
Vonbrand #
3

Embora você possa "fechar" serviços individuais - talvez seja mais fácil configurar um firewall. Quase todas as distros comuns (Ubuntu, Debian, Centos, etc) têm suporte para o iptables embutido.

Um conjunto de regras simples para começar: (você pode apenas digitar em um prompt de comando; para torná-los permanentes, adicioná-los aos scripts de inicialização ou nos dizer qual distro você está usando. No Centos, por exemplo: system-config -firewall é uma boa interface de usuário para configurar regras do iptables)

iptables -A INPUT -p tcp --dport ssh -j ACCEPT
iptables -A INPUT -j DROP

Basicamente - permita entrada ssh; largar tudo o resto.

Sua cadeia de entrada agora fica assim:

  • Se um pacote estiver chegando ao meu computador por 'ssh' - permita
  • Se um pacote não corresponder a nenhuma das regras anteriores - apenas jogue-o fora.

Posteriormente, diga que deseja permitir o 'samba' (compartilhamento de arquivos do Windows): você pode executar

iptables -I INPUT-p tcp --dport 465 -j ACCEPT

O -Iprecede e regra à lista; -Aacrescenta uma regra. Portanto, sua cadeia agora fica assim:

  • Se um pacote estiver chegando ao meu computador para 'samba' - permita
  • Se um pacote estiver chegando ao meu computador por 'ssh' - permita
  • Se um pacote não corresponder a nenhuma das regras anteriores - apenas jogue-o fora.

A INPUTcadeia refere-se aos pacotes destinados ao seu sistema. Outras cadeias são OUTPUTpara pacotes do seu computador, indo para a Internet e FORWARDpara pacotes roteados pelo seu computador (ou seja, pacotes que 'transportam' seu computador, como a área de trânsito de um aeroporto - coisas que não são INPUTporque não estão entrando no computador) )

Como uma nota final: nmap'ing 127.0.0.1 não é muito útil; muitos serviços são acessíveis apenas a partir do 127.0.0.1 e nenhum outro endereço. Se você não possui outra máquina, pode executar o nmap - tente usar o Shields UP da Gibson Research! ( https://www.grc.com/shieldsup ) - que é um nmap-lite on-line gratuito. Ou adicione um comentário com seu IP / e-mail e eu nmap você :)

Grynn
fonte