前言
因本地搭建了个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