如何设置Iptables防火墙以在Linux中启用远程访问服务 - 第8部分

在本文中,我们将讨论如何实现基本的数据包过滤以及如何使用iptables配置防火墙,iptables是netfilter的前端,它是一个

配置Linux Iptables防火墙

Linux基础认证工程师 - 第8部分

Linux基础认证计划简介

你会记得从第1部分-关于iptables的这个联邦经济竞争法(Linux基金会认证工程师 ),我们给一个什么样的防火墙是一个基本描述系列:一个机制来管理数据包进入和离开网络。 “管理”我们实际上意味着:

  1. 允许或防止某些数据包进入或离开我们的网络。
  2. 要将其他数据包从网络的一个点转发到另一个点。

基于预定标准。

在本文中,我们将讨论如何实现基本的数据包过滤以及如何使用iptables配置防火墙,iptables是netfilter的前端,它是用于防火墙的本机内核模块。

请注意,防火墙是一个广泛的主题,本文不是一个全面的指南,了解所有有关它的知识,而是作为更深入研究这个主题的起点。 但是,我们将重新在本系列的第10部分的主题,当我们探讨的Linux防火墙的一些特定用例。

你可以把防火墙想象成一个国际机场,客运飞机几乎每天24小时来往。 根据一些条件,例如个人护照的有效性或他/她的原籍国(举几个例子),他或她可以或可以不被允许进入或离开某个国家。

同时,机场官员可以指示人们在必要时从机场的一个地方移动到另一个地方,例如当他们需要通过海关服务时。

我们可能会发现机场类比在本教程的其余部分有用。 在我们进行时,请记住以下关系:

  1. Persons =数据包
  2. 防火墙=机场
  3. 国家#1 =网络#1
  4. 国家#2 =网络#2
  5. 军官执行的机场法规=防火墙规则

Iptables - 基础

在较低的水平,这是内核本身而“ 决定 ”做什么用根据 ,或句子分组规则的数据包。 这些链定义了当程序包匹配其指定的条件时应执行的操作。

iptables采取的第一个动作将包括决定如何处理一个数据包:

  1. 接受它(让它进入我们的网络)?
  2. 拒绝它(阻止它访问我们的网络)?
  3. 转发它(到另一个链)?

以防万一你想知道为什么这个工具叫iptables的 ,这是因为这些连锁店在表主办, 过滤表是最熟知和用于实现包过滤与它的三个默认链中的一项:

1. INPUT链处理进入网络,这注定了本地程序包。

2. OUTPUT链用于分析分组起源本地网络,这是要被发送到外部英寸

3. FORWARD链流程应该被转发到另一个目的地的数据包(如路由器的情况下)。

对于这些链中的每一个,存在默认策略,其指定当分组不匹配链中的任何规则时默认应该做什么。 您可以通过运行以下命令查看为每个链创建的规则和默认策略:

# iptables -L

可用策略如下:

  1. 接受通过→让数据包。 任何不匹配链中任何规则的数据包都被允许进入网络。
  2. DROP→悄然丢弃该数据包。 与链中任何规则不匹配的任何数据包都不能进入网络。
  3. REJECT→拒绝数据包并返回一个信息性消息。 这一个特别不作为默认策略。 相反,它意味着补充包过滤规则。
Linux防火墙策略

Linux Iptables策略

当谈到决定你将实施哪些政策,你需要考虑每种方法的利弊如上所述-请注意,没有一个放之四海而皆准的解决办法。

添加规则

要向防火墙添加规则,请按如下所示调用iptables命令:

# iptables -A chain_name criteria -j target

哪里,

  1. -A表示追加(追加当前规则到链的末尾)。
  2. chain_name要么是INPUT,OUTPUT或转发。
  3. 目标是动作,或策略,在此情况下(接受,拒绝,或DROP)申请。
  4. 标准是所述一组针对该分组要被检查的条件。 它由至少一个(最可能更多)以下标志组成。 括号内的选项(用竖线分隔)彼此等效。 其余代表可选开关:
[--protocol | -p] protocol: specifies the protocol involved in a rule.
[--source-port | -sport] port:[port]: defines the port (or range of ports) where the packet originated.
[--destination-port | -dport] port:[port]: defines the port (or range of ports) to which the packet is destined.
[--source | -s] address[/mask]: represents the source address or network/mask.
[--destination | -d] address[/mask]: represents the destination address or network/mask.
[--state] state (preceded by -m state): manage packets depending on whether they are part of a state connection, where state can be NEW, ESTABLISHED, RELATED, or INVALID.
[--in-interface | -i] interface: specifies the input interface of the packet.
[--out-interface | -o] interface: the output interface.
[--jump | -j] target: what to do when the packet matches the rule.

我们的测试环境

让我们使用下面的测试环境粘合所有在3个经典示例中的前两个:

Firewall: Debian Wheezy 7.5 
Hostname: dev2.gabrielcanepa.com
IP Address: 192.168.0.15
Source: CentOS 7 
Hostname: dev1.gabrielcanepa.com
IP Address: 192.168.0.17

这是最后一个例子

