防火墙---firewalld
一、FIREWALLD简介
动态防火墙后台程序FIREWALLD提供一个动态管理的防火墙,用以支持网络"zones",以分配对一个网络即相关链接和界面的一定程度的信任。它具备IPV4和IPV6对防火墙设置的支持。它还具备一个通向服务或应用程序以直接增加防火墙规则的接口。
二、FIREWALLD的基本了解
上层管理工具:iptables(server) ;firewalld(高集成)
firewalld域有以下几种:
网络区名称 默认配置
trusted(信任) 可接受所有的网络连接
home(家庭) 用于家庭网络。仅接受ssh、mdns、ipp-client、samba-client、或dhcpv6-client服务连接
internal(内部) 用于内部网络,仅接受ssh、mdns、ipp-client、dhcpv6-client服务连接
work(工作) 用于工作区,仅接受ssh、ipp-client或dhcpv6-client服务连接
public(公共) 在公共区域内使用,仅接受ssh或dhcpv6-client服务连接,为firewalld的默认区域
external(外部) 出去的ipv4网络连接通过此区域伪装和转发,仅接受ssh服务连接
dmz(非军事区) 仅接受ssh服务连接
block(限制) 拒绝所有网络连接
drop(丢弃) 任何接受的网络数据包都被丢弃,没有任何回复
三、火墙的安装和开启:
1)防火墙firewalld的安装、开启 (在一个系统中只能有一种防火墙工作)
yum install firewalld -y ##安装防火墙firewalld
systemctl start firewalld
systemctl enable firewalld
systemctl status firewalld.service
firewall-cmd --list-all ##查看firewalld火墙信息
2) 防火墙iptables的安装、开启(要是开启iptables的话,必须先关闭firewalld防火墙)
systemctl stop firewalld ##关闭firewalld
systemctl mask firewalld ##把firewalld火墙上锁
yum install iptables-server -y ##安装iptables火墙
systemctl start iptables.server
systemctl enable iptables
iptables -nL ##显示iptables火墙信息
四、使用命令行接口配置防火墙
firewall-cmd --state ##查看当前火墙的状态
firewall-cmd --get-active-zones ##查看火墙的活跃域
firewall-cmd --get-default-zone ##查看默认域
firewall-cmd --get-zones ##显示所有域
firewall-cmd --zone=public --list-all ##显示域为public的信息
firewall-cmd --get-services ##查看火墙内可开启的所有服务
firewall-cmd --list-all-zones ##列出所有域的详细信息
firewall-cmd --set-default-zone=dmz ##修改默认域为dmz
firewall-cmd --add-source=172.25.254.21 --zone=public ##添加ip到public域中
firewall-cmd --add-interface=eth1 --zone=trusted ##给trusted域添加接口
firewall-cmd --get-active-zones ##查看现在可用的域
firewall-cmd --remove-source=172.25.254.21 --zone=public 从publuc域中移出ip主机
注意:当默认活跃类型时trusted的时候,所有请求都可以通过。当为public的时候,添加进去允许访问的ip和接口,就可以进行访问!
当为永久设定的时候,设定完成要使用reload命令重新加载,使其生效。
修改服务,reload不会立刻中断(会读修改的配置文件);complete会立刻中断
五、火墙端口的修改
示例:对httpd服务进行测试;http默认端口为80,当修改httpd服务的配置文件之后,要想在浏览器中访问,得改变火墙中允许的端口号。需进行如下修改!
1)vim /etc/httpd/conf/httpd.conf
2) systemctl restart httpd
3) firewall-cmd --permanent --add-server=http
firewall-cmd --permanent --add-port=8080/tcp --zone=public ##永久修改,相当与改写了配置文件/etc/firewalld/zones中的public.xml文件(可以看到有端口信息的存在)
查看/etc/firewalld/zones/public.xml的内容:
、
六、火墙的高级规则
firewall-cmd --direct --get-all-rules ##查看已有的规则
iptables -nL ##查看加进去的规则
1)实验一:不让21的主机访问22端口
1、 firewall-cmd --direct --add-rule ipv4 filter INPUT 1 -s 172.25.254.21 -p tcp --dport 22 -j REJECT ##添加一个规则;类型是filter的input列
2、 测试结果如下:(在21主机上进行)
3、firewall-cmd --direct --remove-rule ipv4 filter INPUT 1 -s 172.25.254.21 -p tcp --dport 22 -j REJECT ##删除规则
2)实验二:端口转发(当连接121主机的时候,会自动连接到221主机上。)
1、 首先修改服务器端(121)的火墙信息:
firewall-cmd --add-forward-port=port=22:proto=tcp:toport=22:toaddr=172.25.254.221 ##添加规则:端口为22;协议tcp;到达端口22;目的地址为221
firewall-cmd --list-all 会显示目的端口地址
2、完成之后,在客户端进行测试。在连接121后的IP为221:(此时要输入的密码为目的地址221的密码)
注释: 在221主机中输入:--- w -i --- 可以查看连接本机的情况
3、规则的删除:
3)实验三:源地址的转换(进行不同网段的连接)
1、 修改服务端的masquerade为yes;添加两个接口的ip (需要有两个物理网卡)
[root@desktop121 ~]# firewall-cmd --add-masquerade ##开启伪装功能
修改后的网络接口信息如下所示:
2、修改服务端配置文件(使两个接口可以进行转换)
sysctl -a | grep forward ##查看forward相关服务的开
vim /etc/sysctl.conf ----> net.ipv4.ip_forward=1 ##开启接口转换功能
sysctl -p ##刷新
3、客户端进行ip和网关的设定
vim /etc/sysconfig/network-scripts/ifcfg-eth0 #此处的网关为服务端中eth1的IP
systemctl restart network ##重启网络服务
ifconfig eth0 ##查看已修改ip
4、客户端就可以连接其他网段的ip来测试
补充:firewall-cmd --add-icmp-block=destination-unreachable ##添加链接时的提示信息
firewall-cmd --remoce-icmp-block=destination-unreachable ##移除规则
firewall-cmd --get-icmptypes ##查看所有可用提示信息