詳解如何在Ubuntu上檢查、開啟、關(guān)閉端口
網(wǎng)絡(luò)基礎(chǔ)概念
網(wǎng)絡(luò)通信的基礎(chǔ)是基于TCP/IP協(xié)議棧的,這一模型由四個層次組成:鏈路層、網(wǎng)絡(luò)層、傳輸層和應(yīng)用層。我們關(guān)注的重點(diǎn)在于傳輸層和應(yīng)用層,因為端口正是位于這兩層之間的關(guān)鍵概念。
傳輸層:負(fù)責(zé)端到端的通信,其中兩個主要協(xié)議是TCP(Transmission Control Protocol)和UDP(User Datagram Protocol)。TCP提供了可靠的數(shù)據(jù)傳輸服務(wù),保證數(shù)據(jù)包按序無誤地到達(dá);而UDP則是一種無連接的、不可靠的協(xié)議,適用于對速度要求高于數(shù)據(jù)完整性的場景。
應(yīng)用層:在此層面上,不同的網(wǎng)絡(luò)服務(wù)通過不同的端口號來區(qū)分。端口是一個邏輯上的結(jié)構(gòu),范圍從0到65535。每個端口對應(yīng)一個正在運(yùn)行的服務(wù)或者等待接收特定類型數(shù)據(jù)的應(yīng)用程序。
端口類型
端口可以大致分為三類:
- 熟知端口(Well-Known Ports):范圍從0到1023,這些端口被分配給特定的服務(wù),例如HTTP服務(wù)使用80端口,HTTPS服務(wù)使用443端口。
- 注冊端口(Registered Ports):范圍從1024到49151,通常用于非系統(tǒng)服務(wù)的公共應(yīng)用程序。
- 動態(tài)/私有端口(Dynamic and/or Private Ports):范圍從49152到65535,通常不會被預(yù)先定義服務(wù)所占用,而是臨時分配給客戶端程序使用。
在Ubuntu上檢查開放端口
在Ubuntu系統(tǒng)中,確保服務(wù)正常運(yùn)行或排查網(wǎng)絡(luò)問題時,檢查哪些端口處于監(jiān)聽或活躍狀態(tài)是一項基本技能。
使用netstat命令
netstat
是一個強(qiáng)大的命令行工具,用于顯示網(wǎng)絡(luò)連接、路由表、網(wǎng)絡(luò)接口統(tǒng)計等網(wǎng)絡(luò)相關(guān)信息。在檢查開放端口時,以下是最常用的幾個選項:
- 列出所有TCP連接和監(jiān)聽端口:
sudo netstat -tuln
這里的-t
表示只顯示TCP端口,-u
用于顯示UDP端口(可選),-l
表示僅列出監(jiān)聽狀態(tài)的端口,而-n
則使用數(shù)字形式顯示IP和端口號,而不是嘗試解析為主機(jī)名和服務(wù)名。
- 查看特定端口是否被監(jiān)聽:
sudo netstat -tuln | grep :<port>
將<port>
替換為你想要查詢的端口號,如80
。
nmap工具
nmap
是一個功能強(qiáng)大的網(wǎng)絡(luò)探索和安全審計工具,不僅可以用來掃描本地主機(jī),也適用于遠(yuǎn)程主機(jī)的端口掃描。首先,確保已安裝nmap
:
sudo apt-get install nmap
然后,執(zhí)行以下命令掃描本機(jī)開放的端口:
sudo nmap -sT -O localhost
這里的-sT
選項表示使用TCP連接掃描,-O
嘗試確定目標(biāo)主機(jī)的操作系統(tǒng)類型。
lsof命令
lsof
(LiSt Open Files)命令可以列出系統(tǒng)中所有當(dāng)前打開的文件和網(wǎng)絡(luò)端口。要查找占用特定端口的進(jìn)程,可以這樣使用:
sudo lsof -i :<port>
firewall-cmd(對于使用firewalld的情況)
雖然Ubuntu默認(rèn)不使用firewalld
,但如果你的系統(tǒng)中安裝并啟用了它,可以通過以下命令查看開放端口:
sudo firewall-cmd --list-ports
ufw(Uncomplicated Firewall)
UFW是Ubuntu系統(tǒng)中常用的防火墻管理工具,易于使用且功能強(qiáng)大。要查看UFW當(dāng)前的規(guī)則,可以執(zhí)行:
sudo ufw status verbose
這會列出所有入站和出站規(guī)則,以及哪些端口被允許或拒絕。
在Ubuntu上開啟端口
確保服務(wù)對外可用通常需要正確配置系統(tǒng)防火墻,以允許外部流量訪問特定端口。Ubuntu系統(tǒng)中,ufw
(Uncomplicated Firewall)是最常用的防火墻管理工具,因為它簡單易用且功能強(qiáng)大。
ufw基本操作
首先,確保ufw
已經(jīng)安裝并啟用。如果尚未啟用,可以使用以下命令進(jìn)行安裝和啟用:
sudo apt-get install ufw sudo ufw enable
對于UDP端口,只需將tcp
替換為udp
即可,如:
sudo ufw allow 53/udp
開啟端口范圍
若需開啟一系列連續(xù)端口,例如游戲服務(wù)器使用的端口范圍,可以這樣做:
sudo ufw allow 27000:27015/tcp
指定入站或出站規(guī)則
默認(rèn)情況下,上述命令應(yīng)用于入站(incoming)流量。若要明確指定規(guī)則方向,可以加上in
或out
,例如允許出站到80端口的流量:
sudo ufw allow out 80/tcp
配置特定服務(wù)端口
許多網(wǎng)絡(luò)服務(wù)如Web服務(wù)器(Apache、Nginx)或數(shù)據(jù)庫(MySQL、PostgreSQL)都有默認(rèn)的監(jiān)聽端口。除了在防火墻中開放這些端口,還需確保服務(wù)配置正確。
- Apache:默認(rèn)監(jiān)聽80端口,配置文件通常位于
/etc/apache2/sites-available/000-default.conf
或特定站點(diǎn)配置文件中。 - Nginx:同樣默認(rèn)監(jiān)聽80端口,配置文件位于
/etc/nginx/sites-available/default
或相應(yīng)站點(diǎn)配置文件。 - MySQL:默認(rèn)監(jiān)聽3306端口,可以在
/etc/mysql/mysql.conf.d/mysqld.cnf
中找到監(jiān)聽設(shè)置。 - PostgreSQL:默認(rèn)監(jiān)聽5432端口,配置文件為
/etc/postgresql/<version>/main/postgresql.conf
。
修改服務(wù)配置后,記得重啟服務(wù)使更改生效,如重啟Apache服務(wù):
sudo systemctl restart apache2
iptables直接配置
盡管ufw
提供了友好的接口,但在某些高級場景下,直接使用iptables
命令行工具能提供更細(xì)粒度的控制。以下是一個簡單的例子,允許所有入站的80端口TCP流量:
sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
請注意,直接修改iptables規(guī)則應(yīng)當(dāng)謹(jǐn)慎,且通常建議先備份現(xiàn)有規(guī)則:
sudo iptables-save > /root/iptables.backup
完成規(guī)則修改后,使用iptables-save
命令保存規(guī)則,確保重啟后仍然生效:
sudo iptables-save | sudo tee /etc/iptables/rules.v4
在Ubuntu上關(guān)閉端口
關(guān)閉不必要的端口是提升系統(tǒng)安全的重要措施,可以減少潛在的攻擊面,防止未授權(quán)訪問。
使用ufw關(guān)閉端口
關(guān)閉端口的操作與開啟端口類似,只需將allow
命令替換為deny
或delete
命令。
- 關(guān)閉單個端口:
sudo ufw deny 22/tcp
上述命令會拒絕所有入站的TCP 22端口(SSH)流量。如果規(guī)則已存在,可以使用delete
命令移除:
sudo ufw delete allow 22/tcp
- 關(guān)閉端口范圍:
如果之前打開了一個端口范圍,如游戲端口27000至27015,可以通過以下命令關(guān)閉:
sudo ufw deny 27000:27015/tcp
編輯服務(wù)配置關(guān)閉端口
關(guān)閉端口的另一種方法是從源頭上阻止服務(wù)監(jiān)聽該端口。這需要直接修改服務(wù)的配置文件。
Apache或Nginx:進(jìn)入相應(yīng)的配置文件,注釋或修改監(jiān)聽端口的行,如將Apache的監(jiān)聽端口從80更改為監(jiān)聽localhost(127.0.0.1:80)或完全關(guān)閉監(jiān)聽。
數(shù)據(jù)庫服務(wù):如MySQL或PostgreSQL,同樣在配置文件中修改或注釋掉監(jiān)聽地址和端口,然后重啟服務(wù)。
使用iptables關(guān)閉端口
直接使用iptables
關(guān)閉端口涉及刪除或添加拒絕規(guī)則:
- 拒絕特定端口:
如果之前允許了22端口,可以通過以下命令拒絕:
sudo iptables -A INPUT -p tcp --dport 22 -j DROP
或者,如果要刪除之前的允許規(guī)則,首先需要找出該規(guī)則的編號,然后用iptables -D
命令刪除:
sudo iptables -L --line-numbers sudo iptables -D INPUT <rule_number>
定期審查與優(yōu)化
- 定期檢查:定期檢查防火墻規(guī)則和系統(tǒng)服務(wù)配置,確保沒有開放不必要的端口。
- 優(yōu)化規(guī)則:移除不再需要的規(guī)則,保持防火墻規(guī)則集簡潔明了,有助于性能和可維護(hù)性。
關(guān)閉端口是一個持續(xù)的過程,隨著系統(tǒng)需求的變化,應(yīng)適時調(diào)整。良好的安全實(shí)踐還包括使用自動化工具定期審計端口狀態(tài),以及在變更系統(tǒng)配置后進(jìn)行安全測試,確保沒有無意間暴露了新的安全風(fēng)險。
以上就是詳解如何在Ubuntu上檢查、開啟、關(guān)閉端口的詳細(xì)內(nèi)容,更多關(guān)于Ubuntu上開啟關(guān)閉端口的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Linux系統(tǒng)crontab定時運(yùn)行shell腳本失敗的問題及解決
這篇文章主要介紹了Linux系統(tǒng)crontab定時運(yùn)行shell腳本失敗的問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-04-04Centos7的apache網(wǎng)站環(huán)境搭建wordpress
本篇文章給大家詳細(xì)分析了在Centos7的apache網(wǎng)站環(huán)境搭建wordpress的詳細(xì)操作方法,有興趣的朋友參考下。2018-02-02CentOS8 安裝 jdk8 / java8的教程(推薦)
CentOS8上使用 yum 直接安裝,環(huán)境變量自動配置好 ,本文主要給大家介紹 CentOS8 安裝 jdk8 / java8的教程,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧2019-10-10Linux 下安裝 memcached 及 memcacheq的方法
這篇文章主要介紹了Linux 下安裝 memcached 及 memcacheq的方法,需要的朋友可以參考下2017-03-03利用lynis如何進(jìn)行l(wèi)inux漏洞掃描詳解
這篇文章主要給大家介紹了關(guān)于利用lynis如何進(jìn)行l(wèi)inux漏洞掃描的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-06-06Ubuntu 遠(yuǎn)程登陸服務(wù)器 ssh的安裝和配置詳解
這篇文章主要介紹了Ubuntu 遠(yuǎn)程登陸服務(wù)器 ssh的安裝和配置詳解,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-06-06