Linux

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > Linux > Linux安全防火墙配置策略

Linux安全防火墙(iptables)配置策略分享

作者:木合杉

这篇文章主要介绍了Linux安全防火墙(iptables)配置策略,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

概念

防火墙(Firewall)是一种网络安全设备或软件,用于保护计算机网络免受未经授权的访问、恶意攻击和恶意软件的侵害。它充当了网络和互联网与内部网络之间的关卡,对流量进行过滤和监控,以确保网络安全和保护敏感数据。

防火墙可以部署在不同的层级,包括网络层、数据链路层和应用层,以提供不同级别的保护。有硬件防火墙和软件防火墙两种类型,它们可以独立运行或组合使用,以实现全面的网络安全。

综而言之,防火墙是网络安全的关键组成部分,有助于保护网络和系统免受恶意攻击、未经授权的访问和数据泄露。在建立防火墙策略时,必须根据网络需求和威胁模型来定义规则,以确保网络的安全性和可用性。

除此以外,还有防水墙,ensp:不透明的工作方式,就是你干什么都知道,但你自己不知道。

防火墙的主要功能和特点

防火墙分类

按部署位置分类:

按技术分类:

按硬件或软件分类:

按防火墙结构分类:

按性能分类:

按使用方法分类:

其他概念

通信五要素:

源ip和目的ip

源端口和目的端口

协议(tcp/udp)

通信四要素

源ip和目的ip

源端口和目的端口

用户态和内核态

用户态防火墙:面向使用对象,就是使用工具,配置策略

内核态防火墙:代码层(开发)

iptables就属于用户态防火墙,配置规则生效后,立即生效,无需重启。centos7之前,iptables是默认配置,现在默认是firewalld。centos7之后要使用iptables要把firewalld关闭

四个表五个链

在 Linux 上,iptables 防火墙系统通常使用四个主要表来控制网络数据包的过滤和处理。这四个表分别是:​​​​filter​​​​、​​​​mangle​​​​、​​​​nat​​​​ 和 ​​​​raw​​​​。每个表有不同的目的和功能,用于管理不同层次的数据包处理。

四个表

raw 表:关闭启用的连接跟踪机制,加快封包穿越防火墙速度

mangle 表:修改数据标记位规则表

nat 表:network address translation 地址转换规则表

filter 表:过滤规则表,根据预定义的规则过滤符合条件的数据包,默认表

这四个表共同构成了 iptables 防火墙的核心,允许管理员通过配置规则和链来控制数据包的流向、处理和修改。这种细粒度的控制有助于实施网络安全策略和网络地址转换等功能。管理员可以使用不同链和规则来自定义防火墙行为,以满足网络环境的需求。

五条链

四表五链

数据包过滤的匹配流程

三种报文流向

流入本机:PREROUTING --> INPUT-->用户空间进程 httpd服务-目的转换-httpd 流出本机:用户空间进程 -->OUTPUT--> POSTROUTING httpd服务-out-源地址 转发:PREROUTING --> FORWARD --> POSTROUTING -----FOR------

规则内的匹配顺序

自上向下按顺序依次进行检查,找到相匹配的规则即停止(LOG策略例外,表示记录相关日志) 若在该链内找不到相匹配的规则,则按该链的默认策略处理(未修改的状况下,默认策略为允许)

iptables

iptables命令的格式和相关选项

管理选项

匹配规则:从上到下按照顺序依次检查,找到匹配的规则立刻停止匹配。找到匹配规则,会按照链的默认规则进行执行。如果不指定表名,默认就是filter

-A:向指定的链(如INPUT、OUTPUT、FORWARD)的末尾追加一条规则。

iptables -A INPUT (操作)

-I:在指定链的指定位置插入一条规则,根据编号来进行插入,不指定序号,直接插入当前链中的第一条(不推荐)。

iptables -I INPUT (操作)

-P:设置指定链的默认策略(如ACCEPT、DROP)。

iptables -P OUTPUT ACCEPT (操作)

-D:从指定的链中删除一条规则。

iptables -t nat -D INPUT 2 (操作)

-R:替换指定链中的一条规则。

iptables -t nat -R INPUT (操作)

-L:列出指定链中的所有规则。

iptables -t nat -L (查看)

-n:所有字段以数字形式展示

iptables -L -n,iptables -nL,iptables -vnL (查看)

-v:显示详细信息

常跟-L一起使用 (查看)

-F:清除指定链中的所有规则。

iptables -F

-N:创建一个新的自定义链。

iptables -N

-X:删除一个自定义链。

iptables -X

-Z:将所有链中的数据包计数器归零。

iptables -Z

-S:看链的所有规则或者某个链的规则/某个具体规则后面跟编号

匹配条件

匹配条件是用来确定是否应用某个规则的依据。

数据包的控制类型

使用实例

实验准备

CentOS7默认使用firewalld防火墙,没有安装iptables,若想使用iptables防火墙。必须先关闭firewalld防火墙, 再安装iptables

