第1篇:Linux防火墙企业级应用案例

iptables是一个命令行防火墙实用程序,它使用策略链来允许或阻止流量。 当连接尝试在您的系统上建立自己的连接时,iptables会在其列表中查找与之匹配的规则。 如果找不到,则采取默认操作。

iptables几乎总是预装在任何Linux发行版上。 要更新/安装它,只需获取iptables软件包:

诸如Firestarter之类的iptables可以使用GUI替代,但是一旦您掌握了一些命令,iptables并没有那么难。 您在配置iptables规则时要格外小心,尤其是如果您通过SSH连接到服务器时,因为一个错误的命令会永久将您锁定,直到将其手动固定在物理计算机上为止。

  • INPUT:此链用于控制传入连接的行为。 例如,如果用户尝试通过SSH进入您的PC /服务器,则iptables将尝试将IP地址和端口与输入链中的规则进行匹配。

  • OUTPUT:此链用于传出连接。例如,如果您尝试ping www.baidu.com,iptables将在决定允许或拒绝连接尝试之前检查其OUTPUT链,以查看有关ping和www.baidu.com的规则是什么。

  • FORWARD:此链用于实际不在本地传递的传入连接。 想一想路由器–数据总是被发送到路由器,但实际上很少发送给路由器本身。 数据只是转发到其目标。 除非您在系统上进行某种形式的路由,NAT或其他需要转发的操作,否则您甚至都不会使用此链。

有一种确保方法可以检查您的系统是否使用/需要FORWARD链。

iptables -L -v

Policy链默认行为

在继续并配置特定规则之前,您需要确定三个链的默认行为是什么。 换句话说,如果连接不符合任何现有规则,您希望iptables做什么?

要查看当前配置了哪些策略链以处理不匹配的流量,请运行iptables -L命令。

[root@fw yening]# sudo iptables -L | grep policy
Chain INPUT (policy ACCEPT)
Chain FORWARD (policy ACCEPT)
Chain OUTPUT (policy ACCEPT)

如您所见,我们还使用grep命令为我们提供了更清晰的输出。 在该屏幕截图中,我们的链目前被认为接受流量。

您希望系统默认接受连接的次数更多。 除非您之前更改了policy链规则,否则应该已经配置此设置。 无论哪种方式,以下都是默认情况下接受连接的命令:

iptables --policy INPUT ACCEPT
iptables --policy OUTPUT ACCEPT
iptables --policy FORWARD ACCEPT

通过默认接受规则,您可以使用iptables拒绝特定的IP地址或端口号,同时继续接受所有其他连接。 我们将在一分钟内处理这些命令。

如果您想拒绝所有连接并手动指定要允许连接的连接,则应更改要删除的链的默认策略。 这样做可能仅对包含敏感信息且仅具有相同IP地址的服务器有用。

特定连接的响应

配置了默认链策略后,您可以开始向iptables添加规则,以便它知道在遇到来自或指向特定IP地址或端口的连接时该如何操作。在本指南中,我们将回顾三个最基本、最常用的“回答”。

  • Accept-允许连接。

  • Drop 丢掉连接,就当什么都没发生过。如果您不希望源代码意识到您的系统存在,这是最好的。

  • Reject-不允许连接,但发回错误。如果您不想让某个特定的源连接到您的系统,但又想让他们知道您的防火墙阻止了他们,那么这是最好的。

要显示这三个规则之间的差异,最好的方法是显示当PC尝试ping Linux机器(为每个设置配置了iptables)时是什么样子。

区分流量接口

很多初入门的新手在配置防火墙时,往往无法分辨什么时候配置INPUT链,在什么情况下配置OUTPUT链,我们用一个简单的示例:DNS服务器查询的流程


DNS服务器查询

这里DNS服务器的防火墙默认是禁止所有连接请求的。现在服务器需要向其他公共DNS发起连接请求,需要iptables为其开放udp的53端口。

  • 既然是DNS请求是他自己发起的,那么它的数据报文请求就需要发送到外部的服务器,那么对于iptables来说,这个DNS请求需要经由OUTPUT链处理.
     iptables -I OUTPUT -d 0.0.0.0/0 -p udp --dport 53 -j ACCEPT
    
  • 当dns的查询结果返回到DNS服务器,此时返回的数据报文用到源端口53,并且是进入dns服务器的,该数据报文必须经过iptables的INPUT链处理的。
    iptables -I INPUT -s 0.0.0.0/0 -p udp --sport 53 -j ACCEPT
    

上面的两条防火墙条目,我们不妨配置iptables后,并且执行dns查询后,使用如下命令测试

iptables -L INPUT-v

iptables -L OUTPUT -v

看看测试的结果是否如我们所料!,INPUT链中有数据包流量

[root@fw yening]# iptables -L INTPUT -v
Chain INPUT (policy ACCEPT 2527K packets, 3753M bytes)
 pkts bytes target     prot opt in     out     source               destination
 1258  261K ACCEPT     udp  --  any    any     anywhere             anywhere             udp spt:domain

OUTPUT链中的数据包流量

[root@fw yening]# iptables -L OUTPUT -v
Chain OUTPUT (policy ACCEPT 1918K packets, 136M bytes)
 pkts bytes target     prot opt in     out     source               destination
 3117  220K ACCEPT     udp  --  any    any     anywhere             anywhere             udp dpt:domain

这里读者,应该举一反三,如果的Linux服务器还存在应用需要开放防火墙相关端口的话,如何快速查阅端口?
请使用linux的netstat -plntu这条指令能够查阅到你当前系统后台运行的所有进程的监听端口

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。