火墙策略(下) & firewalld

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.noarch
rpm -ql firewalld-0.3.9-7.el7.noarch //查看安装的文件

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

cd /usr/lib/firewalld/services
vim 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]# ls
public.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  //添加端口


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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值