Como “fechar” portas abertas?

Como “fechar” portas abertas?

Há alguns dias comecei a me preocupar muito com a segurança dos meus dados, acabo nmapme deparando com:nmap 127.0.0.1

Surpresa, surpresa, tenho muitos serviços ativos, ouça 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 eupoderuse é ssh(embora provavelmente não esteja bem configurado, deixarei esse assunto para outra pergunta).

Pelo que eu sei, ippo protocolo é usado pelo CUPS para compartilhar minhas impressoras, não preciso compartilhá-las, apenas acessar as impressoras de um servidor.

Esta é a saída netstat -lntupdo usuário root, removendo os endereços de 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 eu os estiver usando?

Responder1

Determine sua exposição

Pegando a saída do netstatcomando, o que parece ser um monte de 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 do terreno

Olhando para esta lista, há vários serviços que eu deixaria de lado.

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

Comece a reduzi-lo - desative o Samba

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

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

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

Desativar serviços pode ser confuso com todo o fluxo que está acontecendo com os negócios iniciantes, /etc/rc.d, por isso 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 desligados:

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

Mantendo-os afastados... permanentemente

Para mantê-los desligados, tenho usado esta ferramenta, sysv-rc-confpara gerenciar serviços a partir de um console, funciona melhor que a maioria. Ele 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 resto do que NÃO é necessário

Então agora que o Samba acabou, ficamos com 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

Para os 3 restantes, você pode fazer as mesmas coisas que fizemos no Samba para desligá-los também.

COPOS?

Para desligar o CUPS, que você realmente não precisa, a propósito, você pode seguir a mesma dança de desligar o serviço e desativá-lo na 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 existe realmente uma solução mágica para tornar esses serviços "inteligentes" para que sejam executados quando estão sendo usados, e não o tempo todo.

#1 – systemd vs.

Parte disso é a atual divisão entresistemaesubir na vida. Há uma boa visão geral das 2 tecnologias concorrentesaqui.

Ambas as tecnologias estão tentando fazer coisas ligeiramente diferentes, IMO, dados seus conjuntos de recursos, o systemd parece mais voltado para servidores, enquanto o upstart parece mais voltado para o desktop. Com o tempo, isso vai se resolver, IMO, e ambos os serviços serão estáveis ​​e ricos em recursos.

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

#2 – suporte de serviço

Alguns serviços não suportam ser interrompidos/iniciados muito bem, se é que suportam. Serviços como esse sshdparecem fazer pouco sentido para serem executados sob demanda, especialmente se forem muito usados. Além disso, alguns serviços, como o Apache, fornecem mecanismos internos para ativar mais ou menos seus próprios ouvintes gerenciando a si mesmos. Portanto, não está claro como o serviço sob demanda é fornecido 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 instalando apenas o que é absolutamente necessário, mas na verdade é uma escolha pessoal. Compreender que esses serviços existem e o que eles fazem é realmente importante. No final das contas, um computador é uma ferramenta e, ao usar 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 devemos buscar ao lidar com computadores e Unix em geral.

Referências

Responder2

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 externamente.

Não execute serviços que você não precisa. Desinstale todos os softwares não necessários.

Mudarsenhaspara ser mais forte. Verifique o uso do sistema, não vá atrás de nenhum site interessante ao acaso. 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 pelobrilho da tecnologia.

Responder3

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 integrado para iptables.

Um conjunto de regras simples para começar: (você pode simplesmente digitá-los em um prompt de comando; para torná-los permanentes, adicione-os aos seus scripts de inicialização ou diga-nos qual distro você está usando. No Centos, por exemplo: system-config -firewall é uma boa UI para configurar regras de iptables)

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

Basicamente - permite entrada de ssh; largue todo o resto.

Sua cadeia INPUT agora se parece com isto:

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

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

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

Os -Iprefixos e regras da lista; -Aanexa uma regra. Então sua corrente agora fica assim:

  • Se um pacote estiver entrando no meu computador para 'samba' - permita
  • Se um pacote estiver chegando ao meu computador para 'ssh' - permita
  • Se um pacote não corresponder a nenhuma das regras anteriores, 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 que são roteados através do seu computador (ou seja, pacotes que 'transitam' pelo seu computador, como a área de trânsito de um aeroporto - coisas que não sãoINPUT porque não estão entrando no seu computador ).

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

informação relacionada