bash systemctl stop firewalld.service

setenforce 0

systemctl disable --now firewalld.service

开机不自启 并且立即关闭

systemctl enable --now firewalld.service

开机自启 并且 立即开启

yum -y install iptables iptables-services systemctl start iptables.service systemctl enable iptables.service

查看

粗略查看默认规则:

[root@localhost ~]#iptables -L

数字化的形式查看规则: [root@localhost ~]#iptables -nL

注意:当-nL同时使用时,n一定要在L 的前面,否则会报错,使用-vnL时也是如此,L要在最后面

指定表查看:

[root@localhost ~]#iptables -t filter -vnL

查看指定表中的指定链

[root@localhost ~]#iptables -t filter -vnL INPUT #不指定表,默认就是filter

列出当前防火墙规则,并显示每条规则的行号、详细信息、以数值格式显示的 IP 地址和端口号

iptables: 这是用于配置Linux内核防火墙规则的命令。

-vnL: 这是一组参数,具体含义如下:

--line-numbers: 这个参数用于显示规则的行号(line numbers),以便更容易识别和引用特定规则。

这个命令的作用是列出当前防火墙规则,并显示每条规则的行号、详细信息、以数值格式显示的 IP 地址和端口号。

添加规则

添加新的防火墙规则时,使用管理选项“-A”、“-I”,前者用来追加规则,后者用来插入规则。

禁止所有主机ping本机和允许(如果先允许,那么就不会禁止。匹配到了就不在匹配后面的规则)

iptables: 这是用于配置Linux防火墙规则的命令。

因此,这个命令的作用是将一个规则添加到 "filter" 表的 "INPUT" 链中,以允许所有的 ICMP 数据包通过防火墙。

指定序号插入

插入到第一条:iptables -t filter -I INPUT 1 -p icmp -j ACCEPT

因此,这个命令的作用是将一个规则插入到 "filter" 表的 "INPUT" 链的第一个位置,以允许所有的 ICMP 数据包通过防火墙。

禁止任何主机tcp

拒绝来自特定源IP地址 192.168.41.13,目标端口为 80 的 TCP 数据包。

iptables -t filter -I INPUT 1 -s 192.168.41.13 -p tcp --dport 80 -j REJECT

拒绝多态主机,用,连接ip

iptables -t filter -A INPUT -s 192.168.41.11,192.168.41.13 -p icmp -j REJECT

拒绝单台主机,其他主机可以连接

iptables -t filter -A INPUT -s 192.168.41.11 -p icmp -j REJECT

拒绝主机发出数据包

iptables -t filter -A OUTPUT -s 192.168.41.10 -p icmp -j REJECT

删除规则

根据序号删除内容 iptables -D INPUT 1 #删除指定的INPUT链中的第一条规则

INPUT 链中删除第二条规则

iptables -D INPUT 2

iptables: 这是用于配置Linux内核防火墙规则的命令。 -D INPUT 2: -D 参数表示删除规则,INPUT 是规则所在的链(chain),2 是要删除的规则的位置或规则编号。在这个例子中,它指示删除 INPUT 链中的第二条规则。 这个命令的作用是从 INPUT 链中删除第二条规则。防火墙规则是按顺序执行的,所以删除一条规则后,后续规则的编号会向前移动。

按照内容匹配删除

内容匹配删除(有两个相同的则作用为去重) 如果有两个重复的规则,则删除序号较小的 [root@localhost ~]# iptables -D INPUT -p icmp -j REJECT #删除序号小的

演示删除序号较小的 [root@localhost ~]# iptables -t filter -A INPUT -p icmp -j REJECT

[root@localhost ~]# iptables -t filter -A INPUT -p icmp -j ACCEPT

[root@localhost ~]# iptables -t filter -A INPUT -p icmp -j REJECT

[root@localhost ~]# iptables -nL INPUT --line-number

Chain INPUT (policy ACCEPT)

num target prot opt source destination

1 REJECT icmp -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable

2 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0

[root@localhost ~]# iptables -D INPUT -p icmp -j REJECT #第二次就时删除指定。 [root@localhost ~]# iptables -nL INPUT --line-numbers

Chain INPUT (policy ACCEPT)

num target prot opt source destination

1 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0

注意:按照内容匹配删除规则,只能每次删除内容相同序号较小的规则。

直到删除最后一条时,才能将该规则全部清除 。

一定要报保证该匹配的内容存在,且完全匹配规则才能删除,不然报错。

修改规则

-R 直接修改。
为了保险起见,我们可以尝试着先添加一条新的规则,
确保新规则不会带来任何不利的影响再删除旧的规则(也能达到替换的效果)

[root@localhost ~]# iptables -t filter -A INPUT -p icmp -j ACCEPT

[root@localhost ~]# iptables -nL INPUT --line-number  #查看规则
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0

