天天看点

关于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>

继续阅读