firewalld防火墙:直接规则、富语言、地址伪装;以及综合示例

目录

直接规则

示例

(1)创建一个黑名单功能链

(2)将来自192.168.10.0/24的数据包指向这个链

(3)每分钟记录一次日志

(4)设置该链的规则为DROP

(5)重载firewalld

清空直接规则

富语言

示例

(1)允许连接http,并使用审核每分钟记录一次

(2)测试

(3)将192.168.10.202地址加入白名单,允许该主机的ipv4连接

其他富语言示例

地址伪装

示例

(1)设置external区域地址伪装

关闭地址伪装、重载

设置external区域中只有192.168.1.0/24网段的数据包才有地址伪装效果

(2)端口转发

(3)将网关服务器的外网接口设置第二个ip地址,让外网主机能够通过两个IP访问Web服务

(4)使用富规则配置端口转发

(5)最后在外网测试机,使用curl命令测试两个ip能否访问Web服务


直接规则

将iptables的规则插入到firewalld防火墙的策略中

示例

将某个IP范围列入黑名单

防止DDOS攻击

(1)创建一个黑名单功能链

先使用firewall-cmd --direct --add-chain ipv4 raw blacklist命令在规则中添加一个名为 blacklist 的新的ipv4原始防火墙链

  1. --direct:这个选项告诉firewall-cmd命令直接在防火墙的底层规则中进行操作,而不是通过firewalld的标准配置接口。
  2. --add-chain ipv4 raw blacklist:在IPv4协议下的原始(raw)表中添加一个名为blacklist的新防火墙链。
    1. 原始表(raw table)是Linux防火墙的一部分,它允许更低层次的处理,通常用于某些特定的高级网络配置和包过滤。

由此命令也可以延伸出其他功能

firewall-cmd --direct --remove-chain ipv4 raw blacklist:删除一个名为blacklist的ipv4原始防火墙链

firewall-cmd --direct --add-chain ipv4 raw blacklist --permanent:在规则中永久添加一个名为 blacklist 的新的ipv4原始防火墙链

(2)将来自192.168.10.0/24的数据包指向这个链

再在该链上加一条规则,用于将指定网段的数据包跳转到blacklist链中

[root@localhost ~]# firewall-cmd --direct --permanent --add-rule ipv4 raw PREROUTING 0 -s 192.168.10.0/24 -j blacklist

PREROUTING: 原始表中的PREROUTING链,该链用于处理进入主机的数据包。
0: 规则的编号。这里的0表示第1行规则,优先级最高,规则从0开始。
-s 192.168.10.0/24: 源IP地址为192.168.10.0/24,匹配从这个网段发起的数据包。
-j blacklist: 如果数据包符合上述条件,则将其跳转到名为 blacklist 的防火墙链进行进一步处理。

(3)每分钟记录一次日志

记录匹配特定条件的流量

[root@localhost ~]# firewall-cmd --direct --permanent --add-rule ipv4 raw blacklist 0 -m limit --limit 1/min -j LOG --log-prefix "blacklist"

blacklist 0:将规则添加到blacklist链中,0是规则的编号
-m limit --limit 1/min:使用limit模块限制每分钟记录的日志消息数量为1条。
-j LOG --log-prefix "blacklist":指定匹配的数据包应该使用前缀“blacklist”进行日志记录。

(4)设置该链的规则为DROP

在该链中添加一条规则,编号为 1,该规则的动作是丢弃 (DROP) 匹配的数据包。

[root@localhost ~]# firewall-cmd --direct --permanent --add-rule ipv4 raw blacklist 1 -j DROP

(5)重载firewalld

[root@localhost ~]# firewall-cmd --reload

此时另一台虚拟机就ping不通了这台配置规则的主机了

使用另一台机器ping过以后,因为是规则指定范围内的IP,所以在/var/log/message日志文件中就可以看到相关日志,以及我们设置的前缀为blacklist

清空直接规则

cd到/etc/firewalld目录下,删除direct.xml文件,再重载防火墙就行了


