Saya punya beberapa pertanyaan di pelabuhan penutup, saya pikir saya punya beberapa hal aneh.
Saat saya menggunakan eksekusi
nmap --top-ports 10 192.168.1.1
itu menunjukkan bahwa port 23 / TCP terbuka.
Tapi saat aku mengeksekusinya
nmap --top-ports 10 localhost
itu menunjukkan bahwa port 23 / tcp ditutup.
Yang mana dari mereka yang benar? Saya ingin menutup port ini di seluruh sistem saya, bagaimana saya bisa melakukannya?
localhost
sedang mengakseslo
antarmuka (loopback). Alamat IP mengakses antarmuka nyata Anda, mungkineth0
atauwlan0
atau semacamnya.Jawaban:
Nmap adalah pemindai port yang hebat, tetapi terkadang Anda menginginkan sesuatu yang lebih otoritatif. Anda dapat bertanya pada kernel proses apa yang memiliki port terbuka dengan menggunakan
netstat
utilitas:Opsi yang saya berikan adalah:
-t
Hanya TCP-l
Hanya mendengarkan porta-n
Jangan mencari layanan dan nama host, cukup tampilkan nomor-p
Tampilkan informasi proses (memerlukan root privilege)Dalam kasus ini, kita dapat melihat bahwa
sshd
mendengarkan pada antarmuka (0.0.0.0
) port 22, dancupsd
mendengarkan pada loopback (127.0.0.1
) port 631. Output Anda mungkin menunjukkan yangtelnetd
memiliki alamat lokal192.168.1.1:23
, artinya tidak akan menjawab koneksi pada adaptor loopback (mis. Anda tidak bisatelnet 127.0.0.1
).Ada alat lain yang akan menampilkan informasi serupa (misalnya
lsof
atau/proc
), tetapi netstat adalah yang paling banyak tersedia. Ia bahkan bekerja pada Windows (netstat -anb
). BSD netstat sedikit berbeda: Anda harus menggunakan sockstat (1) untuk mendapatkan informasi proses.Setelah Anda memiliki ID proses dan nama program, Anda bisa mencari proses dan membunuhnya jika Anda ingin menutup port. Untuk kontrol yang lebih halus, Anda dapat menggunakan firewall (iptables di Linux) untuk membatasi akses hanya ke alamat tertentu. Anda mungkin perlu menonaktifkan startup layanan. Jika PID adalah "-" di Linux, itu mungkin sebuah proses kernel (ini umum dengan NFS misalnya), jadi semoga berhasil mengetahui apa itu.
Catatan: Saya mengatakan "berwibawa" karena Anda tidak terhalang oleh kondisi jaringan dan firewall. Jika Anda mempercayai komputer Anda, itu bagus. Namun, jika Anda mencurigai bahwa Anda telah diretas, Anda mungkin tidak dapat mempercayai alat di komputer Anda. Mengganti utilitas standar (dan kadang-kadang bahkan panggilan sistem) dengan yang menyembunyikan proses atau port tertentu (alias rootkit) adalah praktik standar di antara para penyerang. Taruhan terbaik Anda saat ini adalah membuat salinan forensik dari disk Anda dan memulihkan dari cadangan; kemudian gunakan salinan untuk menentukan cara mereka masuk dan menutupnya.
sumber
Sistem Linux memiliki antarmuka loopback, yang digunakan untuk komunikasi internal. Nama hostnya adalah
localhost
dan alamat IP-nya127.0.0.1
.Ketika Anda menjalankan
nmap
padalocalhost
, Anda benar-benar menjalankan portscan pada maya antarmuka loopback.192.168.1.1
adalah alamat IP dari antarmuka fisik Anda (kemungkinan besareth0
).Jadi Anda telah menjalankan
nmap
dua antarmuka jaringan yang berbeda, inilah mengapa ada perbedaan dalam port terbuka. Keduanya benar.Jika Anda memiliki port TCP 23 terbuka, kemungkinan Anda memiliki
telnet
server yang berjalan (yang bukan hal yang baik karena kurangnya enkripsi) atau Anda memiliki semacam kuda trojan di mesin Anda.sumber
iptables
aturan seperti yang disarankan jawaban terdekat, tetapi itu akan membuat layanan tidak digunakan, yang menghabiskan sumber daya. Jadi, jika Anda telahtelnetd
berlari, matikan saja.Untuk "menutup" port yang bisa Anda gunakan
iptables
sumber
DROP
tidak seperti yang dikatakan, ia melihat paket dan kemudian mengabaikannya. Biasanya (tanpa iptables diaktifkan), kernel akan mengirim port ICMP paket yang tidak terjangkau kembali (yang dapat disimulasikan denganREJECT
target bukanDROP
).REJECT
target dengan menulis-j REJECT --reject-with tcp-reset
.Jika Anda melakukannya
nmap localhost
, ia memberi tahu Anda tentang situasi yang berbeda: beberapa program di linux berfungsi sebagai server meskipun hanya digunakan secara lokal. Ini karena program lain menggunakannya seperti server yang terhubung. Jadi kedua jawaban itu benar, karena Anda menanyakan sesuatu yang berbeda.Port 23 digunakan untuk telnet. Biasanya tidak digunakan lagi. Coba lakukan
nmap -sV 192.168.1.1
untuk mengetahui program mana yang membuka port.(192 ... adalah IP jaringan lokal, jadi hasilnya
nmap <your outside world IP>
juga akan memberikan hasil yang berbeda, karena kemungkinan pengaturan firewall dll)sumber
Jika Anda memiliki layanan yang berjalan dan mendengarkan pada port 23, mungkin lebih bersih untuk menghentikan proses yang mendengarkan port 23 (mungkin
telnet
) daripada membiarkannya berjalan dan menutup atau memblokir port 23 menggunakaniptables
.Ketika tidak ada proses mendengarkan pada port, bahkan tanpa adanya blok firewall, setiap upaya untuk menghubungkannya harus menghasilkan "koneksi ditolak" langsung (
ECONNREFUSED
keconnect(2)
)Salah satu cara untuk menemukan proses (dan pidnya) yang mendengarkan pada port 23, jika ada proses tersebut, adalah:
Dalam
-i
daftar di atas buka port internet (baik UDP dan TCP), dan -P menghambat terjemahan port ke nama layanan (via/etc/services
)Setelah Anda menemukan proses yang berjalan mendengarkan pada port 23, Anda dapat mengetahui bagaimana prosesnya dimulai dengan melihat pohon proses (dengan mengatakan,
pstree
). Jika induknyainit
(sangat mungkin), Anda dapat mencari nama proses secara rekursif/etc
. misalnya:Ini akan mengarahkan Anda ke cara terbaik untuk menonaktifkannya agar tidak berjalan di posisi pertama.
sumber
sudo lsof -Pi :23
.23
) yang cocok. Jika Anda tidak memasukkan spasi setelahnya:23
akan cocok:234
,:2345
dll.lsof -Pi :23
) mencari kecocokan yang tepat.