Nishita Agarwal 分享她在 Linux ‘iptables’ 防火墙方面的面试经历
Nishita Agarwal是一位示例常客,她与我们分享了她在印度浦那一家私人托管公司接受面试的经历(问答)。面试官问了她很多问题,涉及各种主题,但她是iptables方面的专家,她想与可能在不久的将来参加面试的其他人分享这些问题及其答案(她给出的)。
所有问题及其答案均根据Nishita Agarwal的记忆重写。
“大家好!我叫Nishita Agarwal。我拥有技术学士学位。我的专业领域是 UNIX,自从我听说 UNIX 的变体(BSD、Linux)以来,我就对它着迷。我在存储方面有 1 年多的经验。我正在寻找工作机会,最终在印度浦那的一家托管公司工作。”
以下是我在面试中被问到的问题的汇总。我根据记忆只记录了与 iptables 相关的问题及其答案。希望这能帮助你破解面试。
1. 您听说过 Linux 中的 iptables 和防火墙吗?您知道它们是什么以及它们的用途吗?
答案: 我使用 iptables 已经很长时间了,并且了解 iptables 和防火墙。Iptables 是一个主要用 C 编程语言编写的应用程序,并在 GNU 通用公共许可证下发布。它是从系统管理的角度编写的,最新的稳定版本是 iptables 1.4.21。iptables可以被视为类 UNIX 操作系统的防火墙,更准确地说,可以称为iptables / netfilter。管理员通过控制台/GUI 前端工具与 iptables 交互,以将防火墙规则添加并定义到预定义表中。Netfilter 是内核内置的一个模块,用于执行过滤工作。
Firewalld是RHEL / CentOS 7中过滤规则的最新实现(可能在其他发行版中也有实现,我可能不知道)。它取代了 iptables 接口并连接到 netfilter。
2. 您是否使用过某种基于 GUI 的 iptables 或 Linux 命令行前端工具?
答案: 虽然我既使用基于 GUI 的 iptables 前端工具,如Shorewall,结合GUI 中的Webmin ,也使用通过控制台直接访问 iptables。我必须承认,通过 Linux 控制台直接访问 iptables 为用户提供了极大的能力,即更高的灵活性和更好地了解后台正在发生的事情,甚至更多。GUI 适用于新手管理员,而控制台适用于有经验的管理员。
3. iptables 和firewalld 之间的基本区别是什么?
答案: iptables 和firewalld 服务于相同的目的(数据包过滤),但是方法不同。与firewalld 不同,iptables 每次进行更改时都会刷新整个规则集。通常,iptables 配置位于“ /etc/sysconfig/iptables ”,而firewalld 配置位于“ /etc/firewalld/ ”,它是一组 XML 文件。与配置 iptables 相比,配置基于 XML 的 firewalld 更容易,但是可以使用数据包过滤应用程序(即 iptables 和 firewalld)来完成相同的任务。Firewalld 在自己的命令行界面和基于 XML 的配置文件(如上所述)下运行 iptables。
4. 如果有机会,您会在所有服务器上用firewalld 替换iptables吗?
回答: 我熟悉 iptables,它运行良好,如果不需要动态的防火墙功能,似乎没有理由将我的所有配置从 iptables 迁移到防火墙。在大多数情况下,到目前为止,我从未见过 iptables 产生问题。此外,信息技术的一般规则是“如果没有损坏,为什么要修复”。然而,这是我个人的想法,如果组织要用防火墙替换 iptables,我绝不会介意实施防火墙。
5. 您似乎对 iptables 很有信心,而且我们甚至在我们的服务器上使用 iptables。
iptables 中使用了哪些表? 简单介绍一下 iptables 中使用的表以及它们支持的链。
回答: 谢谢您的认可。回到问题部分,iptables 中使用了四个表,分别是:
- 命名表
- 碾磨表
- 过滤表
- 原始表
Nat 表:Nat 表主要用于网络地址转换。伪装数据包的 IP 地址将根据表中的规则进行更改。流中的数据包仅遍历 Nat 表一次。即,如果数据包流中的数据包被伪装,则流中的其余数据包将不会再次遍历此表。建议不要在此表中进行过滤。NAT 表支持的链包括 PREROUTING 链、POSTROUTING 链和 OUTPUT 链。
Mangle 表:顾名思义,该表用于对数据包进行处理。它用于特殊包修改。它可用于修改不同数据包及其标头的内容。Mangle 表不能用于伪装。支持的链有 PREROUTING 链、OUTPUT 链、正向链、INPUT 链、POSTROUTING 链。
过滤表:过滤表是 iptables 中使用的默认表。它用于过滤数据包。如果没有定义规则,则将过滤表作为默认表,并在此表的基础上进行过滤。支持的链有 INPUT 链、OUTPUT 链、FORWARD 链。
Raw Table:当我们想要配置之前豁免的包时,Raw Table 就会发挥作用。它支持 PREROUTING Chain 和 OUTPUT Chain。
6. iptables 中的目标值(可以在 target 中指定)有哪些,它们起什么作用,简单介绍一下!
答案: 以下是我们可以在 iptables 中的 target 中指定的目标值:
-
- 接受:接受数据包
- QUEUE : Paas 封装到用户空间(应用程序和驱动所在的地方)
- DROP:丢弃数据包
- 返回:将控制权返回到调用链并停止执行链中当前数据包的下一组规则。
7. 让我们讨论 iptables 的技术方面,这里的技术是指实践。
如何检查在 CentOS 中安装 iptables 所需的 iptables rpm?
答案: iptables rpm 包含在标准 CentOS 安装中,我们不需要单独安装它。我们可以这样检查 rpm:
# rpm -qa iptables iptables-1.4.21-13.el7.x86_64
如果您需要安装它,您可以执行 yum 来获取它。
# yum install iptables-services
8.如何检查并确保 iptables 服务是否正在运行?
答案: 要检查 iptables 的状态,您可以在终端上运行以下命令。
# service iptables status [On CentOS 6/5] # systemctl status iptables [On CentOS 7]
如果它没有运行,可以执行以下命令。
---------------- On CentOS 6/5 ---------------- # chkconfig --level 35 iptables on # service iptables start ---------------- On CentOS 7 ---------------- # systemctl enable iptables # systemctl start iptables
我们还可以检查 iptables 模块是否已加载,如下所示:
# lsmod | grep ip_tables
9. 如何查看当前 iptables 中定义的规则?
答案: iptables 中的当前规则可以简单查看如下:
# 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 规则或特定链?
答案: 要刷新特定的 iptables 链,您可以使用以下命令。
# iptables --flush OUTPUT
刷新所有 iptables 规则。
# iptables --flush
11. 在 iptables 中添加一条规则,接受来自受信任 IP 地址(例如 192.168.0.7)的数据包
答案: 只需运行以下命令即可实现上述场景。
# iptables -A INPUT -s 192.168.0.7 -j ACCEPT
我们可以在源中包含标准斜线或子网掩码,如下所示:
# 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 中添加规则来接受、拒绝、拒绝和丢弃 ssh 服务。
答案: 希望 ssh 在端口 22 上运行,这也是 ssh 的默认端口,我们可以向 iptables 添加规则,如下所示:
接受ssh 服务 (端口 22) 的 tcp 数据包。
# iptables -A INPUT -s -p tcp --dport 22 -j ACCEPT
拒绝ssh 服务(端口 22)的 tcp 数据包。
# iptables -A INPUT -s -p tcp --dport 22 -j REJECT
拒绝ssh 服务 (端口 22) 的 tcp 数据包。
# iptables -A INPUT -s -p tcp --dport 22 -j DENY
丢弃ssh 服务 (端口 22) 的 tcp 数据包。
# iptables -A INPUT -s -p tcp --dport 22 -j DROP
13. 让我给你一个场景。假设有一台机器,其本地 IP 地址为 192.168.0.6。你需要阻止端口 21、22、23 和 80 到你的机器的连接。你会怎么做?
答案: 好吧,我需要使用的只是 iptables 中的“多端口”选项,后面跟着要阻止的端口号,这样上述场景就可以一次性实现。
# iptables -A INPUT -s 192.168.0.6 -p tcp -m multiport --dport 21,22,23,80 -j DROP
可以使用以下命令检查书面规则。
# 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
面试官:这就是我想要问的。你是一位我们不想错过的宝贵员工。我会向人力资源部推荐你的名字。如果你有任何问题可以问我。
作为候选人,我不想破坏谈话,因此不断询问如果被选中我将负责的项目以及公司还有哪些其他职位空缺。更不用说人力资源面试并不难,我得到了这个机会。
我还要感谢Avishek和Ravi(我多年的朋友)花时间记录我的采访。
朋友们!如果您曾经接受过这样的采访,并且愿意与全球数百万的 Example 读者分享您的采访经历?那么请将您的问题和答案发送至admin@example.com,或者您可以使用以下表格提交您的采访经历。
谢谢!保持联系。如果我能更正确地回答问题,请告诉我。