iptables实现网络防火墙(一)

本文涉及的产品
云防火墙,500元 1000GB
简介:

前言

    关于防火墙的相关概念,我们在之前的文章中已经进行了相关的介绍,这里就不再重复。感兴趣的朋友可以移步 
     初识Linux防火墙 
    今天重点记录一下,如何使用iptables来搭建网络防火墙,实现控制访问。

实验环境准备

    如果要实现网络防火墙,至少需要三台主机A,B,C,B用来搭建网络防火墙,A来模拟局域网内主机,C模拟网络客户端。 
    根据我们之前四表五链的介绍,我们知道,作为网络防火墙的主机B还要充当网关的角色,使用filter表的FORWARD链。
    实验拓扑如下图所示。

实验环境拓扑

    这里有一点需要注意,192.168 网段和172.18网段在实际生产中都属于私有地址,只不过,在我这里172.18网段可以实现链接互联网,所以这里我们模拟了了实验环境,请注意不要产生误解。

设置网关

        主机B虽然担任的是防火墙的角色,但是它还需要把主机A和主机C的数据包进行转发和传输,所以主机主机A和主机C还需要配置一下网关,指向主机B分别链接在内网和外网的两个IP地址。  

        下面为主机A和主机C添加两个路由。

# 给主机A添加一个默认的网关地址,指向192.168.2.77   
route add default gw 192.168.2.77   

# 给主机C添加一条默认的网关地址,指向172.18.2.77
route add default gw 172.18.2.77

清空主机的防火墙策略,开启主机B的转发功能,关闭SELinux

为了避免对实验环境的影响,首先对三台主机清空防火墙策略。

# 查看目前filter表是否具有防火墙策略
iptables -vnL   

# 清除filter表的防火墙策略
iptables -F

因为主机B要兼职转发功能,所以要开启主机B的转发功能。

# 开启主机B的转发功能
echo 1 > /proc/sys/net/ipv4/ip_forward

最后关闭三台主机的SELinux策略。 
实验环境准备好之后,可以从主机A ping 到主机C 。如下图所示。

实验环境准备

下面开始搭建主机B的防火墙规则

下面我们开始在主机B上模拟建立防火墙的过滤规则。

允许局域网ping通外网,不允许外网ping局域网

    我们的目标是只能内网ping通外网,但是不允许外网ping通内部主机,这样的话,我们应该如何操作?

 ~]#iptables -A FORWARD -s 192.168.2.0/24 -d 172.18.0.0/16 -p icmp --icmp-type 8 -j ACCEPT
 ~]#iptables -A FORWARD -s 172.18.0.0/16 -d 192.168.2.0/24 -p icmp --icmp-type 0 -j ACCEPT
 ~]#iptables -A FORWARD -j REJECT
 
 # 查看一下建立好的防火墙策略
 ~]#iptables -vnLChain INPUT (policy ACCEPT 72 packets, 7907 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     icmp --  *      *       192.168.2.0/24       172.18.0.0/16        icmptype 8
    0     0 ACCEPT     icmp --  *      *       172.18.0.0/16        192.168.2.0/24       icmptype 0
    0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT 23 packets, 2060 bytes)
 pkts bytes target     prot opt in     out     source               destination

这里解释一下,有两种状态码,分别表示请求和应答。

  • 0/0 echo-reply icmp应答

  • 8/0 echo-request icmp请求

    第二种方法,我们可以通过状态链接的方式来定义防火墙规则。我们允许从内部网络发出的,凡是ESTABLISHED状态的包,通过防火墙。

# 凡是已经建立的链接都允许通过防火墙
 ~]#iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT
 
 # 凡是符合源地址为192.168.2的网段 ,目的地址为172.18网段的icmp数据包都允许通过防火墙
 ~]#iptables -A FORWARD -s 192.168.2.0/24 -d 172.18.0.0/16 -p icmp --icmp-type 8 -j ACCEPT
 
 # 凡是符合源地址为192.168.2的网段 ,目的地址为172.18网段的icmp数据包都允许通过防火墙
 # 下面这条命令也同样可行,与上面的命令使用其中一个就可以
 # iptables -A FORWARD -s 192.168.2.0/24 -d 172.18.0.0/16 -p icmp -m state --state NEW 8 -j ACCEPT   
 
 # 其余的协议都拒绝
 ~]#iptables -A FORWARD -j REJECT

