1.1 关于iptables的知识
IP 数据包过滤系统是一种功能强大的工具,可用于添加、编辑和除去规则,这些规则是在做数据包过滤决定时,防火墙所遵循和组成的规则。这些规则存储在专用的数据包过滤表中,而这些表集成在 Linux 内核中。在数据包过滤表中,规则被分组放在我们所谓的链(chain)中。
虽然 netfilter/iptables IP 数据包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和iptables 组成。
(1).netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些数据包过滤表组成,这些表包含内核用来控制数据包过滤处理的规则集。
(2).iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去数据包过滤表中的规则变得容易。
iptables 包含4个表,5个链。其中表是按照对数据包的操作区分的,链是按照不同的Hook(挂钩)点来区分的,表和链实际上是netfilter 的两个维度。
1.2 firewalld中理解直接规则
将 iptables 的规则插入到 firewalld 的管理区域中,这种方式写的规则叫直接规则。
将某个IP 范围列入黑名单在这个例子中首先自定义了一个叫 blacklist 的链,然后将所有来自 192.168.10.0/24 的数据包都指向了这个链,最后定义了这个链的规则:首先进行记录,然后drop,记录的方法是使用“blacklisted:"前缀并且限制 1分钟记录一次。
(1)创建一个黑名单,并为这个黑名单创建一个链,链名为 blacklist
(2)将来自 192.168.10.0/24 的数据包指向这个链
(3)每分钟记录一次日志(-m limit --limit 1/min 每分钟记录一次日志)
(4)设置这个链的规则为 DROP
(5)重启 firewalld(重启或重载后生效)
(6)查看直接规则
注释:
- 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 日志文件条目
1.3 使用富语言
1.什么是富语言
不需要使用 iptables 语法,而是使用高级语言配置防火墙规则的机制成为富语言。
3.理解富规则命令
4.规则配置举例
(1)为认证报头协议 AH 使用新的 IPv4 和 IPv6 连接(2)允许新的 IPv4 和 IPv6 连接 http,并使用审核每分钟记录一次
(3)允许来自 192.168.0.0/24 地址的 TFTP 协议的IPv4连接,并且使用系统日志每分钟记录一次
(4)为 RADIUS 协议拒绝所有来自 1:2:3:4:6::的新的IPv6 连接,日志前缀为“dns”,级别为info,并每分钟最多记录3次。接受来自其他发起段新的IPv6 连接
(5)将源 192.168.2.2 地址加入白名单,以允许来自这个源地址的所有连接
(6)拒绝(删除)来自 public 区域中IP 地址为 192.168.0.11 的所有流量
(7)丢弃来自默认区域中任何位置的所有传入的ipsecesp 协议包
(8)在 192.168.1.0/24 子网的 dmz 区域中,接收端口 7900--1905 的所有 TCP 包
(9)接受从 work区域到 ssh 的新连接,以 notice 级别且每分钟最多三条信息的方式将新连接记录到 syslog
(10)在接下来的 5min 内,拒绝从默认区域中的子网 192.168.2.0/24 到 DNS 的新连接,并且拒绝的连接将记录到 audit 系统,且每小时最多一条消息