赞
踩
防火墙(Firewalld)是位于内部网和外部网之间的屏障,它按照系统管理员预先定义好的规则来控制数据包的进出
防火墙是系统的第一道防线,其作用是防止非法用户的进入
centos 7 中防火墙Firewalld是一个非常强大的功能,Firewalld提供了支持网络/防火墙区域(zone)定义网络连接以及接口安全等级的动态防火墙管理工具,它支持IPv4,IPv6防火墙设置以及以太网桥接,并拥有运行时配置和永久配置选项它也支持允许服务或者应用程序直接添加防火墙规则的接口
以前的system-config-frewall/lokkit防火墙模型是静态的,每次修改都要求防火墙完全重启
这个过程包括内核netfilter防火墙模块的卸载和新配置所需模块的装载等,而模块的卸载将会破坏状态防火墙和确立的连接;
相反firewall deamon动态管理防火墙,不需要重启防火墙便可以更改,因此也就没有必要重新加在所有的内核防火墙模块了
不过要使用firewall deamon就要求防火墙的所有变更都要通过改守护进程来实现。以确保守护进程中的状态和内核里的防火墙是一致的
另外firewall deamon无法解析由 ip*tables和ebtables 命令行工具添加防火墙的规则
将server虚拟机和desktop虚拟机reset,保持实验环境纯净,给desktop虚拟机再添加一块虚拟网卡做服务器,配置eth0的静态ip为172.25.254.114,配置eth1=192.168.0.114,给server虚拟机的一块网卡的ip设置为192.168.0.214,配置172.25.254.114的yum源,将desktop当作防火墙服务器
给desktop安装firewalld服务
yum install firewalld #安装火墙服务
安装火墙图形化界面的软件
yum install firewall-config -y
systemctl start firewalld #开启firewalld服务
systemctl enable firewalld #设置开启启动
查看火墙的状态,可以看到,火墙正在运行
通过网络划分成不同的区域,制定出不同区域之间的访问控制策略来控制不同程序区域间传送的数据流
例如,互联网是不可信的区域,而内部网络是高度信任的区域
网络安全模型可以在安装,初次启动和首次建立网络连接时选择初始化
该模型描述了主机所连接的整个网络环境的可信级别,并定义了连接的处理方式
firewalld的默认区域是public
区域名称 | 作用 |
---|---|
阻塞区域block | 任何传入的网络数据包都会被阻止(有回显) |
工作区域work | 相信网络上的其他计算机,不会损害自己的计算机 |
家庭区域home | 相信网络上的其他计算机,不损害自己的计算机 |
公共区域public | 不相信网络上的任何计算机,只选择接受传入的网络连接 |
隔离区域 DMZ | 隔离区域也称为非军事区域,内外网络之间增加的一层网络,起到缓冲作用,对于隔离区域,只有选择接受传入的网络连接 |
信任区域trusted | 所有网络连接都可以接受 |
丢弃区域drop | 任何传入的网络连接都被拒绝(不回显) |
内部区域internal | 信任网络上的其他计算机,不会损害自己的计算机,只有选择接受传入的网络连接 |
外部区域external | 不相信网络上的其他计算机不会损害自己计算机,只有选择接受传入的网络连接 |
firewall-config
#输入这个命令,firewall图形化管理工具就显示出来了,可以在里面进行修改,并且修改的参数可以通过命令查看
firewall-cmd --get-active-zones #查看正在使用的域
在图形化界面中将172.25.254.114主机加入block域
可以看到,block域里已经成功添加了ip为172.25.254.114的主机
用命令行可以查看到
用命令可以查看到新添加进block的域
firewall-cmd --get default-zone 查看默认域
firewall-cmd --get-service
#列出所有服务
firewall-cmd --list-all-zones #列出所有的域的详细信息
firewall-cmd --get-zones #列出所有的域名
firewall-cmd --set-default-zones=trusted #设置默认于为trusted
firewall-cmd --get-zones #列出默认的域名
firewall-cmd --zone=public --list-all #列出public域的所有信息
在desktop服务器端配置好yum源,安装Apache服务
编辑yum源的安装指向文件
安装Apache软件
安装成功
实验:public域是不允许访问apache,现在做特殊指定,就可以让真机访问的到114火墙端的apache了
设置默认域为public,在来源里加入172.25.254.14,允许真机访问服务器端
开启apache服务
在desktop服务器端:
外来的主机进入自己的trust域
firewall-cmd --add-sources=172.25.254.14 --zone=trusted
此时默认域仍是public,不允许http服务
firewall-cmd --add-sources=172.25.254.14 --zone=trusted
此时在主机的浏览器地址栏输入172.25.254.14,可以看到apache的默认发布目录
server访问不到的原因是因为,desktop上的eth0和eth1两块网卡均在public域里面,不允许外来主机访问apache
firewall-cmd --remove-interface=eth1 --zone=public #把eth1从public域中移走
把eth1网卡添加到trusted域,可以看到,public域里已经没有eth1网卡了
在真机端的浏览器地址栏输入172.25.254.114,可以看到,不能访问apache的默认发布目录
而在server虚拟机中可以访问到apache的默认发布页面
firewall-cmd --change-interface=eth1 --zone=public
#将eth1网卡的域改为public
可以看到,eth1网卡已经在public域里了
firewalld防火墙主要涉及两个文件:
1. /usr/lib/firewalld/ #火墙工作时访问的数据文件
2. /etc/firewalld/ #火墙工作时访问的策略文件
在/usr/lib/firewalld/services文件中,保存着多个以.xml结尾的文件,每个文件以它所提供的服务命名, 火墙在工作时访问这些数据文件,就可以通过这些服务
由于我们对apache服务比较熟悉,我们使用vim命令来查看一下.xml中写入的内容
可以看到,里边包含.xml文件的版本信息,编码方式,服务名称,服务描述,使用的协议及端口号
如果我们自己想在firewalld的数据文件中添加相同格式的服务文件,那么,防火墙也就能够提供相应的服务,我们可以看到,防火墙的默认服务中并没有iscsi网络磁盘共享服务,先将apache服务的文件复制一份,名称为iscsi.xml
对这个文件的内容进行修改,可以删除描述性的内容,添加服务名称,端口号修改为3260
修改完文件之后需要重启火墙服务才能生效
firewall-cmd --get-services #查看防火墙可以使用的服务,可以看到,现在已经包含了iscsi服务
在防火墙中永久添加iscsi服务,重新加载使其生效
在防火墙的信息列表中也可以看到已经添加了iscsi服务
切到/etc/firewall/zones目录下,查看域文件中存在的文件
使用vim命令查看公共域文件的内容
可以看到,里边包含 <service name="http">的行就代表着公共域允许这个服务
使配置修改生效,查看http服务是否添加成功
firewall-cmd --reload
firewall-cmd --list-all
可以看到,public域已经添加了http服务
firewall-cmd --list-ports #列出已经存在的端口
firewall-cmd --add-port=8080/tcp #将以tcp协议的方式传输数据的3260端口添加进firewald
firewall-cmd --list-ports #再次查看端口是否已经添加进firewalld
firewall-cmd --remove-port=8080/tcp #将8080端口从firewalld中移除
firewall-cmd --list-ports #列出已经存在的端口,看8080端口是否成功移除
从上图可以看到,8080端口已经成功添加
从上图可以看到,8080端口已经成功移除
desktop服务器端:
首先查看firewald中public域已经添加的服务
可以看到,firewalld中含有ssh服务,将ssh服务移除,使用–reload重新加载
再次查看列表发现,ssh服务已经不在firewalld里
查看desktop服务器的ip为172.25.254.114
在真机端测试:
用真机测试,使用ssh root @172.25.254.114
命令来测试firewalld服务器到底是否允许ssh服务
输入密码之后发现,能够登陆desktop服务器,说明在desktop服务器端虽然使用firewall-cmd --reload命令重新加载使其生效,并且列表里也已经看不到ssh服务,但是实际上ssh服务依然存在
desktop服务器端:
再次使用firewall-cmd --complete-reload
重新加载使移除生效
在真机端测试:
用真机sshdesktop虚拟机,此时可以发现,终端被占用,无法进行操作,说明ssh服务已经被彻底移除了
总结:
reload: 管理当前火墙状态,重新加载使其生效,不会终止任何当前已经建立的到达服务器的链接
complete-reload: 管理当前火墙状态,重新加载生效,并且会断掉访问服务器的连接
实验目的:拒绝ip为172.25.254.250主机访问我的desktopfirewalld火墙服务器,desktop火墙服务器的ip为172.25.254.114
说明:因为172.25.254.250是别人主机的ip,为了验证实验现象,我先完成拒绝自己的真机(ip为172.25.254.14)访问desktop防火墙服务器
实验步骤:
在desktop服务器端:
firewall-cmd --permanent --add-service=ssh #给火墙永久添加ssh服务
firewall-cmd --reload #重新加载使其生效
firewall-cmd --list-all #查看火墙信息列表,查看ssh服务是否已经成功添加
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.250 -p tcp --dport 22 -j REJECT
#永久添加规则,指定ipv4的filter表的INPUT 1链,数据来源为172.25.254.250的,传输协议为tcp,到达22端口(ssh服务的端口)的动作为拒绝
各参数说明:
–direct 规则
–add-rule 添加规则
指定ipv4的filter表
INPUT 链
-s 数据来源
-p 访问采用的协议
–dport 目的地端口 distnation port
-j 行为动作 REJECT(拒绝有回显)| ACCPET(接受)| DROP(拒绝无回显)
拒绝172.25.254.14访问desktop的firewalld服务器
在真机进行测试:
ssh root@172.25.254114
#查看真机是否能够使用ssh服务连接desktop虚拟机
可以看到,无法连接至172.25.254.114主机,22端口访问被拒绝
移除拒绝172.25.254.14访问的策略
可以看到,此时真机端已经可以通过ssh服务访问desktop服务器端
在desktop服务器端必须首先开启防火墙的地址伪装功能和路由功能ip_forward=1
vim /etc/sysctl.conf #编辑/etc/sysctl.conf文件
net.ipv4.ip_forward=1 #写入内容使ip_forward=1,开启路由功能
sysctl -p #刷新使其生效
内部地址要访问公网上的服务时(如web访问),内部地址会主动发起连接,由路由器或者防火墙上的网关对内部地址做个地址转换,将内部地址的私有IP转换为公网的公有IP,网关的这个地址转换称为SNAT,主要用于内部共享IP访问外部。
源地址转换SNAT即内网地址向外访问时,发起访问的内网ip地址转换为指定的ip地址(可指定具体的服务以及相应的端口或端口范围),这可以使内网中使用保留ip地址的主机访问外部网络,即内网的多部主机可以通过一个有效的公网ip地址访问外部网络。
将内网地址转换成公网址(一般是网关的外部地址),所以大家经常会看到为了让内网用户上公网,我们必须在routeros的firewall中设置snat,俗称IP地址欺骗或伪装(masquerade)
在server端测试:
在server端(ip为192.168.0.214)添加网关为192.168.0.114,若不添加,则ping不通172.25.254.14
重启网络
route -n
#查看网关是否成功添加
在desktop服务器端:
从22端口进来的数据都转到172.25.254.15这台主机上去
在server端测试:
ssh root@172.25.254.15
#连接172.25.254.15,登陆上去之后,使用w -i
查看登陆过15这台主机的ip
可以看到,虽然登陆172.25.254.15这台主机的ip为192.168.0.214,实际上却是172.25.254.114,说明地址伪装成功
当内部需要提供对外服务时(如对外发布web网站),外部地址发起主动连接,由路由器或者防火墙上的网关接收这个连接,然后将连接转换到内部,此过程是由带有公网IP的网关替代内部服务来接收外部的连接,然后在内部做地址转换,此转换称为DNAT,主要用于内部服务对外发布。
为了不受上一个地址伪装的实验的影响,将172.25.254.15这台主机从desktop服务器端移除
重新添加172.25.254.14(真机ip)允许访问desktop服务器端,查看列表可以看到forward-ports中成功添加了172.25.254.14, 意思是从22端口进来的数据都转到172.25.254.14这台主机上去
在真机端进行测试:
在真机上ssh root@172.25.254.114
这里需要注意,虽然显示的是要求输入172.25.254.114的密码,实际上需要输入真机(172.25.254.14)的密码,这里验证了连接确实会被转到172.25.254.14去
可以看到,能够成功访问desktop服务器
ifconfig br0
#查看真机ip为172.25.14.250
使用w -i可以看到,172.25.254.114登陆了真机
做完地址转换的实验,firewalld防火墙实验就暂停了,下边要学习iptables防火墙,因此关掉firewalld服务,设置为不开机自启动,以免对iptables实验造成影响
iptables(网络过滤器)是一个工作于用户空间的防火墙应用软件,是与3.5版本Linux内核集成的IP信息包过滤系统。如果Linux系统连接到因特网或LAN、服务器或连接LAN和因特网的代理服务器,则该系统有利于在Linux系统上更好地控制IP信息包过滤和防火墙配置。
Iptables是用来设置、维护和检查Linux内核的IP包过滤规则的。它可以定义不同的表,每个表都包含几个内部的链,也能包含用户定义的链。每个链都是一个规则列表,对对应的包进行匹配,每条规则指定应当如何处理与之相匹配的包。这被称作"target"(目标),也可以跳向同一个表内的用户定义的链。
实验准备:
1. desktop作为服务器端,配置为双网卡主机:
eth0:172.25.254.114
eth1: 192.168.0.114
2. server测试端:eth0: 192.168.0.214
3. 真机测试端:ip:172.25.254.14
在desktop服务器端配置好yum源
实验步骤:
在desktop服务器端:
安装iptables服务
发现这个服务已经安装好,开启iptables服务, 并且设置为开机启动
-nL # 表示不做解析列出防火墙策略
-L # 表示做解析列出防火墙策略
-t # 表示列出指定表的策略信息,不加-t默认为filter
保存策略方法一
保存策略方法二
-A #将策略追加在已经存在的表后面,按顺序执行(第一个符合行为后便不会读取第二个)
添加策略允许ip为172.25.254.15的主机通过ssh服务连接进服务器
-I #插入 加数字表示添加的位置 默认为1,表示插入到最前边
-R #替换规则要加数字(将172.25.54.250的规则修改为丢弃)
-D #删除第二条规则
-N # 添加新链名称为redhat
-E #重命名链(将名称为redhat的链重命名为WESTOS)
-X #删除WESTOS链
-P # 修改policy DROP ACCEPT 不能修改为REJECT 链的默认属性
清除策略(刷新iptable服务后,原策略会恢复)
-j #行为动作
-S #查看策略详细信息,包括操作
-Z # 清除数据包
SNAT和DNAT(由连接的发起者是谁来区分)
源地址转换:SNAT
内部地址要访问公网上的服务时(如web访问),内部地址会主动发起连接,由路由器或者防火墙上的网关对内部地址做个地址转换,将内部地址的私有IP转换为公网的公有IP,网关的这个地址转换称为SNAT,主要用于内部共享IP访问外部。
目的地址转换:DNAT
当内部需要提供对外服务时(如对外发布web网站),外部地址发起主动连接,由路由器或者防火墙上的网关接收这个连接,然后将连接转换到内部,此过程是由带有公网IP的网关替代内部服务来接收外部的连接,然后在内部做地址转换,此转换称为DNAT,主要用于内部服务对外发布。
实验题目要求:新建火墙策略:squid+sshd+dns
举一个生活中的例子:去电影院看电影的时候,第一次用户需要检票入场,若中途有事离开了观影厅,在电影结束前还可以凭票根再次入场,无需重新再次检票
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #建立过状态和建立完成中途断开重新连接的都允许
iptables -A INPUT -m state –state NEW -i lo -j ACCEPT #通过回环接口的所有数据都接收
iptables -A INPUT -m state –state NEW -p tcp –dport 22 -j ACCEPT #允许ssh服务
iptables -A INPUT -m state –state NEW -p tcp –dport 53 -j ACCEPT #允许dns服务
iptables -A INPUT -m state –state NEW -p tcp –dport 3128 -j ACCEPT ##允许squid服务
iptables -A INPUT -j REJECT #拒绝其他主机通过任何服务连接
iptables -nL #查看新建的火墙策略
查看iptables火墙策略
不做解析查看策略
可以看到,已经成功添加ssh, squid和dns服务进策略信息
将新建的策略保存
iptables-save > /etc/sysconfig/iptables
刷新
iptables -F
重启iptables服务
再次查看策略信息依然存在
> /etc/sysconfig/iptables #清空策略信息
iptables -nL #查看策略信息已经不存在
`这个实验必须开启路由功能 `
iptables -t nat -nL #查看nat表的策略
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.25.254.114 #把要从eth0出去的数据的源地址改为172.25.254.114
iptables -t nat -nL
将192.168.0.214测试机网关设为192.168.0.114
route -n #查看网关
把要从eth0出去的数据的源地址改为172.25.254.114
iptables -t nat -nL #查看是否添加策略(必不可少)
在server虚拟机进行测试:
ping 172.25.254.14,发现可以ping通(如果不添加网关,则无法ping通)
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 22 -j DNAT --to-dest 192.168.0.214:22 #从eth0的22端口进来的数据,目的地转为 192.168.0.214的22端口
iptables -t nat -nL
将从eth0的22端口进来的数据,目的地转为 192.168.0.214的22端口
iptables -t nat -nL #查看是否添加策略(必不可少)
在真机端进行测试:
ssh root@172.25.254.114 输入的密码是转到的ip的主机密码
查看登陆服务器的ip为192.168.0.214, 端口转发成功
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。