赞助商

关于Linux防火墙'iptables'的面试问答

发布时间:2019-04-01 发布网站:脚本之家
脚本之家收集整理的这篇文章主要介绍了关于Linux防火墙'iptables'的面试问答脚本之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

 

<h3 id="toc_1">1. 你听说过Linux下面的iptables和Firewalld么?知不知道它们是什么,是用来干什么的?

答案 : iptables和Firewalld我都知道,并且我已经使用iptables好一段时间了。iptables主要由C语言写成,并且以GNU GPL许可证发布。它是从系统管理员的角度写的,最新的稳定版是iptables 1.4.21。iptables通常被用作类UNIX系统中的防火墙,更准确的说,可以称为iptables/netfilter。管理员通过终端/GUI工具与iptables打交道,来添加和定义防火墙规则到预定义的表中。Netfilter是内核中的一个模块,它执行包过滤的任务。

Firewalld是RHEL/CentOS 7(也许还有其他发行版,但我不太清楚)中最新的过滤规则的实现。它已经取代了iptables接口,并与netfilter相连接。

<h3 id="toc_2">2. 你用过一些iptables的GUI或命令行工具么?

答案 : 虽然我既用过GUI工具,比如与Webmin结合的Shorewall;以及直接通过终端访问iptables,但我必须承认通过Linux终端直接访问iptables能给予用户更高级的灵活性、以及对其背后工作更好的理解的能力。GUI适合初级管理员,而终端适合有经验的管理员。

<h3 id="toc_3">3. 那么iptables和firewalld的基本区别是什么呢?

答案 : iptables和firewalld都有着同样的目的(包过滤),但它们使用不同的方式。iptables与firewalld不同,在每次发生更改时都刷新整个规则集。通常iptables配置文件位于‘/etc/sysconfig/iptables‘,而firewalld的配置文件位于‘/etc/firewalld/‘。firewalld的配置文件是一组XML文件。以XML为基础进行配置的firewalld比iptables的配置更加容易,但是两者都可以完成同样的任务。例如,firewalld可以在自己的命令行界面以及基于XML的配置文件下使用iptables。

<h3 id="toc_4">4. 如果有机会的话,你会在你所有的服务器上用firewalld替换iptables么?

答案 : 我对iptables很熟悉,它也工作的很好。如果没有任何需求需要firewalld的动态特性,那么没有理由把所有的配置都从iptables移动到firewalld。通常情况下,目前为止,我还没有看到iptables造成什么麻烦。IT技术的通用准则也说道“为什么要修一件没有坏的东西呢?”。上面是我自己的想法,但如果组织愿意用firewalld替换iptables的话,我不介意。

<h3 id="toc_5">5. 你看上去对iptables很有信心,巧的是,我们的服务器也在使用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 链。

<h3 id="toc_6">6. 简要谈谈什么是iptables中的目标值(能被指定为目标),他们有什么用

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

  • ACCEPT : 接受包
  • QUEUE : 将包传递到用户空间 (应用程序和驱动所在的地方)
  • DROP : 丢弃包
  • RETURN : 将控制权交回调用的链并且为当前链中的包停止执行下一调用规则

<h3 id="toc_7">7. 让我们来谈谈iptables技术方面的东西,我的意思是说实际使用方面

你怎么检测在CentOS中安装iptables时需要的iptables的rpm?

答案 : iptables已经被默认安装在CentOS中,我们不需要单独安装它。但可以这样检测rpm:

<ol class="linenums">
<li class="L0"><span class="com">#<span class="pln"> rpm <span class="pun">-<span class="pln">qa iptables
<li class="L1">
<li class="L2"><span class="pln">iptables<span class="pun">-<span class="lit">1.4<span class="pun">.<span class="lit">21<span class="pun">-<span class="lit">13.el7.x86<span class="pln">_64

如果您需要安装它,您可以用yum来安装。

