วิธีการ "ปิด" พอร์ตเปิด


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(แม้ว่ามันอาจจะไม่ได้รับการกำหนดค่าที่ดีฉันจะเก็บเรื่องนี้ไว้ในคำถามอื่น)

เท่าที่ฉันรู้ว่าippCUPS ใช้โพรโทคอลในการแชร์เครื่องพิมพ์ของฉันฉันไม่จำเป็นต้องแชร์พวกเขาเพียงแค่เข้าถึงเครื่องพิมพ์จากเซิร์ฟเวอร์

นี่เป็นผลลัพธ์ของ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 บนโลคอลโฮสต์ (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
    • เห็นได้ชัดว่า Dropbox ต้องมี

เริ่มลดขนาด - ปิดการใช้งาน Samba

คุณสามารถอาจขวาปิดค้างคาวปิดการใช้งานแซมบ้าก็บัญชีสำหรับ 2 ของบริการดังกล่าวข้างต้นและnmbd smbdเป็นเรื่องที่น่าสงสัยว่าคุณต้องใช้งานแล็ปท็อปจริงๆไม่ว่าจะเป็น localhost หรือ IP ของคุณที่หันเข้าหาเครือข่าย

เพื่อตรวจสอบว่าพวกเขากำลังทำงานอยู่คุณสามารถใช้คำสั่งต่อไปนี้status:

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

การปิดบริการอาจสร้างความสับสนกับฟลักซ์ทั้งหมดที่เกิดขึ้นด้วยการพุ่งพรวด / etc / rc.d ธุรกิจดังนั้นมันอาจเป็นเรื่องยากที่จะคิดออกบริการที่อยู่ภายใต้เทคโนโลยีใด สำหรับแซมบ้าคุณสามารถใช้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

ปิดการใช้งานส่วนที่เหลือของสิ่งที่ไม่จำเป็น

ดังนั้นตอนนี้การปิดแซมบ้าของพวกเราจึงเหลือดังนี้

  • Avahi-ภูต
    • ส่วนหนึ่งของ zeroconf (plug-n-play) ปิด
  • rpcbind
    • จำเป็นสำหรับ NFS - ปิด
  • rpc.statd
    • จำเป็นสำหรับ NFS - ปิด

สำหรับ 3 ที่เหลือคุณสามารถทำสิ่งเดียวกันกับที่เราทำเพื่อแซมบ้าเพื่อปิดพวกเขาเช่นกัน

CUPS?

หากต้องการปิด CUPS ซึ่งคุณไม่ต้องการจริงๆคุณสามารถติดตามการเต้นของบริการเดียวกันได้จากนั้นจึงปิดใช้งานไม่ให้เริ่มทำงาน เพื่อให้สามารถพิมพ์คุณจะต้องตั้งค่าเครื่องพิมพ์แต่ละเครื่องบนระบบของคุณ คุณสามารถทำได้ผ่านsystem-config-printer GUI

ทำให้บริการเหล่านี้ตามความต้องการ?

นี่เป็นหัวใจสำคัญของคำถามของคุณ แต่ไม่มีวิธีแก้ปัญหากระสุนเงินที่จะทำให้บริการเหล่านี้ "ฉลาด" เพื่อให้พวกเขาทำงานเมื่อพวกเขาถูกใช้งานมากกว่าที่จะตลอดเวลา

# 1 - systemd เทียบกับพุ่งพรวด

ส่วนหนึ่งของมันคือการแยกระหว่างปัจจุบันsystemdและพุ่งพรวด มีภาพรวมที่ดีของเทคโนโลยีการแข่งขัน 2 รายการที่นี่ที่นี่

เทคโนโลยีทั้งสองพยายามทำสิ่งที่แตกต่างกันเล็กน้อย IMO เนื่องจากชุดคุณลักษณะของพวกเขาดูเหมือนว่า systemd จะมุ่งเน้นไปที่เซิร์ฟเวอร์มากขึ้น เมื่อเวลาผ่านไปสิ่งนี้จะทำงานได้เอง IMO และบริการทั้งสองจะมีความเสถียรและคุณลักษณะที่หลากหลาย

ในที่สุดบริการทั้งสองจะเสนอตามความต้องการเริ่มต้นและหยุดทั่วกระดานสำหรับบริการทั้งหมดที่พวกเขาจัดการ ตัวอย่างเช่นStopWhenUnneeded=yesมีอยู่แล้วsystemdดังนั้นจึงเป็นเพียงเรื่องของเวลาจนกว่าความสามารถเหล่านี้จะถูกดึงออกมา

# 2 - บริการสนับสนุน

บริการบางอย่างไม่สนับสนุนการหยุด / เริ่มต้นได้ดีหากเลย บริการต่าง ๆ เช่นsshdดูเหมือนจะไม่ค่อยมีเหตุผลที่จะเรียกใช้ตามความต้องการโดยเฉพาะอย่างยิ่งหากใช้งานหนัก นอกจากนี้บริการบางอย่างเช่น Apache ยังให้กลไกภายในตัวเองเพื่อทำให้ผู้ฟังของพวกเขาจัดการกับตัวเองไม่มากก็น้อย ดังนั้นจึงไม่มีความชัดเจนว่าการให้บริการแบบออนดีมานด์systemdหรือupstartรวมกับบริการประเภทนี้เป็นอย่างไร

มันจำเป็นจริงๆเหรอ?

คุณจะได้ยินจากทั้งสองฝ่ายว่าสิ่งนี้เกินความจริงหรือคุณควรใช้วิธีการแบบมินิมอลลิสต์เพียงแค่ติดตั้งสิ่งที่คุณต้องการอย่างแท้จริง แต่ก็เป็นทางเลือกส่วนตัวอย่างแท้จริง ทำความเข้าใจว่าบริการเหล่านี้อยู่ที่นั่นและสิ่งที่พวกเขาทำคือสิ่งที่สำคัญจริงๆ ในตอนท้ายของวันคอมพิวเตอร์เป็นเครื่องมือและด้วยการใช้ระบบ Unix คุณก็บอกว่าคุณเต็มใจที่จะมองหลังม่านและเข้าใจสิ่งที่ทำให้คอมพิวเตอร์ของคุณติ๊ก

ฉันถามว่าการตั้งคำถามประเภทนี้เป็นกรอบความคิดที่เราควรพยายามเมื่อต้องรับมือกับคอมพิวเตอร์และ Unix โดยทั่วไป

อ้างอิง


2
@ RSFalcon7 - ยินดีต้อนรับ! ขอบคุณสำหรับคำถาม!
slm

12

127.0.0.1 ไม่ใช่ "โลกภายนอก" มันมองไปรอบ ๆ บ้าน

ตรวจสอบการกำหนดค่าไฟร์วอลล์ของคุณ (iptables ใน Linux วันนี้) ส่วนใหญ่ไม่ควรเข้าถึงได้จาก ouside

อย่าเรียกใช้บริการที่คุณไม่ต้องการ ถอนการติดตั้งซอฟต์แวร์ที่ไม่จำเป็นทั้งหมด

เปลี่ยนรหัสผ่านให้แข็งแกร่งขึ้น ตรวจสอบการใช้งานของระบบอย่าไล่เว็บไซต์ที่น่าสนใจแบบสุ่ม ตรวจสอบการกำหนดค่าการต่อต้านการฟิชชิ่งการต่อต้านสคริปต์และอื่น ๆ ของเบราว์เซอร์ แก้ไขการใช้ SSH และ su / sudo ของคุณ

แต่ที่สำคัญที่สุดคือความหวาดระแวงที่มากเกินไปคือการต่อต้าน ไม่ได้รับการติดกับดักโดยแววของเทคโนโลยี


3
ฉันเห็นด้วยกับ "ไม่เรียกใช้บริการที่คุณไม่ต้องการ" แต่ "ถอนการติดตั้งซอฟต์แวร์ที่ไม่จำเป็นทั้งหมด" อย่างจริงจัง? สิ่งที่จะช่วยต่อต้าน
Hauke ​​Laging

6
@HaukeLaging ตามคำพูดที่ว่า "หนูทำรังในกองเสื้อผ้าที่ไม่ได้ใช้" ซอฟต์แวร์ใด ๆ สามารถมีช่องโหว่ที่อาจถูกโจมตี หากโปรแกรมไม่อยู่ที่นั่นความเสี่ยงนั้นจะไม่มี หากไม่ได้ใช้งานจะมีค่าใช้จ่ายเล็กน้อย นอกจากนี้ระบบที่เรียบง่ายยังง่ายต่อการดูแลและดูแลให้เป็นระเบียบ
vonbrand

ขอบคุณที่เตือนว่า 127.0.0.1 ไม่ได้เป็นworuld นอก ฉันสมัครรับบริการทั้งหมดโดยไม่เรียกใช้บริการที่ฉันไม่ต้องการแต่การถอนการติดตั้งเป็นเรื่องที่เกินความจริงหากพวกเขามาที่นี่พวกเขามีประโยชน์ในบางครั้ง
RSFalcon7

2
@ RSFalcon7 หากพวกเขามีประโยชน์ (หรือมีประโยชน์สำหรับคนอื่นพวกเขาอยู่ในการกระจายหลังจากทั้งหมด) ไม่มีความสอดคล้อง หากคุณไม่ได้ใช้มันให้เชยมัน ใช้ดิสก์น้อยลงอัพเดทน้อยลงมีความเสี่ยงน้อยลง หากคุณต้องการในภายหลังติดตั้งใหม่
vonbrand

3

ในขณะที่คุณสามารถ 'ปิด' บริการส่วนบุคคล - บางทีการตั้งค่าไฟร์วอลล์อาจทำได้ง่ายกว่า เกือบทุก distro's (Ubuntu, Debian, Centos และอื่น ๆ ) มีการสนับสนุน iptables ในตัว

ชุดกฎง่าย ๆ ในการเริ่มต้น: (คุณสามารถพิมพ์ได้ที่พรอมต์คำสั่งเพื่อทำให้ถาวรเพิ่มลงในสคริปต์เริ่มต้นของคุณหรือบอกเราว่าคุณกำลังใช้ distro อยู่บน Centos ตัวอย่างเช่น: system-config -firewall เป็น UI ที่ดีสำหรับการกำหนดค่ากฎ 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

-Iprepends และกฎในรายการ; -Aผนวกกฎ ดังนั้นห่วงโซ่ของคุณตอนนี้มีลักษณะเช่นนี้:

  • หากแพ็คเก็ตเข้ามาในคอมพิวเตอร์ของฉันเป็น 'samba' - อนุญาต
  • หากแพ็คเก็ตเข้ามาในคอมพิวเตอร์ของฉันเป็น 'ssh' - อนุญาต
  • หากแพ็คเก็ตไม่ตรงกับกฎก่อนหน้าใด ๆ - เพียงแค่โยนมันทิ้ง

INPUTห่วงโซ่หมายถึงแพ็คเก็ต destined สำหรับระบบของคุณ กลุ่มอื่น ๆOUTPUTสำหรับแพ็คเก็ตจากคอมพิวเตอร์ของคุณไปยังอินเทอร์เน็ตและFORWARDแพ็คเก็ตที่ถูกส่งผ่านคอมพิวเตอร์ของคุณ (นั่นคือแพ็คเก็ตที่ 'ขนส่ง' คอมพิวเตอร์ของคุณเช่นพื้นที่ขนส่งของสนามบิน - สิ่งที่ไม่INPUTเพราะไม่เข้าคอมพิวเตอร์ )

ในฐานะที่เป็นพรากจากกัน: nmap'ing 127.0.0.1 ไม่ได้มีประโยชน์มาก บริการจำนวนมากสามารถเข้าถึงได้จาก 127.0.0.1 เท่านั้นและไม่มีที่อยู่อื่น หากคุณไม่มีเครื่องอื่นคุณสามารถเรียกใช้ nmap จาก - ลองใช้ Gibs Research 'Shields UP! ( https://www.grc.com/shieldsup ) - ซึ่งเป็น nmap-lite ออนไลน์ฟรี หรือเพิ่มความคิดเห็นด้วย IP / อีเมลของคุณและฉันจะทำแผนที่ให้คุณ :)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.