目录
前言
一、防火墙作用
二、防火墙分类
三、防火墙性能
四、硬件防火墙
五、软件防火墙
5.1 iptables
六、iptables应用
本文就简单的介绍了防火墙的基础内容和一些简单案例的操作。
提示:以下是本篇文章正文内容,下面案例可供参考
在计算机领域,防火墙是用于保护信息安全的设备,其会依照用户定义的规则,允许或限制数据的传输。
用于保护内网安全的一种设备依据规则进行防护
用户定义规则
允许或拒绝外部用户访问
①逻辑上划分,防火墙可以大体分为主机防火墙和网络防火墙主机防火墙:针对于单个主机进行防护
网络防火墙:针对网络进行防护,处于网络边缘,防火墙背后是本地局域网网络防火墙主外(服务集体),主机防火墙主内(服务个人)
②物理上划分,防火墙可分为硬件防火墙和软件防火墙
硬件防火墙:在硬件级别实现防火墙功能,另一部分基于软件实现,其性能高,硬件成本高
软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙,其性能相较于硬件防火墙低,成本较低,对于Linux系统已自带,直接使用即可
吞土量
并发连接
新建连接
时延
抖动
硬件防火墙定义
硬件防火墙是指把具备配置数据包通过规则的软件嵌入硬件设备中,为网络提供安全防护的硬件设备。多见于网络边缘。
硬件防火墙作用(拓扑图 ups)
硬件防火墙品牌
Juniper
cisco 思科ASA
华为
天融信
软件防火墙是单独使用具备配置数据包通过规则的软件来实现数据包过滤。多见于单主机系统或个人计算机
扩展:Web应用防火墙(WAF)
Web应用防火墙是对web防护(网页保护)的安全防护设备(软件),主要用于截获所有HTTP数据或仅仅满足某些规则的 会话。多见于云平台中。
硬件防火墙与软件防火墙比较
硬件防火墙有独立的硬件设备,运算效率较高,价格略高,可为计算机网络提供安全防护。
软件防火墙必须部署在主机系统之上,相较于硬件防火墙运算效率低,在一定程度上会影响到主机系统性能,一般用 于单机系统或个人计算机中,不直接用于计算机网络中。
iptables是什么?
iptables不是防火墙,是防火墙用户代理用于把用户的安全设置添加到“安全框架”中 “安全框架”是防火墙
“安全框架”的名称为netfilter
netfilter位于内核空间中,是Linux操作系统核心层内部的一个数据包处理模块iptables是用于在用户空间对内核空间的netfilter进行操作的命令行工具
netfilter/iptables功能
netfilter/iptables可简称为iptables,为Linux平台下的包过滤防火墙,是开源的,内核自带的,可以代替成本较高的 企业级硬件防火墙,能够实现如下功能:
数据包过滤,即防火墙数据包重定向,即转发网络地址转换,即可NAT
注:平常我们使用iptables并不是防火墙的“服务”,而服务是由内核提供的。
iptables概念
iptables工作依据 规则(rules)
iptables是按照规则(rules)来办事的,而规则就是运维人员所定义的条件;规则一般定义为“如果数据包头符合这样的 条件,就这样处理这个数据包”。
规则存储在内核空间的数据包过滤表中,这些规则分别指定了源地址、目的地址,传输协议(TCP、UDP、ICMP)和服 务类型(HTTP、FTP)等。
当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,比如放行(ACCEPT)、拒绝(REJECT)、 丢弃(DROP)等
配置防火墙主要工作就是对iptables规则进行添加、修改、删除等
iptables中链的概念
举例说明:当客户端访问服务器端的web服务时,客户端发送访问请求报文至网卡,而tcp/ip协议栈是属于内核的一部分,所 以,客户端的请求报文会通过内核的TCP协议传输到用户空间的web服务,而客户端报文的目标地址为web服务器所 监听的套接字(ip:port)上,当web服务器响应客户端请求时,web服务所回应的响应报文的目标地址为客户端地址, 我们说过,netfilter才是真正的防火墙,属于内核的一部分,所以,我们要想让netfilter起到作用,我们就需要在内 核中设置“关口”,所以进出的数据报文都要通过这些关口,经检查,符合放行条件的准允放行,符合阻拦条件的则被 阻止,于是就出现了input和output关口,然而在iptables中我们把关口叫做“链”。
上面的举例中,如果客户端发到本机的报文中包含的服务器地址并不是本机,而是其他服务器,此时本机就应该能够 进行转发,那么这个转发就是本机内核所支持的IP_FORWARD功能,此时我们的主机类似于路由器功能,所以我们会 看到在iptables中,所谓的关口并只有上面所提到的input及output这两个,应该还有“路由前”,“转发”,“路由后”, 它们所对应的英文名称分别为“PREROUTING”,“FORWARD”,“POSTROUTING”,这就是我们说到的5链。
通过上图可以看出,当我们在本地启动了防火墙功能时,数据报文需要经过以上关口,根据各报文情况,各报名经常 的“链”可能不同,如果报文目标地址是本机,则会经常input链发往本机用户空间,如果报文目标不是本机,则会直接 在内核空间中经常forward链和postrouting链转发出去。
有的时候我们也经常听到人们在称呼input为“规则链”,这又是怎么回事呢?我们知道,防火墙的作用在于对经过的数 据报文进行规则匹配,然后执行对应的“动作”,所以数据包经过这些关口时,必须匹配这个关口规则,但是关口规则 可能不止一条,可能会有很多,当我们把众多规则放在一个关口上时,所有的数据包经常都要进行匹配,那么就形成 了一个要匹配的规则链条,因此我们也把“链”称作“规则链”。
INPUT:处理入站数据包OUTPUT:处理出站数据包
FORWARD:处理转发数据包(主要是将数据包转发至本机其它网卡)
当数据报文经过本机时,网卡接收数据报文至缓冲区,内核读取报文ip首部,发现报文不是送到本机时(目的ip 不是本机),由内核直接送到forward链做匹配,匹配之后若符合forward的规则,再经由postrouting送往下一 跳或目的主机。
PREROUTING:在进行路由选择前处理数据包,修改到达防火墙数据包的目的IP地址,用于判断目标主机
POSTROUTING:在进行路由选择后处理数据包,修改要离开防火墙数据包的源IP地址,判断经由哪一接口送往 下一跳
iptables中表的概念
每个“规则链”上都设置了一串规则,这样的话,我们就可以把不同的“规则链”组合成能够完成某一特定功能集合分 类,而这个集合分类我们就称为表,iptables中共有5张表,学习iptables需要搞明白每种表的作用。
filter: 过滤功能,确定是否放行该数据包,属于真正防火墙,内核模块:iptables_filter nat: 网络地址转换功能,修改数据包中的源、目标IP地址或端口;内核模块:iptable_nat mangle: 对数据包进行重新封装功能,为数据包设置标记;内核模块:iptable_mangle raw: 确定是否对数据包进行跟踪;内核模块:iptables_raw
security:是否定义强制访问控制规则;后加上的
iptables中表链之间的关系
我们在应用防火墙时是以表为操作入口的,只要在相应的表中的规则链上添加规则即可实现某一功能。那么我们就应 该知道哪张表包括哪些规则链,然后在规则链上操作即可。
filter表可以使用哪些链定义规则:INPUT,FORWARD,OUTPUT
nat表中可以使用哪些链定义规则:PREROUTING,OUTPUT ,POSTROUTING,INPUT
mangle 表中可以使用哪些链定义规则:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING raw表中可以使用哪些链定义规则:PREROUTING,OUTPUT
iptables中表的优先级
raw-mangle-nat-filter(由高至低)
iptables规则匹配条件分类基本匹配条件:
源地址,目标地址,源端口,目标端口等
基本匹配使用选项及功能
-p | protocal指定规则协议,tcp(传输层) udp(传输层) icmp(网络层) ip(网络层) |
-s | source 指定数据包的源地址,192.168.1.10 |
-d | destination指定目的地址 |
-i | 输入网卡接口 如:lo本地回环,ens33 |
-o | 输出网卡接口 如:ens37,ens33等 |
! | 取 反 |
基本匹配的特点是:无需加载扩展模块,匹配规则生效
扩展匹配条件:
扩展匹配又分为显示匹配和隐式匹配。
扩展匹配的特点是:需要加载扩展模块,匹配规则方可生效。
隐式匹配的特点:使用-p选项指明协议时,无需再同时使用-m选项指明扩展模块以及不需要手动加载扩展模块; 显示匹配的特点:必须使用-m选项指明要调用的扩展模块的扩展机制以及需要手动加载扩展模块。
隐式匹配选项及功能
-p tcp | --sport 匹配报文源端口;可以给出多个端口,但只能是连续的端口范围 |
--dport 匹配报文目标端口;可以给出多个端口,但只能是连续的端口范围 | |
-p udp | --sport 匹配报文源端口;可以给出多个端口,但只能是连续的端口范围 |
--dport 匹配报文目标端口;可以给出多个端口,但只能是连续的端口范围 | |
--icmp-type | 0/0: echo reply 允许其他主机ping |
8/0:echo request 允许ping其他主机 |
显式匹配使用选项及功能
multiport 多端口
iptables -I INPUT -d 192.168.2.10 -p tcp -m multiport --dports 22,80 -j ACCEPT
#在INPUT链中开放本机tcp 22,tcp80端口
iptables -I OUTPUT -s 192.168.2.10 -p tcp -m multiport --sports 22,80 -j ACCEPT
#在OUTPUT链中开发源端口tcp 22,tcp80
iprange 多ip地址
iptables -A INPUT -d 192.168.2.10 -p tcp --dport 23 -m iprange --src-range 192.168.2.11-192.168.2.21 -j ACCEPT
iptables -A OUTPUT -s 192.168.2.10 -p tcp --sport 23 -m iprange --dst-range 192.168.2.11-192.168.2.21 -j ACCEPT
time 指定访问时间范围
ptables -A INPUT -d 192.168.2.10 -p tcp --dport 901 -m time --weekdays Mon,Tus,Wed,Thu,Fri --timestart 08:00:00 --time-stop 18:00:00 -j ACCEPT
iptables -A OUTPUT -s 192.168.2.10 -p tcp --sport 901 -j ACCEPT
connlimit 连接限制,根据每个客户端IP作并发连接数量限制
--connlimit-upto n 连接数小于等于n时匹配
--connlimit-above n 连接数大于n时匹配
limit 报文速率限制
state 追踪本机上的请求和响应之间的数据报文的状态。状态有五种:INVALID, ESTABLISHED, NEW, RELATED, UNTRACKED.
--state state
NEW 新连接请求
已建立的连接
INVALID 无法识别的连接
RELATED 相关联的连接,当前连接是一个新请求,但
UNTRACKED 未追踪的连接
对于进入的状态为ESTABLISHED都应该放行;
对于出去的状态为ESTABLISHED都应该放行;
严格检查进入的状态为NEW的连接;
所有状态为INVALIED都应该拒绝;
iptables规则中动作
iptables规则中的动作常称为target,也分为基本动作和扩展动作。
ACCEPT:允许数据包通过
DROP:直接丢弃数据包,不给任何回应信息REJECT:拒绝数据包通过,发送回应信息给客户端SNAT:源地址转换
解释1:数据包从网卡发送出去的时候,把数据包中的源地址部分替换为指定的IP,接收方认为数据包的来源是被替换的那个IP主机,返回响应时,也以被替换的IP地址进行。
解释2:修改数据包源地址,当内网数据包到达防火墙后,防火墙会使用外部地址替换掉数据包的源IP地址(目的IP地址不变),使网络内部主机能够与网络外部主机通信。
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth1 -j SNAT --to-source 202.12.10.100
MASQUERADE:伪装,类似于SNAT,适用于动态的、临时会变的ip地址上,例如:家庭使用的宽带。 用发送数据的网卡上的IP来替换源IP,对于IP地址不固定场合使用。
DNAT:目标地址转换
解释1:数据包从网卡发出时,修改数据包中的目的IP,表现为你想访问A,但因网关做了DNAT,把所有 访问A的数据包中的目的IP地址全部修改为B,实际最终访问的是B。
解释2:改变数据包目的地址,当防火墙收到来自外网的数据包后,会将该数据包的目的IP地址进行替换(源IP地址不变),重新转发到内网的主机。
iptables -t nat -A PREROUTING -d 202.12.10.100 -p tcp --dport 80 -j DNAT --to- destination 192.168.10.1
REDIRECT:在本机做端口映射
LOG:在/var/log/message文件中记录日志信息,然后将数据包传递给下一条规则。
路由是按照目的地址进行路由选择的,因此,DNAT是在PREROUTING链上进行的,SNAT是在数据包发出的时 候进行的,因此是在POSTROUTING链上进行的。
制定iptables规则策略
黑名单
没有被拒绝的流量都可以通过,这种策略下管理员必须针对每一种新出现的攻击,制定新的规则,因此不推荐
白名单
没有被允许的流量都要拒绝,这种策略比较保守,根据需要,主机主机逐渐开放,目前一般都采用白名单策 略,推荐。
制定iptables规则思路
iptables基础语法结构
iptables [-t 表名] 管理选项 [链名] [条件匹配] [-j 目标动作或跳转]
不指定表名时,默认表示filter表,不指定链名时,默认表示该表内所有链,除非设置规则链的默认策略,否则 需要指定匹配条件。
iptables链管理方法(了解)
-N, --new-chain chain:新建一个自定义的规则链;
-X, --delete-chain [chain]:删除用户自定义的引用计数为0的空链;
-F, --flush [chain]:清空指定的规则链上的规则;
-E, --rename-chain old-chain new-chain:重命名链;
-Z, --zero [chain [rulenum]]:置零计数器; 注意:每个规则都有两个计数器
packets:被本规则所匹配到的所有报文的个数; bytes:被本规则所匹配到的所有报文的大小之和;
-P, --policy chain target 制定链表的策略(ACCEPT|DROP|REJECT)
iptables规则管理(重点记忆)
-A, --append chain rule-specification:追加新规则于指定链的尾部;
-I, --insert chain [rulenum] rule-specification:插入新规则于指定链的指定位置,默认为首部;
-R, --replace chain rulenum rule-specification:替换指定的规则为新的规则;
-D, --delete chain rulenum:根据规则编号删除规则;
-D, --delete chain rule-specification:根据规则本身删除规则;
iptables规则显示
-L, --list [chain]:列出规则;
-v, --verbose:详细信息;
-vv 更详细的信息
-n, --numeric:数字格式显示主机地址和端口号;
-x, --exact:显示计数器的精确值,而非圆整后的数据;
--line-numbers:列出规则时,显示其在链上的相应的编号;
-S, --list-rules [chain]:显示指定链的所有规则;
iptables-services安装
[root@localhost ~]# yum -y install iptables-services
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: mirrors.huaweicloud.com
* extras: mirrors.huaweicloud.com
* updates: mirrors.bfsu.edu.cn
base | 3.6 kB 00:00:00
extras | 2.9 kB 00:00:00
updates | 2.9 kB 00:00:00
(1/4): base/7/x86_64/group_gz | 153 kB 00:00:00
(2/4): extras/7/x86_64/primary_db | 250 kB 00:00:00
(3/4): base/7/x86_64/primary_db | 6.1 MB 00:00:02
(4/4): updates/7/x86_64/primary_db | 22 MB 00:00:08
正在解决依赖关系
--> 正在检查事务
---> 软件包 iptables-services.x86_64.0.1.4.21-35.el7 将被 安装
--> 解决依赖关系完成
依赖关系解决
========================================================================================================================================================================
Package 架构 版本 源 大小
========================================================================================================================================================================
正在安装:
iptables-services x86_64 1.4.21-35.el7 base 52 k
事务概要
========================================================================================================================================================================
安装 1 软件包
总下载量:52 k
安装大小:23 k
Downloading packages:
警告:/var/cache/yum/x86_64/7/base/packages/iptables-services-1.4.21-35.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY.0 B/s | 0 B --:--:-- ETA
iptables-services-1.4.21-35.el7.x86_64.rpm 的公钥尚未安装
iptables-services-1.4.21-35.el7.x86_64.rpm | 52 kB 00:00:00
从 file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 检索密钥
导入 GPG key 0xF4A80EB5:
用户ID : "CentOS-7 Key (CentOS 7 Official Signing Key) "
指纹 : 6341 ab27 53d7 8a78 a7c2 7bb1 24c6 a8a7 f4a8 0eb5
软件包 : centos-release-7-9.2009.0.el7.centos.x86_64 (@anaconda)
来自 : /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
正在安装 : iptables-services-1.4.21-35.el7.x86_64 1/1
验证中 : iptables-services-1.4.21-35.el7.x86_64 1/1
已安装:
iptables-services.x86_64 0:1.4.21-35.el7
完毕!
centos7系统中默认存在iptables命令,此命令仅为简单查询及操作命令,不包含配置文件,安装iptables- services后,将直接生成配置文件,便于配置保存。包含ipv4及ipv6。
设置服务开启
[root@localhost ~]# systemctl start iptables.service
设置开机自启动
[root@localhost ~]# systemctl enable iptables
Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.
查看配置文件
[root@localhost ~]# rpm -ql iptables-services
/etc/sysconfig/ip6tables
/etc/sysconfig/iptables
/usr/lib/systemd/system/ip6tables.service
/usr/lib/systemd/system/iptables.service
/usr/libexec/initscripts/legacy-actions/ip6tables
/usr/libexec/initscripts/legacy-actions/ip6tables/panic
/usr/libexec/initscripts/legacy-actions/ip6tables/save
/usr/libexec/initscripts/legacy-actions/iptables
/usr/libexec/initscripts/legacy-actions/iptables/panic
/usr/libexec/initscripts/legacy-actions/iptables/save
/usr/libexec/iptables
/usr/libexec/iptables/ip6tables.init
/usr/libexec/iptables/iptables.init
iptables -h #查看帮助信息
保存规则
[root@localhost ~]# iptables-save > /etc/sysconfig/iptables
重载
[root@localhost ~]#iptables-restore < /etc/sysconfig/iptables
基本配置
iptables -F #删除现有规则
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
#配置默认链策略
案例:白名单
[root@localhost ~]# iptables -t filter -F
[root@localhost ~]# iptables -P INPUT DROP
[root@localhost ~]# iptables -t filter -I INPUT -p tcp --dport=22 -j ACCEPT
[root@localhost ~]# iptables -t filter -I INPUT -p tcp --dport=80 -j ACCEPT
案例:黑名单
[root@localhost ~]# iptables -P INPUT ACCEPT
[root@localhost ~]# iptables -F
[root@localhost ~]# iptables -t filter -A INPUT -s 192.168.2.20/24 -p tcp --dport 80 -j DROP
案例:通过lo访问本机数据
[root@localhost ~]# iptables -I INPUT -d 127.0.0.1 -p tcp --dport=9000 -i lo -j ACCEPT
[root@localhost ~]# iptables -I INPUT -i lo -j ACCEPT
#允许通过本地回环网卡访问本机
案例:允许连接态产生衍生态
#表示允许防火墙主动访问其他主机,返回的流量 ,established表示无论是tcp还是udp还是icmp,只要是回应包,都允许放行的
[root@localhost ~]# iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables filter表应用案例
案例1:
[root@localhost ~]# yum -y install httpd vsftpd sshd
[root@localhost ~]# systemctl start httpd vsftpd sshd
[root@localhost ~]# iptables -t filter -F
[root@localhost ~]# iptables -I INPUT -p tcp --dport 80 -j ACCEPT
[root@localhost ~]# iptables -I INPUT -p tcp --dport 20:21 -j ACCEPT
[root@localhost ~]# iptables -I INPUT -p tcp --dport 22 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -j REJECT
#在存问题
本机无法访问本机
例如:ping 127.0.0.1
解决方法
[root@localhost ~]# iptables -I INPUT -i lo -j ACCEPT
本机无法访问其它主机
例如:ssh remote_host
解决方法
[root@localhost ~]# iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
FTP无法访问
解决方法1:
[root@localhost ~]# iptables -I INPUT -p tcp --dport 20:21 -j ACCEPT
[root@localhost ~]# vim /etc/vsftpd/vsftpd.conf
pasv_min_port=50000
pasv_max_port=60000
[root@localhost ~]# iptables -I INPUT -p tcp --dport 50000:60000 -j ACCEPT
案例2:iptables标准流程
[root@localhost ~]# iptables –F
#防火墙访问别人,回流的数据包默认是允许的
[root@localhost ~]# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
[root@localhost ~]# iptables -A INPUT -i lo -j ACCEPT
[root@localhost ~]# iptables -A INPUT -s 192.168.2.0/24 -j ACCEPT #允许内网任何访问
[root@localhost ~]# iptables -A INPUT -j REJECT
[root@localhost ~]# iptables-save > /etc/sysconfig/iptables
案例3:
拓扑图如下:
192.168.1.11------------192.168.1.12(fw)-----------------192.168.1.13
要求:1 1.11 可以ping1.12 ,不可以ssh 1.12
2 1.13 不可以ping 1.12,但是可以ssh 1.12
命令如下:(默认策略是accept)
iptables -F
iptables -I INPUT -s 192.168.1.11 -p tcp --dport 22 -j REJECT
iptables -I INPUT -s 192.168.1.13 -p icmp -j REJECT
案例4:扩展匹配
#-m icmp
[root@localhost ~]# iptables -F
[root@localhost ~]# iptables -t filter -I INPUT -p icmp -m icmp --icmp-type echo-reply
-j ACCEPT #允许ping回应
[root@localhost ~]# iptables -A INPUT -j REJECT
#-m iprange
[root@localhost ~]# iptables -t filter -I INPUT -m iprange --src-range 192.168.2.10- 192.168.2.100 -j REJECT
#-m multiport
[root@localhost ~]# iptables -t filter -I INPUT -p tcp -m multiport --dports 20,21,22,25,80,110 -j ACCEPT
#-m comment 对规则进行备注说明
[root@localhost ~]# iptables -A INPUT -s 192.168.2.250 -m comment --comment "cloud host" -j REJECT
案例5:扩展动作
#-j LOG 记录至日志中
[root@localhost ~]# grep 'kern.*' /etc/rsyslog.conf kern.* /var/log/kernel.log
[root@localhost ~]# systemctl restart rsyslog [root@localhost ~]# iptables -j LOG -h
[root@localhost ~]# iptables -t filter -A INPUT -p tcp --syn --dport 22 -j LOG --log- prefix " localhost_ssh "
#下面的命令不能让其它主机登陆防火墙的22端口的
[root@localhost ~]# iptables -t filter -A INPUT -p tcp --syn --dport 22 -j ACCEPT [root@localhost ~]# iptables -t filter -A INPUT -j REJECT
#保存当前规则到配置文件
[root@hd2 ~]# iptables-save >/etc/sysconfig/iptables
#从配置文件重新加载规则
[root@hd2 ~]# iptables-restore
iptables nat表应用案例
nat表作用 : 导流
nat表作用位置 :
KVM或OpenStack中虚拟机或云主机与外部通信
Docker管理的容器与外部通信
nat表规则动作所对应的链 :
SNAT 源 地 址 转 换 应 用 于 出 口 POSTROUTING
MASQUERADE 源地址转换 应用于出口POSTROUTING
DNAT 目 标 地 址 转 换 应 用 于 进 口 PREROUTING
REDIRECT 端口重定向 应用于进口PREROUTING
开启路由转发功能
[root@localhost ~]# sysctl -a | grep ip_forward net.ipv4.ip_forward = 1
[root@localhost ~]# cat /proc/sys/net/ipv4/ip_forward
#以上为开启
#以下为关闭
[root@localhost ~]# echo 0 > /proc/sys/net/ipv4/ip_forward
[root@localhost ~]# cat /proc/sys/net/ipv4/ip_forward
SNAT,MASQUERAED 源地址转换案例
案例1:实现内网主机上网功能
实验拓扑
配置命令(192.168.1.11)
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.1.11
PREFIX=24
GATEWAY=192.168.1.12 #网关是firewall主机ens33接口ip
firewall主机(192.168.1.12)配置
需要添加一块网卡(ens37)
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.1.12
PREFIX=24
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens37
TYPE=Ethernet
BOOTPROTO=static
NAME=ens37
DEVICE=ens37
ONBOOT=yes
IPADDR=192.168.3.12
PREFIX=24
开启防火墙的路由转发功能
#开启路由转发功能
[root@localhost ~]# cat /etc/sysctl.conf
net.ipv4.ip_forward = 1
[root@localhost ~]# sysctl -p
net.ipv4.ip_forward = 1
配置防火墙的snat地址转换
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ens37 -j SNAT --to-source 192.168.3.12
或
[root@localhost ~]# iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ens37 -j MASQUERADE
在192.168.3.13,请先安装httpd服务,便于验证结果
[root@localhost ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.3.13
PREFIX=24
192.168.1.11主机结果验证
DNAT 目标地址转换(端口映射)案例
案例1:实现局域网内发布服务器 (在前面实验的基础上)
在防火墙上配置dnat(建议:内网主机能访问外部主机即先做dnat)
[root@localhost ~]# iptables -t nat -A PREROUTING -d 192.168.3.12 -p tcp --dport 80
-j DNAT --to-destination 192.168.1.11
[root@localhost ~]# iptables -t nat –nL
补充:
[root@localhost ~]# iptables -F
[root@localhost ~]# iptables -t nat -A PREROUTING -d 192.168.3.12 -p tcp --dport 80 -j DNAT --to 192.168.1.11:80
[root@localhost ~]# iptables -t nat -A PREROUTING -d 192.168.3.12 -p tcp --dport 2222 - j DNAT --to 192.168.1.11:22
[root@localhost ~]# iptables -t nat -A PREROUTING -d 192.168.3.12 -p tcp --dport 8080 - j DNAT --to 192.168.1.11:8080
思考:如果有两台内网服务器需要提供80/tcp服务,如何映射?
[root@localhost ~]# iptables -t nat -A PREROUTING -d 192.168.3.12 -p tcp --dport 80 -j
DNAT --to 192.168.1.11:80
[root@localhost ~]# iptables -t nat -A PREROUTING -d 192.168.3.10 -p tcp --dport 80 -j
DNAT --to 192.168.1.10:80