<ol class="linenums">
<li class="L0"><span class="com">#<span class="pln"> <span class="kwd">yum<span class="pln"> install iptables<span class="pun">-<span class="pln">services

<h3 id="toc_8">8. 怎样检测并且确保iptables服务正在运行?

答案 : 您可以在终端中运行下面的命令来检测iptables的状态。

<ol class="linenums">
<li class="L0"><span class="com">#<span class="pln"> service status iptables <span class="pun">[<span class="typ">On<span class="pln"> <span class="typ">CentOS<span class="pln"> <span class="lit">6<span class="pun">/<span class="lit">5<span class="pun">]
<li class="L1"><span class="com">#<span class="pln"> <span class="kwd">systemctl<span class="pln"> status iptables <span class="pun">[<span class="typ">On<span class="pln"> <span class="typ">CentOS<span class="pln"> <span class="lit">7<span class="pun">]

如果iptables没有在运行,可以使用下面的语句

<ol class="linenums">
<li class="L0"><span class="pun">----------------<span class="pln"> <span class="pun">在<span class="typ">CentOS<span class="pln"> <span class="lit">6<span class="pun">/<span class="lit">5<span class="pun">下<span class="pln"> <span class="pun">----------------
<li class="L1"><span class="com">#<span class="pln"> chkconfig <span class="pun">--<span class="pln">level <span class="lit">35<span class="pln"> iptables on
<li class="L2"><span class="com">#<span class="pln"> service iptables start
<li class="L3">
<li class="L4"><span class="pun">----------------<span class="pln"> <span class="pun">在<span class="typ">CentOS<span class="pln"> <span class="lit">7<span class="pun">下<span class="pln"> <span class="pun">----------------
<li class="L5"><span class="com">#<span class="pln"> <span class="kwd">systemctl<span class="pln"> enable iptables
<li class="L6"><span class="com">#<span class="pln"> <span class="kwd">systemctl<span class="pln"> start iptables

我们还可以检测iptables的模块是否被加载:

<ol class="linenums">
<li class="L0"><span class="com">#<span class="pln"> <span class="kwd">lsmod<span class="pln"> <span class="pun">|<span class="pln"> <span class="kwd">grep<span class="pln"> ip_tables

<h3 id="toc_9">9. 你怎么检查iptables中当前定义的规则呢?

答案 : 当前的规则可以简单的用下面的命令查看:

<ol class="linenums">
<li class="L0"><span class="com">#<span class="pln"> iptables <span class="pun">-<span class="pln">L

示例输出

<ol class="linenums">
<li class="L0"><span class="typ">Chain<span class="pln"> INPUT <span class="pun">(<span class="pln">policy ACCEPT<span class="pun">)
<li class="L1"><span class="pln">target prot opt source destination
<li class="L2"><span class="pln">ACCEPT all <span class="pun">--<span class="pln"> anywhere anywhere state RELATED<span class="pun">,<span class="pln">ESTABLISHED
<li class="L3"><span class="pln">ACCEPT icmp <span class="pun">--<span class="pln"> anywhere anywhere
<li class="L4"><span class="pln">ACCEPT all <span class="pun">--<span class="pln"> anywhere anywhere
<li class="L5"><span class="pln">ACCEPT tcp <span class="pun">--<span class="pln"> anywhere anywhere state NEW tcp dpt<span class="pun">:<span class="kwd">ssh
<li class="L6"><span class="pln">REJECT all <span class="pun">--<span class="pln"> anywhere anywhere reject<span class="pun">-<span class="kwd">with<span class="pln"> icmp<span class="pun">-<span class="pln">host<span class="pun">-<span class="pln">prohibited
<li class="L7">
<li class="L8"><span class="typ">Chain<span class="pln"> FORWARD <span class="pun">(<span class="pln">policy ACCEPT<span class="pun">)
<li class="L9"><span class="pln">target prot opt source destination
<li class="L0"><span class="pln">REJECT all <span class="pun">--<span class="pln"> anywhere anywhere reject<span class="pun">-<span class="kwd">with<span class="pln"> icmp<span class="pun">-<span class="pln">host<span class="pun">-<span class="pln">prohibited
<li class="L1">
<li class="L2"><span class="typ">Chain<span class="pln"> OUTPUT <span class="pun">(<span class="pln">policy ACCEPT<span class="pun">)
<li class="L3"><span class="pln">target prot opt source destination