内部主机可以访问互联网上特定服务如httpd服务,SSH服务,ftp服务,但是外网不能访问内网的服务

    只是禁用ping 命令话,在实际生产中的作用并不是很大。但是如果我们想让内网的主机能够访问互联网上的特殊服务,而不允许外网的主机访问内网应该如何去做。

# 源地址为内网网段的允许经过防火墙
 ~]#iptables -A FORWARD -s 192.168.2.0/24 -p tcp -m multiport --dports 21:22,80 -j ACCEPT 

# 目的地址为内网地址的允许经过防火墙
 ~]#iptables -A FORWARD -d 192.168.2.0/24 -p tcp -m multiport --sports 22,80,21 -j ACCEPT   
# 其余的全部拒绝
 ~]#iptables -A FORWARD -j REJECT
 
 # 查看一下定义好的防火墙策略
 ~]#iptables -vnLChain INPUT (policy ACCEPT 60 packets, 6088 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    6   492 ACCEPT     tcp  --  *      *       192.168.2.0/24       0.0.0.0/0            multiport dports 21:22,80
    4   471 ACCEPT     tcp  --  *      *       0.0.0.0/0            192.168.2.0/24       multiport sports 22,80,21
   10   816 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT 27 packets, 2604 bytes)
 pkts bytes target     prot opt in     out     source               destination

    现在内网的主机已经能够顺利的访问外网的主机,而且外网的主机不能够对内网的主机进行访问了。 
    但是现在又有了新的问题,ftp虽然能够链接到外网的服务,但是ftp却不能访问ftp服务器上的内容,这说明外网的数据不能够通过防火墙返回到内网的主机,所以我们的防火墙策略还要进行一定的修改。也就是说,要允许已经建立链接的,和相关的请求数据,返回时能够通过防火墙。 
    为此,我们在防火墙策略中,重新插入下面这样一条策略。

# 加载额外的模块 
 ~]#modprobe nf_conntrack_ftp
 
 # 源地址为内网网段的允许经过防火墙
 ~]#iptables -I FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT   

