Firewalld防火墙(二)

一.firewalld高级配置

1.关于iptables的知识

IP 数据包过滤系统是一种功能强大的工具,可用于添加、编辑和除去规则,这些规则是在做数据包过滤决定时,防火墙所遵循和组成的规则。这些规则存储在专用的数据包过滤表中,而这些表集成在 Linux 内核中。在数据包过滤表中,规则被分组放在我们所谓的链(chain)中。

虽然 netfilter/iptables IP 数据包过滤系统被称为单个实体,但它实际上由两个组件 netfilter 和 iptables 组成。

(1). netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些数据包过滤表组成,这些表包含内核用来控制数据包过滤处理的规则集。

(2). iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去数据包过滤表中的规则变得容易。

iptables包含4个表,5个链。其中表是按照对数据包的操作区分的,链是按照不同的Hook(挂钩)点来区分的,表和链实际上是netfilter的两个维度。

2.firewalld中理解直接规则

将iptables的规则插入到firewalld的管理区域中,这种方式写的规则叫直接规则。

将某个IP范围列入黑名单

在这个例子中首先自定义了一个叫blacklist的链,然后将所有来自192.168.10.0/24的数据包都指向了这个链,最后定义了这个链的规则:首先进行记录,然后drop,记录的方法是使用"blacklisted: "前缀并且限制1分钟记录一次。

(1)创建一个黑名单,并为这个黑名单创建一个链,链名为blacklist

