目录
firewalld
常用参数
firewalld 可以对服务或端口流量进行控制
firewalld 实现192.168.27.128:80端口转发为192.168.27.125:8090端口
配置firewalld端口转发
防火墙:iptables,firwalld
iptables service 首先对旧的防火墙规则进行了清空,然后重新完整地加载所有新的防火墙规则,而如果配置了需要 reload 内核模块的话,过程背后还会包含卸载和重新加载内核模块的动作,而不幸的是,这个动作很可能对运行中的系统产生额外的不良影响,特别是在网络非常繁忙的系统中。如果我们把这种哪怕只修改一条规则也要进行所有规则的重新载入的模式称为静态防火墙的话,那么 firewalld 所提供的模式就可以叫做动态防火墙,它的出现就是为了解决这一问题,任何规则的变更都不需要对整个防火墙规则列表进行重新加载,只需要将变更部分保存并更新即可,它具备对 IPv4 和 IPv6防火墙设置的支持。相比于传统的防火墙管理工具,firewalld支持动态更新技术并加入了区域的概念。区域就firewalld预先准备了几套防火墙策略集合(策略模板),用户可以选择不同的集合,从而实现防火墙策略之间的快速切换。
firewalld服务是默认的防火墙配置管理工具,他拥有基于CLI(命令行界面)和基于GUI(图形用户界面)的两种管理方式。firewall-config和firewall-cmd是直接编辑xml文件,其中firewall-config是图形化工具,firewall-cmd是命令行工具。
参数 作用
--get-default-zone 查询默认的区域名称
--set-default-zone=<区域名称> 设置默认的区域,使其永久生效
--get-zones 显示可用的区域
--get-services 显示预先定义的服务
--get-active-zones 显示当前正在使用的区域与网卡名称
--add-source= 将源自此IP或子网的流量导向指定的区域
--remove-source= 不再将源自此IP或子网的流量导向某个指定区域
--add-interface=<网卡名称> 将源自该网卡的所有流量都导向某个指定区域
--change-interface=<网卡名称> 将某个网卡与区域进行关联
--list-all 显示当前区域的网卡配置参数、资源、端口以及服务信息
--list-all-zones 显示所有区域的网卡配置参数、资源、端口以及服务
--add-service=<服务名> 设置默认区域允许该服务的流量
--add-port=<端口号/协议> 设置默认区域允许该端口的流量
--remove-service=<服务名> 设置默认区域不再允许该服务的流量
--remove-port=<端口号/协议> 设置默认区域不再允许该端口的流量
--reload “永久生效”的配置规则立即生效,并覆盖当前的配置规则
--panic-on 开启应急状况模式
--panic-off 关闭应急状况模式
--add-source= 将源自此IP或子网的流量导向指定的区域 --list-all 显示当前区域的网卡配置参数、资源、端口以及服务信息 --add-service=<服务名> 设置默认区域允许该服务的流量 --add-port=<端口号/协议> 设置默认区域允许该端口的流量 --remove-service=<服务名> 设置默认区域不再允许该服务的流量 --remove-port=<端口号/协议> 设置默认区域不再允许该端口的流量 --reload 让“永久生效”的配置规则立即生效,并覆盖当前的配置规则 --add-rich-rule 添加富规则
防火墙命令语法: firewall-cmd - firewalld command line client firewall-cmd [OPTIONS...]
注意:firewalld 防火墙规则,当服务重启时,会将防火墙规则清空,如果需要永久保存防火墙规则:需要使用firewalld-cmd 命令规则的时候,加上--permanent参数。
eg1:拒绝ssh连接 [root@manage ~]# firewall-cmd --list-all 列出防火墙规则 public (active) target: default icmp-block-inversion: no interfaces: ens160 sources: services: cockpit dhcpv6-client ssh 默认允许ssh连接 ports: 80/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: [root@manage ~]# firewall-cmd --remove-service=ssh 拒绝ssh服务连接 success [root@manage ~]# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: ens160 sources: services: cockpit dhcpv6-client ports: 80/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: 测试: [C:\~]$ ssh 192.168.27.110 Connecting to 192.168.27.110:22... Could not connect to '192.168.27.110' (port 22): Connection failed. Type `help' to learn how to use Xshell prompt.
未设置前
1.添加一个ip地址 nmcli connection modify ens160 +ipv4.addresses 192.168.27.125/24 2. 设置一个虚拟主机实现ip不同端口号访问不同的页面 在/etc/httpd/conf.d额外配置文件下写入虚拟主机文件,/usr/share/doc/httpd-core/httpd-vhosts.conf可以看到虚拟主机的的配置文件。 vim /etc/httpd/conf.d/host.conf listen 8090 监听端口号 DocumentRoot "/WWW/8090" 8090端口号访问的页面目录 ServerName 192.168.27.128 设置允许访问/WWW/8090目录 AllowOverride None 不用需重写 # Allow open access: Require all granted 允许所有用户访问 3.重新启动httpd服务 [root@localhost conf.d]# systemctl restart httpd 4.测试 [root@localhost conf.d]# curl 192.168.27.128:80 123 [root@localhost conf.d]# curl 192.168.27.125:8090 echo "this is 8090 port"
1.开启防火墙,允许httpd服务 (当开启防火墙之后,网页访问就会出现错误) 2.firewalld放行httpd服务 [root@manage ~]# firewall-cmd --add-service=http 允许httpd服务 3.需要在firewalld中添加端口8090,才可访问8090 [root@localhost conf.d]# firewall-cmd --add-port=8090/tcp 4.firewalld 用富规则:使用访问192.168.27.128:80时,实际访问ip端口为8090 man 5 firewalld.richlanguage 这个手册中有样例 rule family="ipv6" source address="1:2:3:4:6::" forward-port to-addr="1::2:3:4:7" to-port="4012" protocol="tcp" port="4011" 访问192.168.27.0网段的任何一个地址,访问其80端口实质是去访问192.168.27.125:8090端口的网址 [root@localhost conf.d]# firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.27.0/24" forward-port port="80" protocol="tcp" to-port="8090" to-addr="192.168.27.125"' success