-- 作者 謝恩銘 轉載請註明出處
內容簡介
- 第四部分第四課:分析網路,隔離防火
- 第四部分第五課預告:原始碼編譯,安裝便利
分析網路,隔離防火
上一課 Linux探索之旅 | 第四部分第三課:檔案傳輸,瀟灑同步 比較輕鬆,這一課有點難度。
俗語說得好:愛國愛家愛師妹! 防火防盜防師兄!
雖然說,Linux本身很安全,至少比Windows安全多了。你看Linux發行版, 基本不需要安裝防毒軟體,基於修改的Unix系統的蘋果Mac OS系統也幾乎不需要裝防毒軟體。
相反, 如果Windows不裝個防毒軟體,簡直不好意思出門跟別人打招呼(日常黑Windows任務完成 :P)。
開個玩笑啦,Windows是很好的系統,小編也有使用Windows系統。
不過,在網路上穿行,還是小心為妙。畢竟網上有不懷好意的黑客(或普通人),想方設法獲取我們的隱私,或者控制我們的電腦。
這一課很重要,我們來學習幾個厲害的命令,能幫助我們分析網路,再來學習如何使用輕量級的防火牆。
我們將一起學習經由電腦的網路通訊是怎麼回事。
事實上,當你的電腦連線到網際網路(Internet)時,總會有那麼一些電腦裡的軟體會連上網,然後下載或上傳資訊,很多時候還是偷偷地在後臺進行。
如何監控此等“大逆不道”的行徑呢?如何知道哪個軟體正在與網路通訊,在哪個埠上進行呢?就是本課要探究的。
還有,懂得配置防火牆是很必要的,不管是在你的家用電腦上還是在你租用的伺服器上。因為這能有效保護電腦,免得一些軟體未經你同意就和網際網路交換資訊。
使用防火牆是一個重要的安全防護措施,特別是每個系統管理員(System Administrator), 更是不能逃避,總要學習。
好了,廢話了這麼多,開篇入正題吧。
希望你們不要嫌我囉嗦,真的不要... 如果你嫌我囉嗦,你要說出來,你不說出來,我怎麼知道你嫌我囉嗦呢?如果你說出來了,但是不夠大聲,那也是不行的,不大聲我聽不清楚啊...
好了,好了,不要再扔雞蛋了... 你,說的就是你啦,還拿了一個番茄準備扔誒,要不要那麼誇張...
馬上要跨年(2016-2017)了,就原諒小編頑皮一次吧。
提前祝大家聖誕快樂, 新年更精彩!
下文中關於網路方面的知識,可以查閱小編已完結的系列教程《Web探索之旅》
host和whois命令:告訴我你是誰
"Just tell me 為什麼, 眼神有話要說, 是不是你想要認識我...", 想起了潘瑋柏的《Tell me》這首歌(tell me是英語"告訴我"的意思)。
我們已經知道,每臺連上網的電腦都會被一個IP地址所標識,這個IP地址是全球唯一的。
目前,大多數IP地址是這樣的形式:
96.172.150.23複製程式碼
這樣的形式被稱為IPv4格式(以小數點分隔)。IP是Internet Protocol("網際協議")的縮寫,v是version("版本")的首字母,4表示這是"版本四"。
不過,因為IPv4的地址不夠用的關係,現在已經有不少IP地址的格式是IPv6的格式了,已有的IPv4地址也被慢慢替換成IPv6。IPv6的IP地址類似這樣:
fa80::109:62fa:cb80:29d2複製程式碼
上面的是簡寫形式(兩個冒號::用於合併連續的幾組0),完整的形式是:
fa80:0000:0000:0000:0109:62fa:cb80:29d2複製程式碼
我們看到, IPv6的IP地址是以冒號分隔的8組4位的16進位制(也就是8組16位二進位制,因為2的4次方是16),所以 8 * 16 = 128。
IPv6把 IP 地址由IPv4的32 位(4個2的8次方,4 * 8 = 32)增加到 128 位。
2的32次方是42億多一點。隨著網際網路的快速成長,IPv4的42億個地址的分配最終於2011年2月3日用盡。
而IPv6的128位可以提供的IP地址數量可達 2^128 = 3.402823669 × 10^38 (10的38次方) 個。屆時每個人家居中的每件電器,每樣東西,甚至地球上每一粒沙子都可以擁有好幾個IP地址。
根本用不完,IP多就是這麼任性~
我們可以為每一個IP地址繫結一個主機名,主機名的英語是host name。
注意:
這裡的主機名其實應該被稱為完整主機名: Fully Qualified Domain Name (FQDN),是由主機名(host name)和域名(domain name)一起構成。我們一般會用主機名或域名來代稱FQDN,其實不是那麼準確。
host name和domain name是不同的概念,有點小複雜。
例如,程式設計師聯盟的伺服器的完整主機名是www.coderunity.com,這裡的www是主機名,coderunity.com是域名。對應的IP地址是58.96.181.197(假想的IP地址)。
下面的課程中, 我們會用主機名或域名代指FQDN。
相比於記憶一串數字(IPv4)或 數字+字母(IPv6)的IP地址,人腦更擅長記住主機名。如下圖,IP地址和主機名對應:
IP地址和主機名的互相轉換
使用host(host是英語“主機”的意思)這個命令我們可以實現IP地址和主機名的互相轉換,例如:
host coderunity.com (或 host www.coderunity.com)會得到IP地址:58.96.181.197
而host 58.96.181.197則會得到主機名
host命令的其他引數選項,可以用man host來查考。
自定義解析
IP地址和主機名的解析是由DNS(Domain Name System,域名解析系統)伺服器完成的。我們不深入瞭解DNS的具體工作原理了,半天解釋不完。
因此,當你在瀏覽器的位址列裡輸入coderunity.com 時,你就能收到由網路上的DNS伺服器幫你解析出來的IP地址,你就可以訪問程式設計師聯盟的官網了。
你當然不能修改DNS伺服器上的主機名和IP地址的對應關係列表(因為有風險,會影響到很多人)。但是你可以自定義你電腦上主機名和IP地址的對應關係。
以root身份開啟/etc/hosts 檔案:
sudo nano /etc/hosts複製程式碼
可以看到一些IP地址和主機名的對應關係,例如:
127.0.0.1 對應了localhost。
127.0.1.1 對應了oscar-laptop,就是小編電腦的主機名。
下面還有一些IPv6格式的IP地址。
你可以往裡面新增自己的解析對。寫在一行裡,在IP地址和主機名之間至少要留一個空格。
那麼自定義IP地址和主機名之間的解析關係,有什麼用呢?
當然有用,有的時候,網路上負責解析域名的DNS伺服器可能暫時出現故障(很少見),那這時你在位址列直接輸入IP地址可以訪問對應網站,但是輸入主機名(域名)則不能訪問了,因為沒有DNS伺服器解析,域名是不能被識別的。
這時,你自定義在本地Linux系統的/etc/hosts檔案中的解析規則就可以發揮作用了。你還是可以訪問網站。
例如你可以加一條程式設計師聯盟網站的解析對:
58.96.181.197 coderunity.com複製程式碼
但是這樣的方法也有缺陷:假如你的主機的IP地址換了,那你輸入域名就不能上那個網站了。所以,一般來說,我們還是靠經常更新解析對的網路上的DNS伺服器更好(一般一天更新一次)。
對於區域網,這個host檔案也是很有用的。
例如在自己家裡建立的區域網裡面,有你的電腦,還有你老爸的電腦。那你不想記住老爸的電腦的IP地址,怎麼辦呢?可以新增一條解析對,例如:
192.168.0.7 father-laptop複製程式碼
這樣,老爸的電腦的IP地址對應的主機名在你這裡就成為father-laptop了,你就可以更方便地訪問老爸的電腦。
例如,如果在老爸的電腦裡你有一個賬戶叫oscar,那麼用之前學的SSH來登入老爸電腦上的oscar賬戶,就是:
ssh oscar@father-laptop複製程式碼
就不用輸入以下命令了:
ssh oscar@192.168.0.7複製程式碼
whois:瞭解有關域名的資訊
whois這個命令很好記,由who和is兩部分組成,who是英語“誰”的意思,is是英語“是”的第三人稱單數形式。所以連起來表示:"是誰"。
每一個域名在登記註冊時都須要填寫:姓,名,聯絡地址,聯絡方式,等等。這是規定。
whois命令就可以幫助我們輕鬆獲得域名背後的這些資訊。
可以選一個主機名來試試,例如:
whois coderunity.com複製程式碼
你就有小編的郵寄地址啦,要送我新年禮物就趕緊哦。哈哈,開玩笑的~ 我目前在巴黎工作。
ifconfig和netstat命令:控制和分析網路流量
我們接著學習兩個非常強大的命令:ifconfig和netstat。
ifconfig:列出網路介面
ifconfig是Linux中用於顯示或配置網路裝置(網路介面卡)的命令,英文全稱是(Network) Interface Configuration。if是Interface的縮寫,表示“介面”;configuration是“配置”的意思。
一般來說,你的電腦擁有好幾個網路介面,也就是說有多種連線網路的方式。
執行ifconfig命令,顯示如下:
在小編的電腦上顯示有三個網路介面,分別是:
- eth0
- lo
- wlan0
在你的電腦上可能網路介面多於三個,也可能少於三個,本不足為奇,取決於你電腦的裝置。幸好小編的電腦的三個網路介面都是最常見的三個,詳述如下:
- eth0:對應有線連線(對應你的有線網路卡),就是用網線來連線的上網(一般是RJ45網線,見下圖),如果你的電腦目前使用網線來上網,那就是在使用這個介面。有些電腦可能同時有好幾條網線連著(有好幾個有線介面),例如伺服器,那麼除了eth0(第一塊有線網路卡),你還會看到例如eth1,eth2,等等。
lo:本地迴環(Local Loopback的縮寫,對應一個虛擬網路卡)。可以看到它的IP地址是127.0.0.1,似曾相識是嗎?對啊,之前我們在/etc/hosts檔案中看到對應localhost的就是這個IP。每臺電腦都應該有這個介面,因為它對應著連向... 自己的連結。這也是我們稱之為本地迴環的原因:所有經由這個介面傳送的東西都會回到你自己的電腦。看起來好像並沒有什麼用,但是有時為了某些緣故(可以百度或Google繼續探究),我們需要連線自己。例如用來測試一個網路程式,但又不想讓區域網或外網的使用者能夠檢視,只能在此臺主機上執行和檢視所用的網路介面。比如把 HTTPD伺服器指定到迴環地址,在瀏覽器輸入 127.0.0.1 就能看到你所架設的Web網站了。但只有你自己能看得到,區域網的其它主機或使用者無從知道。
wlan0:對應Wi-Fi無線連線(對應你的無線網路卡)。假如你有好幾塊無線網路卡,那麼會看到wlan1,wlan2,等等。
仔細觀察上面ifconfig輸出的資訊,你猜到小編此時用的是哪種方式連網的嗎?
聰明如你應該猜到了(可不要害怕閱讀一堆英語哦)。是的,小編此時用的是有線連線的方式上網。證明就在eth0的資訊中:
RX packets : 4853
TX packets : 4821複製程式碼
分別是接收包和傳送包的數目。RX是receive(表示“接收”)的縮寫,TX是transmit(表示“傳送”)的縮寫。packet是英語“包,資料包”的意思。
而wlan0的資訊中,這兩行是0。表示沒有傳送和接收任何資料。
當然,本地迴環的這兩行也有148呢。所以說,給自己傳送東西也是會發生的。
ifconfig命令還可以用來配置網路介面。但這有些超出本課程的範圍了,畢竟需要懂一些網路方面的知識才能配置啊,不然配錯了就糟了。
但是,有一個簡單的配置方式我們可以學習:介面的啟用/關閉。
使用格式如下:
ifconfig interface state複製程式碼
替換 :
interface:由你想要修改的網路介面名稱代替(eth0,wlan0等等)。
state:由up或down代替,分別表示啟用和關閉對應介面。
例如:
# 關閉eth0這個有線介面,之後就沒有任何網路傳輸會在eth0上進行了。
ifconfig eth0 down複製程式碼
# 啟用eth0這個有線介面。
ifconfig eth0 up複製程式碼
配置IP地址
用ifconfig命令可以配置網路介面的IP地址和其他資料
例如:
ifconfig eth0 192.168.120.56 netmask 255.255.255.0 broadcast 192.168.120.255複製程式碼
上面的命令用於給eth0網路卡配置IP地址(192.168.120.56),加上子網掩碼(255.255.255.0),加上個廣播地址(192.168.120.255)。
還有更多命令選項就用man ifconfig來檢視吧。
netstat : 網路統計
netstat命令很好記,它由兩部分組成:net和stat。
net是network的縮寫,表示“網路”;stat是statistics的縮寫,表示“統計”。所以顧名思義就是對網路資訊進行統計啦。
再論學英語對程式設計的重要性 : 對於程式設計師, 為什麼英語比數學更重要? 如何學習
假如你沒有一些網路方面的知識,那麼netstat命令的輸出可能難以理解,但是也沒那麼難。假如你要了解你的電腦正在網路上做什麼,那麼netstat是不二選擇。
netstat可以顯示很多資訊,但是我們可以用引數來控制顯示資訊的種類和樣式。下面介紹幾個常用的引數吧:
netstat -i : 網路介面的統計資訊
首先,試試i引數吧:
netstat -i複製程式碼
會顯示一張統計列表,列出你電腦的所有網路介面的一些統計資訊,例如小編的電腦就列出了eth0,lo,wlan0這三個介面的使用資訊。
netstat -uta : 列出所有開啟的連線
執行
netstat -uta複製程式碼
引數uta分別表示:
-u : 顯示UDP連線(u是udp的首字母)
-t : 顯示TCP連線(t是tcp的首字母)
-a : 不論連線的狀態如何,都顯示(a是all的首字母)
TCP和UDP是兩種不同的協議,用於在網路上傳輸資料。
UDP(User Datagram Protocol,使用者資料包協議)一般用於網路遊戲,音訊通訊(例如Skype)。
除此之外,一般來說TCP(Transmission Control Protocol,傳輸控制協議)是最常用的。一般在網際網路上都是用TCP/IP協議。
我們也可以只顯示TCP連線的資訊:
netstat -ta複製程式碼
或者只顯示UDP連線的資訊(不常用):
netstat -ua複製程式碼
再來看看上面圖片中state(狀態)那一列的資訊,有好幾種不同狀態:
ESTABLISHED:與遠端電腦的連線已建立。establish是英語“建立”的意思。
TIME_WAIT : 連線正在等待網路上封包的處理,一旦處理完畢就開始關閉連線。time是英語“時間”的意思,wait是英語“等待”的意思。。
CLOSE_WAIT:遠端伺服器中止了連線(也許你太久沒什麼動作,處在不活躍狀態)。close是英語“關閉”的意思。
CLOSED:連線沒有被使用。關閉了。
CLOSING:連線正在關閉,但有些資料還沒有傳送完畢。
LISTEN:監聽著可能進入的連線。此時連線還沒有被使用。listen是英語“聽”的意思。
當然,狀態還不止這幾種,其他的可以在netstat的命令手冊中找到(用man netstat)。
我們再來看看埠的資訊,就是上面圖片中冒號(:)之後的資料。
事實上,我們連線其他電腦,可以透過不同的埠(port),有點類似門戶。比如我去朋友家,可能進他們的廚房門,書房門,地下室門,等等。
不同的埠用處不同。進廚房門可能看看做菜如何,進書房門可能一窺書香,進地下室門可能去品品葡萄酒。反正臥室門是不可以隨便進的~
摘自百度百科:
"埠"是英文port的意譯,可以認為是裝置與外界通訊交流的出口。
埠可分為虛擬埠和物理埠。
其中虛擬埠指計算機內部或交換機路由器內的埠,不可見。例如計算機中的80埠、21埠、23埠等。
物理埠又稱為介面,是可見埠,例如計算機背板的RJ45網口,交換機路由器集線器等RJ45埠。電話使用的RJ11插口也屬於物理埠的範疇。
如下圖所示:
你可以加上-n引數,假如你想讓埠資訊以數字的形式顯示,而不是像上圖中那樣有點看不懂的狀態,比如https,nfs,mysql等等。
80埠是為HTTP(HyperText Transport Protocol,超文字傳輸協議)開放的,此為上網衝浪使用次數最多的協議,主要用於WWW(World Wide Web,全球資訊網)傳輸資訊的協議。可以通過HTTP地址(即常說的“網址”)加“:80”來訪問網站,因為瀏覽網頁服務預設的埠號都是80,因此只需輸入網址即可,不用輸入“:80”了。
110埠是為POP3(郵件協議3)服務開放的,用於收發電子郵件。
21埠用於FTP(File Transfer Protocol,檔案傳輸協議)服務,FTP服務主要是為了在兩臺計算機之間實現檔案的上傳與下載。上一課我們學習過FTP相當的知識。
netstat -lt : 列出狀態是LISTEN的統計資訊
netstat -lt複製程式碼
####netstat -s : 列出總結性的統計資訊
netstat -s複製程式碼
還有更多命令選項就用man netstat來檢視吧。
iptables:參考系防火牆
現在既然我們已經知道如何分析網路傳輸,我們就趁熱打鐵,學習如何用防火牆來過濾網路傳輸。
Linux下著名的防火牆是iptables。它有點年紀了,已經服役十幾年。iptables命令可以制定一些規則,規定其他電腦可以使用哪些埠來連線你的電腦(入),以及你的電腦可以連線哪些埠(出)。也可以通過IP地址來過濾。類似下圖所示:
例如,我想要攔截所有FTP的連線,那麼我可以用iptables封鎖21埠。
安裝iptables防火牆
如果沒有安裝iptables需要先安裝,
# CentOS執行:
sudo yum install iptables複製程式碼
# Debian/Ubuntu執行:
sudo apt-get install iptables複製程式碼
iptables的使用需要root身份
為了使用iptables,你需要切換到root身份:
sudo su複製程式碼
iptables -L : 顯示所有規則
iptables -L複製程式碼
可以看到三個區域:
Chain INPUT : 對應控制《進入》的網路傳輸的規則。input是英語“輸入”的意思。
Chain FORWARD : 對應控制《轉發》的網路傳輸的規則。forward是英語“轉發”的意思。
Chain OUTPUT : 對應控制《出去》的網路傳輸的規則。output是英語“輸出”的意思。
暫時我們還沒有制定任何規則。我們慢慢來學習。
1、清除已有iptables規則(慎用)
iptables -F
iptables -X
iptables -Z複製程式碼
2、開放指定的埠
# 允許本地迴環介面(即執行本機訪問本機)
iptables -A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT複製程式碼
# 允許已建立的或相關連的通行
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT複製程式碼
# 允許所有本機向外的訪問
iptables -A OUTPUT -j ACCEPT複製程式碼
# 允許訪問22埠
iptables -A INPUT -p tcp --dport 22 -j ACCEPT複製程式碼
# 允許訪問80埠
iptables -A INPUT -p tcp --dport 80 -j ACCEPT複製程式碼
# 允許FTP服務的21和20埠
iptables -A INPUT -p tcp --dport 21 -j ACCEPTiptables -A INPUT -p tcp --dport 20 -j ACCEPT
# 如果有其他埠的話,規則也類似,稍微修改上述語句就行。複製程式碼
# 禁止其他未允許的規則訪問(注意:如果22埠未加入允許規則,SSH連結會直接斷開。)
## 1).用DROP方法
iptables -A INPUT -p tcp -j DROP
## 2).用REJECT方法
iptables -A INPUT -j REJECTiptables -A FORWARD -j REJECT複製程式碼
3、遮蔽IP
# 遮蔽單個IP的命令是
iptables -I INPUT -s 123.45.6.7 -j DROP複製程式碼
# 封整個段,即從123.0.0.1到123.255.255.254的命令
iptables -I INPUT -s 123.0.0.0/8 -j DROP複製程式碼
# 封IP段從123.45.0.1到123.45.255.254的命令
iptables -I INPUT -s 124.45.0.0/16 -j DROP複製程式碼
# 封IP段從123.45.6.1到123.45.6.254的命令是
iptables -I INPUT -s 123.45.6.0/24 -j DROP複製程式碼
4、檢視已新增的iptables規則
iptables -L -n複製程式碼
5、刪除已新增的iptables規則
# 將所有iptables以序號標記顯示,執行:
iptables -L -n --line-numbers複製程式碼
# 要刪除INPUT裡序號為8的規則,執行:
iptables -D INPUT 8複製程式碼
6、iptables的開機啟動及規則儲存
CentOS上可能會存在安裝好iptables後,iptables並不開機自啟動,可以執行一下:
chkconfig --level 345 iptables on
# 將其加入開機啟動。複製程式碼
CentOS上可以執行:
service iptables save
# 儲存規則。複製程式碼
Debian/Ubuntu上iptables是不會一直儲存規則的。
需要按如下步驟進行,讓網路卡關閉時儲存iptables規則,啟動時載入iptables規則。
如果當前使用者不是root,即使使用了sudo,也會提示你沒有許可權,無法儲存。所以執行本命令,你必須使用root使用者。
可以使用sudo -i 快速轉到root,使用完成,請使用su username切換到普通帳戶。
為了重啟伺服器後,規則自動載入,我們建立如下檔案:
sudo vim /etc/network/if-pre-up.d/iptables複製程式碼
這個iptables檔案裡的初始內容是:
#!/bin/bash
iptables-save > /etc/iptables.rules複製程式碼
新增執行許可權:
chmod +x /etc/network/if-pre-up.d/iptables複製程式碼
附上基礎規則:
*filter
:INPUT ACCEPT [106:85568]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [188:168166]
:RH-Firewall-1-INPUT - [0:0]
# 允許本地迴環介面(即執行本機訪問本機)
-A INPUT -s 127.0.0.1 -d 127.0.0.1 -j ACCEPT
# 允許已建立的或相關連的通行
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允許所有本機向外的訪問
-A OUTPUT -j ACCEPT
# 允許PPTP撥號到外網
-A INPUT -p tcp -m tcp --dport 1723 -j ACCEPT
# 僅特定主機訪問Rsync資料同步服務
-A INPUT -s 8.8.8.8/32 -p tcp -m tcp --dport 873 -j ACCEPT
# 僅特定主機訪問WDCP管理系統
-A INPUT -s 6.6.6.6/32 -p tcp -m tcp --dport 8080 -j ACCEPT
# 允許訪問SSH
-A INPUT -p tcp -m tcp --dport 1622 -j ACCEPT
# 允許訪問FTP
-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 20 -j ACCEPT
# 允許訪問網站服務
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
# 禁止所有未經允許的連線
-A INPUT -p tcp -j DROP
#注意:如果22埠未加入允許規則,SSH連結會直接斷開。
#-A INPUT -j REJECT
#-A FORWARD -j REJECTCOMMIT複製程式碼
可以使用一下方法直接載入:
1、複製上面的規則貼上到這裡,儲存檔案 sudo vim /etc/iptables.test.rules
2、把本規則載入,使之生效。注意,iptables不需要重啟,載入一次規則就可以。sudo iptables-restore < /etc/iptables.test.rules
3、檢視最新的配置,應該所有的設定都生效了。sudo iptables -L -n
4、儲存生效的配置,讓系統重啟的時候自動載入有效配置(iptables提供了儲存當前執行的規則功能)iptables-save > /etc/iptables.rules
看著很複雜,因為還沒學習指令碼語言和Vim編輯器的關係。剛好,我們第五部分就會學習Vim編輯器和指令碼。
如果你想提前試試,也可以看Ubuntu官方的關於儲存和配置開機載入iptables規則的文章(英文的):
我們也見識到了,iptables的配置相當繁複,普通使用者簡直望而卻步。
幸好,有一些軟體可以幫助我們減輕痛苦:
UFW - Uncomplicated Firewall
UFW是Uncomplicated Firewall的縮寫,顧名思義這個軟體是“不復雜的防火牆”,比iptables簡單很多。但ufw並不是在每個Linux發行版中都有的,幸好,Ubuntu中有。
Ubuntu官方UFW文件:help.ubuntu.com/community/U…
中文Ubuntu官方UFW文件:Ufw使用指南
當然了,還有更好的圖形介面的UFW:gufw
Ubuntu官方GUFW文件:help.ubuntu.com/community/G…
nftables
注意:
新的防火牆子系統/包過濾引擎nftables在 Linux 3.13 中替代有十多年曆史的iptables。iptables/netfilter是在2001年加入到2.4核心中。
誕生於2008年的nftables設計替代iptables,它提供了一個更簡單的Kernel ABI,減少重複程式碼,改進錯誤報告,更有效支援過濾規則。
除了iptables,nftables還將替代ip6tables、arptables和ebtables。Linux核心的第一代包過濾機制是ipfwadm(1.2.1核心,1995年),之後是ipchains(1999年),iptables。nftables是第四代。
nftables引入了一個新的命令列工具nft。nft是iptables及其衍生指令(ip6tables,arptables)的超集。
同時,nft擁有完全不同的語法。如果你習慣於iptables,這是個不好的訊息。但是有一個相容層允許你使用iptables,而過濾是由核心中的nftables完成的。
但是基本的原理是類似的,nftables比iptables更方便,使用更有效率,可以把一些命令合併。
例如,你想用iptables記錄並丟棄一個包,你必須寫兩條規則,一條記錄,一條丟棄:
iptables -A FORWARD -p tcp --dport 22 -j LOG
iptables -A FORWARD -p tcp --dport 22 -j DROP複製程式碼
使用nft,你可以把兩個目標合併到一起:
nft add rule filter forward tcp dport 22 log drop複製程式碼
所以,假如你的Linux核心版本是3.13之前的,那就繼續使用iptables;如果是3.13版本之後,那就用nftables吧(其實nftables要從3.15版本才開始比較成熟)。
還有更多命令選項就用man iptables和man nftables來檢視吧。
總結
在Internet(網際網路)上,每臺電腦都由IP地址來標識。例如:89.210.135.74
我們可以把一個主機名繫結到一個IP地址上,主機名相對IP地址更容易被記住。例如:coderunity.com 在很多場合,用主機名就可以代替IP地址了。
host命令可以從IP地址解析出對應主機名,或者從主機名解析出IP地址。
ifconfig命令列出你電腦上的網路介面(對應虛擬網路卡或實體網路卡),可以配置和操作這些介面。
netstat列出你電腦上開啟的連線,說明當下哪些埠正開啟著,一個埠就好比引匯出入你電腦的門戶。
可以用iptables來攔截進入某些埠的連線,它是一個很不錯的防火牆。但是配置比較複雜。iptables配置很繁瑣,可以用ufw軟體來減輕壓力。從Linux 3.13開始,nftables替代了iptables。
第四部分第五課預告
今天的課就到這裡,一起加油吧!
下一課我們學習:Linux探索之旅 | 第四部分第五課:原始碼編譯,安裝便利
微信公眾號「程式設計師聯盟」ProgrammerLeague
我是謝恩銘,在巴黎奮鬥的軟體工程師。
我的簡介
我的經歷
熱愛生活,喜歡游泳,略懂烹飪。
人生格言:“向著標杆直跑”