基于iptables实现nat虚拟机与局域网安全隔离方案

前言

因本地搭建了个Centos服务器,与公网映射作为测试环境。考虑到安全性,采用KVM虚拟化技术在装个Centos虚拟机。以防测试环境不幸沦陷,危及物理主机。因为物理主机所在局域网下也会部署其他机器。故还要保证网络的安全性隔离。所有思索和调研决定采用iptables防火墙强实现。笔者主要思路和步骤记录如下,需要的读者自取。

注意:因iptables的操作要求对路由规则理解程度要高,操作失误可能会导致主机连不上。请结合实际情况谨慎操作,防止踩坑,这也分享此篇文章的初衷所在。笔者也是进行多次尝试和调整。添加规则顺序不能有错,建议执行后先查看规则在往下添加。

主要网络信息如下

本地局域网:192.168.2.0/24
宿主机ip: 192.168.2.209
宿主机与kvm虚拟机nat网络:192.168.122.0/24
宿主机nat ip:192.168.122.1
虚拟机使用nat方式通过宿主机进行转发与外部网络连接。

网络隔绝安全要求

虚拟机使用nat方式借助宿主机192.168.122.1访问网络,但要求禁止虚拟机访问宿主机其他网络。禁止虚拟机访问本地192.168.2.0/24局域网。同时要保证虚拟机可访问互联网。

iptables规则设置

清除初始化规则

清除规则和计数器(首次使用)

sudo iptables -F
sudo iptables -X
sudo iptables -Z

设置转发流量

访问非直连网络都是通过转发流量进行,禁止访问局域网也是通过该部分实现

# 按行号查看
iptables -L FORWARD --line-number

# 拒接所有局域网请求
sudo iptables -A FORWARD -s 192.168.122.0/24 -d 192.168.2.0/24 -j DROP

设置直连流量

禁止直连,本例子使用 32000作为映射端口 故保留

iptables -L INPUT --line-numbers

# 允许本地局域网接入 否则局域网将无法连接机器
sudo iptables -A INPUT -s 192.168.2.0/24 -j ACCEPT
# 允许虚拟机网络连接32000端口
sudo iptables -A INPUT -p tcp -s 192.168.122.0/24 --dport 32000 -j ACCEPT
# 拒绝所有虚拟网连接本机网络(前面的除外,第二天条规则匹配到已经允许通过)
sudo iptables -I INPUT -s 192.168.122.0/24 -d 192.168.122.1 -j DROP
# 拒绝所有虚拟机网络直连本地局域网
sudo iptables -A INPUT -s 192.168.122.0/24 -d 192.168.2.0/24 -j DROP

最后到达效果

1.虚拟机网络192.168.122.0/24 无法连接局域网192.168.2.0/24内网络(网关除外192.168.2.1)
2.虚拟机网络192.168.122.0/24 无法连接宿主机网络192.168.122.1(32000除外)
3.虚拟机网络192.168.122.0/24 可以借助192.168.122.1连接外网

最后规则信息

root# iptables -L FORWARD --line-numbers

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         
2    DROP       all  --  192.168.122.0/24     192.168.2.0/24

root# iptables -L INPUT --line-numbers

num  target     prot opt source               destination         
1    ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
2    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
3    ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootps
4    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:bootps
5    ACCEPT     all  --  192.168.2.0/24       anywhere            
6    ACCEPT     tcp  --  192.168.122.0/24     anywhere             tcp dpt:32000
7    DROP       all  --  192.168.122.0/24     localhost.localdomain
8    DROP       all  --  192.168.122.0/24     192.168.2.0/24

保存规则信息

确保连接正常后,需要保存规则,重启后依旧生效

iptables-save > /etc/sysconfig/iptables

## 配置服务重启加载
iptables-restore < /etc/sysconfig/iptables

其他常用命令

# 查看FORWARD 规则
iptables -nvL FORWARD

#删除规则
sudo iptables -D FORWARD -s 192.168.122.0/24 -d 192.168.2.254 -j ACCEPT
# 按行号删除规则
# 规则链的顺序非常重要,会按照规则进行检查,满足就会执行 
iptables -D FORWARD 3

#插入规则
sudo iptables -I FORWARD 3 -s 192.168.122.0/24 -d 192.168.2.254 -j ACCEPT
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值