Linux防火牆之-iptables詳解
專案介紹
iptables是Linux系統下的免費套件過濾防火牆軟體,可實現封包過濾、封包重定向和網路位址轉換等功能。它是一個高效且靈活的解決方案,可取代昂貴的商業防火牆。 iptables具有強大的配置選項和規則設置,使用戶能夠根據自身需求對網路流量進行精細控制,提高網路安全性和效能。
iptables的規則其實是指網路管理員預先定義的條件,則規則一般的定義為「如果封包頭符合這樣的條件,就這樣處理這個封包」。規則儲存在核心空間的資訊包過濾表中,這些規則分別指定了來源位址、目的位址、傳輸協定(如TCP、UDP、ICMP)和服務類型(如HTTP、FTP和SMTP)等。當封包與規則相符時,iptables會根據規則所定義的方法來處理這些封包,如放行(accept)、拒絕(reject)和丟棄(drop)等。配置防火牆的主要工作就是新增、修改和刪除這些規則。
iptables內建了4個表,分別是filter表、nat表、mangle表和raw表,分別用於實現套件過濾、網路位址轉換、套件重構(修改)和資料追蹤處理。而每一條鏈其實只是眾多規則中的一個檢查清單,每一條鏈中可以有一條或數條規則。當一個封包到達一個鏈時,iptables就會從鏈中第一條規則開始檢查,看該封包是否符合規則所定義的條件。如果滿足,系統就會根據該條規則所定義的方法處理該封包;否則iptables將繼續檢查下一條規則。如果該封包不符合鏈中任一條規則,iptables就會根據該鏈預先定義的預設策略來處理封包。
總的來說,iptables是一個功能強大的工具,用於配置Linux系統上的防火牆和網路位址轉換功能。
#替換系統防火牆: 在Centos7系統中預設防火牆管理工具不是iptables,當需要使用時則需要自行安裝替換.
[root@localhost ~]# systemctl stop firewalld [root@localhost ~]# systemctl disable firewalld [root@localhost ~]# yum install -y iptables iptables-services [root@localhost ~]# systemctl restart iptables [root@localhost ~]# systemctl enable iptables
查詢完整防火牆規則: 使用 -L -n –line-numbers 參數檢視防火牆預設設定規則.
[root@localhost ~]# iptables -L -n --line-numbers [root@localhost ~]# iptables -F # 临时清空规则 Chain INPUT (policy ACCEPT) numtarget prot opt source destination 1ACCEPT all--0.0.0.0/00.0.0.0/0state RELATED,ESTABLISHED 2ACCEPT icmp --0.0.0.0/00.0.0.0/0 3ACCEPT all--0.0.0.0/00.0.0.0/0 4ACCEPT tcp--0.0.0.0/00.0.0.0/0state NEW tcp dpt:22 5REJECT all--0.0.0.0/00.0.0.0/0reject-with icmp-host-prohibited Chain FORWARD (policy ACCEPT) numtarget prot opt source destination 1REJECT all--0.0.0.0/00.0.0.0/0reject-with icmp-host-prohibited Chain OUTPUT (policy ACCEPT) numtarget prot opt source destination
設定防火牆預設拒絕: 設定預設拒絕規則,把 INPUT 鏈設定為預設拒絕,也就是拒絕所有連線請求.
[root@localhost ~]# iptables -P INPUT DROP [root@localhost ~]# iptables -L -n --line-numbers Chain INPUT (policy DROP) #这里可以看出INPUT链已变成DROP numtarget prot opt source destination Chain FORWARD (policy ACCEPT) numtarget prot opt source destination Chain OUTPUT (policy ACCEPT) numtarget prot opt source destination
開啟防火牆ICMP回顯: 在預設規則拒絕的情況下,設定開啟ICMP測試,允許主機ping通.
[root@localhost ~]# iptables -I INPUT -p icmp -j ACCEPT [root@localhost ~]# iptables -L -n --line-numbers Chain INPUT (policy DROP) numtarget prot opt source destination 1ACCEPT icmp --0.0.0.0/00.0.0.0/0 Chain FORWARD (policy ACCEPT) numtarget prot opt source destination Chain OUTPUT (policy ACCEPT) numtarget prot opt source destination
允許客戶SSH遠端連線: 在預設拒絕的情況下,設定開啟22號連接埠,允許遠端ssh連線至本機.
[root@localhost ~]# iptables -I INPUT -p tcp --dport 22 -j ACCEPT [root@localhost ~]# iptables -I OUTPUT -p tcp --sport 22 -j ACCEPT [root@localhost ~]# iptables -L -n --line-numbers Chain INPUT (policy ACCEPT) numtarget prot opt source destination 1ACCEPT tcp--0.0.0.0/00.0.0.0/0tcp dpt:22 Chain OUTPUT (policy ACCEPT) numtarget prot opt source destination 1ACCEPT tcp--0.0.0.0/00.0.0.0/0tcp spt:22
刪除指定規則: 在預設拒絕的情況下,刪除INPUT鏈,第2條資料,刪除ICMP規則.
[root@localhost ~]# iptables -L -n --line-numbers Chain INPUT (policy DROP) numtarget prot opt source destination 1ACCEPT tcp--0.0.0.0/00.0.0.0/0tcp dpt:22 2ACCEPT icmp --0.0.0.0/00.0.0.0/0 [root@localhost ~]# iptables -D INPUT 2 [root@localhost ~]# iptables -L -n --line-numbers Chain INPUT (policy DROP) numtarget prot opt source destination 1ACCEPT tcp--0.0.0.0/00.0.0.0/0tcp dpt:22
指定允許網段存取: 在預設拒絕的情況下,設定只允許192.168.1.0/24網段的主機存取本機的22號連接埠.
[root@localhost ~]# iptables -I INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT [root@localhost ~]# iptables -I OUTPUT -s 192.168.1.0/24 -p tcp --sport 22 -j ACCEPT [root@localhost ~]# iptables -L -n --line-numbers Chain INPUT (policy DROP) numtarget prot opt source destination 1ACCEPT tcp--192.168.1.0/24 0.0.0.0/0tcp dpt:22 Chain OUTPUT (policy ACCEPT) numtarget prot opt source destination 1ACCEPT tcp--192.168.1.0/24 0.0.0.0/0tcp spt:22
拒絕存取指定連接埠: 在INPUT規則鏈中,新增拒絕所有人存取本機的8888號連接埠.
[root@localhost ~]# iptables -I INPUT -p tcp --dport 8888 -j REJECT [root@localhost ~]# iptables -L -n --line-numbers Chain INPUT (policy DROP) numtarget prot opt source destination 1REJECT tcp--0.0.0.0/00.0.0.0/0tcp dpt:8888 reject-with icmp-port-unreachable 2ACCEPT tcp--192.168.1.0/24 0.0.0.0/0tcp dpt:22
拒絕存取指定主機網段的連接埠: 在INPUT規則鏈中,新增拒絕192.168.1.20主機存取本機的80埠.
[root@localhost ~]# iptables -I INPUT -p tcp -s 192.168.1.20 --dport 80 -j REJECT [root@localhost ~]# iptables -L -n --line-numbers Chain INPUT (policy DROP) numtarget prot opt source destination 1REJECT tcp--192.168.1.20 0.0.0.0/0tcp dpt:80 reject-with icmp-port-unreachable 2REJECT tcp--0.0.0.0/00.0.0.0/0tcp dpt:8888 reject-with icmp-port-unreachable 3ACCEPT tcp--192.168.1.0/24 0.0.0.0/0tcp dpt:22
拒絕存取指定連接埠範圍: 在INPUT規則鏈中,新增拒絕所有主機存取本機1000-2000連接埠.
[root@localhost ~]# iptables -A INPUT -p tcp --dport 1000:2000 -j REJECT [root@localhost ~]# iptables -A INPUT -p udp --dport 1000:2000 -j REJECT [root@localhost ~]# iptables -L -n --line-numbers Chain INPUT (policy DROP) numtarget prot opt source destination 1REJECT tcp--192.168.1.20 0.0.0.0/0tcp dpt:80 reject-with icmp-port-unreachable 2REJECT tcp--0.0.0.0/00.0.0.0/0tcp dpt:8888 reject-with icmp-port-unreachable 3ACCEPT tcp--192.168.1.0/24 0.0.0.0/0tcp dpt:22 4REJECT tcp--0.0.0.0/00.0.0.0/0tcp dpts:1000:2000 reject-with icmp-port-unreachable 5REJECT udp--0.0.0.0/00.0.0.0/0udp dpts:1000:2000 reject-with icmp-port-unreachable
SNAT-來源位址轉換<內網對應到公網>: 從本地發出的封包,經過SNAT後,會自動偽裝成公網的IP,並以公網IP存取指定服務.
#例:将本地 192.168.1.1 的请求自动伪装成外网地址 59.110.167.234 [root@localhost ~]# iptables -t nat -A POSTROUTING -o ens32 -s 192.168.1.1 -j SNAT --to-source 59.110.167.234 -o#指定外网接口,此处为ens32 -s#指定内网口地址,此处为192.168.1.1 --to-source #外网口的地址
DNAT-目標位址轉換<公網對應到內網>: 從公網接收的封包,經過DNAT後,會自動將封包轉到指定的內網主機.
#例:将请求 59.110.167.234 且端口为 80 的数据包,自动映射到内网 192.168.1.10 [root@localhost ~]# iptables -t nat -A PREROUTING -i ens32 -d 59.110.167.234 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.10 --to-destination #内网口地址,此处为192.168.1.1 -i #绑定外网接口,此处为ens32 -d #外网地址,此处为8.8.8.8 -dport #内网端口,此处为80
限制實體請求連線數: iptables可以利用connlimit模組實作限制相同IP針對某個連接埠的連線數. 允許限制每個客戶端IP的並發連線數,即每個IP同時連線到一個伺服器個數,也可以限制內網用戶的網路使用,對伺服器而言則可以限制每個IP發起的連線數.
# 限制同一IP同时最多100个http连接 [root@localhost ~]# iptables -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT [root@localhost ~]# iptables -I INPUT -p tcp --syn --dport 80 -m connlimit ! --connlimit-above 100 -j ACCEPT # 只允许每组C类IP同时100个http连接 [root@localhost ~]# iptables -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 --connlimit-mask 24 -j REJECT # 只允许每个IP同时5个80端口转发,超过的丢弃 [root@localhost ~]# iptables -I FORWARD -p tcp --syn --dport 80 -m connlimit --connlimit-above 5 -j DROP # 限制某IP最多同时100个http连接 [root@localhost ~]# iptables -A INPUT -s 192.168.1.100 -p tcp --syn --dport 80 -m connlimit --connlimit-above 100 -j REJECT # 限制每IP在一定的时间(比如60秒)内允许新建立最多100个http连接数 [root@localhost ~]# iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --update --seconds 60 --hitcount 100 -j REJECT [root@localhost ~]# iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS --set -j ACCEPT
設定基本防火牆規則: 我們可以在新安裝的系統中依序執行下方程式碼,來設定一個基本的防火牆規則.
# 删除已有规则 iptables --delete-chain iptables --flush # 默认禁止进,允许出,允许回环网卡 iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT iptables -A INPUT -i lo -j ACCEPT # 允许已建立的或相关连接的通行 iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # 限制80端口443端口的单个IP的最大连接数为10 iptables -I INPUT -p tcp --dport 80 -m connlimit --connlimit-above 10 -j DROP iptables -I INPUT -p tcp --dport 443 -m connlimit --connlimit-above 10 -j DROP # 允许80(HTTP)/873(RSYNC)/443(HTTPS)/20,21(FTP)/25(SMTP)端口的连接 iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 20 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 21 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 25 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT iptables -A INPUT -p tcp -m tcp --dport 873 -j ACCEPT # 允许SSH端口的连接,放行SSH端口 iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT iptables -A OUTPUT -p tcp -m tcp --dport 22 -j ACCEPT # 允许ping iptables -A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT iptables -A INPUT -p icmp -m icmp --icmp-type 11 -j ACCEPT # 放行允许DNS解析端口 iptables -A OUTPUT -p udp -m udp -d 8.8.8.8 --dport 53 -j ACCEPT iptables -A OUTPUT -p udp -m udp -d 114.114.114.114 --dport 53 -j ACCEPT # 保存规则 iptables-save
生產常用設定規則: 下面是收藏的一些生成環境下常用規則的配置,一般情況下配置這些規則足夠使用.
filter -P INPUT DROP #设置默认规则,拒绝所有 iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT#放行80口 iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT #放行22口 iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT#放行22口 iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT#放行80端口 iptables -t filter -I INPUT -p tcp --dport 443-j ACCEPT#插入在顶端一条放行443端口的规则 iptables -t filter -I INPUT 2 -p tcp --dport 443 -j ACCEPT #在第二列插入一条443放行规则 iptables -t filter -A INPUT -p tcp --dport 80 -j DROP#丢弃80端口的请求 iptables -I INPUT 2 -p icmp -j DROP#丢弃ICMP请求 iptables -t filter -D INPUT 3#删除第三条规则 iptables -A FORWARD -s 192.168.1.10 -j REJECT#拒绝IP的转发请求 iptables -I INPUT -s 10.20.30.0/24 -j DROP #丢弃IP网段的入站请求 iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP#丢弃从eth1网卡流入,且地址匹配的数据包 iptables -A INPUT -o eth0 -s 192.168.1.0/24 -j DROP#丢弃从eth0网卡流出,且地址匹配的数据包 iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT #放行20-21端口的数据包 iptables -I INPUT -p tcp -m multiport --dport 80-90,85 -j ACCEPT iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.10-192.168.1.100 -j ACCEPT
以上是Linux防火牆之-iptables詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

