13個關于Linux防火墻’iptables’的面試問答
Nishita Agarwal是Tecmint的用戶,她將分享關于她剛剛經歷的一家公司(印度的一家私人公司Pune)的面試經驗。在面試中她被問及許多不同的問題, 但她是iptables方面的專家,因此她想分享這些關于iptables的問題和相應的答案給那些以后可能會進行相關面試的人。
所有的問題和相應的答案都基于Nishita Agarwal的記憶并經過了重寫。
“嗨,朋友!我叫Nishita Agarwal。我已經取得了理學學士學位,我的專業(yè)集中在UNIX和它的變種(BSD,Linux)。它們一直深深的吸引著我。我在存儲方面有1年多的經驗。我正在尋求職業(yè)上的變化,并將供職于印度的Pune公司。”
下面是我在面試中被問到的問題的集合。我已經把我記憶中有關iptables的問題和它們的答案記錄了下來。希望這會對您未來的面試有所幫助。
1. 你聽說過Linux下面的iptables和Firewalld么?知不知道它們是什么,是用來干什么的?
答案 : iptables和Firewalld我都知道,并且我已經使用iptables好一段時間了。iptables主要由C語言寫成,并且以GNU GPL許可證發(fā)布。它是從系統(tǒng)管理員的角度寫的,***的穩(wěn)定版是iptables 1.4.21。iptables通常被用作類UNIX系統(tǒng)中的防火墻,更準確的說,可以稱為iptables/netfilter。管理員通過終端 /GUI工具與iptables打交道,來添加和定義防火墻規(guī)則到預定義的表中。Netfilter是內核中的一個模塊,它執(zhí)行***濾的任務。
Firewalld是RHEL/CentOS 7(也許還有其他發(fā)行版,但我不太清楚)中***的過濾規(guī)則的實現(xiàn)。它已經取代了iptables接口,并與netfilter相連接。
2. 你用過一些iptables的GUI或命令行工具么?
答案 : 雖然我既用過GUI工具,比如與Webmin結合的Shorewall;以及直接通過終端訪問iptables,但我必須承認通過Linux終端直接訪問 iptables能給予用戶更高級的靈活性、以及對其背后工作更好的理解的能力。GUI適合初級管理員,而終端適合有經驗的管理員。
3. 那么iptables和firewalld的基本區(qū)別是什么呢?
答案 : iptables和firewalld都有著同樣的目的(***濾),但它們使用不同的方式。iptables與firewalld不同,在每次發(fā)生更改時 都刷新整個規(guī)則集。通常iptables配置文件位于‘/etc/sysconfig/iptables‘,而firewalld的配置文件位于‘ /etc/firewalld/‘。firewalld的配置文件是一組XML文件。以XML為基礎進行配置的firewalld比iptables的配 置更加容易,但是兩者都可以完成同樣的任務。例如,firewalld可以在自己的命令行界面以及基于XML的配置文件下使用iptables。
4. 如果有機會的話,你會在你所有的服務器上用firewalld替換iptables么?
答案 : 我對iptables很熟悉,它也工作的很好。如果沒有任何需求需要firewalld的動態(tài)特性,那么沒有理由把所有的配置都從iptables移動到 firewalld。通常情況下,目前為止,我還沒有看到iptables造成什么麻煩。IT技術的通用準則也說道“為什么要修一件沒有壞的東西呢?”。 上面是我自己的想法,但如果組織愿意用firewalld替換iptables的話,我不介意。
5. 你看上去對iptables很有信心,巧的是,我們的服務器也在使用iptables。
iptables使用的表有哪些?請簡要的描述iptables使用的表以及它們所支持的鏈。
答案 : 謝謝您的贊賞。至于您問的問題,iptables使用的表有四個,它們是:
-
Nat 表
-
Mangle 表
-
Filter 表
-
Raw 表
Nat表 : Nat表主要用于網絡地址轉換。根據表中的每一條規(guī)則修改網絡包的IP地址。流中的包僅遍歷一遍Nat表。例如,如果一個通過某個接口的包被修飾(修改了 IP地址),該流中其余的包將不再遍歷這個表。通常不建議在這個表中進行過濾,由NAT表支持的鏈稱為PREROUTING 鏈,POSTROUTING 鏈和OUTPUT 鏈。
Mangle表 : 正如它的名字一樣,這個表用于校正網絡包。它用來對特殊的包進行修改。它能夠修改不同包的頭部和內容。Mangle表不能用于地址偽裝。支持的鏈包括 PREROUTING 鏈,OUTPUT 鏈,F(xiàn)orward 鏈,Input 鏈和POSTROUTING 鏈。
Filter表 : Filter表是iptables中使用的默認表,它用來過濾網絡包。如果沒有定義任何規(guī)則,F(xiàn)ilter表則被當作默認的表,并且基于它來過濾。支持的鏈有INPUT 鏈,OUTPUT 鏈,F(xiàn)ORWARD 鏈。
Raw表 : Raw表在我們想要配置之前被豁免的包時被使用。它支持PREROUTING 鏈和OUTPUT 鏈。
6. 簡要談談什么是iptables中的目標值(能被指定為目標),他們有什么用
答案 : 下面是在iptables中可以指定為目標的值:
-
ACCEPT : 接受包
-
QUEUE : 將包傳遞到用戶空間 (應用程序和驅動所在的地方)
-
DROP : 丟棄包
-
RETURN : 將控制權交回調用的鏈并且為當前鏈中的包停止執(zhí)行下一調用規(guī)則
7. 讓我們來談談iptables技術方面的東西,我的意思是說實際使用方面
你怎么檢測在CentOS中安裝iptables時需要的iptables的rpm?
答案 : iptables已經被默認安裝在CentOS中,我們不需要單獨安裝它。但可以這樣檢測rpm:
# rpm -qa iptables
iptables-1.4.21-13.el7.x86_64
如果您需要安裝它,您可以用yum來安裝。
# yum install iptables-services
8. 怎樣檢測并且確保iptables服務正在運行?
答案 : 您可以在終端中運行下面的命令來檢測iptables的狀態(tài)。
# service status iptables [On CentOS 6/5]
# systemctl status iptables [On CentOS 7]
如果iptables沒有在運行,可以使用下面的語句
---------------- 在CentOS 6/5下 ----------------
# chkconfig --level 35 iptables on
# service iptables start
---------------- 在CentOS 7下 ----------------
# systemctl enable iptables
# systemctl start iptables
我們還可以檢測iptables的模塊是否被加載:
# lsmod | grep ip_tables
9. 你怎么檢查iptables中當前定義的規(guī)則呢?
答案 : 當前的規(guī)則可以簡單的用下面的命令查看:
- # iptables -L
- 示例輸出
- Chain INPUT (policy ACCEPT)
- target prot opt source destination
- ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
- ACCEPT icmp -- anywhere anywhere
- ACCEPT all -- anywhere anywhere
- ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
- REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
- Chain FORWARD (policy ACCEPT)
- target prot opt source destination
- REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
- Chain OUTPUT (policy ACCEPT)
- target prot opt source destination
10. 你怎樣刷新所有的iptables規(guī)則或者特定的鏈呢?
答案 : 您可以使用下面的命令來刷新一個特定的鏈。
# iptables --flush OUTPUT
要刷新所有的規(guī)則,可以用:
# iptables --flush
11. 請在iptables中添加一條規(guī)則,接受所有從一個信任的IP地址(例如,192.168.0.7)過來的包。
答案 : 上面的場景可以通過運行下面的命令來完成。
# iptables -A INPUT -s 192.168.0.7 -j ACCEPT
我們還可以在源IP中使用標準的斜線和子網掩碼:
# iptables -A INPUT -s 192.168.0.7/24 -j ACCEPT
# iptables -A INPUT -s 192.168.0.7/255.255.255.0 -j ACCEPT
12. 怎樣在iptables中添加規(guī)則以ACCEPT,REJECT,DENY和DROP ssh的服務?
答案 : 但愿ssh運行在22端口,那也是ssh的默認端口,我們可以在iptables中添加規(guī)則來ACCEPT ssh的tcp包(在22號端口上)。
- # iptables -A INPUT -s -p tcp --dport 22 -j ACCEPT
- REJECT ssh服務(22號端口)的tcp包。
- # iptables -A INPUT -s -p tcp --dport 22 -j REJECT
- DENY ssh服務(22號端口)的tcp包。
- # iptables -A INPUT -s -p tcp --dport 22 -j DENY
- DROP ssh服務(22號端口)的tcp包。
- # iptables -A INPUT -s -p tcp --dport 22 -j DROP
13. 讓我給你另一個場景,假如有一臺電腦的本地IP地址是192.168.0.6。你需要封鎖在21、22、23和80號端口上的連接,你會怎么做?
答案 : 這時,我所需要的就是在iptables中使用‘multiport‘選項,并將要封鎖的端口號跟在它后面。上面的場景可以用下面的一條語句搞定:
# iptables -A INPUT -s 192.168.0.6 -p tcp -m multiport --dport 22,23,80,8080 -j DROP
可以用下面的語句查看寫入的規(guī)則。
- # iptables -L
- Chain INPUT (policy ACCEPT)
- target prot opt source destination
- ACCEPT all -- anywhere anywhere state RELATED,ESTABLISHED
- ACCEPT icmp -- anywhere anywhere
- ACCEPT all -- anywhere anywhere
- ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:ssh
- REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
- DROP tcp -- 192.168.0.6 anywhere multiport dports ssh,telnet,http,webcache
- Chain FORWARD (policy ACCEPT)
- target prot opt source destination
- REJECT all -- anywhere anywhere reject-with icmp-host-prohibited
- Chain OUTPUT (policy ACCEPT)
- target prot opt source destination
面試官 : 好了,我問的就是這些。你是一個很有價值的雇員,我們不會錯過你的。我將會向HR推薦你的名字。如果你有什么問題,請問我。
作為一個候選人我不愿不斷的問將來要做的項目的事以及公司里其他的事,這樣會打斷愉快的對話。更不用說HR輪會不會比較難,總之,我獲得了機會。
同時我要感謝Avishek和Ravi(我的朋友)花時間幫我整理我的面試。
朋友!如果您有過類似的面試,并且愿意與數百萬Tecmint讀者一起分享您的面試經歷,請將您的問題和答案發(fā)送到admin@tecmint.com。
謝謝!保持聯(lián)系。如果我能更好的回答我上面的問題的話,請記得告訴我。