环境如下图所示, 网关服务器和网站服务器都采用 CentOS 7 操作系统, 网关服务器安装 3 块千兆网卡, 分别连接 Internet, 企业内网, 网站服务器.
网关服务器连接互联网卡 ens33 配置为公网 IP 地址, 分配到 firewall 的 external 区域; 连接内网网卡 ens37 地址为 192.168.1.1, 分配到 firewall 的 trusted 区域; 连接服务器网卡 ens38 地址为 192.168.2.1, 分配到 firewall 的 DMZ 区域.
网站服务器和网关服务器都通过 SSH 来远程管理, 为了安全, 将 SSH 默认端口改为 2234.
网站服务器开启 https, 过滤未加密的 http 流量.
网站服务器拒绝 ping, 网关服务器拒绝来自互联网上的 ping.
内网用户需要通过网关服务器共享上网.
互联网用户需要访问网站服务器.
一, 开始基本的环境配置:
1, 在网关服务器上配置网卡地址:
- [[email protected] network-scripts]# ip addr #查看已配置完成的 IP 地址信息
- 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 1000
- link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
- .NET 127.0.0.1/8 scope host lo
- valid_lft forever preferred_lft forever
- inet6 ::1/128 scope host
- valid_lft forever preferred_lft forever
- 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP 1000
- link/ether 00:0c:29:9a:09:98 brd ff:ff:ff:ff:ff:ff
- .NET 100.1.1.10/24 brd 100.1.1.255 scope global noprefixroute ens33
- valid_lft forever preferred_lft forever
- inet6 fe80::2695:e1d7:cfa2:b427/64 scope link noprefixroute
- valid_lft forever preferred_lft forever
- 3: ens37: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP 1000
- link/ether 00:0c:29:9a:09:a2 brd ff:ff:ff:ff:ff:ff
- .NET 192.168.1.1/24 brd 192.168.1.255 scope global noprefixroute ens37
- valid_lft forever preferred_lft forever
- inet6 fe80::ac5f:6d92:f29a:6852/64 scope link noprefixroute
- valid_lft forever preferred_lft forever
- 4: ens38: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP 1000
- link/ether 00:0c:29:9a:09:ac brd ff:ff:ff:ff:ff:ff
- .NET 192.168.2.1/24 brd 192.168.2.255 scope global noprefixroute ens38
- valid_lft forever preferred_lft forever
- inet6 fe80::e21e:7093:d418:a0a3/64 scope link noprefixroute
- valid_lft forever preferred_lft forever
2, 开启网关服务器的路由转发功能.
- [email protected] network-scripts]# VIM /etc/sysctl.conf
- ...................
- net.ipv4.ip_forward = 1
- [[email protected] network-scripts]# sysctl -p
- net.ipv4.ip_forward = 1
3, 配置 web 服务器的网卡地址.
- [[email protected] ~]# ip addr #查看已配置完成的 IP 地址信息
- 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN 1000
- link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
- .NET 127.0.0.1/8 scope host lo
- valid_lft forever preferred_lft forever
- inet6 ::1/128 scope host
- valid_lft forever preferred_lft forever
- 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 1000
- link/ether 00:0c:29:77:2c:03 brd ff:ff:ff:ff:ff:ff
- .NET 192.168.2.10/24 brd 192.168.2.255 scope global noprefixroute ens33
- valid_lft forever preferred_lft forever
- inet6 fe80::95f8:eeb7:2ed2:d13c/64 scope link noprefixroute
- valid_lft forever preferred_lft forever
- [[email protected] ~]# route -n #查看网关信息
- Kernel IP routing table
- Destination Gateway Genmask Flags Metric Ref Use Iface
- 0.0.0.0 192.168.2.1 0.0.0.0 UG 100 0 0 ens33
- .............................
二, 网站服务器环境搭建:
- [[email protected] ~]# systemctl start firewalld #启动防火墙
- [[email protected] ~]# yum -y install httpd mod_ssl #安装 httpd 和 mod_ssl
- [[email protected] ~]# systemctl start httpd #启动 httpd 服务
- [[email protected] ~]# systemctl enable httpd #设置为开机自启动
- [[email protected] ~]# VIM /var/www/html/index.HTML #新建网站测试首页
- <h1>this is intranet Web test </h1>
- [[email protected] ~]# VIM /etc/SSH/sshd_config #更改 SSH 的侦听端口 (需关闭 SELinux):
- ................
- Port 2234
- ................
- [[email protected] ~]# systemctl restart sshd
三, 在网站服务器上配置 firewalld 防火墙:
1, 设置默认区域为 dmz 区域:
- [[email protected] ~]# firewall-cmd --set-default-zone=dmz
- success
2, 为 dmz 区域打开 https 服务并添加 tcp 的 2344 端口:
- [[email protected] ~]# firewall-cmd --zone=dmz --add-service=https --permanent
- success
- [[email protected] ~]# firewall-cmd --zone=dmz --add-port=2234/tcp --permanent
- success
3, 禁止 ping:
- [[email protected] ~]# firewall-cmd --add-icmp-block=echo-request --zone=dmz --permanent
- success
4, 因为已经更改了预定义 SSH 服务的默认端口, 所以将预定义 SSH 服务移除:
- [[email protected] ~]# firewall-cmd --zone=dmz --remove-service=SSH --permanent
- success
5, 重新加载 firewalld 配置, 并查看之前的配置:
- [[email protected] ~]# firewall-cmd --reload
- success
- [[email protected] ~]# firewall-cmd --list-all
- dmz (active)
- target: default
- icmp-block-inversion: no
- interfaces: ens33
- sources:
- services: https
- ports: 2234/tcp
- protocols:
- masquerade: no
- forward-ports:
- source-ports:
- icmp-blocks: echo-request
- rich rules:
四, 在网关服务器上配置 firewalld 防火墙:
1, 将网卡添加至指定区域:
- [[email protected] /]# systemctl start firewalld #启用防火墙
- [[email protected] /]# firewall-cmd --set-default-zone=external #设置默认区域为 external
- success
- [[email protected] /]# firewall-cmd --change-interface=ens37 --zone=trusted #将 ens37 添加至 trusted 区域
- The interface is under control of NetworkManager, setting zone to 'trusted'.
- success
- [[email protected] /]# firewall-cmd --change-interface=ens38 --zone=dmz #将 ens38 添加至 dmz 区域
- The interface is under control of NetworkManager, setting zone to 'dmz'.
- success
2, 查看配置, 并将配置保存到文件中, 成为永久配置:
- [[email protected] /]# firewall-cmd --get-active-zones
- dmz
- interfaces: ens38
- external
- interfaces: ens33
- trusted
- interfaces: ens37
- [[email protected] /]# firewall-cmd --runtime-to-permanent #将 当前配置保存到文件中
- success
3, 在企业内网测试机上访问网站服务器, 可以成功访问:
4, 更改 SSH 的侦听端口, 并重启服务 (需关闭 SELinux):
- [[email protected] ~]# VIM /etc/SSH/sshd_config
- ................
- Port 2234
- ................
- [[email protected] ~]# systemctl restart sshd
5, 配置 external 区域添加 tcp 的 2234 端口:
- [[email protected] /]# firewall-cmd --zone=external --add-port=2234/tcp --permanent
- success
6, 配置 external 区域移除 SSH 服务:
- [[email protected] /]# firewall-cmd --zone=external --remove-service=SSH --permanent
- success
7, 配置 external 区域禁止 ping:
- [[email protected] /]# firewall-cmd --zone=external --add-icmp-block=echo-request --permanent
- success
8, 重新加载防火墙配置:
- [[email protected] /]# firewall-cmd --reload
- success
以下开始测试 SSH 连接:
9, 在互联网测试机通过 SSH 连接网关服务器的外部接口地址的 2234 端口:
- [[email protected] ~]# SSH -p 2234 100.1.1.10
- [email protected]'s password:
- Last login: Tue Jun 18 05:34:03 2019 from 100.1.1.20
- [[email protected] ~]#
10, 使用内网测试机 SH 登录 Web 网站服务器的 2234 端口:
- [[email protected] /]# SSH -p 2234 192.168.2.10
- [email protected]'s password:
- Last login: Tue Jun 18 05:40:25 2019 from gateway
- [[email protected] ~]#
五, 配置 IP 伪装与端口转发:
1, 在公网测试机上搭建 Web 服务, 用于测试:
- [[email protected] ~]# yum -y install httpd
- [[email protected] ~]# VIM /var/www/HTML/index.HTML
- <h1> www.baidu.com</h1>
- [[email protected] ~]# systemctl enable httpd
- [[email protected] ~]# systemctl start httpd
2, 在内部测试机和 dmz 的网站服务区都可以访问外网的网站 (若访问不了, 则可能是公网测试机的防火墙配置问题, 可先将公网测试机的防火墙关闭, 或放行相关服务的流量即可):
3, 查看网关服务器的 external 区域是否开启了地址伪装:
- [[email protected] ~]# firewall-cmd --list-all --zone=external
- external
- target: default
- icmp-block-inversion: no
- interfaces:
- sources:
- services: SSH
- ports:
- protocols:
- masquerade: yes #地址伪装已启用
- forward-ports:
- sourceports:
- icmp-blocks:
- rich rules:
4, 只为源地址 192.168.1.0/24 网段的地址开启地址 IP 伪装.
在网关服务器上关闭 external 默认的地址伪装, 添加富规则, 要求 external 区域内, 源地址为 192.168.1.0/24 网段的地址开启地址 IP 伪装:
- [[email protected] ~]# firewall-cmd --remove-masquerade --zone=external
- success
- [[email protected] ~]# firewall-cmd --zone=external --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 masquerade'
- success
在 dmz 区域的网站服务器上测试, 发现无法访问外网网站, 但是内网测试机可以:
[[email protected] ~]# curl http://100.1.1.20
curl: (7) Failed connect to 100.1.1.20:80; 没有到主机的路由
5, 配置端口转发实现互联网用户可以访问内部 Web 服务器.
1在网关服务器下做如下配置:
- [[email protected] ~]# firewall-cmd --zone=external --add-forward-port=port=443:proto=tcp:toaddr=192.168.2.10
- success
2在互联网测试机上访问内网的 Web 服务器成功, 如下:
六, 最后来一个使用富规则实现端口转发:
上述配置完成后, 若现在公司申请了一个新的公网 ip 地址 100.1.1.15, 那么就需要重新做端口转发了:
1, 将新申请的公网地址 100.1.1.15 配置在网关服务器的外网接口 ens33 上, 作为第二个 IP 地址:
- [[email protected] ~]# VIM /etc/sysconfig/network-scripts/ifcfg-ens33
- TYPE=Ethernet
- PROXY_METHOD=none
- BROWSER_ONLY=no
- BOOTPROTO=static
- IPADDR0=100.1.1.10 #从这行配置项开始, 到下面第四行, 属于配置 IP 地址
- PREFIX0=24
- IPADDR1=100.1.1.15
- PREFIX1=24 #只需改动以上四行即可
- DEFROUTE=yes
- IPV4_FAILURE_FATAL=no
- IPV6INIT=yes
- IPV6_AUTOCONF=yes
- IPV6_DEFROUTE=yes
- IPV6_FAILURE_FATAL=no
- IPV6_ADDR_GEN_MODE=stable-privacy
- NAME=ens33
- DEVICE=ens33
- ONBOOT=yes
- ZONE=external
- [[email protected] ~]# ifdown ens33 && ifup ens33 #重启网卡, 使配置生效
- [[email protected] ~]# ip add #查看 IP 地址是否配置成功
- 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state default qlen 1000
- link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
- .NET 127.0.0.1/8 scope host lo
- valid_lft forever preferred_lft forever
- inet6 ::1/128 scope host
- valid_lft forever preferred_lft forever
- 2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc UP group default qlen 1000
- link/ether 00:0c:29:9a:09:98 brd ff:ff:ff:ff:ff:ff
- .NET 100.1.1.10/24 brd 100.1.1.255 scope global noprefixroute ens33
- valid_lft forever preferred_lft forever
- .NET 100.1.1.15/24 brd 100.1.1.255 scope global secondary noprefixroute ens33
- valid_lft forever preferred_lft forever
- inet6 fe80::2695:e1d7:cfa2:b427/64 scope link noprefixroute
- valid_lft forever preferred_lft forever
2, 使用富规则配置端口转发:
- [[email protected] ~]# firewall-cmd --zone=external --add-rich-rule='rule family=ipv4 destination address=100.1.1.15/32 forward-port port=443 protocol=tcp to-addr=192.168.2.10'
- success
3, 在互联网测试机上访问测试结果:
齐活.....................
来源: http://www.bubuko.com/infodetail-3095976.html