天天看點

關于Linux防火牆'iptables'的面試問答

nishita agarwal是tecmint的使用者,她将分享關于她剛剛經曆的一家公司(印度的一家私人公司pune)的面試經驗。在面試中她被問及許多不同的問題,但她是iptables方面的專家,是以她想分享這些關于iptables的問題和相應的答案給那些以後可能會進行相關面試的人。

關于Linux防火牆'iptables'的面試問答

linux防火牆iptables面試問題

所有的問題和相應的答案都基于nishita agarwal的記憶并經過了重寫。

“嗨,朋友!我叫nishita agarwal。我已經取得了理學學士學位,我的專業集中在unix和它的變種(bsd,linux)。它們一直深深的吸引着我。我在存儲方面有1年多的經驗。我正在尋求職業上的變化,并将供職于印度的pune公司。”

下面是我在面試中被問到的問題的集合。我已經把我記憶中有關iptables的問題和它們的答案記錄了下來。希望這會對您未來的面試有所幫助。

<a target="_blank"></a>

答案 : iptables和firewalld我都知道,并且我已經使用iptables好一段時間了。iptables主要由c語言寫成,并且以gnu gpl許可證釋出。它是從系統管理者的角度寫的,最新的穩定版是iptables 1.4.21。iptables通常被用作類unix系統中的防火牆,更準确的說,可以稱為iptables/netfilter。管理者通過終端/gui工具與iptables打交道,來添加和定義防火牆規則到預定義的表中。netfilter是核心中的一個子產品,它執行包過濾的任務。

firewalld是rhel/centos 7(也許還有其他發行版,但我不太清楚)中最新的過濾規則的實作。它已經取代了iptables接口,并與netfilter相連接配接。

答案 : iptables和firewalld都有着同樣的目的(包過濾),但它們使用不同的方式。iptables與firewalld不同,在每次發生更改時都重新整理整個規則集。通常iptables配置檔案位于‘/etc/sysconfig/iptables‘,而firewalld的配置檔案位于‘/etc/firewalld/‘。firewalld的配置檔案是一組xml檔案。以xml為基礎進行配置的firewalld比iptables的配置更加容易,但是兩者都可以完成同樣的任務。例如,firewalld可以在自己的指令行界面以及基于xml的配置檔案下使用iptables。

答案 : 我對iptables很熟悉,它也工作的很好。如果沒有任何需求需要firewalld的動态特性,那麼沒有理由把所有的配置都從iptables移動到firewalld。通常情況下,目前為止,我還沒有看到iptables造成什麼麻煩。it技術的通用準則也說道“為什麼要修一件沒有壞的東西呢?”。上面是我自己的想法,但如果組織願意用firewalld替換iptables的話,我不介意。

iptables使用的表有哪些?請簡要的描述iptables使用的表以及它們所支援的鍊。

答案 : 謝謝您的贊賞。至于您問的問題,iptables使用的表有四個,它們是:

nat 表

mangle 表

filter 表

raw 表

nat表 : nat表主要用于網絡位址轉換。根據表中的每一條規則修改網絡包的ip位址。流中的包僅周遊一遍nat表。例如,如果一個通過某個接口的包被修飾(修改了ip位址),該流中其餘的包将不再周遊這個表。通常不建議在這個表中進行過濾,由nat表支援的鍊稱為prerouting 鍊,postrouting 鍊和output 鍊。

mangle表 : 正如它的名字一樣,這個表用于校正網絡包。它用來對特殊的包進行修改。它能夠修改不同包的頭部和内容。mangle表不能用于位址僞裝。支援的鍊包括prerouting 鍊,output 鍊,forward 鍊,input 鍊和postrouting 鍊。

filter表 : filter表是iptables中使用的預設表,它用來過濾網絡包。如果沒有定義任何規則,filter表則被當作預設的表,并且基于它來過濾。支援的鍊有input 鍊,output 鍊,forward 鍊。

raw表 : raw表在我們想要配置之前被豁免的包時被使用。它支援prerouting 鍊和output 鍊。

答案 : 下面是在iptables中可以指定為目标的值:

accept : 接受包

