动态防火墙后台程序firewalld提供了一个动态管理的防火墙,用以支持网络“zones“以分配对一个网络及其相关链接和界面一定程序的新人。具备对IPV4和IPV6防火墙设置的支持。它支持以太网桥,并有分离运行时间和永久性配置选择。它还具备一个通向服务或者应用程序以直接增加防火墙规则的接口。
使用图形方式进行添加
firewall-config ##打开火墙的配置
firewall-cmd --state ##查看火墙运行状态
firewall-cmd --get-active-zones ##查看当前火墙活动的域
firewall-cmd --get-default-zone ##查看火墙当前默认域
firewall-cmd --zone=public --list-all ##查看public域的所有相关信息
firewall-cmd --get-services ##火墙可以直接设置状态的服务
firewall-cmd --get-service为什么这些服务可以被火墙识别?
原因是firewalld将配置存储在/usr/lib/firewalld/
目录中的XML文件中
firewall-cmd --get-service ##此时状态中没有iscsi服务
cd /usr/lib/firewalld/
ls ##查看文件是否出现iscsi服务
cp -p http.xml iscsi.xml
vim iscsi.xml ##进行更改后保存
firewall-cmd --get-service ##出现
firewall-cmd --list-all-zones ##列出火墙所有域
firewall-cmd --set-default-zone=block ##设置火墙默认状态为dmz
firewall-cmd -reload ##刷新当前火墙状态
firewall-cmd --complete-reload ##刷新当前火墙状态并中断当前主机的连接,重新年尝试火墙允许的服务
以ssh服务为例子
在另一台主机上连接本台主机(ssh)
firewall-cmd --permanent --remove-service=ssh
firewall-cmd --reload ##sshd服务依然正常
firewall-cmd --complete-reload ##sshd服务中断
firewall-cmd --permanent --add-service=http
firewall-cmd --reload
进行firewall-cmd --permanent --add-service=http
其实就是在/etc/firewalld/
中添加http.xml文件
firewall-cmd --list-all ##此时火墙不允许httpd服务
下面这一步操作等同于执行firewall-cmd --permanent --add-service=http
cd /etc/firewalld/
cd zones
vim public.xml
firewall-cmd --reload
firewall-cmd --list-all ##火墙允许http服务
filter:经过本机内核的数据
input output forward
nat:不经过内核
input output 与内核无关
postrouting :路由之后(源地址转换SNAT)
prerouting :路由之前
mangle:附加表
在filter和nat不够用的时候使用mangle
通过firewall-cmd
工具,可以使用–direct 选项在运行时间里面增加或者移除链。直接端口模式添加的规则优先应用。
firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.204 -p tcp -dport 80 -j REJECT/ACCEP/DROP ##拒绝,接受,丢弃 特定的某台主机访问无法进入连接
操作:
1.拒绝客户机172.25.254.204连接,在输入时就拒绝。如果是添加相应服务的白名单和黑名单信息,是在客户已经进入服务之后,才中断。
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.204 -p tcp --dport 80 -j REJECT
firewall-cmd --reload
##最好使用REJECT动作,REJECT动作客户在尝试连接时会有回显报错,但是丢弃动作没有回显,客户无法判定是否连接成功,会不断进行尝试。
测试
在客户机器IP为172.25.254.4的主机的浏览器中输入http://172.25.254.104
会被拒绝
在客户机器IP为192.168.0.204的主机的浏览器中输入http://172.25.254.104
能正常连接到http服务
测试完成后移除这个设置
将其改为ACCEPT不会生效,原因是因为此时添加的ACCEPT命令并不会被读取到,在读到REJECT之后就不读取了
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.204 -p tcp --dport 80 -j ACCPET
firewall-cmd --reload
有效的移除方式
firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -s 172.25.254.4 -p tcp --dport 80 -j REJECT
在客户机器IP为172.25.254.4的主机的浏览器中输入http://172.25.254.104
正常连接则说明移除成功
在进行这个实验时,需要配置
双网卡主机(desktop)作为服务端:172.25.254.104 192.168.0.104
打开虚拟机管理器配置双网卡,详细请参见《linux下的虚拟机管理》
客户端(server)主机一个为192.168.0.104
————————————————————————————
端口转发:当客户访问某个网站,而这个网站由多个服务器支持,如果大量用户同时访问一个服务器,那么这个服务器会不堪重负,而且会影响用户浏览网页的体验。所以我们将访问压力由一个端口转发给多个服务器,实现流量均衡。(在INPUT的位置)
(1)服务端(双网卡主机)开启地址伪装
firewall-cmd --permanent --add-masqurad ##添加地址伪装
firewall-cmd --reload
firewal-cmd --list-all ##确认地址伪装开启
(2)在服务端上添加端口转发策略
firewall-cmd --add-forward-port=port=22:proto=tcp:toport22:toaddr=172.25.254.65 ##将22端口的服务转发到172.25.254.65这台主机上
firewall-cmd --list-all ##查看策略是否添加成功
(3)测试
让客户端(单网卡)主机远程连接172.25.254.104
ssh [email protected]
连接成功之后,ifconfig
,查看IP实际上连接的是172.25.254.65
这台主机上,则说明端口转发成功
将端口转发策略删除(在服务端)
firewall-cmd --remove-forward-port=port=22:proto=tcp:toport22:toaddr=172.25.254.4
通过地址伪装,NAT设备将经过设备的包转发到指定的接收方,同时将通过的数据包源地址更改为其NAT设备自己的接口地址。当返回的数据包到达时,会将目的地址修改为源是主机的地址并做路由。地址伪装可以实现局域网多个地址共享单一公网地址上网。
IP地址伪装仅支持IPV4,不支持IPV6
要用server(客户端IP 192.168.0.204)ping虚拟机(IP 172.25.254.104),发现ping不同,原因是两个IP不在一个网段,因此不通
这个时候就需要用到地址伪装
(1)服务端(双网卡)主机开启地址伪装
firewall-cmd --permanent --add-masqurad ##添加地址伪装
firewall-cmd --reload
firewal-cmd --list-all ##确认地址伪装开启
(2)在客户端(单网卡)添加网关
vim /etc/sysconfig/network-scipts/ifcfg-eth0
在文件中添加
GATEWAY=192.168.0.104
##网关应该和服务端中的192.168.0.104 IP一致(这样才能验证地址伪装,如果直接添加172.25.254.4为网关,则无法验证了)
systemtl restart network
route -n ##查看网关是否设定完成
ping 172.25.254.4 ##ping 通则说明成功
ssh [email protected],登录成功后
w -i
发现虽然是在172.25.254.204这台主机上远程连接172.25.254.4,但是实际上识别的却是172.25.254.104这台主机连接的。这就是地址伪装所达到的效果。