NFSv4 server and firewall: Debian Wheezy 7.5 
Hostname: debian
IP Address: 192.168.0.10
Source: Debian Wheezy 7.5 
Hostname: dev2.gabrielcanepa.com
IP Address: 192.168.0.15
示例1:分析DROP和REJECT策略之间的差异

我们首先定义一个DROP政策,输入ping在我们的防火墙。 也就是说,icmp数据包将被静默地丢弃。

# ping -c 3 192.168.0.15
# iptables -A INPUT --protocol icmp --in-interface eth0 -j DROP
Linux Iptables阻止ICMP Ping

删除ICMP Ping请求

之前拒绝部分出发,我们将刷新所有规则从INPUT链,以确保我们的数据包将通过这个新的规则来进行测试:

# iptables -F INPUT
# iptables -A INPUT --protocol icmp --in-interface eth0 -j REJECT
# ping -c 3 192.168.0.15
在Linux中拒绝ICMP Ping请求

在防火墙中拒绝ICMP Ping请求

示例2:禁用/重新启用从dev2到dev1的ssh登录

我们将处理,因为我们正在处理传出流量OUTPUT链:

# iptables -A OUTPUT --protocol tcp --destination-port 22 --out-interface eth0 --jump REJECT
阻止SSH登录Linux防火墙

阻止SSH在防火墙中登录

示例3:允许/阻止NFS客户端(从192.168.0.0/24)挂载NFS4共享

在NFSv4服务器/防火墙中运行以下命令以关闭所有类型流量的端口2049和111:

# iptables -F
# iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT
# iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 111 -j REJECT
阻止Linux防火墙中的NFS端口

阻止防火墙中的NFS端口

现在让我们打开这些端口,看看会发生什么。

# iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 111 -j ACCEPT
# iptables -A INPUT -i eth0 -s 0/0 -p tcp --dport 2049 -j ACCEPT
在防火墙中打开NFS端口

在防火墙中打开NFS端口

如您所见,我们能够在打开流量后挂载NFSv4共享。

插入,附加和删除规则

在前面的例子中,我们展示了如何规则附加到INPUTOUTPUT链。 难道我们要在预定的位置,而不是将它们插入,我们应该使用-I(大写i)开关来代替。

你需要记住的规则将被评估此起彼伏,而评估停止(或跳转)在跌落接受的政策相匹配。 因此,你可能需要根据需要在链表中向上或向下移动规则。

我们将使用一个简单的例子来证明这一点:

检查Linux Iptables规则

检查Iptables防火墙的规则

让我们放置以下规则,

# iptables -I INPUT 2 -p tcp --dport 80 -j ACCEPT

在位置2)(因此将先前#2作为#3移动)

Linux Iptables接受规则

Iptables接受规则

使用上面的设置,交通将被检查,看它是否是定向到端口80检查2049端口捆绑之前。

或者,您可以删除一个规则,改变其余的规则目标(使用-R开关)来拒绝

# iptables -D INPUT 1
# iptables -nL -v --line-numbers
# iptables -R INPUT 2 -i eth0 -s 0/0 -p tcp --dport 2049 -j REJECT
# iptables -R INPUT 1 -p tcp --dport 80 -j REJECT
Linux Iptables丢弃规则

Iptables丢弃规则

最后,但并非最不重要的是,您需要记住,为了使防火墙规则持久化,您需要将它们保存到一个文件,然后在启动时自动还原(使用您选择的首选方法,可用于您的分发)。

保存防火墙规则:

# iptables-save > /etc/iptables/rules.v4		[On Ubuntu]
# iptables-save > /etc/sysconfig/iptables		[On CentOS / OpenSUSE]

恢复规则:

# iptables-restore < /etc/iptables/rules.v4		[On Ubuntu]
# iptables-restore < /etc/sysconfig/iptables		[On CentOS / OpenSUSE]

在这里我们可以看到使用如上图所示叫做iptables.dump而不是默认的虚拟文件类似的过程(储蓄和手工恢复防火墙规则)。

# iptables-save > iptables.dump
在Linux中保存Iptables规则

转储Linux Iptables

要使这些更改在启动期间保持不变:

Ubuntu的 :安装iptables的持久包,这将载入保存在/etc/iptables/rules.v4文件中的规则。

# apt-get install iptables-persistent

CentOS的 :添加以下两行到/ etc / sysconfig中/ iptables的-config文件。

IPTABLES_SAVE_ON_STOP="yes"
IPTABLES_SAVE_ON_RESTART="yes"

OpenSUSE系统 :列表允许的端口,协议,地址,等等(用逗号隔开)在/ etc / sysconfig中/ SuSEfirewall2中

有关详细信息,请参阅文件本身,这是重大评论。

结论

本文提供的示例虽然没有涵盖iptables的所有响铃和口令,但它的目的是说明如何启用和禁用流量入站或出站流量。

对于那些你们谁是防火墙的球迷,请记住,我们将再次与更多的具体应用这个主题在这个联邦经济竞争法系列10部分

如果您有任何问题或意见,欢迎随时与我们联系。