富语言

 firewalld的富语言(rich language)提供了一种不需要了解 iptables 语法的通过高级语言配置复杂 IPv4和IPv6 防火墙规则的机制,为管理员提供了一种表达性语言,通过这种语言可以表达firewalld 的基本语法中未涵盖的自定义防火墙规则。

示例

需求:允许主机建立连接,并且每分钟审核一下

yum -y install httpd安装Apache软件包

(1)允许连接http,并使用审核每分钟记录一次

[root@localhost ~]# firewall-cmd --add-rich-rule='rule service name=http log prefix=httpAccess limit value=1/m audit accept'
--add-rich-rule:用于添加富规则。

(2)测试

使用echo "Test Web" > /var/www/html/index.html命令修改http服务的首页

另一台主机curl测试

201主机cat /var/log/message

(3)将192.168.10.202地址加入白名单,允许该主机的ipv4连接

[root@localhost firewalld]# firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.10.202" accept'
--add-rich-rule:用于添加富规则。 
family="ipv4":规定规则适用于 IPv4 地址族。
source address="192.168.10.202":指定允许来自 IP 地址 192.168.10.202 的流量通过。
accept:如果规则匹配,接受(允许)这些数据包。

其他富语言示例

允许了来自 192.168.10.0/24 网段的主机访问 TFTP 服务,并记录相关日志

[root@localhost ~]# firewall-cmd --add-rich-rule='rule family="ipv4" source address="192.168.10.0/24" service name="tftp" log prefix="MyTFTPLOG: " level="info" limit value="1/m" accept'

允许了来自相同网段的主机访问 TCP 端口范围在 7000 到 8000 的服务

[root@localhost ~]# firewall-cmd --zone=dmz --add-rich-rule="rule family='ipv4' source address='192.168.10.0/24' port port='7000-8000' protocol='tcp' accept"

地址伪装

源地址转换:内网访问外网

目标地址转换:外网访问内部服务器

示例

该示例是基于本人的上一章firewalld防火墙的博客中的示例为基础,在该基础之上实现地址伪装的功能

上一章firewalld防火墙博客:http://t.csdnimg.cn/5yN7K

实现外网主机访问内网Web服务器dmz区域的Web服务

需要在网关服务器做地址转换

(1)设置external区域地址伪装

