Як "закрити" відкриті порти?


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кореневого користувача, видаляючи адреси 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

самостійно запускаючи послуги (з привілеями користувачів та батьківською оболонкою)
RSFalcon7

2
Правильно, також якщо ви використовуєте CUPS тільки з локальної системи, ви можете слухати його тільки на порту 631 на localhost (127.0.0.1). Я б повторно запустив nmap, використовуючи фактичну IP-адресу, яку має машина, а не просто 127.0.0.1.
slm

1
кращою командою для запуску буде netstat -lntup-l = прослуховувати -n = число -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

Вимкнення послуг може заплутати весь потік, що відбувається з початком роботи, /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-конф

Відключення решти того, що НЕ потрібно

Отже, тепер Самба не в змозі:

  • avahi-демон
    • частину zeroconf (plug-n-play), вимкніть її
  • rpcbind
    • необхідний для NFS - вимкніть його
  • rpc.statd
    • необхідний для NFS - вимкніть його

Для решти 3 ви можете зробити те саме, що ми зробили для Самба, щоб також їх вимкнути.

CUPS?

Щоб вимкнути CUPS, який вам насправді не потрібен, ви можете дотримуватися того самого танцю, як вимкнути послугу, а потім відключити її від запуску. Щоб мати можливість друкувати, потрібно налаштувати кожен принтер окремо у вашій системі. Це можна зробити черезsystem-config-printer GUI.

Зробити ці послуги на вимогу?

Це справді суть вашого питання, але насправді не існує рішення про срібну кулю, щоб зробити ці послуги «розумними», щоб вони працювали під час їх використання, а не весь час.

№1 - systemd vs upstart

Частиною цього є поточний розкол між systemd та upstart . Там є огляд хороший з 2 конкуруючих технологій тут .

Обидві технології намагаються зробити дещо різні речі, IMO, враховуючи їх набір функцій, systemd здається більше орієнтованим на сервери, тоді як upstart здається більше орієнтованим на рулон робочого столу. З часом це вийде самостійно, IMO, і обидва сервіси стануть стабільними та багатими.

Зрештою обидві служби пропонують на вимогу починати та зупинятись за всіма послугами, якими вони керують. Такі функції, як StopWhenUnneeded=yesуже є вsystemd наприклад, так що лише питання часу, поки ці можливості не будуть використані.

№2 - сервісна підтримка

Деякі служби не підтримують зупинку / запуск дуже добре, якщо вони взагалі не працюють. Такі сервіси, як sshdздається, мало сенсу працювати за запитом, особливо якщо вони активно використовуються. Також деякі сервіси, такі як Apache, надають механізми всередині себе, щоб перетворювати більш-менш власних слухачів, керуючи собою. Тож незрозуміло, наскільки на вимогу надаються systemdабо upstartзбираються інтегруватися з цими видами послуг.

Це справді потрібно?

Ви почуєте з обох сторін, що це надмірно або що ви повинні застосовувати мінімалістичний підхід, встановлюючи лише те, що вам абсолютно потрібно, але це дійсно особистий вибір. Розуміння того, що ці служби є, і що вони роблять - це насправді важливо. Зрештою, комп'ютер - це інструмент, і використовуючи систему Unix, ви вже говорите, що готові зазирнути за завісу і зрозуміти, що змушує ваш комп'ютер поставити галочку.

Я б сказав, що цей тип запитань - це саме та думка, до якої слід прагнути, коли маєш справу з комп'ютерами та Unix загалом.

Список літератури


2
@ RSFalcon7 - ласкаво просимо! Дякую за запитання!
slm

12

127.0.0.1 - це не "зовнішній світ", він озирається всередині будинку.

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

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

Зміна паролів щоб бути сильнішими. Перевірте використання системи, не переслідуйте будь-який цікавий веб-сайт навмання. Перевірте конфігурацію антифішингу веб-переглядача, анти-скриптів тощо. Перегляньте використання SSH та su / sudo.

Але найбільше надмірна параноїя є контрпродуктивною. Не потрапляйте в пастку блиску технологій .


3
Я погоджуюся з "Не запускайте потрібні вам послуги". Але "Видаліть все не потрібне програмне забезпечення.", Серйозно? Що це допоможе?
Hauke ​​Laging

6
@HaukeLaging, як говориться, "миші гніздяться у купи невикористаного одягу". Будь-яка частина програмного забезпечення може мати вразливість, яку можна використати. Якщо програми немає, ризику не існує. Якщо він не використовується, вартість незначна. Крім того, більш просту систему легше наглядати і доглядати.
vonbrand

Завдяки нагадуванню, що 127.0.0.1 не є зовнішньою проблемою . Я повністю підписуюся, щоб не запускати сервіси, які мені не потрібні , але видалення є трохи зайвим, якщо вони є тут, вони були корисні колись
RSFalcon7

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 inbound; киньте все інше.

Зараз ваш ланцюжок 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 - спробуйте скористатися екраном Gibson Research 'Shields UP! ( https://www.grc.com/shieldsup ) - це безкоштовний онлайн-nmap-lite. Або додайте коментар з вашим IP / електронною поштою, і я надішлю вам повідомлення :)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.