防火牆 -- Ubuntu

一、安裝

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 deny
ufw常見使用規則:

  • 規則可以簡寫也可以完整表達。簡寫的規則只能指定端口和(或)協議被允許或阻止。默認是訪問本機的規則(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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章