# 查看一下当前的防火墙策略
 ~]#iptables -vnLChain INPUT (policy ACCEPT 69 packets, 5364 bytes)
 pkts bytes target     prot opt in     out     source               destination         

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination         
    0     0 ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
   26  1692 ACCEPT     tcp  --  *      *       192.168.2.0/24       0.0.0.0/0            multiport dports 22,80
    4   471 ACCEPT     tcp  --  *      *       0.0.0.0/0            192.168.2.0/24       multiport sports 22,80
  373 31092 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT 31 packets, 2940 bytes)
 pkts bytes target     prot opt in     out     source               destination

    如果我们使用了状态策略的话,第三条规则已经没有多大必要的了,因为已经包含在状态中了。所以实际生产中,通常建议将状态链接写在第一条,这样可以省略很大的工作量。 
    还有一点需要注意,如果是扩展的匹配条件,需要加载额外的扩展模块(/usr/lib64/xtables/*.so),方可生效,关于额外的扩展模块可以 man 8 iptables-extensions来查看。

    经过上面的这些操作,我们就实现了一个具有路由功能的网络防火墙,但是,这个防火墙的功能还仅仅限于网络协议的控制和防护,这在实际生产中还远远不够,我们会在后续继续介绍关于网络防火墙的相关知识,欢迎关注。



个人博客地址:http://www.pojun.tech/ 欢迎访问





     本文转自Eumenides_s 51CTO博客,原文链接:http://blog.51cto.com/xiaoshuaigege/1975177,如需转载请自行联系原作者


相关文章
|
14天前
|
SQL 安全 算法
网络安全与信息安全的守护之道:漏洞防护、加密技术与安全意识提升
【9月更文挑战第21天】在数字化浪潮中,网络安全与信息安全成为维系社会稳定和个体隐私的重要屏障。本文将深入探讨网络安全中的常见漏洞,分析其成因及防范措施;介绍加密技术的基本原理及其在信息保护中的应用;强调安全意识的重要性,并通过具体案例分享如何在日常生活中提升个人和企业的安全防御能力。文章旨在为读者提供一套综合性的网络安全防护策略,以应对日益复杂的网络威胁。
|
2月前
|
SQL 安全 测试技术
网络安全的屏障与钥匙:漏洞防护与加密技术解析软件测试的艺术:探索性测试的力量
【8月更文挑战第27天】在数字时代的海洋中,网络安全是保护我们数据资产的灯塔和堤坝。本文将深入浅出地探讨网络安全领域的关键要素——安全漏洞、加密技术以及不可或缺的安全意识。通过实际案例分析,我们将了解如何识别和修补潜在的安全漏洞,掌握现代加密技术的工作原理,并培养起一道坚固的安全防线。文章旨在为读者提供实用的知识和技能,以便在日益复杂的网络环境中保持警惕,确保个人及组织信息的安全。
|
2月前
|
SQL 安全 算法
网络安全的盾牌与矛:漏洞防护与加密技术解析
【8月更文挑战第31天】在数字时代的浪潮中,网络安全成为了保护数据资产不可或缺的防线。本文将深入探讨网络安全中的两大核心议题:网络漏洞和加密技术。我们将从漏洞的类型、成因以及防御策略出发,进而分析加密技术的基本原理、实际应用和面临的挑战。文章旨在提升读者的安全意识,同时提供实用的代码示例来加深理解。通过深入浅出的方式,我们希望能够激发读者对网络安全重要性的认识,并鼓励采取积极措施以保障个人信息和资产安全。
|
1月前
|
机器学习/深度学习 安全 网络协议
Linux防火墙iptables命令管理入门
本文介绍了关于Linux防火墙iptables命令管理入门的教程,涵盖了iptables的基本概念、语法格式、常用参数、基础查询操作以及链和规则管理等内容。
191 73
|
6天前
|
安全 网络安全 量子技术
探索网络安全世界:从漏洞防护到加密技术与安全意识
本文旨在深入探讨网络安全与信息安全的关键方面,包括网络安全漏洞、加密技术以及安全意识的重要性。通过分析这些要素,我们将揭示如何构建一个更加安全的网络环境,并强调个人和组织在维护网络安全中的角色。本文不仅提供技术性的见解,还强调了普及安全意识的必要性,旨在为读者提供一个全面的网络安全知识框架。
|
15天前
|
SQL 安全 网络安全
网络安全的盾牌与矛:漏洞防护与加密技术解析
【9月更文挑战第20天】在数字化时代的浪潮中,网络安全成了我们不得不面对的严峻话题。本文将深入探讨网络安全中的两个核心要素——漏洞防护和加密技术,以及它们如何共同构建起保护信息安全的坚固防线。通过分析最新的网络攻击案例、介绍常见的安全漏洞类型、阐述加密技术的原理及其应用,并强调安全意识的重要性,本文旨在为读者提供一场关于网络安全知识的精彩分享,帮助大家更好地理解并应对日益复杂的网络威胁。
35 7
|
13天前
|
SQL 安全 网络安全
网络安全的屏障与钥匙:漏洞防护与加密技术解析
【9月更文挑战第22天】在数字时代的浪潮中,网络安全和信息安全成为维护个人隐私与企业资产的重要防线。本文将深入探讨网络安全漏洞的成因与防范措施,分析加密技术在信息安全中的应用,并强调提升安全意识的必要性。通过实例分析,我们将了解如何构建坚固的网络防御体系,以及在日益复杂的网络环境中保持警觉的重要性。
|
14天前
|
运维 监控 安全
网络管理:防火墙和安全组配置详解
网络管理:防火墙和安全组配置详解
30 1
|
19天前
|
存储 安全 算法
网络安全之盾:漏洞防护与加密技术的现代演绎
【9月更文挑战第16天】在数字化浪潮中,网络安全成为守护个人隐私与企业数据的核心防线。本文将深入探讨网络安全的两大支柱——漏洞防护和加密技术,揭示它们如何共同构筑起一道坚固的信息安全屏障。从最新的网络攻击案例出发,我们将分析常见的安全漏洞及其防御策略,并透过代码示例,展示加密技术在保护数据传输和存储中的关键作用。最后,文章强调了提升个人和组织的安全意识对于构建安全文化的重要性。
31 2
|
2月前
|
安全 网络安全 数据安全/隐私保护
网络安全的盾牌与矛:漏洞防护与加密技术的较量
【8月更文挑战第27天】在数字世界的棋盘上,网络安全是王与后的较量——漏洞与攻击手段不断进化,而防御策略必须更为精妙。本文将深入探讨网络安全的两大支柱:漏洞防护和加密技术。我们将从基础概念出发,逐步揭示它们的重要性、工作原理以及如何实施有效策略来保护信息安全。通过生动的比喻和直观的解释,即使非专业人士也能获得必要的知识武装,共同构建更安全的网络环境。
下一篇
无影云桌面