root@localhost \~\]# firewall-cmd --direct --permanent --add-chain ipv4 raw blacklist (2)将来自192.168.10.0/24的数据包指向这个链 \[root@localhost \~\]# firewall-cmd --direct --permanent --add-rule ipv4 raw PREROUTING 0 -s 192.168.10.0/24 -j blacklist (3)每分钟记录一次日志(-m limit --limit 1/min 每分钟记录一次日志) \[root@localhost \~\]# firewall-cmd --direct --permanent --add-rule ipv4 raw blacklist 0 -m limit --limit 1/min -j LOG --log-prefix "blacklisted" (4)设置这个链的规则为DROP \[root@localhost \~\]# firewall-cmd --direct --permanent --add-rule ipv4 raw blacklist 1 -j DROP (5)重启firewalld(重启或重载后生效) \[root@localhost \~\]# systemctl restart firewalld (6)查看直接规则 \[root@localhost \~\]# cat /etc/firewalld/direct.xml \ \ \ \-s 192.168.10.0/24 -j blacklist\ \-j DROP\ \ 注释: Ipv4:这个属性非常简单,表示ip的版本 table:chain和rule节点中的table属性就是iptables/ip6tables中的table chain:chain中的chain属性用于指定一个自定义链的名字,注意,不可与已有链重名;rule中的chain属性既可以是内建的(也就是iptables/ip6tables中的五条链),也可以是在direct中自定义的chain priority:优先级,用于设置不同rule的优先级,就像iptables中规则的前后顺序,数字越小优先级越高 args:rule和passthrough中的args就是iptables/ip6tables中的一条具体的规则,不过他们可以使用我们自定义的chain。 备注:用其他主机ping它,然后查看messages日志文件,会看到相关的日志条目 备注: 清空直接规则 /etc/firewalld/direct.xml #### 3.使用富语言 1:什么是富语言 不需要使用iptables语法,而是使用高级语言配置防火墙规则的机制成为富语言。 规则排序 测试和调试 3:理解富规则命令 4:规则配置举例 (1)为认证报头协议AH使用新的IPv4和IPv6连接 \[root@localhost \~\]# firewall-cmd --add-rich-rule='rule protocol value=ah accept' (2)允许新的IPv4和IPv6连接http,并使用审核每分钟记录一次 \[root@localhost \~\]# firewall-cmd --add-rich-rule='rule service name=http log prefix=httpaccess limit value=1/m audit accept' 注意: 开启日志记录后 \[root@localhost \~\]# cat /var/log/messages Jan 14 11:27:29 192 kernel: 'httpaccess'IN=ens33 OUT= MAC=00:0c:29:85:a0:bd:00:0c:29:5e:d3:72:08:00 SRC=192.168.10.102 DST=192.168.10.101 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=60222 DF PROTO=TCP SPT=53168 DPT=80 WINDOW=29200 RES=0x00 SYN URGP=0 (3)允许来自192.168.0.0/24地址的TFTP协议的IPv4连接,并且使用系统日志每分钟记录一次 \[root@localhost \~\]# firewall-cmd --add-rich='rule family="ipv4" source address="192.168.0.0/24" service name="tftp" log prefix="tftp" level="info" limit value="1/m" accept' (4)为RADIUS协议拒绝所有来自1:2:3:4:6::的新的IPv6连接,日志前缀为"dns",级别为info,并每分钟最多记录3次。接受来自其他发起段新的IPv6连接 \[root@localhost \~\]# firewall-cmd --add-rich-rule='rule family="ipv6" source address="1:2:3:6::" service name="raduis" log prefix="dns" level="info" limit value="3/m" reject' (5)将源192.168.2.2地址加入白名单,以允许来自这个源地址的所有连接 \[root@localhost \~\]# firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.2.2" accept' (6)拒绝(删除)来自public区域中IP地址为192.168.0.11的所有流量 \[root@localhost \~\]# firewall-cmd --zone=public --add-rich-rule='rule family=ipv4 source address=192.168.10.202/32 reject' \[root@localhost \~\]# firewall-cmd --zone=public --remove-rich-rule='rule family=ipv4 source address=192.168.10.202/32 reject' (7)丢弃来自默认区域中任何位置的所有传入的ipsec esp协议包 \[root@localhost \~\]# firewall-cmd --add-rich-rule='rule protocol value="esp" drop' (8)在192.168.1.0/24子网的dmz区域中,接收端口7900--1905的所有TCP包 \[root@localhost \~\]# firewall-cmd --zone=dmz --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 port port=7900-1905 protocol=tcp accept' (9)接受从work区域到ssh的新连接,以notice级别且每分钟最多三条信息的方式将新连接记录到syslog \[root@localhost \~\]# firewall-cmd --zone=work --add-rich-rule='rule service name=ssh log prefix="ssh" level="notice" limit value="3/m" accept' (10)在接下来的5min内,拒绝从默认区域中的子网192.168.2.0/24到DNS的新连接,并且拒绝的连接将记录到audit系统,且每小时最多一条消息 \[root@localhost \~\]# firewall-cmd --add-rich-rule='rule family=ipv4 source address=192.168.2.0/24 service name=dns audit limit value="1/h" reject' --timeout=300 ## 二.配置firewalld防火墙的地址伪装和端口转发 实验环境 实验描述 实验需求 ens33分配到external区域、ens37分配到trusted区域、ens38分配到dmz区域 网站服务器和网关服务器通过ssh来远程管理,并修改端口号为12345 服务器开启https, web服务器拒绝ping,网关服务器拒绝来自互联网上的ping 公司内网用户需要通过网关服务器共享上网 互联网用户需要访问dmz区域的web服务 实验过程 #### 1.基本配置 1:基本环境配置 按照实验TOP设置各个服务器网卡的IP地址 (1)在网关服务器上配置主机名 \[root@localhost \~\]# hostname gateway-server \[root@localhost \~\]# vi /etc/hostname gateway-server (2)开启网关服务器的路由转发功能 \[root@localhost \~\]# vi /etc/sysctl.conf net.ipv4.ip_forward=1 \[root@localhost \~\]# sysctl -p (3)配置web服务器的主机名 \[root@localhost \~\]# vi /etc/hostname web 2:网站服务器环境的搭建 (1)验证firewalld在网站服务器上是否启动并且正常运行 \[root@web \~\]# systemctl status firewalld (2)安装httpd和mod_ssl软件包 \[root@web \~\]# yum install -y httpd mod_ssl (3)启用并启动httpd服务 \[root@web \~\]# systemctl start httpd \[root@web \~\]# systemctl enable httpd (4)创建网站首页测试页index.html \[root@web \~\]# vi /var/www/html/index.html test web (5)更改ssh的监听端口,并重启服务,关闭SELinux \[root@web \~\]# setenforce 0 \[root@web \~\]# vi /etc/ssh/sshd_config Port 12345 \[root@web \~\]# systemctl restart sshd 3:在网站服务器上配置firewalld防火墙 (1)设置默认区域为dmz区域 \[root@web \~\]# firewall-cmd --set-default-zone=dmz (2)为dmz区域打开https服务并添加TCP的12345端口 \[root@web \~\]# firewall-cmd --zone=dmz --add-service=https --permanent \[root@web \~\]# firewall-cmd --zone=dmz --add-port=12345/tcp --permanent (3)禁止ping \[root@web \~\]# firewall-cmd --add-icmp-block=echo-request --zone=dmz --permanent (4)因为预定于的ssh服务已经更改了端口,所以要将预定于ssh服务移除 \[root@web \~\]# firewall-cmd --zone=dmz --remove-service=ssh --permanent (5)重新加载firewalld配置。并查看之前的配置 \[root@web \~\]# firewall-cmd --reload \[root@web \~\]# firewall-cmd --list-all dmz (active) target: default icmp-block-inversion: no interfaces: ens33 sources: services: https ports: 12345/tcp protocols: masquerade: no forward-ports: sourceports: icmp-blocks: echo-request rich rules: 4:在网关服务器上配置firewalld防火墙 (1)验证firewalld在网关服务器上是否启动并且正在运行 \[root@gateway-server \~\]# systemctl status firewalld (2)设置默认区域为external区域,并查看配置结果 \[root@gateway-server \~\]# firewall-cmd --set-default-zone=external \[root@gateway-server \~\]# firewall-cmd --list-all external (active) target: default icmp-block-inversion: no interfaces: ens33 ens37 ens38 sources: services: ssh ports: protocols: masquerade: yes forward-ports: sourceports: icmp-blocks: rich rules: (3)将ens37网卡配置到trusted区域,将ens38配置到dmz区域 \[root@gateway-server \~\]# firewall-cmd --change-interface=ens37 --zone=trusted --permanent \[root@gateway-server \~\]# firewall-cmd --change-interface=ens38 --zone=dmz --permanent (4)查看配置情况 \[root@gateway-server \~\]# firewall-cmd --get-active-zone dmz interfaces: ens38 external interfaces: ens33 trusted interfaces: ens37 (5)在企业内网测试计算机上访问网站服务器 https:192.168.2.10 (6)关闭SELinux,更改ssh的监听端口,并重启服务 \[root@gateway-server \~\]# setenforce 0 \[root@gateway-server \~\]# vi /etc/ssh/sshd_config Port 12345 \[root@gateway-server \~\]# systemctl restart sshd (7)配置external区域添加TCP的12345端口 \[root@gateway-server \~\]# firewall-cmd --zone=external --add-port=12345/tcp --permanent (8)配置external区域移除ssh服务 \[root@gateway-server \~\]# firewall-cmd --zone=external --remove-service=ssh --permanent (9)配置external区域禁止ping \[root@gateway-server \~\]# firewall-cmd --zone=external --add-icmp-block=echo-request --permanent (10)重新加载防火墙配置 \[root@gateway-server \~\]# firewall-cmd --reload (11)在互联网测试机上通过ssh登录网关玩不接口地址的12345端口 \[root@localhost \~\]# ssh -p 12345 100.1.1.10 (12)在企业内网测试机上ssh登录web网站服务器的12345端口 \[root@localhost \~\]# ssh -p 12345 192.168.2.10 #### 2.配置IP伪装与端口转发 1:内网用户通过网关服务器共享上网 (1)外网测试机搭建网站服务,并添加测试网页 \[root@localhost \~\]# hostname internet \[root@localhost \~\]# bash \[root@internet \~\]# yum install -y httpd \[root@internet \~\]# vi /var/www/html/index.html internet web \[root@internet \~\]# systemctl enable httpd \[root@internet \~\]# systemctl start httpd \[root@192 \~\]# firewall-cmd --add-service=http --permanent \[root@192 \~\]# firewall-cmd --reload (2)在企业内网测试机上访问外网网站,结果是可以访问的 http://100.1.1.20 (3)在dmz的网站服务器上测试,同样可以访问 http://100.1.1.20 (4)查看网关服务器的external区域是否开启了地址伪装 \[root@internet \~\]# firewall-cmd --list-all --zone=external external target: default icmp-block-inversion: no interfaces: sources: services: ssh ports: protocols: masquerade: yes forward-ports: sourceports: icmp-blocks: rich rules: (5)源地址192.168.1.0/24网段的地址开启IP伪装 在网关服务器上关闭external的地址伪装,添加富规则,要求external区域内源地址为192.168.1.0/24网段的地址开启地址IP伪装 \[root@gateway-server \~\]# firewall-cmd --remove-masquerade --zone=external --permanent \[root@gateway-server \~\]# firewall-cmd --zone=external --add-rich-rule='rule family=ipv4 source address=192.168.1.0/24 masquerade' --permanent \[root@192 \~\]# firewall-cmd --reload (6)在dmz的网站服务器上测试访问外网,应该不能访问外网,但内网可以 http://100.1.1.20 2:配置端口转发实现互联网用户访问内部web服务器 (1)在网关服务器上配置端口转发 \[root@gateway-server \~\]# firewall-cmd --zone=external --add-forward-port=port=443:proto=tcp:toaddr=192.168.2.10 --permanent (2)在互联网测试机上访问内部web服务器,可以访问成功 https://100.1.1.10 3)端口转发也可以使用富规则,这样就可以更大程度的控制端口转发规则,如给内网的web服务器申请了一个新的公网ip地址100.1.1.15,需要将新的公网地址100.1.1.15配置在网关服务器的外网接口ens33上,作为第二个Ip地址 \[root@gateway-server \~\]# vi /etc/sysconfig/network-scripts/ifcfg-ens33 TYPE=Ethernet BOOTPROTO=static NAME=ens33 DEVICE=ens33 ONBOOT=yes IPADDR1=100.1.1.15 PREFIX1=24 IPADDR0=100.1.1.10 PREFIX=24 \[root@gateway-server \~\]# systemctl restart network \[root@gateway-server \~\]# ip add 1: lo: \ mtu 65536 qdisc noqueue state UNKNOWN qlen 1 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens33: \ mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:ae:7f:64 brd ff:ff:ff:ff:ff:ff inet 100.1.1.10/8 brd 100.255.255.255 scope global ens33 valid_lft forever preferred_lft forever inet 100.1.1.15/24 brd 100.1.1.255 scope global ens33 valid_lft forever preferred_lft forever 使用富规则配置端口转发 \[root@gateway-server \~\]# firewall-cmd --zone=external --add-rich-rule='rule family=ipv4 destination address=100.1.1.15/32 forward-port port=443 protocol=tcp to-addr=192.168.2.10' 在互联网测试机上访问,可以访问成功 https://100.1.1.15