OneDrive是微軟提供的熱門的雲端儲存應用程式。我們大多數人使用OneDrive來儲存我們的文件,資料夾,文件等。但一些用戶抱怨說,當他們嘗試存取OneDrive上的共享檔案時,它會給出錯誤,指出「錯誤:0x80070185,雲端操作不成功」。因此,他們無法在OneDrive上執行任何操作,例如複製文件,貼上,下載共享文件等。如今,有必要在我們的日常工作中使用這些操作。此錯誤可以輕鬆解決,為此,我們有一些方法可以應用並嘗試解決問題。讓我們開始吧!方法1–登出並重新登入OneDrive應用程式步驟

很多朋友在設定防火牆的時候,發現自己的win11防火牆高級設定灰色了,無法點擊。這可能是由於沒有添加控制單元導致的,也可能是沒有透過正確的方法打開高級設置,下面一起來看看怎麼解決吧。 win11防火牆進階設定灰色方法一:1、先點選下方開始選單,在上方搜尋並開啟「控制台」2、接著開啟其中的「Windowsdefender防火牆」3、進入後,在左邊欄就可以開啟「進階設定」了。方法二:1、如果上面方法也打不開,可以右鍵“開始選單”,打開“運行”2、然後輸入“mmc”回車確定打開。 3.打開後,點選左上