queue : 将包傳遞到使用者空間 (應用程式和驅動所在的地方)

drop : 丢棄包

return : 将控制權交回調用的鍊并且為目前鍊中的包停止執行下一調用規則

你怎麼檢測在centos中安裝iptables時需要的iptables的rpm?

答案 : iptables已經被預設安裝在centos中,我們不需要單獨安裝它。但可以這樣檢測rpm:

<code># rpm -qa iptables</code>

<code></code>

<code>iptables-1.4.21-13.el7.x86_64</code>

如果您需要安裝它,您可以用yum來安裝。

<code># yum install iptables-services</code>

答案 : 您可以在終端中運作下面的指令來檢測iptables的狀态。

<code># service status iptables [on centos 6/5]</code>

<code># systemctl status iptables [on centos 7]</code>

如果iptables沒有在運作,可以使用下面的語句

<code>---------------- 在centos 6/5下 ----------------</code>

<code># chkconfig --level 35 iptables on</code>

<code># service iptables start</code>

<code>---------------- 在centos 7下 ----------------</code>

<code># systemctl enable iptables</code>

<code># systemctl start iptables</code>

我們還可以檢測iptables的子產品是否被加載:

<code># lsmod | grep ip_tables</code>

答案 : 目前的規則可以簡單的用下面的指令檢視:

<code># iptables -l</code>

示例輸出

<code>chain input (policy accept)</code>

<code>target prot opt source destination</code>

<code>accept all -- anywhere anywhere state related,established</code>

<code>accept icmp -- anywhere anywhere</code>

<code>accept all -- anywhere anywhere</code>

<code>accept tcp -- anywhere anywhere state new tcp dpt:ssh</code>

<code>reject all -- anywhere anywhere reject-with icmp-host-prohibited</code>

<code>chain forward (policy accept)</code>

<code>chain output (policy accept)</code>

答案 : 您可以使用下面的指令來重新整理一個特定的鍊。

<code># iptables --flush output</code>

要重新整理所有的規則,可以用:

<code># iptables --flush</code>

答案 : 上面的場景可以通過運作下面的指令來完成。

<code># iptables -a input -s 192.168.0.7 -j accept</code>

我們還可以在源ip中使用标準的斜線和子網路遮罩:

<code># iptables -a input -s 192.168.0.7/24 -j accept</code>

<code># iptables -a input -s 192.168.0.7/255.255.255.0 -j accept</code>

答案 : 但願ssh運作在22端口,那也是ssh的預設端口,我們可以在iptables中添加規則來accept ssh的tcp包(在22号端口上)。

<code># iptables -a input -p tcp --dport 22 -j accept</code>

reject ssh服務(22号端口)的tcp包。

<code># iptables -a input -p tcp --dport 22 -j reject</code>

deny ssh服務(22号端口)的tcp包。

<code># iptables -a input -p tcp --dport 22 -j deny</code>

drop ssh服務(22号端口)的tcp包。

<code># iptables -a input -p tcp --dport 22 -j drop</code>

答案 : 這時,我所需要的就是在iptables中使用‘multiport‘選項,并将要封鎖的端口号跟在它後面。上面的場景可以用下面的一條語句搞定:

<code># iptables -a input -s 192.168.0.6 -p tcp -m multiport --dport 22,23,80,8080 -j drop</code>

可以用下面的語句檢視寫入的規則。

<code>drop tcp -- 192.168.0.6 anywhere multiport dports ssh,telnet,http,webcache</code>

面試官 : 好了,我問的就是這些。你是一個很有價值的雇員,我們不會錯過你的。我将會向hr推薦你的名字。如果你有什麼問題,請問我。

作為一個候選人我不願不斷的問将來要做的項目的事以及公司裡其他的事,這樣會打斷愉快的對話。更不用說hr輪會不會比較難,總之,我獲得了機會。

同時我要感謝avishek和ravi(我的朋友)花時間幫我整理我的面試。

謝謝!保持聯系。如果我能更好的回答我上面的問題的話,請記得告訴我

<b>原文釋出時間為:2015-08-04</b>

<b></b>

<b>本文來自雲栖社群合作夥伴“linux中國</b>

繼續閱讀