美文网首页IT狗工作室
第2篇:Linux防火墙企业级应用案例

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

作者: 铁甲万能狗 | 来源:发表于2020-02-16 23:15 被阅读0次

允许或阻止特定连接

配置策略链后,您现在可以配置iptables以允许或阻止特定地址、地址范围和端口。在这些示例中,我们将连接设置为Drop,但您可以根据您的需要和如何配置策略链,将它们切换为Accept或Reject。

注意:在这些示例中,我们将使用iptables-A将规则附加到现有链中。iptables从其列表的顶部开始,遍历每个规则,直到找到匹配的规则。如果需要将一条规则插入到另一条规则之上,可以使用iptables-i [CHAIN] [NUMBER]指定该规则在列表中的编号。

来自单个IP地址的连接

iptables -I INPUT -s 192.168.50.10 -j DROP

如果我们将上面的规则的连接动作改成REJECT

iptables -I INPUT -s 192.168.50.10 -j REJECT

此时,我们再次ping 192.168.50.253,网关会因为Reject动作向主机反馈一个错误信息-无法连接到端口,但这从某种程度上也向窥探者也暴露了服务器在公网中的存在。因此使用DROP会比REJECT更为保守一些

来自某个IP段的连接
本例显示如何192.168.50.0/24网络范围内的所有IP地址。您可以使用网络掩码或标准斜杠表示法来指定IP地址范围。通常来说我们对于来自内网的任何一台计算机都认为可信任的主机,因此对于类似这样的情况,防火墙可接受来自一个可信任的ip范围的连接请求。

iptables -A INPUT -s 192.168.50.0/24 -j ACCEPT

iptables -A INPUT -s 192.168.50.0/255.255.255.0 -j ACCEPT

连接到特定端口
例如我们允许某个公网IP访问我们服务器上的某个特定的服务端口

iptable -A INPUT -s 171.92.42.37/32 --dport 7213 -j ACCEPT

连接到特定的端口范围
例如我们允许公网外访问我们内网的某台服务器上的应用需要用到5151到5253这些端口范围,很笨的方法是这么做

iptables -I INPUT -s 0.0.0.0/0  -d 192.168.117.2 -p tcp --dport 5151 -j ACCEPT
iptables -I INPUT -s 0.0.0.0/0 -d 192.168.117.2 -p tcp --dport 5252 -j ACCEPT
iptables -I INPUT -s 0.0.0.0/0 -d 192.168.117.2 -p tcp --dport 5253 -j ACCEPT
iptables -I OUTPUT -s 192.168.117.2 -d 0.0.0.0/0 -p tcp --sport 5151 -j ACCEPT
iptables -I OUTPUT -s 192.168.117.2 -d 0.0.0.0/0 -p tcp --sport 5152 -j ACCEPT
iptables -I OUTPUT -s 192.168.117.2 -d 0.0.0.0/0 -p tcp --sport 5153 -j ACCEPT

iptables 对于端口的区间有很简洁的语法,见下面的例子

iptables -I INPUT -s 0.0.0.0/0  -d 192.168.117.2 -p tcp --dport 5151:5253 -j ACCEPT
iptables -I OUTPUT -s 192.168.117.2 -d 0.0.0.0/0 -p tcp --sport 5151:5253 -j ACCEPT

另外,:717表示717以及之前所有端口,523: 表示523以及以上所有端口

关于开放什么端口,IT管理员应该根据各个部门的信息化流程中提取这些应用中有用的信息就是域名,ip地址和目标端口号,添加到我们防火墙规则中,例如我所在单位,职员上网基本而上没什么限制的,常用的http/https/imap/stmp/pop3这些端口基本上都必须开通的

iptables -I INPUT -p tcp --dport http -j ACCEPT
iptables -I INPUT -p tcp --dport https -j ACCEPT
iptables -I INPUT -p tcp --dport imap -j ACCEPT
iptables -I INPUT -p tcp --dport smtp -j ACCEPT
iptables -I INPUT -p tcp --dport pop3 -j ACCEPT
iptables -I OUTPUT -p tcp --sport http -j ACCEPT
iptables -I OUTPUT -p tcp --sport https -j ACCEPT
iptables -I OUTPUT -p tcp --sport imap -j ACCEPT
iptables -I OUTPUT -p tcp --sport smtp -j ACCEPT
iptables -I OUTPUT -p tcp --sport pop3 -j ACCEPT

防火墙的管理方式

