linux之iptables 网络型防火墙(二)
iptables 网络型防火墙
将Linux主机扮演为网络防火墙(需要开启网络转发)
1.网络转发forward 准备三台虚拟机 内网10.10 网关(防火墙)10.11 20.11 外网20.20
1.在网关路由器 (转发),检查是否安装ipatbles 解覆盖
rpm -qa | grep iptables
yum -y install iptables iptables-services安装
从firewall转为iptables:
systemctl unmask iptables---解覆盖,即显现iptables
systemctl mask firewalld ---覆盖firewalld
systemctl stop firewalld
systemctl disable firewalld
systemctl restart iptables
systemctl enable iptables
或者写一个bash vim iptables 把这六条写进去即可
bash iptables 执行
2.网关路由添加网卡,开启路由转发 三台机器设置ip地址,网关 iptables -F 清空
在虚拟机增加网络适配器
cp ifcfg-ens33 ifcfg-ens38 网关IP 10.11 20.11
vim ifcfg-ens38 修改四项name uuid ip gw
开启路由转发:
echo "1" > /proc/sys/net/ipv4/ip_forward
sysctl -p
或者开启永久转发
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
iptables -F 清空防火墙
并设置客户端192.168.10.10的ip地址以及网关, 20.10httpd服务器同理
增加 GATEWAY=192.168.10.11 GATEWAY=192.168.20.21
3.在 外网设置ip20.10 安装httpd,设置网页首页,启动httpd服务
vim /etc/sysconfig/network-scripts/ifcfg-ens33 --设置ip
yum -y install httpd
vim /var/www/html/index.html
cat index.html
4.在 网关 执行iptables -F,在内网192.168.10.10上查看网页
curl 192.168.20.10 可查看到20.10首页
5.在 网关 设置FORWARD默认策略为 DROP拒绝, 也不可远程连接
iptables -P FORWARD DROP 拒绝路由转发
在10.10上curl 192.168.20.20 不可查看到首页
6.在 网关设置规则FORDWARD转发
iptables -I FORWARD -s 192.168.10.10 -d 192.168.20.20 -p tcp --dport 80 -j ACCEPT
filter表 forward链第一行插入 来源10.10 目的地址20.20 tcp协议 80端口 通过
iptables -A FORWARD -s 192.168.20.20 -d 192.168.10.10 -p tcp --sport 80 -j ACCEPT
在filter表 forward链最后加入 来源10.20 目的地址20.10 tcp协议 80端口 通过
7.在192.168.10.10内网上 curl 192.168.20.10查看外网的网页
curl 192.168.20.10 查看外网分享的网页
2.)SNAT 源地址转换 应用环境 工作原理示意图
SNAT策略的典型应用环境
局域网主机共享单个公网IP地址接入Internet
SNAT策略的原理
源地址转换,Source Network Address Translation
修改数据包的源地址
过程
1.局域网用户10.10主机发送数据包 源地址10.10 目的地址22.33.44.55
2.经过网关 网关通过目的地址ip辨别路由 开始修改源地址改为网关外网的IP地址10.11
3.网关做映射 记录信息 如果有信息发给10.11 那么直接发给用户10.10 因为SNAT做了两者的对应关系 经过路由防火墙直接发送给内网客户端
4.源地址已改 为网关对外网的ip10.11 目标地址为外网web服务器 发送成功
5.当外网返回信息给内网客户端 会依据之前对应关系(路由映射)直接发给内网客户端
1.)确认三台主机IP 内网默认网关 网关路由器开启路由转发功能
内网IP 192.168.10.10 下一跳网关192.168.10.11
网关路由器IP 192.168.10.11 192.168.20.21
外网 ip 192.168.20.10 下一跳网关 192.168.20.11
保留内网的GW去掉外网的ens33 中GW网关
内网10.10 外网20.10
开启永久转发
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
2.)网关服务器设置POSTROUTING选择后处理 源地址转换 (外网ip固定)
iptables -F 清空
iptables -t nat -I POSTROUTING -s 192.168.10.0/24 -o ens39 -j SNAT --to-source 192.168.20.11
nat 表的 postrouting链 数据包来源内网网段10.0 通过外网ens39网卡ip出去 那么源地址 转换为 20.11 可写多个网段 空格隔开
来字10.0网段的数据包 到任何地方 把原地址改为20.11
内网检测
curl 192.168.20.10
查看日志
cd /var/log/httpd/
cat access_log --查看
小结:
第一个为 通过 ens37网卡出去 源地址 都伪装 218.29.30.31
第二个为 通过 ens37网卡出去 源地址 都改为 218.29.30.31
3.)地址伪装MASQUERADE 源地址转换 (外网ip不固定)
MASQUERADE —— 地址伪装
适用于外网IP地址非固定的情况
对于ADSL拨号连接,接口通常为 ppp0、ppp1
将SNAT规则改为MASQUERADE即可
Iptables -F 清空 或删除
iptables -t nat -D POSTROUTING 1 --删除nat表 postrouting 第一条
iptables -t nat -D POSTROUTING 2
iptables -t nat -I POSTROUTING -s 192.168.10.0/24 -o ens39 -j MASQUERADE
nat表 postrouting转发链 数据包来自10.0网段 通过外网ens39网卡ip出去 那么源地址 伪装为 20.11
3.)DNAT PREROUTING路由选择之前 地址转换 应用环境 工作原理示意图
DNAT策略的典型应用环境
在Internet中发布位于 企业局域网内的服务
DNAT策略的原理
目标地址转换,Destination Network Address Translation
修改数据包的目标地址
1.外网的客户机访问内网 会经过网关防火墙, 在网关上设置防火墙规则
2.网关 在路由判断之前 之前目的地址20.11 然后修改目标地址为10.10
3.DNAT也做记录信息 有了对应关系
4.内网回复信息 依据对应关系 封装成报文 直接把数据发出去
(外网客户机访问内网,只能看到外网路由端口)
前提条件内网能够访问外网 内外网设置ip 并指向网关 网关服务端开启路由转发
内网IP 192.168.10.10 下一跳网关192.168.10.11
网关路由器IP 192.168.10.11 192.168.20.21
外网 ip 192.168.20.10 下一跳网关 192.168.20.11
内网指向网关外网指向网关
内网10.10 外网20.10
开启永久转发
vim /etc/sysctl.conf
net.ipv4.ip_forward = 1
sysctl -p
2.)内网安装httpd 写一个测试网页 外网curl 查看内网
yum -y install httpd
vim /var/www/html/index.html --在网页根路径下写测试网页
curl 192.168.10.10
3.)网关 服务器设置 目标地址转换 端口
iptables -F 清空
iptables -t nat -A PREROUTING -i ens39 -d 192.168.20.11 -p tcp --dport 80 -j DNAT --to-destination 192.168.10.10
nat表 PRErouting路由转发之前 连接外网的ip网卡39 目的地址20.11 tcp协议 80端口 -jDNAT目标地址转换 转换的内网IP地址10.10
iptables -t snat -A PREROUTING -i ens39 -d 192.168.20.11 -p tcp --dport 808 -j DNAT --to-destination 192.168.10.10:80
nat表 PRErouting路由转发之前 连接外网的ip网卡39 目的地址20.11 tcp协议 访问808端口(不存在) -jDNAT目标地址转换 则转换为访问内网IP地址10.10:80 (访问10.10的80端口)
4.)外网访问内网测试
curl 192.168.20.11
4.TCP Wrappers
TCP Wrappers概述
1.)保护机制的实现方式
●方式1 :通过tcpd主程序对其他服务程序进行包装
●方式2 :由其他服务程序调用libwrap.so.*链接库
2.)Idd命令, 确定是否支持模块libwrap.so, 只有支持的才能通过/etc/hosts.allow deny 两个文件进行访问控制
●例如: Idd $(which vsftpd) 代表 把这个括号里命令执行结果放到ldd
which sshd --查看sshd 服务的主程序
ldd $(which sshd) --查看sshd是否支持模块libwrap.so,
ldd $(which sshd) | grep wrap --查看依赖的wrap函数库
3.)设置访问策略应用 控制策略的配置文件/etc/hosts.allow 应用顺序 优先级
1.配置文件位置
/etc/hosts.allow --允许
/etc/hosts.deny --拒绝
2.策略的应用顺序
●先检查hosts allow, 找到匹配则允许访问
否则再检查hosts.deny,找到则拒绝访问
若两个文件中均无匹配策略,则默认允许访问
若两个文件中均有匹配策略,则默认允许访问
3.设置访问控制策略
策略格式服务列表:客户机地址列表
服务列表
多个服务以逗号分隔,ALL表示所有服务
客户机地址列表:
多个地址以逗号分隔,ALL表示所有地址
允许使用通配符?和*
网段地址,如192.168.4.或者192.168.4.0/255.255.255.0
区域地址,如.ujiuye.com.
策略应用示例
仅允许从以下地址访问sshd服务
主机61.63.65.67
网段192.168.2.0/24
禁止其他所有地址访问受保护的服务
vim /etc/hosts.allow --允许访问的服务 和ip
vim /etc/hosts.deny --禁止访问 的访问和 ip
尽允许20.11可以访问 sshd服务
所有人都不允许访问sshd服务 除了allow表的ip外