Как «закрыть» открытые порты?


22

Несколько дней назад я начал беспокоиться о безопасности своих данных, и в итоге nmapя стал:nmap 127.0.0.1

Сюрприз, сюрприз, я много активных сервисов слушаю 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

Единственное, что я мог бы использовать ssh(хотя, вероятно, он не очень хорошо настроен, я оставлю этот вопрос на другом вопросе).

Насколько я знаю, ippпротокол используется CUPS для обмена моими принтерами, мне не нужно делиться ими, просто получай доступ к принтерам с сервера.

Это вывод netstat -lntupпользователя root, удаляющий адреса localhost:

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

Как мне настроить эти сервисы, чтобы они слушали внешний мир только тогда, когда я на самом деле их использую?


Как вы хотите сказать, что вы используете их?
Reactormonk


2
Правильно, также, если вы используете CUPS только из локальной системы, вы можете прослушивать только порт 631 на локальном хосте (127.0.0.1). Я бы повторно запустил nmap, используя фактический IP-адрес, а не просто 127.0.0.1.
SLM

1
Лучшая команда для запуска будет netstat -lntup-l = listen -n = number -t = tcp -u = udp -p = pid. Показывает, какие процессы у вас запущены и какие порты они предоставляют. Все, что открыто для 127.0.0.1, недоступно для Интернета.
frogstarr78

1
Если вам не нужна Samba, просто удалите ее. Если вам это нужно, вы можете ограничить его локальным интерфейсом (например eth0,?), Добавив smb.confдве директивы bind interfaces only = yesи interfaces = eth0.
LSerni

Ответы:


26

Определите вашу экспозицию

Если взять ваш вывод из netstatкоманды, то, что выглядит как множество сервисов, на самом деле очень короткий список:

$ 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

Приступая к земле

Глядя на этот список, есть несколько услуг, которые я бы оставил в покое.

  • dhclient
    • DHCP-сервер, отвечающий за получение вашего IP-адреса, должен иметь этот.
  • раздаточная
    • очевидно Dropbox, должен иметь

Начните уменьшать его - отключите Samba

Вероятно, вы можете сразу отключить Samba, на него приходится 2 из вышеперечисленных сервисов, nmbdи smbd. Сомнительно, что вам действительно нужно, чтобы он работал на ноутбуке, будь то локальный хост или ваш IP, обращенный к вашей сети.

Чтобы проверить, что они работают, вы можете использовать следующую команду status:

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

Отключение сервисов может привести к путанице во всем, что происходит с upstart, /etc/rc.d, бизнесом, поэтому может быть трудно определить, какой сервис и под какой технологией. Для Samba вы можете использовать serviceкоманду:

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

Теперь они выключены:

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

Держать их подальше ... навсегда

Чтобы заставить их остаться в стороне, я использовал этот инструмент, sysv-rc-confчтобы управлять сервисами из консоли, он работает лучше, чем большинство. Это позволяет вам проверить, какие службы вы хотите запустить и на каком уровне запуска они должны быть запущены / остановлены:

$ sudo apt-get install sysv-rc-conf

   ss из sysv-rc-conf

Отключение всего остального, что НЕ нужно

Так что теперь Samba выключен, мы остались со следующим:

  • Avahi-демон
    • часть zeroconf (plug-n-play), выключите его
  • RPCbind
    • нужен для NFS - выключи
  • rpc.statd
    • нужен для NFS - выключи

Для остальных 3 вы можете сделать то же самое, что мы сделали для Samba, чтобы отключить их.

CUPS?

Чтобы отключить CUPS, который, кстати, вам не нужен, вы можете выполнить тот же танец: отключить службу, а затем отключить ее запуск. Чтобы иметь возможность печатать, вам нужно настроить каждый принтер отдельно в вашей системе. Вы можете сделать это через system-config-printerграфический интерфейс.

Делать эти услуги по запросу?

Это действительно суть вашего вопроса, но на самом деле нет решения «серебряной пули» для того, чтобы сделать эти сервисы «умными», чтобы они работали, когда они используются, а не постоянно.

# 1 - системный против выскочки

Частично это текущее разделение между systemd и upstart . Там есть обзор хороший из 2 конкурирующих технологий здесь .

Обе технологии пытаются сделать немного разные вещи, IMO, учитывая их наборы функций, systemd, похоже, больше ориентирован на серверы, тогда как upstart больше ориентирован на настольные ПК. Со временем это сработает, IMO, и оба сервиса будут стабильными и многофункциональными.

В конце концов обе услуги будут предлагаться по требованию, начиная и останавливаясь по всем направлениям для всех услуг, которыми они управляют. Такие функции, как StopWhenUnneeded=yesуже существуют, systemdнапример, так что это только вопрос времени, когда эти возможности будут реализованы.

№ 2 - сервисная поддержка