<h3 id="toc_10">10. 你怎样刷新所有的iptables规则或者特定的链呢?

答案 : 您可以使用下面的命令来刷新一个特定的链。

<ol class="linenums">
<li class="L0"><span class="com">#<span class="pln"> iptables <span class="pun">--<span class="pln">flush OUTPUT

要刷新所有的规则,可以用:

<ol class="linenums">
<li class="L0"><span class="com">#<span class="pln"> iptables <span class="pun">--<span class="pln">flush

<h3 id="toc_11">11. 请在iptables中添加一条规则,接受所有从一个信任的IP地址(例如,192.168.0.7)过来的包。

答案 : 上面的场景可以通过运行下面的命令来完成。

<ol class="linenums">
<li class="L0"><span class="com">#<span class="pln"> iptables <span class="pun">-<span class="pln">A INPUT <span class="pun">-<span class="pln">s <span class="lit">192.168<span class="pun">.<span class="lit">0.7<span class="pln"> <span class="pun">-<span class="pln">j ACCEPT

我们还可以在源IP中使用标准的斜线和子网掩码:

<ol class="linenums">
<li class="L0"><span class="com">#<span class="pln"> iptables <span class="pun">-<span class="pln">A INPUT <span class="pun">-<span class="pln">s <span class="lit">192.168<span class="pun">.<span class="lit">0.7<span class="pun">/<span class="lit">24<span class="pln"> <span class="pun">-<span class="pln">j ACCEPT
<li class="L1"><span class="com">#<span class="pln"> iptables <span class="pun">-<span class="pln">A INPUT <span class="pun">-<span class="pln">s <span class="lit">192.168<span class="pun">.<span class="lit">0.7<span class="pun">/<span class="lit">255.255<span class="pun">.<span class="lit">255.0<span class="pln"> <span class="pun">-<span class="pln">j ACCEPT

<h3 id="toc_12">12. 怎样在iptables中添加规则以ACCEPT,REJECT,DENY和DROP ssh的服务?

答案 : 但愿ssh运行在22端口,那也是ssh的默认端口,我们可以在iptables中添加规则来ACCEPT ssh的tcp包(在22号端口上)。

<ol class="linenums">
<li class="L0"><span class="com">#<span class="pln"> iptables <span class="pun">-<span class="pln">A INPUT <span class="pun">-<span class="pln">p tcp <span class="pun">--<span class="pln">dport <span class="lit">22<span class="pln"> <span class="pun">-<span class="pln">j ACCEPT

REJECT ssh服务(22号端口)的tcp包。

<ol class="linenums">
<li class="L0"><span class="com">#<span class="pln"> iptables <span class="pun">-<span class="pln">A INPUT <span class="pun">-<span class="pln">p tcp <span class="pun">--<span class="pln">dport <span class="lit">22<span class="pln"> <span class="pun">-<span class="pln">j REJECT

DENY ssh服务(22号端口)的tcp包。

<ol class="linenums">
<li class="L0"><span class="com">#<span class="pln"> iptables <span class="pun">-<span class="pln">A INPUT <span class="pun">-<span class="pln">p tcp <span class="pun">--<span class="pln">dport <span class="lit">22<span class="pln"> <span class="pun">-<span class="pln">j DENY

DROP ssh服务(22号端口)的tcp包。