在AlpineLinux上,你可以使用iptables工具來設定和管理防火牆規則。以下是在AlpineLinux上啟用或停用防火牆的基本步驟:檢查防火牆狀態:sudoiptables-L如果輸出結果中顯示有規則(例如,有一些INPUT、OUTPUT或FORWARD規則),則表示防火牆已啟用。如果輸出結果為空,則表示防火牆目前處於停用狀態。啟用防火牆:sudoiptables-PINPUTACCEPTsudoiptables-POUTPUTACCEPTsudoiptables-PFORWARDAC

UFW,又稱Uncomplex防火牆,被許多Linux發行版採用作為其防火牆系統。 UFW的設計讓新手使用者能夠輕鬆透過命令列介面和圖形使用者介面來管理防火牆設定。 UFW防火牆是一種能根據設定規則監控網路流量的系統,以保護網路免受網路嗅探和其他攻擊的影響。如果您在Linux系統上安裝了UFW但其狀態顯示為非活動狀態,可能有多種原因。在這篇指南中,我將分享如何解決Linux系統上UFW防火牆處於非活動狀態的問題。為什麼UFW在Linux上顯示不活動狀態為什麼UFW在Linux上預設不活動如何在Linu

很多使用win10系統的小伙伴發現,電腦桌面的圖標上有防火牆的標誌,這是什麼情況呢?這讓很多有強迫症的小伙伴特別難受,其實我們只要打開控制面板,在用戶帳戶中的“更改使用者帳號控制設定」變更就可以解決了,具體的教學一起來看看吧。 win10桌面圖示有防火牆標誌怎麼取消1、首先,透過滑鼠右鍵點選電腦開機畫面旁的開始功能表按鈕,然後從彈出的選單中選取控制面板功能。 2.緊接著選擇其中的「使用者帳戶」選項,從接下來出現的新介面中選擇「更改使用者帳戶控制設定」此項目。 3.調整視窗中的滑桿至底部之後,點選確認退出