Некоторые службы не поддерживают остановку / запуск очень хорошо, если вообще. Такие службы, как sshdкажется, не имеют смысла работать по требованию, особенно если они интенсивно используются. Также некоторые сервисы, такие как Apache, предоставляют внутри себя механизмы, позволяющие более или менее раскручивать своих собственных слушателей, управляющих собой. Поэтому неясно, как по требованию предоставляются systemdили upstartсобираются интегрироваться с этими типами услуг.

Это действительно необходимо?

С обеих сторон вы услышите, что это излишне или что вы должны использовать минималистский подход, устанавливая только то, что вам абсолютно необходимо, но это действительно личный выбор. Понимание того, что эти сервисы есть и что они делают, действительно важно. В конце концов, компьютер - это инструмент, и, используя систему Unix, вы уже говорите, что готовы заглянуть за кулисы и понять, что заставляет ваш компьютер работать.

Я бы сказал, что этот тип вопросов - именно тот тип мышления, к которому следует стремиться при работе с компьютерами и Unix в целом.

Ссылки


2
@ RSFalcon7 - пожалуйста! Спасибо за вопрос!
СЛМ

12

127.0.0.1 - это не «внешний мир», он смотрит вокруг дома.

Проверьте конфигурацию вашего брандмауэра (iptables в Linux сегодня), большинство из них не должно быть доступно с другой стороны.

Не запускайте сервисы, которые вам не нужны. Удалите все ненужные программы.

Сменить пароли, чтобы быть сильнее. Проверьте свое использование системы, не гонитесь за любыми интересными веб-сайтами наугад. Проверьте настройки браузера на антифишинг, анти-скрипты и т. Д. Пересмотрите использование SSH и su / sudo.

Но больше всего чрезмерная паранойя контрпродуктивна. Не попадайтесь в ловушку блеска технологий .


3
Я согласен с «Не запускайте услуги, которые вам не нужны». Но "Удалить все ненужное программное обеспечение", серьезно? Что это поможет против?
Hauke ​​Laging

6
@HaukeLaging, как говорится, «мыши гнездятся в кучах неиспользованной одежды». Любая часть программного обеспечения может иметь уязвимость, которая может быть использована. Если программа не существует, этот риск не существует. Если он не используется, стоимость незначительна. Кроме того, более простую систему легче контролировать и поддерживать порядок.
vonbrand

Напоминаем, что 127.0.0.1 не является внешним миром . Я полностью подписан на то, чтобы не запускать ненужные мне сервисы , но удаление - это немного излишне, если они здесь, они когда-
нибудь

2
@ RSFalcon7, если они были полезны (или полезны для кого-то другого, они все- таки есть в дистрибутиве), не имеет значения. Если ты не используешь это, брось это. Меньше использования диска, меньше обновления, меньше риск в целом. Если вам это нужно позже, переустановите.
vonbrand

3

Хотя вы можете «закрывать» отдельные службы - возможно, вам будет проще настроить брандмауэр. Почти все распространенные дистрибутивы (Ubuntu, Debian, Centos и т. Д.) Имеют встроенную поддержку iptables.

Простой набор правил для начала: (вы можете просто ввести их в командной строке; чтобы сделать их постоянными, добавить их в сценарии запуска или сообщить нам, какой дистрибутив вы используете. На Centos, например: system-config -firewall - хороший интерфейс для настройки правил iptables)

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

В основном - разрешить входящий ssh; Отбрось все остальное.

Ваша цепочка INPUT теперь выглядит так:

  • Если на мой компьютер приходит пакет для 'ssh' - разрешите
  • Если пакет не соответствует ни одному из предыдущих правил - просто выбросьте его.

Позже, скажем, вы хотите разрешить 'samba' (общий доступ к файлам Windows): вы можете запустить

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

В -IДобавляет и правило в списке; -Aдобавляет правило. Итак, ваша цепочка теперь выглядит так:

  • Если на мой компьютер приходит пакет для 'samba' - разрешите
  • Если на мой компьютер приходит пакет для 'ssh' - разрешите
  • Если пакет не соответствует ни одному из предыдущих правил - просто выбросьте его.

INPUTЦепь относится к пакетам , предназначенным для вашей системы. Другие цепочки предназначены OUTPUTдля пакетов с вашего компьютера, для выхода в Интернет и FORWARDдля пакетов, которые маршрутизируются через ваш компьютер (то есть пакеты, которые «проходят» через ваш компьютер, как транзитная зона аэропорта - вещи, которые не INPUTпотому, что они не входят в ваш компьютер). ).

В качестве напутствия: nmap'ing 127.0.0.1 не очень полезен; многие сервисы доступны только с 127.0.0.1 и без другого адреса. Если у вас нет другой машины, с которой вы можете запустить nmap - попробуйте использовать Shield UP от Gibson Research! ( https://www.grc.com/shieldsup ) - это бесплатный онлайн nmap-lite. Или добавьте комментарий с вашим IP / адресом электронной почты, и я вам nmap :)

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.