<ol class="linenums">
<li class="L0"><span class="com">#<span class="pln"> iptables <span class="pun">-<span class="pln">A INPUT <span class="pun">-<span class="pln">p tcp <span class="pun">--<span class="pln">dport <span class="lit">22<span class="pln"> <span class="pun">-<span class="pln">j DROP

<h3 id="toc_13">13. 让我给你另一个场景,假如有一台电脑的本地IP地址是192.168.0.6。你需要封锁在21、22、23和80号端口上的连接,你会怎么做?

答案 : 这时,我所需要的就是在iptables中使用‘multiport‘选项,并将要封锁的端口号跟在它后面。上面的场景可以用下面的一条语句搞定:

<ol class="linenums">
<li class="L0"><span class="com">#<span class="pln"> iptables <span class="pun">-<span class="pln">A INPUT <span class="pun">-<span class="pln">s <span class="lit">192.168<span class="pun">.<span class="lit">0.6<span class="pln"> <span class="pun">-<span class="pln">p tcp <span class="pun">-<span class="pln">m multiport <span class="pun">--<span class="pln">dport <span class="lit">22<span class="pun">,<span class="lit">23<span class="pun">,<span class="lit">80<span class="pun">,<span class="lit">8080<span class="pln"> <span class="pun">-<span class="pln">j DROP

可以用下面的语句查看写入的规则。

<ol class="linenums">
<li class="L0"><span class="com">#<span class="pln"> iptables <span class="pun">-<span class="pln">L
<li class="L1">
<li class="L2"><span class="typ">Chain<span class="pln"> INPUT <span class="pun">(<span class="pln">policy ACCEPT<span class="pun">)
<li class="L3"><span class="pln">target prot opt source destination
<li class="L4"><span class="pln">ACCEPT all <span class="pun">--<span class="pln"> anywhere anywhere state RELATED<span class="pun">,<span class="pln">ESTABLISHED
<li class="L5"><span class="pln">ACCEPT icmp <span class="pun">--<span class="pln"> anywhere anywhere
<li class="L6"><span class="pln">ACCEPT all <span class="pun">--<span class="pln"> anywhere anywhere
<li class="L7"><span class="pln">ACCEPT tcp <span class="pun">--<span class="pln"> anywhere anywhere state NEW tcp dpt<span class="pun">:<span class="kwd">ssh
<li class="L8"><span class="pln">REJECT all <span class="pun">--<span class="pln"> anywhere anywhere reject<span class="pun">-<span class="kwd">with<span class="pln"> icmp<span class="pun">-<span class="pln">host<span class="pun">-<span class="pln">prohibited
<li class="L9"><span class="pln">DROP tcp <span class="pun">--<span class="pln"> <span class="lit">192.168<span class="pun">.<span class="lit">0.6<span class="pln"> anywhere multiport dports <span class="kwd">ssh<span class="pun">,<span class="pln">telnet<span class="pun">,<span class="pln">http<span class="pun">,<span class="pln">webcache
<li class="L0">
<li class="L1"><span class="typ">Chain<span class="pln"> FORWARD <span class="pun">(<span class="pln">policy ACCEPT<span class="pun">)
<li class="L2"><span class="pln">target prot opt source destination
<li class="L3"><span class="pln">REJECT all <span class="pun">--<span class="pln"> anywhere anywhere reject<span class="pun">-<span class="kwd">with<span class="pln"> icmp<span class="pun">-<span class="pln">host<span class="pun">-<span class="pln">prohibited
<li class="L4">
<li class="L5"><span class="typ">Chain<span class="pln"> OUTPUT <span class="pun">(<span class="pln">policy ACCEPT<span class="pun">)
<li class="L6"><span class="pln">target prot opt source destination

 

总结

以上是脚本之家为你收集整理的关于Linux防火墙'iptables'的面试问答全部内容,希望文章能够帮你解决关于Linux防火墙'iptables'的面试问答所遇到的程序开发问题。

如果觉得脚本之家网站内容还不错,欢迎将脚本之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:76874919,请注明来意。