
Há alguns dias comecei a me preocupar muito com a segurança dos meus dados, acabo nmap
me 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, ipp
o 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 -lntup
do 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 netstat
comando, 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 nmbd
e 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 service
comando:
$ 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-conf
para 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
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-printer
GUI.
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=yes
já existem, systemd
por exemplo, então é apenas uma questão de tempo até que esses recursos sejam concretizados.
Alguns serviços não suportam ser interrompidos/iniciados muito bem, se é que suportam. Serviços como esse sshd
parecem 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 systemd
ou upstart
se integrará a esses tipos de serviços.
- iniciando o sshd na primeira conexão com a porta 22 com a nova ponte de soquete do upstart
- CUPS e systemd: início e parada sob demanda
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 -I
prefixos e regras da lista; -A
anexa 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 INPUT
cadeia refere-se aos pacotes destinados ao seu sistema. Outras cadeias são OUTPUT
para pacotes do seu computador, indo para a Internet e FORWARD
para 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ê :)