一、安裝
Ubuntu防火牆使用ufw(Uncomplicated Fire Wall)進行管理。(通常已默認安裝) ufw與其它linux類防火牆一樣,使用iptable作爲後臺。
安裝方法:
sudo apt-get install ufw
二、開啓/關閉
ufw enable|disable
使用ufw enable後,系統將在啓動時自動開啓防火牆。
三、常見操作
查看ufw當前的規則:
ufw status開啓和禁用:
ufw allow|deny [service]轉換日誌狀態:
ufw logging on|off幫助文檔獲取:
ufw -help啓動默認防禦(阻止外部聯接,放行對外聯接):
ufw default denyufw常見使用規則:
- 規則可以簡寫也可以完整表達。簡寫的規則只能指定端口和(或)協議被允許或阻止。默認是訪問本機的規則(incoming)。例如:
ufw allow 53
允許其它機子訪問本機53端口,協議包含tcp和udp。
- 如果要控制協議,只要加入“/協議”在端口後面就行了。例如:
ufw allow 25/tcp
允許其它機子使用tcp協議訪問25端口。
- UFW也可以檢查 /etc/services文件,明白服務的名字及對應的端口和協議。我們使用服務的名稱即可。
ufw allow smtp
- UFW同時支持出入口過濾。用戶可以使用in或out來指定向內還是向外。如果未指定,默認是in。例如:
ufw allow in http
許可訪問本機http端口(80)
ufw reject out smtp
禁止訪問外部smtp端口,並告知“被防火牆阻止”。
ufw deny out to 192.168.1.1
禁止本機192.168.1.1對外訪問。比如本機有多個IP時(通過虛擬網卡、多網卡等)。
- 用戶也可使用完整的規則來指定來源與目的地,還有端口。書寫規則基於OpenBSD PF。舉例:
ufw deny proto tcp to any port 80
阻止使用tcp協議向任何地址的80端口發送數據包
ufw deny proto tcp from 10.0.0.0/8 to 192.168.0.1 port 25
阻止來源爲10.0.0.0/8(255.0.0.0)這個網絡段的數據包通過tcp協議發送到192.168.0.1的25端口。
ufw reject out on wlan0 to 119.75.217.56
禁止通過本機無線網卡wlan0聯接到119.75.217.56(已測試)
sudo ufw deny out on wlan0 from 192.168.1.2 to 119.75.217.56
禁止通過本機192.168.1.2無限網卡wlan0發送數據包到119.75.217.56(已測試)。當IP被改爲192.168.1.3或其它就能通過wlan0連接到119.75.217.56
- ufw也可以使用IPv6協議。但要事先在/etc/default/ufw 中設定IPv6爲啓動狀態。舉例:
ufw deny proto tcp from 2001:db8::/32 to any port 25
阻止IPv6爲2001:db8::/32類型的地址,連接25端口
- ufw可以連續例舉端口號。端口號間必須使用逗號或分號,不能使用空格。“輸入端口號”字符數最多不能超過15過(8080:8090算兩個字符)。比如允許80,443,8080~8090這幾個端口接受tcp傳入連接。
ufw allow proto tcp from any to any port 80,443,8080:8090
此例,“輸入端口號”字符數爲4個。命令意思是阻止通過tcp協議發送數據包到80,443,8080~8090端口
- ufw可以對連接數率進行限制,以防範暴力登錄攻擊。如果同一個IP地址在30秒之內進行了6次及6次以上的連接,ufw將阻止(deny)該連接。
ufw limit ssh/tcp
- 當然有些時候我們不想讓訪問者知道他的訪問被拒絕了。就使用reject代替deny
ufw reject auth
- 默認情況下ufw的所有規則針對所有網絡設備(比如網卡1,網卡2,無線網卡1,虛擬網卡1……)。但是我們可以特別指定,某規則在什麼網絡設備上生效。注意只能使用設備號,不能用別名。比如有線網卡:eth0(你可以使用ifconfig命令查看你現有的網絡設備)
ufw allow in on eth0 to any port 80 proto tcp
- 要刪除規則,只要在命令中加入delete就行了。比如:
ufw deny 80/tcp要刪除這條命令建立的規則,使用:
ufw delete deny 80/tcp
當然,也可以使用規則號來進行刪除。比如要第3號規則 ufw delete 3
注意,如果你開啓IPv6功能。要同時刪除IPv4和IPv6的規則(比如:ufw allow 22/tcp),如果用規則號的方式刪除可能只刪除了一個。
- 顯示第幾號規則,可以使用這樣的命令
ufw status numbered(也就是規則號)
- 日誌功能。如果使用log將記錄所有符合規則的新連接,如果使用log-all將記錄所有符合規則的數據包。例如,要允許並記錄shh(22/tcp)上的新連接:
ufw allow log 22/tcp
更多內容看“日誌sudo ufw default deny”一節
特殊例子: 允許RFC1918網絡結構訪問本機:
ufw allow from 10.0.0.0/8 ufw allow from 172.16.0.0/12 ufw allow from 192.168.0.0/16
其實這個就是用CIDR(無類別域間路由選擇 ,Classless and Subnet Address Extensions and Supernetting)的形式表示的一個網段,或者說子網。
192.168.0.0/24”就表示,這個網段的IP地址從192.168.0.1開始,到192.168.0.254結束(192.168.0.0和192.168.0.255有特殊含義,不能用作IP地址);子網掩碼是255.255.255.0。
上面的子網掩碼怎麼來的呢?其實關鍵就在“24”上。我們知道IP地址是四個十進制數組成的,相當於32位二進制。用CIDR表示形式,後一個數字將這32位進行了間隔(以24爲例):前24位用"1"表示,後面8位用0表示,得到一個二進制數:
11111111 11111111 11111111 00000000。
將其轉化爲十進制,就是:255.255.255.0了。這個不就是子網掩碼,netmask。
對應的:
/8 就是 255.0.0.0; /16就是 255.255.0.0
比如要把192.168.0.0/24分爲兩個網絡。 192.168.0.0對應2進製爲
11000000 10101000.00000000 00000000
子網掩碼原爲255.255.255.0
11111111 11111111 11111111 00000000
- 192.168.0.0~192.168.0.127爲一個網絡;192.168.0.128~192.168.0.255爲另一個網絡。
- 所屬網絡分別爲192.168.0.0;192.168.0.128
- 網絡廣播分別爲192.168.0.127;192.168.0.255
- 子網掩碼爲255.255.255.128;255.255.255.128。2進製表示爲(25個1)
11111111 11111111 11111111 10000000
CIDR表示就很簡單了:192.168.0.0/25即192.168.0.0~192.168.0.127;192.168.0.128/25即192.168.0.128~192.168.0.255。
應用程序集成管理:
- ufw能從 /etc/ufw/applications.d. 中讀取應用程序清單。你可以使用命令查看:
ufw app list
- 大家可以使用應用程序名字來增加規則。比如
ufw allow <程序名字> ufw allow CUPS ufw allow from 192.168.0.0/16 to any app <程序名字> 注意,端口號已經被程序名所對應的策略所包括,不要再重新列舉端口號。
- 查看程序名所對應的策略內容,命令:
ufw app into <程序名字> 注意:程序名字是清單上有的才行。程序名字改用用all,可以看全部策略。
- 如果你編輯或者增加了程序清單,你可使用此命令更新防火牆:
ufw app update <程序名字> 程序名字改用用all,則更新整個清單。
- 更新清單同時增加規則可以使用如下命令:
ufw app update --add-new <程序名字>
注意:update --add-new參數的行爲由此命令配置: ufw app default skip|allow|deny 默認是skip,也就是沒有設定。
警告:如果程序規則設定爲default allow ,將會引起很大的風險。請三思而後行!
四、詳細說明
[]是代表可選內容。需要root權限,如無法運行,請使用 sudo ufw……的命令結構。“”中的內容不能照抄,要按需要更改。
ufw [--dry-run] enable|disable|reload 命令[--試運行]激活|關閉|重新載入
ufw [--dry-run] default allow|deny|reject [incoming|outgoing] 命令[--試運行]默認 允許|阻止|拒絕 [訪問本機|向外訪問]
- deny讓訪問者知道數據被拒絕(回饋拒絕信息),這樣調試網絡時就知道是防火牆阻止了訪問。reject則直接丟棄訪問數據,訪問者不知道是訪問被拒絕還是不存在該主機。
- 這個默認策略。相當於“總策略”
- 如果更改了默認策略,一些已經存在的規則可能需要手動修改。更多內容看“規則示例”一節。
ufw [--dry-run] logging on|off|LEVEL 命令[--試運行]日誌 開啓|關閉|“級別”
- “級別”分爲low、medium、high、full
- low 記錄與默認策略衝突的封裝數據包(記錄速度被限制)。記錄與規則符合的數據包(沒有要求關閉記錄的)
- medium 記錄與默認策略衝突的數據包(包括被規則允許的)、無效數據包、所有新連接。記錄速度被限制。
- high 同medium,只是沒有記錄速度限制。附加記錄所有數據包(有記錄速度限制)。
- full 與high等同,只是取消記錄限制。
medium級別及更上級會記錄許多內容,有可能短時間內撐爆你的硬盤。特別是用在服務器一類的機器上。
ufw [--dry-run] reset 命令[--試運行]復位
ufw [--dry-run] status [verbose|numbered] 命令[--試運行]狀態 [詳細|規則編號]
- 這個命令可以查看現有規則
ufw [--dry-run] show REPORT 命令[--試運行]顯示 “報告類型”
- “報告類型”包括:raw,builtins,before-rules,user-rules,after-rules,logging-rules,listening
- 它們都是基於iptable
- raw 原始報告。它是所有報告的來源,除外listening。
- builtins
- before-rules
- user-rules
- after-rules
- logging-rules
- listening 監聽。顯示系統中處於監聽狀態的tcp端口和 開放狀態的udp端口,以及對應的IP地址、網絡設備。網絡設備顯示爲‘*’時,表示這個端口綁定到了所有網絡設備上。後面顯示激活這個端口進行監聽的規則。只有IPV6啓用的時候,默認規則纔會顯示tcp6、udp6。
ufw [--dry-run] [delete] [insert NUM] allow|deny|reject|limit [in|out][log|log-all] PORT[/protocol] 命令[--試運行][刪除] [插到“x號規則”之前] 允許|阻止|拒絕|限制 [進|出] [記錄新連接|記錄所有數據包] “端口” [/“協議”]
- [insert NUM]插到“x號規則”之前。意思是把規則等級提前,序號在前的規則要優先於序號在後的規則。
- deny讓訪問者知道數據被拒絕(回饋拒絕信息),這樣調試網絡時就知道是防火牆阻止了訪問。reject則直接丟棄訪問數據,訪問者不知道是訪問被拒絕還是不存在該主機。limit對連接數率進行限制,以防範暴力登錄攻擊。如果同一個IP地址在30秒之內進行了6次及6次以上的連接,ufw將阻止(deny)該連接。
- [in|out]in接收數據包,out發送數據包。
- PORT用具體的端口號代替,比如80
- [/protocol]協議類型。不指定時,同時作用於tcp、udp。PORT[/protocol]的寫法:8080/udp這樣,中間沒有空格。
ufw [--dry-run] [delete] [insert NUM] allow|deny|reject|limit [in|out on INTERFACE] [log|log-all] [proto protocol] [from ADDRESS [port PORT]] [to ADDRESS [port PORT]] 命令 [--試運行][刪除][插到x號規則之前] 允許|阻止|拒絕|限制 [進|出 基於“什麼網絡設備”] [協議 “協議”] [來源 “地址” [端口 “端口”]] [目標 “地址” [端口 “端口”]]
- [insert NUM]插到“x號規則”之前。意思是把規則等級提前,序號在前的規則要優先於序號在後的規則。
- deny讓訪問者知道數據被拒絕(回饋拒絕信息),這樣調試網絡時就知道是防火牆阻止了訪問。reject則直接丟棄訪問數據,訪問者不知道是訪問被拒絕還是不存在該主機。limit對連接數率進行限制,以防範暴力登錄攻擊。如果同一個IP地址在30秒之內進行了6次及6次以上的連接,ufw將阻止(deny)該連接。
- [in|out on INTERFACE]在某網絡設備上in接收數據包,out發送數據包。比如規則只作用於無線網卡0號(一般表示爲wlan0,你可以單獨運行命令ifconfig來查看你有哪些網絡設備)接收數據包,這點就寫爲:in on wlan0。
- [from ADDRESS [port PORT]]規則應用於某IP地址(的“某端口”)。假如:主機192.168.1.2無限制上網,而虛擬機192.168.1.120禁止訪問192.168.1.56。就用到ufw deny from 192.168.1.120 to 192.168.1.56
- [to ADDRESS [port PORT]]規則應用於某IP地址來源(的“某端口”)。這裏指外部IP地址,也就是傳統意義上的防火牆設定。
ufw [--dry-run] delete NUM 命令[--試運行] 刪除 “第X號規則”
- 通過這個命令來獲得規則號
ufw status
ufw [--dry-run] app list|info|default|update 命令 [--試運行] 程序 清單|信息|默認|更新
可直接跟着ufw後的參數:
命令方式:(如:ufw -h)
ufw 參數
--version 顯示程序版本號
-h , --help 顯示幫助信息
--dry-run 不實際運行,只是把涉及的更改顯示出來。
enable 激活防火牆,開機時自動啓動
disable 關閉防火牆,開機時不啓動
reload 重新載入防火牆
reset [--force] 關閉防火牆,並復位至初始安裝狀態。如果使用--force選項,則忽略確認提示。
status 顯示防火牆的狀態和已經設定的規則。使用status verbose顯示更詳細的信息。‘anywhere’與‘any’、‘0.0.0.0/0’一個意思。
show “報告類型” 顯示防火牆運行信息。詳細內容看“報告類型”
limit “規則” 限制連接次數。通常用於登錄端口,防止暴力破解。如果同一個IP地址在30秒之內進行了6次及6次以上的連接,ufw將阻止(deny)該連接。 此命令目前只能用於IPv4。還不支持IPv6.
===========================================================================
本文參考:http://wiki.ubuntu.org.cn/Ufw%E4%BD%BF%E7%94%A8%E6%8C%87%E5%8D%97