隨著Web應用程式的增多,安全性越來越成為一個重要的議題。在這些應用程式中,WebShell是一種常見的安全性威脅。 WebShell是一種可執行的Web腳本,可以透過HTTP或其他Web協定上傳和執行。對於攻擊者來說,WebShell是存取Web伺服器並取得敏感資訊的重要方式。 Nginx防火牆是一種流行的Web伺服器軟體,可以用來保護網路應用程式免受攻

任何windows系統要更好地工作並具有良好的性能,都需要不時更新。不僅是需要更新的系統,還包括連接到系統內部(如顯示卡)或外部(如光學滑鼠、鍵盤等)的裝置的所有驅動程式。最近,一些Windows用戶在更新系統中的任何裝置驅動程式時開始遇到問題。當他們嘗試更新驅動程式時,它在更新驅動程式視窗上拋出了一條錯誤訊息,上面寫著“此操作需要互動式視窗站”,並阻止用戶更新驅動程式。如果它不允許用戶更新任何驅動程序,這實際上是一個嚴重的問題,因為它對於保持系統健康非常重要。缺少管理權限可能是此問題背後的原因

Edge瀏覽器被防火牆阻止了怎麼解決? Edge瀏覽器是微軟自帶的瀏覽器,有一部分用戶在使用的過程中發現這款瀏覽器被防火牆攔截了,那麼這是怎麼回事?以下就讓本站來為用戶們來仔細的介紹一下Edge瀏覽器被防火牆阻止了怎麼恢復吧。 Edge瀏覽器被防火牆阻止了怎麼恢復? 1、檢查防火牆設定: -點選Windows工作列上的「開始」按鈕,然後開啟「設定」。 -在「設定」視窗中,選擇「更新與安全性」。 -在
