linux基础
从传统意义上防火墙技术分为三种:包过滤,应用代理,状态检测
linux的防火墙体系主要工作在网络层,针对TCP/IP数据包实时过滤和限制,属于典型的的包过滤防火墙,在Centos7系统中几种防火墙共存:firewalld,iptables,enbtables默认使用firewalld来管理netfilter子系统
netfilter:linux内核中实现包过滤防火墙内部结构,不以程序或文件的形式存在,属于“内核态”的防火墙功能体系
firewalld:用于管理linux防火墙的命令程序,属于“用户态”的防火墙管理体系
firewalld简介:
firewalld 提供了一个支持网络区域所定义的网络链接以接口安全等级的动态防火墙管理工具,它支持IPV4,IPV6防火墙设置以及以太网桥,并且拥有两种配置:运行时配置与永久配置。它还支持服务或应用程序直接添加防火墙规则接口。
firewalld网络区域:
firewalld将所有网络数据流量划分为多个区域,从而简化管理
trusted:(信任区域)可接收所有网络
drop:除非与传出流量相关,否则拒绝所有传入流量,不产生ICMP的错误响应
block:(限制区域)除非与传出流量相关,否则拒绝所有传入流量
public:(公共区域)除非与传出流量相关,或与ssh,dhcpv6-client预定义服务匹配,否则拒绝流量传入
external:除非与传出流量相关,或与ssh预定义服务匹配,否则拒绝流量传入
dmz:(隔离区域)除非与传出流量相关,或与ssh预定义服务匹配,否则拒绝流量传入
work:(工作区域)除非与传出流量相关,或与ssh,ipp-client,dhcpv6-client预定义服务匹配,否则拒绝流量传入
home:(家庭网络)除非与传出流量相关,或与ssh,ipp-client,mdns,samba-client,dhcpv6-client预定义匹配服务,否则拒绝流量传入
internal:(内部区域)除非与传出流量相关,或与ssh,ipp-client,mdns,samba-client,dhcpv6-client预定义匹配服务,否则拒绝流量传入
firewalld防火墙配置方法
1.firewalld-cmd命令
systemctl start firewalld //启动防火墙
systemctl status firewalld 或 firewalld-cmd --state //查看状态
systemctl disable firewalld //禁用firewalld
(2)获取预定义信息
预定义信息主要包括三种:可用区,可用服务,可用ICMP阻塞类型
firewalld-cmd --get-zones //显示预定义区
firewalld-cmd --get-service //显示预定义服务
firewalld-cmd --get-icmptypes //显示预定义ICMP类型
阻塞类型:
destination-unreachable;目的地址不可达
echo-replu : 应答回应(pong)
parameter-problem:参数问题
redirect : 重新定向
router-adverisement:路由通告
router-solicitaion :路由器征询
source-quench:源端抑制
time-exceeded:超时
timestamp-reply:时间戳应答回应
timestamp-request:时间戳请求
区域管理:
–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 显示所有指定区域的所有规则
操作:
firewall-cmd --get-default-zone //显示当前系统中的默认区域
firewall-cmd --list-all // 显示默认区域的所有规则
firewall-cmd --get-zone-of-interface=ens33 //显示对应网络接口ens33对应区域
将网络接口ens33对应区域更改为internal区域:
firewall-cmd --zone=public --change-interface=ens33
firewall-cmd --zone=internal --list-interfaces
firewall-cmd --get-zone-of-interface=ens33
显示所有激活区域:
firewall-cmd --get-active-zones
服务管理:
为了方便管理,firewalld预定义了很多服务,存放在/usr/lib/firewalld/services/目录中,服务通过单个的XML配置文件来指 定,需要自定义某项服务端口时,需要将services配置文件放在/etc/firewalld/services/目录中
[–zone=] --list-services 显示指定区域内允许访问的所有服务
[–zone=] --add-service= 为指定区域设置允许访问的某项服务
[–zone=] --remove-service= 删除指定区域已设置的允许访问的某项服务
[–zone=] --list-ports 显示指定区域内允许访问的所有端口号
[–zone=] --add-port=[-]/为指定区域设置允许访问的某个/某段端口号(包括协议名)
[–zone=] --list-icmp-blocks 显示指定区域内拒绝访问的所有ICMP类型
[–zone=] --add-icmp-block=为指定区域设置拒绝访问的某项ICMP类型
操作:
(1)为默认区域设置允许访问的服务
firewall-cmd --list-services //显示默认区域内允许访问的所有服务
firewall-cmd --add-service=http //设置默认区域允许访问http 服务
firewall-cmd --add-services=https //设置默认区域允许访问https 服务
firewall-cmd --list-services
(2)为internal区域设置允许访问的服务
firewall-cmd --zone=internal --add-service=mysql //设置internal区域允许访问mysql服务
firewall-cmd --zone=internal --remove-sevice=samba-client //设置internal 区域不允许访问samba-client服务
firewall-cmd --zone=internal --list-services //显示internal 区域内允许访问的所有服务
端口管理:
firewall-cmd --zone=internal --add-port=443/tcp //在internal 区域打开443/tcp端口
firewall-cmd --zone=internal --remove-prot=443/tcp //internal 区域禁止443/TCP端口访问
实验拓扑图:
实验需求:
网关服务器ens33网卡100.1.1.10,为公网IP,分配到external(外部)区域
网关服务器ens37网卡192.168.1.1,分配到trusted(信任)区域
网关服务器ens38网卡192.168.2.1,分配1到dmz(非军事)区域
网站服务器和网关服务器均通过SSH来远程管理,为了安全,将SSH默认端口改为12345
网站服务器开启https,过滤未加密的http流量
网站服务器拒绝ping
网关服务器配置:
vim /etc/sysctl.conf
添加net.ipv4.ip_forward = 1 //开启路由转发功能
网站服务器环境搭建:
yum -y install httpd mod_ssl //安装httpd与mod_ssl
systemctl enable httpd
systemctl start httpd //启用并启动httpd服务
vim /var/www/html/index.html //创建测试网页
更改SSH监听地址,并且重启服务:
vim /etc/ssh/sshd_config
更改端口为12345
setenforce 0 //关闭selinux
systemctl restart sshd
启动并配置防火墙:
(1)在网站服务器上启动并将默认区域设置为dmz区域
systemctl start firewalld
(2)为dmz区域打开https服务及添加TCP的12345端口
firewall-cmd --zone=dmz --add-service=https --permanent
firewall-cmd --zone=dmz --add-port=12345/tcp --permanent
(3)禁止ping
firewall-cmd --add-icmp-block=echo-request --zone=dmz --permanent
(4)由于预定义的SSH服务已经更改默认端口,所以将预定义SSH服务移除
firewall-cmd --zone=dmz --remove-service=ssh --permanent
(5)重新加载firewalld激活配置并查看刚才的配置
firewalld-cmd --reload
firewalld-cmd --list-all --zone=dmz
网关服务器配置:
(1) 验证firewalld在网关服务器上启动并且正在运行:
firewall-cmd --state
systemctl start firewalld
systemctl enable firewalld
(2)设置默认区域为external区域,并查看配置结果:
firewalld-cmd --set-default-zone=external
firewalld-cmd --list-all
(3)将ens37网卡配置到trusted区域,将ens38配置到dnz区域
firewalld-cmd --change-interface=ens37 --zone=trusted
firewalld-cmd --change-interface=ens38 --zone=dmz
(4)查看配置情况如下
firewalld-cmd --get-active-zones
(5)客户机访问网站服务器测试
http://192.168.2.10
(6)更改SSH侦听端口,并重启服务(需关闭SElinux)
vim /etc/ssh/sshd_config
更改端口为12345
setenforce 0
systemctl restart sshd
(7)配置添加external区域TCP的12345端口
firewalld-cmd --zone=external --add-port=12345/top --permanent
(8)配置external区域移除SSH服务
firewalld-cmd --zone=external --remove-service=ssh --permanent
(9)配置exprnal区域禁止ping
firewalld-cmd --zone=external --add-icmp-block=echo-request --permanent
(10)重新加载防火墙激活配置
firewalld-cmd --reload
(11)在互联网测试计算机上通过SSH登录网关外部接口地址的12345,成功。
ssh -p 12345 100.1.1.10
(12)在企业内测试计算机SSH登录web网站服务器的12345端口,成功
ssh -p 12345 192.168.2.10