[root@localhost ~]# iptables -R INPUT 1 -p icmp -j REJECT #替换
[root@localhost ~]# iptables -nL INPUT --line-number  #ACCEPT替换成了REJECT
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    REJECT     icmp --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable

设置默认策略

iptables -P INPUT DROP

这个命令的效果是,如果没有特定规则匹配一个进入系统的数据包,那么该数据包将被拒绝,从而增强了系统的安全性。

设置一条允许,相当于白名单

iptables -t filter -A INPUT -p ICMP -j ACCEPT

1.-F 仅仅是清空链中的规则,并不影响 -P 设置的规则,默认规则需要手动进行修改 2.-P 设置了DROP后,使用 -F 一定要小心!

#防止把允许远程连接的相关规则清除后导致无法远程连接主机,此情况如果没有保存规则可重启主机解决

此时的解决方案有三种:

在生产中都是默认DROP

通用匹配

网络协议、IP地址、网络接口等条件。

网络协议
[root@localhost ~]# iptables -A INPUT ! -p icmp -j ACCEPT #除了icmp以外,所有的协议都可以进入

#这是假的取反。定义的默认策略还在执行ACCEPT,只有该变默认策略,才能生效

[root@localhost ~]#iptables -P INPUT DROP #这时候才能取反

其他的服务不受影响,这个时候,把策略清空,所有的协议都将被DROP

[root@localhost ~]#iptables -F

只能进虚拟机重启

IP地址
[root@localhost ~]# iptables -A INPUT -s 192.168.41.13 -j DROP #禁止22的数据进入
IP范围匹配
[root@localhost ~]# iptables -A INPUT -p icmp -m iprange --src-range 192.168.233.20-192.168.233.30 -j REJECT

禁止网段内的ip地址ping主机

网络接口
[root@localhost ~]# iptables -I INPUT 1 -i ens33 -s 192.168.41.0/24 -j DROP #禁止指定的网络设备名称ens33的所有网段
使整个网段不能用指定的端口
[root@localhost ~]# iptables -t filter -A INPUT -s 192.168.41.0/24 -p tcp --dport 80 -j REJECT #禁止整个网段访问80端口
端口匹配
[root@localhost ~]# iptables -A INPUT -p tcp --dport 22:80 -j REJECT #禁止整个网段访问22和80端口

这里写发要注意,小的数字写在前面,大的写在后面

多端口匹配

要求以“-m 扩展模块”的形式明确指出类型,包括多端口、MAC地址、IP范围、数据包状态等条件

[root@localhost ~]# iptables -A INPUT -p tcp -m multiport --dport 80,22,21,20,53 -j REJECT 多端口匹配,一次性禁止多个tcp网络协议的端口匹配规则

[root@localhost ~]# iptables -A INPUT -p udp -m multiport --dport 53,54,55 -j ACCEP 多端口匹配,一次性放通多个udp网络协议的端口匹配规则
MAC匹配
-m mac --mac-source MAC地址

[root@localhost ~]# iptables -A INPUT -m mac --mac-source 00:0c:29:f7:24:38 -j DROP
隐藏扩展模块

策略备份与还原

yum -y install iptables iptables-services

systemctl start iptables.service

systemctl enable iptables.service

我们对iptables命令行中的设置,都是临时设置,只要遇到服务器关机,或者服务重启时,

所有的设置都会清空且还原为原本的设置。

为此,我们可以对已经测试完毕符合我们需求的防火墙设置进行备份,在必要时,可以一键还原

备份iptables设置

格式:iptables-save >/指定的文件

[root@localhost ~]# iptables-save >/opt/iptables.bak

一键导入,设置为当前防火墙设置

[root@localhost ~]#iptables-restore </opt/iptables.bak

修改iptables的默认设置

iptables的默认配置文件存在于 cat /etc/sysconfig/iptables

直接把配置导入配置文件:

cat /opt/iptables.bak >/etc/sysconfig/iptables

立即生效了,实验环境下,了解就可以了。不要尝试

[root@localhost opt]# systemctl restart iptables #重启之后生效的就是配置文件中的内容,操作需谨慎,

注意拍快照,方便还原

自定义链

创建自定义链

iptables -N MYCHAIN

向自定义链添加规则,例如

iptables -A MYCHAIN -s 192.168.1.0/24 -j DROP

这条规则将禁止192.168.1.0/24网段的访问,丢弃源地址的流量。

可以使用类似的命令来添加更多规则到自定义链中,根据需求进行配置。如果想要删除自定义链,确保满足以下条件:

可以使用-x选项来删除自定义链,例如:

iptables -X MYCHAIN

示例

自定义链使用

iptables的链中添加一条对应到自定义链中才能生效

iptabales创建对应链规则然后跳转自定义链web:iptables -t filter -I INPUT -p icmp -j custom

删除自定义规则链:先删除iptables INPUT链中的对应关系,然后删除自定义链中的规则。 iptables -D INPUT 1

iptables -D ky27 1

然后再用 iptables -X ky27 删除这个链

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
阅读全文