[root@gateway-server ~]# firewall-cmd --list-all --zone=external 
external (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: 
  ports: 12345/tcp
  protocols: 
  masquerade: yes
  forward-ports: 
  source-ports: 
  icmp-blocks: echo-request
  rich rules: 
关闭地址伪装、重载
[root@gateway-server ~]# firewall-cmd --remove-masquerade --zone=external --permanent 
[root@gateway-server ~]# firewall-cmd --reload

此时内网的主机和服务器就不能访问外网了(ping)

设置external区域中只有192.168.1.0/24网段的数据包才有地址伪装效果

只有192.168.1.0/24网段的包才有地址伪装效果(可以访问外网主机),而内网Web服务器(192.168.2.10)就不能访问外网主机

[root@gateway-server ~]# firewall-cmd --zone=external --add-rich-rule="rule family='ipv4' source address='192.168.1.0/24' masquerade" --permanent
success
[root@gateway-server ~]# firewall-cmd --reload
success
[root@gateway-server ~]# firewall-cmd --list-all --zone=external
external (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens33
  sources: 
  services: 
  ports: 12345/tcp
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: echo-request
  rich rules: 
    rule family="ipv4" source address="192.168.1.0/24" masquerade

(2)端口转发

将所有进入防火墙外部区域(external)的80端口的TCP流量转发到内部网络的192.168.2.10主机上

[root@gateway-server ~]# firewall-cmd --zone=external --add-forward-port=port=80:proto=tcp:proto=tcp:toaddr=192.168.2.10 --permanent
收到来自外网的80端口且是tcp协议的包;转发到192.168.2.10的80端口,也是tcp协议的
[root@gateway-server ~]# firewall-cmd --reload # 重启服务

  • port=80:proto=tcp:proto=tcp:toaddr=192.168.2.10 这部分指定了具体的转发规则
    • port=80: 表示要转发的端口是80端口,即HTTP服务的标准端口。
    • proto=tcp: 指定协议为TCP,这是HTTP服务使用的协议。
    • toaddr=192.168.2.10: 指定转发的目标地址,即所有发往防火墙的80端口的TCP流量都将被转发到192.168.2.10这台主机。

此时就实现了内网测试机可以访问内网Web服务器的http服务,外网测试机也能访问内网Web服务器的http服务,但是外网测试机不能访问整个内网,内网测试机却可以访问外网测试机

(3)将网关服务器的外网接口设置第二个ip地址,让外网主机能够通过两个IP访问Web服务

假如内网的Web服务器新申请了一个公网ip 100.1.1.15,将新的公网ip设置网关服务器的外网网卡ens33,作为第二个ip地址

vim /etc/sysconfig/network-scripts/ifcfg-ens33

使用ip a命令的效果,可以看到ens33接口有两个ip

(4)使用富规则配置端口转发

[root@gateway-server network-scripts]# firewall-cmd --zone=external --add-rich-rule="rule family=ipv4 destination address=100.1.1.15/32 forward-port port=80 protocol=tcp to-addr=192.168.2.10" --permanent
[root@gateway-server network-scripts]# firewall-cmd --reload

(5)最后在外网测试机,使用curl命令测试两个ip能否访问Web服务

  • 37
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 你可以使用命令行工具iptables,来开启端口9000和8123:iptables -A INPUT -p tcp --dport 9000 -j ACCEPT iptables -A INPUT -p tcp --dport 8123 -j ACCEPT ### 回答2: 在Linux系统中,使用firewalld防火墙开启端口9000和8123十分简单。可以按照以下步骤进行操作: 1. 首先,以管理员身份登录到Linux系统。 2. 打开终端或控制台窗口。 3. 输入以下命令以开启9000端口: ``` sudo firewall-cmd --zone=public --add-port=9000/tcp --permanent ``` 这条命令将允许TCP流量在9000端口上通过防火墙。 4. 接下来,输入以下命令以开启8123端口: ``` sudo firewall-cmd --zone=public --add-port=8123/tcp --permanent ``` 同样地,这条命令将允许TCP流量在8123端口上通过防火墙。 5. 执行完上述命令后,记得重启firewalld服务以使更改生效。输入以下命令: ``` sudo systemctl restart firewalld ``` 以上步骤完成后,firewalld防火墙将会开放9000和8123端口,以允许TCP流量通过防火墙。这样,你的系统就可以正常与这些端口进行通信了。请注意,在这个过程中,我们使用了sudo命令,这是为了获取管理员权限来执行防火墙设置操作。 ### 回答3: 要在firewalld防火墙中开启端口9000和8123,可以按照以下步骤进行操作: 1. 首先,使用root权限登录到Linux系统。 2. 检查系统上是否已安装和启动了firewalld防火墙。可以运行以下命令来验证: ``` systemctl status firewalld ``` 3. 如果firewalld防火墙未启动,则可以使用以下命令启动它: ``` systemctl start firewalld ``` 4. 接下来,要允许端口9000通过firewalld防火墙,可以运行以下命令: ``` firewall-cmd --zone=public --add-port=9000/tcp --permanent ``` 这将在防火墙的public区域中添加一个永久的TCP规则,允许端口9000的通信。 5. 然后,要允许端口8123通过firewalld防火墙,可以运行以下命令: ``` firewall-cmd --zone=public --add-port=8123/tcp --permanent ``` 这将在防火墙的public区域中添加一个永久的TCP规则,允许端口8123的通信。 6. 最后,要使上述更改生效,需要重新加载firewalld配置。可以运行以下命令: ``` firewall-cmd --reload ``` 系统将重新加载配置文件,并且在防火墙中添加了允许9000和8123端口的规则。 现在,firewalld防火墙已经开启了端口9000和8123,允许通过它们进行通信。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值