第二章firewalld防火墙(一)
linux防火墙基础
防火墙技术:
1.包过滤 packet filtering
2.应用代理 application proxy
3.状态检测 stateful inspection
防火墙的作用和特点:
1 作用:增强安全性
对传输的数据包检查过滤
2 特点:
工作的应用层对数据包过滤
防火墙内访问外策略宽松
防护墙外访问内策略严格
防火墙的类型:
1 硬件防火墙
稳定性强 可靠性强 处理数据的速度快 成本高
2 软件防火墙
稳定性差 可靠性 处理数据的速度慢 成本低
防护墙的功能分类:
1 应用代理防火墙
对应用层的程序进行监控
限制应用访问特定的数据或网络
2 网络防火墙
包过滤
3 状态化防火墙
硬件防火墙都是状态化防火墙
根据链接表conn做转发
一、Linux 包过滤防火墙 概述
1.netfilter
位于Linux内核中的包过滤功能体系
称为Linux防火墙的“内核态”
2.firewalld
CentOS7默认的管理防火墙规则的工具
称为Linux防火墙的“用户态”
—— 上述2种称呼都可以表示Linux防火墙
二、包过滤的工作层次
1.主要是网络层,针对IP数据包—检查源ip
2.体现在对包内的IP地址、端口等信息的处理上
linux服务器主要用于对互联网提供某种服务或做为内部局域网的网关服务器
三、firewalld简介
防火墙是 Linux 系统的主要的安全工具,可以提供基本的安全防护,在 Linux 历史上已经使用过的防火墙工具包括:ipfwadm、ipchains、iptables。在 Firewalld 中新引入了区域(Zones)这个概念。
firewalld 简介
firewalld 提供了支持网络 / 防火墙区域 (zone) 定义网络链接以及接口安全等级的动态防火墙管理工具。它支持 IPv4, IPv6 防火墙设置以及以太网桥接,并且拥有运行时配置和永久配置选项。它也支持允许服务或者应用程序直接添加防火墙规则的接口。以前的 iptables 防火墙是静态的,每次修改都要求防火墙完全重启。这个过程包括内核 netfilter 防火墙模块的卸载和新配置所需模块的装载等。而模块的卸载将会破坏状态防火墙和确立的连接。现在 firewalld 可以动态管理防火墙,firewalld 把 Netfilter 的过滤功能于一身
1.支持网络区域所定义的网络链接以及接口安全等级的动态防火墙管理工具
2.支持IPv4、IPv6防火墙设置以及以太网桥
3.支持服务或应用程序直接添加防火墙规则接口
4.拥有两种配置模式
1)运行时配置—服务器重启后失效
2)永久配置----服务器关机、重启后生效
4.网络区域
firewalld预定义的网络区域
trusted、public、work、home、internal、external、dmz、block、drop
默认情况就有一些有效的区域。由 firewalld 提供的区域按照从不信任到信任的顺序排序。
4.1丢弃区域(Drop Zone):如果使用丢弃区域,任何进入的数据包将被丢弃。这个类似与我们之前使用 iptables -j drop。使用丢弃规则意味着将不存在响应。
4.2阻塞区域(Block Zone):阻塞区域会拒绝进入的网络连接,返回 icmp-host-prohibited,只有服务器已经建立的连接会被通过即只允许由该系统初始化的网络连接。
4.3 公共区域(Public Zone):只接受那些被选中的连接,默认只允许 ssh 和 dhcpv6-client。这个 zone 默认的链接区域
4.4 外部区域(External Zone):这个区域相当于路由器的启用伪装(masquerading)选项。只有指定的连接会被接受,即 ssh,而其它的连接将被丢弃或者不被接受。
4.5 隔离区域(DMZ Zone):如果想要只允许给部分服务能被外部访问,可以在 DMZ 区域中定义。它也拥有只通过被选中连接的特性,即 ssh。
4.6 工作区域(Work Zone):在这个区域,我们只能定义内部网络。比如私有网络通信才被允许,只允许 ssh,ipp-client 和 dhcpv6-client。
4.7家庭区域(Home Zone):这个区域专门用于家庭环境。它同样只允许被选中的连接,即 ssh,ipp-client,mdns,samba-client 和 dhcpv6-client。
4.8内部区域(Internal Zone):这个区域和工作区域(Work Zone)类似,只有通过被选中的连接,和 home 区域一样。
4.9信任区域(Trusted Zone):信任区域允许所有网络通信通过。记住:因为 trusted 是最被信任的,即使没有设置任何的服务,那么也是被允许的,因为 trusted 是允许所有连接的
##以上是系统定义的所有的 zone,但是这些 zone 并不是都在使用。只有活跃的 zone 才有
实际操作意义。
5.Firewalld 的检查原则:
如果一个客户端访问服务器,服务器根据以下原则决定使用哪个 zone 的策略去匹配
5.1.如果一个客户端数据包的源 IP 地址匹配 zone 的 sources,那么该 zone 的规则就适用这个客户端;一个源只能属于一个 zone,不能同时属于多个 zone。
5.2.如果一个客户端数据包进入服务器的某一个接口(如 eth0)区配 zone 的 interfaces,则么该 zone 的规则就适用这个客户端;一个接口只能属于一个 zone,不能同时属于多个zone。
5.3.如果上述两个原则都不满足,那么默认的 zone 将被应用firewalld数据处理流程,检查数据来源的源地址,若源地址关联到特定的区域,则执行该区域所制定的规则;若源地址未关联到特定的区域,则使用传入网络接口的区域并执行该区域所制定的规则;若网络接口未关联到特定的区域,则使用默认区域并执行该区域所制定的规则
数据包处理原则:—检查源地址
1.匹配源地址所在区域
2.匹配入站接口所在区域
3.匹配默认区域
6、firewalld防火墙的配置方法
##firewall-config图形工具
##firewall-cmd命令行工具
##/etc/firewalld/中的配置文件
6.1 firewall-config图形工具
打开方式:应用程序—杂项—防火墙
主菜单:文件、选项、查看、帮助
配置:运行时 和 永久(服务重启生效)
1)“区域” 选项卡
“服务”子选项卡:哪些服务可信
“端口”子选项卡:允许访问的端口范围
“协议”子选项卡:可访问的协议
“源端口”子选项卡:额外的源端口或范围
“伪装”子选项卡:私有地址映射为公有ip
“端口转发”子选项卡:指定端口映射为其他端口(本机或其他主机)
“ICMP过滤器”子选项卡:设置具体的icmp类型
2)“服务”选项卡—只适用于永久模式
“模块” 子选项卡:设置网络过滤的辅助模块
“目标”子选项卡:如果指定了目的地址,服务则仅限于目的地址和类型。默认没有限制
–reload 把永久的规则添加到当前运行模式
–permanent 把一条规则保存为永久模式
–runtime–permanent 当前-——-> 永久
6.2 firewall-cmd命令
1)启动、停止、查看firewalld服务
55 systemctl start firewalld
56 systemctl stop firewalld
57 systemctl restart firewalld
58 systemctl reload firewalld
59 systemctl status firewalld
启动防火墙
[root@oracle ~]# systemctl start firewalld
开机自启动
[root@oracle ~]# systemctl enable firewalld
Created symlink from /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service to /usr/lib/systemd/system/firewalld.service.
Created symlink from /etc/systemd/system/multi-user.target.wants/firewalld.service to /usr/lib/systemd/system/firewalld.service.
查看运行状态
[root@oracle ~]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
Active: active (running) since 一 2018-10-01 10:16:28 CST; 8min ago
Docs: man:firewalld(1)
Main PID: 2950 (firewalld)
CGroup: /system.slice/firewalld.service
└─2950 /usr/bin/python -Es /usr/sbin/firewalld --nofo…
查看运行状态
[root@oracle ~]# firewall-cmd --state
running
获取预定义信息:可用的区域、可用的服务、可用的ICMP阻塞类型
可用的区域
[root@oracle ~]# firewall-cmd --get-zones
block dmz drop external home internal public trusted work
可用的服务
[root@oracle ~]# firewall-cmd --get-service
RH-Satellite-6 amanda-client amanda-k5-client bacula bacula-client bitcoin bitcoin-rpc bitcoin-testnet bitcoin-testnet-rpc ceph ceph-mon cfengine condor-collector ctdb dhcp dhcpv6 dhcpv6-client dns docker-registry dropbox-lansync elasticsearch freeipa-ldap freeipa-ldaps freeipa-replication freeipa-trust ftp ganglia-client ganglia-master high-availability http https imap imaps ipp ipp-client ipsec iscsi-target kadmin kerberos kibana klogin kpasswd kshell ldap ldaps libvirt libvirt-tls managesieve mdns mosh mountd ms-wbt mssql mysql nfs nrpe ntp openvpn ovirt-imageio ovirt-storageconsole ovirt-vmconsole pmcd pmproxy pmwebapi pmwebapis pop3 pop3s postgresql privoxy proxy-dhcp ptp pulseaudio puppetmaster quassel radius rpc-bind rsh rsyncd samba samba-client sane sip sips smtp smtp-submission smtps snmp snmptrap spideroak-lansync squid ssh synergy syslog syslog-tls telnet tftp tftp-client tinc tor-socks transmission-client vdsm vnc-server wbem-https xmpp-bosh xmpp-client xmpp-local xmpp-server
可用的ICMP阻塞类型
[root@oracle ~]# firewall-cmd --get-icmptypes
address-unreachable bad-header communication-prohibited destination-unreachable echo-reply echo-request fragmentation-needed host-precedence-violation host-prohibited host-redirect host-unknown host-unreachable ip-header-bad neighbour-advertisement neighbour-solicitation network-prohibited network-redirect network-unknown network-unreachable no-route packet-too-big parameter-problem port-unreachable precedence-cutoff protocol-unreachable redirect required-option-missing router-advertisement router-solicitation source-quench source-route-failed time-exceeded timestamp-reply timestamp-request tos-host-redirect tos-host-unreachable tos-network-redirect tos-network-unreachable ttl-zero-during-reassembly ttl-zero-during-transit unknown-header-type unknown-option
注释:
destination-unreachable 目的地址不可达
echo-reply 应答回应(pong)
parameter-problem 参数问题
redirect 重新定向
router-advertisement 路由器通告
router-solicitation 路由器征寻
source-quench 源端抑制
time-exceeded 超时
timestamp-reply 时间戳应答回应
timestamp-request 时间戳请求
危险命令:[立即生效]
拒绝所有包:firewall-cmd --panic-on
取消拒绝状态: firewall-cmd --panic-off
查看是否拒绝: firewall-cmd --query-panic
如果是远程的机器执行上面的规则会立刻断开网络连接,必须紧记不能随便执行。如果你只是虚拟机或者物理机器登陆就可以执行来调试。
如何清空防火墙规则
#如果防火墙配置了规则很多如果清空规则呢?firewalld默认没有命令来清空规则。但是我们可以通过编辑配置文件来清除规则。
/etc/firewalld/zones/ 此处为配置生效后保存的配置文件,一般建议修改前先备份。
此目录会显示已经配置的规则
[root@gateway-server ~]# ll /etc/firewalld/zones/
总用量 16
-rw-r–r-- 1 root root 331 10月 1 14:36 dmz.xml
-rw-r–r-- 1 root root 342 10月 1 14:34 external.xml
-rw-r–r--. 1 root root 315 9月 1 18:54 public.xml
-rw-r–r--. 1 root root 315 9月 1 18:54 public.xml.old
[root@gateway-server ~]# cd /etc/firewalld/zones/
[root@gateway-server zones]# vim dmz.xml
[root@gateway-server zones]# vim external.xml
[root@gateway-server zones]# vim public.xml
[root@gateway-server zones]# vim public.xml.old
[root@gateway-server zones]# cd
创建备份目录
[root@gateway-server ~]# mkdir /tmp/firewall.bak
[root@gateway-server ~]# mv /etc/firewalld/zones/* /tmp/firewall.bak/
[root@gateway-server ~]# firewall-cmd --set-default-zone=public
重启服务
[root@gateway-server ~]# systemctl restart firewalld
修改完重启服务或者重载服务。
!!最后修改相关网卡的配置文件(/etc/sysconfig/network-scripts/)
61 firewalld-cmd --get-zones
62 firewall-cmd --get-zones
63 firewall-cmd --get-service
64 firewall-cmd --get-service --zone=home
65 firewall-cmd --get-service --zones=home
66 firewall-cmd --zone=home --get-service
67 firewall-cmd --get-default-zone
68 firewall-cmd --set-default-zone=home
69 firewall-cmd --get-default-zone
70 firewall-cmd --get-active-zones
71 firewall-cmd --get-zone-of-interface=ens33
72 firewall-cmd --zone=work --change-interface=ens33
73 firewall-cmd --get-zone-of-interface=ens33
74 firewall-cmd --zone=work --remove–interface=ens33
75 firewall-cmd --zone=work --remove-interface=ens33
76 firewall-cmd --get-zone-of-interface=ens33
77 firewall-cmd --list-all-zones
78 firewall-cmd --list-all
79 firewall-cmd --list-all --zone=work
6.2 区域管理选项说明
–get-default-zone 显示网络连接或接口的默认区域
–set-default-zone=设置网络连接或接口的默认区域
–get-active-zones 显示已激活的所有区域
–get-zone-of-interface= 显示指定接口绑定的区域
–zone= --add-interface= 为指定接口绑定区域
–zone= --change-interface=
为指定的区域更改绑定的网络接口
–zone= --remove-interface=
为指定的区域删除绑定的网络接口
–list-all-zones 显示所有区域及其规则
[–zone=] --list-all 显示所有指定区域的所有规则
实例:
显示当前系统的默认区域
[root@oracle ~]# firewall-cmd --get-default-zone
public
显示默认区域的所有规则
[root@oracle ~]# firewall-cmd --list-all
public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
public (default, active) 表示 public 区域是默认区域(当接口启动时会自动默认),并且它是活动的,因为,它至少有一个接口或源分配给它。
interfaces: eno1 eno2 列出了这个区域上关联的接口。
sources: 列出了这个区域的源。现在这里什么都没有,但是,如果这里有内容,它们应该是这样的格式 xxx.xxx.xxx.xxx/xx。
services: dhcpv6-client ssh 列出了允许通过这个防火墙的服务。你可以通过运行 firewall-cmd --get-services得到一个防火墙预定义服务的详细列表。
ports: 列出了一个允许通过这个防火墙的目标端口。它是用于你需要去允许一个没有在 firewalld 中定义的服务的情况下。
masquerade: no 表示这个区域是否允许 IP 伪装。如果允许,它将允许 IP 转发,它可以让你的计算机作为一个路由器。
forward-ports: 列出转发的端口。
icmp-blocks: 阻塞的 icmp 流量的黑名单。
rich rules: 在一个区域中优先处理的高级配置。
default 是目标区域,它决定了与该区域匹配而没有由上面设置中显式处理的包的动作。
target的作用:
当一个区域处理它的源或接口上的一个包时,但是,没有处理该包的显式规则时,这时区域的目标target决定了该行为:
ACCEPT:通过这个包。
%%REJECT%%:拒绝这个包,并返回一个拒绝的回复。
DROP:丢弃这个包,不回复任何信息。
default:不做任何事情。该区域不再管它,把它踢到“楼上
显示网络接口ens33的对应区域
[root@oracle ~]# firewall-cmd --get-zone-of-interface=ens33
no zone
更改为internal区域
[root@oracle ~]# firewall-cmd --zone=internal --change-interface=ens33
success
查看此区域的接口列表
[root@oracle ~]# firewall-cmd --zone=internal --list-interfaces
ens33
查看接口所在区域
[root@oracle ~]# firewall-cmd --get-zone-of-interface=ens33
internal
显示所有激活区域
[root@oracle ~]# firewall-cmd --get-active-zones
public
interfaces: ens33
6.3 服务管理选项说明
##服务存放在/usr/lib/firewalld/services目录中,通过单个的xml配置文件来指定。
##xml文件:service-name.xml
[–zone=] --list-services 显示指定区域内允许访问的所有服务
[–zone=] --add-service=
为指定区域设置允许访问的某项服务
[–zone=] --remove-service=
删除指定区域已设置的允许访问的某项服务
[–zone=] --list-ports
显示指定区域内允许访问的所有端口号
[–zone=] --add-port=[-]/
为指定区域设置允许访问的某个/某段端口号(包括协议名)
[–zone=] --remove-port=[-]/
删除指定区域已设置的允许访问的端口号(包括协议名)
[–zone=] --list-icmp-blocks
显示指定区域内拒绝访问的所有ICMP类型
[–zone=] --add-icmp-block=
为指定区域设置拒绝访问的某项ICMP类型
[–zone=] --remove-icmp-block=
删除指定区域已设置的拒绝访问的某项ICMP类型,省略–zone=时表示对默认区域操作
实例:
显示默认区域允许访问的所有服务
[root@oracle ~]# firewall-cmd --list-services
You’re performing an operation over default zone (‘public’),
but your connections/interfaces are in zone ‘internal’ (see --get-active-zones)
You most likely need to use --zone=internal option.
ssh dhcpv6-client
设置默认区域允许访问http、https服务
[root@oracle ~]# firewall-cmd --add-service=http
[root@oracle ~]# firewall-cmd --add-service=https
[root@oracle ~]# firewall-cmd --list-services
ssh dhcpv6-client http https
设置internal区域允许访问的服务
允许访问mysql
[root@oracle ~]# firewall-cmd --zone=internal --add-service=mysql
success
不允许访问samba-client服务
[root@oracle ~]# firewall-cmd --zone=internal --remove-service=samba-client
success
显示internal区域允许访问的所有服务
[root@oracle ~]# firewall-cmd --zone=internal --list-services
ssh mdns dhcpv6-client mysql
6.4 端口管理
预定义的服务可使用服务名配置,同时其对应端口会自动打开;非预定义的服务只能手动指定端口
实例:
添加tcp443端口
[root@oracle ~]# firewall-cmd --zone=internal --add-port=443/tcp
禁止443端口访问
[root@oracle ~]# firewall-cmd --zone=internal --remove-port=443/tcp
6.5 两种配置模式
运行时模式(runtime mode):当前内存中运行。系统或防火墙服务重启、停止失效
永久模式(permanent mode):永久存储在配置文件中
firewall-cmd命令工具相关选项:
–reload 将永久配置应用为运行时配置
–permanent 设置永久性规则。服务重启或重新加载时生效
–runtime-to-permanent 将当前的运行时配置写入规则,成为永久性配置
linux防火墙配置应用
实验环境
1.linux-1 网关服务器
网卡1 ens37 vmnet3 internet 100.1.1.10/24
网卡2 ens33 vmnet1 企业内网 192.168.1.1/24
网卡3 ens36 vmnet2 网站服务器区 192.168.2.1/24
基础配置:
查看活动的网络接口,为ens33,36,37
[root@localhost ~]# ip a
[root@localhost ~]# cd /etc/sysconfig/network-scripts/
[root@localhost network-scripts]# ls
复制配置文件给ens36,37
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens36
[root@localhost network-scripts]# cp ifcfg-ens33 ifcfg-ens37
编辑网卡:
[root@localhost network-scripts]# vim ifcfg-ens33
TYPE=“Ethernet”
PROXY_METHOD=“none”
BROWSER_ONLY=“no”
BOOTPROTO=“static”
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”
IPV6_PRIVACY=“no”
IPADDR=100.1.1.10
NETMASK=255.255.255.0
GATEWAY=
DNS1=
DNS2=
[root@localhost network-scripts]# vim ifcfg-ens36
TYPE=“Ethernet”
PROXY_METHOD=“none”
BROWSER_ONLY=“no”
BOOTPROTO=“static”
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=“ens36”
DEVICE=“ens36”
ONBOOT=“yes”
IPV6_PRIVACY=“no”
IPADDR=192.168.1.1
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=
DNS2=
[root@localhost network-scripts]# vim ifcfg-ens37
TYPE=“Ethernet”
PROXY_METHOD=“none”
BROWSER_ONLY=“no”
BOOTPROTO=“static”
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=“ens37”
DEVICE=“ens37”
ONBOOT=“yes”
IPV6_PRIVACY=“no”
IPADDR=192.168.2.1
NETMASK=255.255.255.0
GATEWAY=192.168.2.1
DNS1=
DNS2=
重启网络服务
[root@localhost network-scripts]# systemctl restart network
[root@localhost network-scripts]# ip a
[root@localhost network-scripts]# cd
查看selinux、防火墙当前状态
已禁用
[root@localhost ~]# getenforce
Disabled
已禁用
[root@localhost ~]# firewall-cmd --state
- linux-2 内网网站服务器
ens33 vmnet3 192.168.2.10/24 网关:192.168.2.1
[root@localhost ~]# getenforce
[root@localhost ~]# systemctl status firewalld
[root@localhost ~]# vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=“Ethernet”
PROXY_METHOD=“none”
BROWSER_ONLY=“no”
BOOTPROTO=“static”
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”
IPV6_PRIVACY=“no”
IPADDR=192.168.2.10
NETMASK=255.255.255.0
GATEWAY=192.168.2.1
DNS1=
DNS2=
[root@localhost ~]# systemctl restart network
[root@localhost ~]# ip a
3.linux-3 企业内网测试机
vmnet2 192.168.1.10/24 网关:192.168.1.1
4.linux-4 外网测试机
vmnet1 100.1.1.20 网关:100.1.1.10
***本章实验外网测试机需要指网关,主要尝试访问内网web服务器。下次课学习了端口转发技术以后,为了更真实的模拟,就不再指网关。访问内网web服务器192.168.2.10时需要访问网关服务器的外网网卡100.1.1.10 ,然后网关服务器会把请求转发到内网web服务器。
需求描述
1.网关服务器
网关服务器的网卡ens37分配到external(外部)区域
网关服务器的网卡ens33分配到trusted(信任)区域
网关服务器的网卡ens36分配到dmz(非军事)区域
2.网关和网站服务器
网站服务器和网关服务器均通过SSH来远程管理,
将SSH默认端口改为
网关服务器 54321
网站服务器 12345
3.网站服务器
网站服务器开启https,过滤未加密的http流量
网站服务器拒绝ping
操作步骤
1.网关服务器
配置主机名
[root@localhost ~]# hostname gateway-server
[root@localhost ~]# vim /etc/hostname
gateway-server
[root@localhost ~]# bash
开启路由转发功能
[root@gateway-server ~]# vim /etc/sysctl.conf
sysctl settings are defined through files in
/usr/lib/sysctl.d/, /run/sysctl.d/, and /etc/sysctl.d/.
Vendors settings live in /usr/lib/sysctl.d/.
To override a whole file, create a new file with the same in
/etc/sysctl.d/ and put new settings there. To override
only specific settings, add a file with a lexically later
name in /etc/sysctl.d/ and put new settings there.
For more information, see sysctl.conf(5) and sysctl.d(5).
net.ipv4.ip_forward = 1
[root@gateway-server ~]# sysctl -p
net.ipv4.ip_forward = 1
2.web服务器192.168.2.10
2.1更改主机名称
[root@localhost ~]# hostname web
[root@localhost ~]# vim /etc/hostname
web
[root@localhost ~]# bash
2.2安装httpd和mod_ssl软件
[root@web ~]# yum -y install httpd mod_ssl
启用并启动httpd服务
[root@web ~]# systemctl enable httpd
[root@web ~]# systemctl start httpd
编辑测试站点首页
[root@web ~]# echo “192.168.2.10” > /var/www/html/index.html
验证:
1.全网ping通测试
2.在内网客户机和外网测试机分别访问网站进行验证
curl http://192.168.2.10
- 在内网客户机和外网测试机分别使用ssh进行访问验证
ssh root@192.168.2.1 ip a
ssh root@192.168.2.10 ip a
内网网站服务器192.168.2.10继续进行配置
2.3 ##添加ssh的侦听地址,重启sshd服务。注意selinux要关闭
生产环境中,先添加端口,测试无误后再考虑删除22端口。
[root@web ~]# vim /etc/ssh/sshd_config
编辑内容:
18-19行
18 Port 22
19 Port 12345
如果重启服务不成功,使用命令检查配置文件语法
/usr/bin/ssh -T
##主机名进行了修改,sshd配置文件第1行需要查看是否更改了
[root@web ~]# systemctl restart sshd
验证:客户机使用xshell连接访问12345端口
ssh -p 12345 root@192.168.2.10 ip a
2.4 启动并配置防火墙
[root@web ~]# systemctl start firewalld
[root@web ~]# systemctl enable firewalld
[root@web ~]# systemctl status firewalld
[root@web ~]# firewall-cmd --state
设置默认区域为dmz区域
[root@web ~]# firewall-cmd --set-default-zone=dmz
dmz区域打开https服务
[root@web ~]# firewall-cmd --zone=dmz --add-service=https --permanent
[root@web ~]# firewall-cmd --zone=dmz --add-service=http --permanent
dmz区域添加ssh服务的22及12345端口
[root@web ~]# firewall-cmd --zone=dmz --add-port=22/tcp --permanent
[root@web ~]# firewall-cmd --zone=dmz --add-port=12345/tcp --permanent
禁止ping测试—web主机可以ping其他主机,反之不允许
[root@web ~]# firewall-cmd --add-icmp-block=echo-request --zone=dmz --permanent
查看dmz区域配置
[root@web ~]# firewall-cmd --zone=dmz --list-all
dmz
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
重新加载生效
[root@web ~]# firewall-cmd --reload
再次查看
[root@web ~]# firewall-cmd --zone=dmz --list-all
dmz
target: default
icmp-block-inversion: no
interfaces:
sources:
services: ssh https
ports: 22/tcp 12345/tcp
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks: echo-request
rich rules:
验证:
1.在内网客户机和外网测试机分别访问网站进行验证
curl http://192.168.2.10
-
web主机ping其他主机可以;其他主机ping web主机失败
-
在内网客户机和外网测试机分别使用ssh进行访问验证
ssh -p 12345 root@192.168.2.10 ip a
3.网关服务器
[root@gateway-server ~]# firewall-cmd --state
not running
[root@gateway-server ~]# systemctl start firewalld
[root@gateway-server ~]# firewall-cmd --state
running
[root@gateway-server ~]# systemctl enable firewalld
设置默认区域为external
[root@gateway-server ~]# firewall-cmd --set-default-zone=external
把网卡配置到不同区域
[root@gateway-server ~]# firewall-cmd --change-interface=ens37 --zone=external
[root@gateway-server ~]# firewall-cmd --change-interface=ens33 --zone=trusted
[root@gateway-server ~]# firewall-cmd --change-interface=ens36 --zone=dmz
[root@gateway-server ~]# firewall-cmd --get-active-zones
dmz
interfaces: ens37
external
interfaces: ens33
trusted
interfaces: ens36
[root@gateway-server ~]# vim /etc/ssh/sshd_config
编辑:17-18行
Port 22
Port 54321
[root@gateway-server ~]# systemctl restart sshd
验证:在内网客户机和外网测试机分别验证
1、内网客户机
curl http://192.168.2.10
ssh -p 12345 root@192.168.2.10 ip a
ssh -p 54321 root@192.168.1.10 ip a
- 外网客户机
curl http://192.168.2.10
ssh -p 12345 root@192.168.2.10 ip a
ssh root@100.1.1.10
ssh -p 54321 root@100.1.1.10
现象:
1.内网客户机能够成功访问
2.外网客户机不能访问
分析:根据防火墙包过滤的工作流程
1.内网网关属于trusted区域,流量允许通过
2.外网网关属于external区域,默认只允许ssh服务流量通过
允许external区域访问54321端口
[root@gateway-server ~]# firewall-cmd --zone=external --add-port=54321/tcp --permanent
允许从external区域进入的tcp80请求转发到192.168.2.10
[root@gateway-server ~]# firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:toaddr=192.168.2.10 --permanent
允许从external区域进入的tcp12345请求转发到192.168.2.10
[root@gateway-server ~]# firewall-cmd --zone=external --add-forward-port=port=12345:proto=tcp:toaddr=192.168.2.10 --permanent
允许dmz区域访问54321端口
[root@gateway-server ~]# firewall-cmd --zone=dmz --add-port=54321/tcp --permanent
重新加载防火墙
[root@gateway-server ~]# firewall-cmd --reload
验证:在内网客户机和外网测试机分别验证
curl http://192.168.2.10
ssh -p 12345 root@192.168.2.10 ip a