读者是否有发现我规则为什么都是使用-I 而不是 -A,这里涉及到防火墙的管理方式问题,不论什么类型防火墙的它管理方式大概就两种

  • 粗放式:就是任由任何连接请求通过防火墙,反正有问题连接在根据ip地址/端口号添加 -j DROP 或 -j REJECT的规则,这类防火墙规则列表的最后一条规则在设计之初必定是这样的
     iptables -A INPUT -j ACCEPT
     iptables -A OUTPUT -j ACCEPT
    
  • 严谨式:就是任何连接请求经过防火墙的都加以限制,因此防火墙的规则列表的最后一条规则必定是如下命令,而后面在确认可放行的连接会在规则列表的头部插入动作为 -j ACCEPT的规则。
    iptables -A INPUT -j DROP
    iptables -A OUTPUT -j DROP
    

粗放式的弊端在于架设的防火墙就是一台简单的转发器,形同虚设,哪天网络被黑了也不冤枉,因此本文鼓励的是使用严谨的管理方式,我们规划之初假设所有连接都是不可信的,只有允许的链接在后期通过前置插入规则的方式来添加我们可信任的连接。

关于防火墙开放SSH端口

我们都知道ssh的标准端口是22端口,而对于上了一定资历的攻击者来说,当他臭探工具,扫描到你的防火墙居然开放了22端口,它一定欣喜若狂。因为标准的ssh端口是不安全的。此时,有安全意识的IT管理员会更改一个对ssh服务选择一个随机很多服务不会用到的端口号。如下图这样的一个服务器,enp3s0是暴露在公网的接口,enp5s0是可信任内网接口


一旦这样的配置规则,我们认为是不安全的,因为标准的端口众所周之。

iptable -A INPUT -s 0.0.0.0/0 --dport 22 -p tcp -j ACCEPT

而相对安全一些的做法是,们在ssh配置文档更改一个随机端口,比如7234

iptable -A INPUT -s 0.0.0.0/0 --dport 7234 -p tcp -j ACCEPT

更为严谨保守的做法

但如果你的服务器并提供的服务并向不是面向互联网上的用户,那么上面配置也太过开放了,我们应该采取更加保守严谨的做法。比如大型的企业,每个事业部的点对点互联的同时,在规划IT应用架构的之初,尽量减少服务器在公网上的暴露,而仅信任我们的伙伴机构有限地接入,这就是白名单的做法。

  • 首先,IT规划者认为所有通讯连接都是不可信(最后一条规则的动作-j DROP)。
  • 然后,我们公司业务上用到通讯的ip和端口逐一加入白名单(-j ACCEPT)


对于香港事业部的服务器,它进允许北京事业部和越南事业部的服务器的特定通讯

INPUT链配置

iptable -A INPUT     -s 117.232.42.13/32 --dport 4747 -p tcp -j ACCEPT
iptable -A INPUT     -s 101.23.71.5/32     --dport 4747 -p tcp -j ACCEPT
iptable -A INPUT     -s 117.232.42.13/32 --dport 7234 -p tcp -j ACCEPT
iptable -A INPUT     -s 101.23.71.5.5/32  --dport 7234 -p tcp -j ACCEPT
iptable -A INPUT     -s 192.168.50.17/24 --dport 53 -p udp -j ACCEPT
iptable -A INPUT     -s 192.168.50.0/24   --dport ntp  -p udp -j ACCEPT
....
iptable -A INPUT -j DROP

OUTPUT链配置


上面的防火墙配置企业级应用的典型案例。

连接状态

正如我们前面提到的,很多协议将需要双向通信。例如,如果您希望允许SSH连接到您的系统,则INPUT链和OUTPUT链将需要添加一个规则。但是,如果您只希望允许SSH进入您的系统,该怎么办呢?不往OUTPUT链添加规则也要允许传出SSH尝试吗?

这就是连接状态的用武之地,它为您提供了允许双向通信但只允许建立单向连接所需的功能。看看这个示例,其中来自10.10.10.10的SSH连接是允许的,但连接到10.10.10.10的SSH连接是不允许的。但是,只要会话已经建立,系统就可以通过SSH发回信息,这使得这两台主机之间可以进行SSH通信。

iptables -A INPUT -p tcp --dport ssh -s 10.10.10.10 -m state --state NEW,ESTABLISHED -j ACCEPT

iptables -A OUTPUT -p tcp --sport 22 -d 10.10.10.10 -m state --state ESTABLISHED -j ACCEPT

相关文章

网友评论

    本文标题:第2篇:Linux防火墙企业级应用案例

    本文链接:https://www.haomeiwen.com/subject/dsrvfhtx.html