相关推荐
Waitccy2 分钟前
Linux 系统安全基线检查:入侵防范测试标准与漏洞修复方法
linux·运维·网络·安全·系统安全·等保
TDengine (老段)1 小时前
基于 TSBS 标准数据集下 TimescaleDB、InfluxDB 与 TDengine 性能对比测试报告
java·大数据·开发语言·数据库·时序数据库·tdengine·iotdb
ShiYQ@师1 小时前
Ubuntu 18.04.6下OpenSSL与OpenSSH版本升级
linux·ubuntu
TDengine (老段)1 小时前
TDengine 在金融领域的应用
大数据·数据库·物联网·金融·时序数据库·tdengine·涛思数据
遇见火星1 小时前
Ansible模块——从控制节点向目标主机复制文件!
java·服务器·ansible
标贝科技1 小时前
标贝科技:大模型领域数据标注的重要性与标注类型分享
数据库·人工智能
带鱼吃猫1 小时前
Linux系统:文件系统前言,详解CHS&LBA地址
linux·运维·服务器
野木香1 小时前
mysql8常用sql语句
数据库·sql·mysql
hycccccch1 小时前
Redis的IO多路复用
数据库·redis·缓存
香饽饽~、1 小时前
函数式方法的实现(JDK8+)
java·服务器