火墙策略(下) & firewalld

来源:互联网 发布:assertequals php 编辑:程序博客网 时间:2024/06/02 10:52

firewalld概念:

RHEL7是一个集合多款防火墙管理工具并存的系统,Firewalld动态防火墙管理器服务(Dynamic Firewall Manager of Linux systems)是目前默认的防火墙管理工具,同时拥有命令行终端和图形化界面的配置工具,即使是对Linux命令不熟悉也能快速入门。

相比于传统的防火墙管理工具还支持了动态更新技术并加入了“zone区域”的概念,简单来说就是为用户预先准备了几套防火墙策略集合(策略模板),然后可以根据生产场景的不同而选择合适的策略集合,实现了防火墙策略之间的快速切换。

例如有一台笔记本电脑每天都要在办公室、咖啡厅和家里使用,按常理推断最安全的应该是家里的内网,其次是公司办公室,最后是咖啡厅,如果需要在办公室内允许文件共享服务的请求流量、回到家中需要允许所有的服务,而在咖啡店则是除了上网外不允许任何其他请求,这样的需求应该是很常见的,在以前只能频繁的进行手动设置,而现在只需要预设好zone区域集合,然后轻轻点击一下就可以切换过去了上百条策略了,极大的提高了防火墙策略的应用效率

常见的zone区域名称及应用可见下表(默认为public):

  • 这里,如果确定要拒绝,就要用block,不然drop,对方会一直问,就会更多占用你的系统资源
  • 一般ping上面用的是drop

两种火墙策略的比较 :

firewalld和iptables service
firewalld和iptables之间最本质的不同是:
iptables service 在 /etc/sysconfig/iptables 中储存配置
firewalld将配置存储在 /use/lib/firewalld/ 和 /etc/firewalld/ 中的各种XML文件里


还是先了解firewalld策略的参数

--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        ##让“永久生效”的配置规则立即生效,覆盖当前的。

firewalld策略的配置

首先是搭建环境

systemctl stop iptables systemctl disable iptables systemctl mask iptables    //将ipyables关闭冻结 systemctl unmask firewalld systemctl start firewalld systemctl enable firewalld    //解冻并打开firewalld,设定开机自启

firewall-cmd –get-zones 获取可以选择的域
firewall-cmd –list-all 查看默认的public表

  • 其中,域的更改不需要reload或者重启服务,是即改即生效,并且是永久的

客户端访问server端的ftp服务:

//现在不能访问
将默认的域设定为trusted


//再次访问,就可以成功了

rpm -qa firewalld //查看下载的文件firewalld-0.3.9-7.el7.noarchrpm -ql firewalld-0.3.9-7.el7.noarch //查看安装的文件

  • 发现在/usr/lib/firewalld/services 显示了所有firewalld策略可以添加的服务,都是以xml格式存放的

cd /usr/lib/firewalld/servicesvim ftp.xml  <module name="nf_conntrack_ftp"/>

被动模式允许随机的大于1024的端口
lsmod | grep nf 查看ftp开启的这个进程 nf_conntrack_ftp 18638 0 ,有这个才能运行vsftpd服务
modprobe -r nf_conntrack_ftp ##删除
重新读取火墙策略就又有了:

也可以直接更改文件来添加策略

各个域的配置文件 /etc/firewalld/zones

[root@iscsi-server zones]# lspublic.xml  public.xml.old  ROL.xml  //因为只写了这些,old放的是之前的打开public.xml,里面对应的行  添加<service name="ftp"/>那么刚刚的进程 nf_conntrack_ftp       18638  0 (文件一旦更改就会产生,但是需要火墙策略读到,不然也没用,在5之前需要手动添加)//会直接运行,但是火墙还没有读到,需要firewalld-cmd --reload就好了172.25.254.9实现访问信任模式[root@iscsi-server zones]# firewall-cmd --permanent --add-source=172.25.254.9 --zone=trusted [root@iscsi-server zones]# firewall-cmd  --permanent --add-source=172.25.254.0/24 --zone=trusted   //对172.25.254.0/24网段的添加到信任域删除[root@iscsi-server zones]# firewall-cmd --permanent --remove-source=172.25.254.9 --zone=trusted  success[root@iscsi-server zones]# firewall-cmd --permanent --remove-source=172.25.254.0/24 --zone=trusted  success

实现网卡的分流

首先设定server端的IP
eth0 : 172.25.254.109
eth1 : 172.25.9.109

firewall-cmd --permanent --remove-interface=eth1 --zone=public firewall-cmd --permanent --add-interface=eth1 --zone=trusted //注意 : 接口类的更改,需要重启服务,reload不行 !!systemctl restart firewalld.service 

以httpd服务为例 :

reload 不会中断当前的链接,是中断以后的链接
–complete-reload 直接全部中断

  • 开始使所有网卡都允许apache


  • 将eth0转移到不被信任的一方,那么172.25.254.109就无法访问apache了 :



拒绝172.25.254.9 的22端口即ssh访问

在客户端尝试登陆server :

//ssh 端口已经拒绝了

firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 ! -s 172.25.254.9 -p tcp --dport 22 -j ACCEPT//除了30,那么30走的是默认//! 表示除了,只是不包含//所以这一条想拒绝172.25.254.9,需要将默认的ssh取消掉,就在默认中拒绝了

重新将eth1网卡转移回到允许ssh的public域中 :


删除需要重启服务生效,然后就又可以访问了


添加火墙伪装策略

firewalld也是从上到下逐条匹配,所有的火墙都是短路规则

通过“ rich language“ 语法,可以用比直接接口方式更易理解的方法建立复杂防火墙策略。此外,还能永久保留设置。这种语言使用关键词值,是iptables工具的抽象表示。这种语言可以用来配合i分区,也仍然支持现行的配置方式

[root@iscsi-server ~]# firewall-cmd --permanent --add-masquerade //让外部的172.25.254.9的22端口即ssh连接时直接将端口指向172.25.9.209,即连接的是client[root@iscsi-server ~]# firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=172.25.254.9 forward-port port=22 protocol=tcp to-port=22 to-addr=172.25.9.209"//可以让172.25.9.209伪装成172.25.254.109[root@iscsi-server ~]# firewall-cmd --permanent --add-rich-rule="rule family=ipv4 source address=172.25.254.109 masquerade"

重新读取策略生效:

现在,客户端登陆server端,在登陆后显示的IP是172.25.9.209 实际上就是连接的只有私网的主机:


selinux对端口的安全限制

打开httpd服务的主配置文件:/etc/httpd/conf/httpd.conf

将监听的端口设置为 5555

  • 此时重启httpd会失败,这是因为selinux允许的端口中没有当前设置的
semanage port -l //查看selinux允许的端口可以选择setenforce 0 //临时变为警告模式,但是此时会不安全

所以我们可以添加selinux允许的端口semanage port -a -t http_port_t -p tcp 5555  //添加端口


//添加上之后再次重启,就成功了

原创粉丝点击