#yyds干货盘点# web安全day34:一步一步学习Linux防火墙

Posted 小梁L同学

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了#yyds干货盘点# web安全day34:一步一步学习Linux防火墙相关的知识,希望对你有一定的参考价值。

linux中,防火墙的功能由iptables实现。

#yyds干货盘点#

防火墙的作用是对请求进行隔离或者阻止、丢弃。

iptables的功能除了普遍意义上防火墙的功能外,还有其他一些功能。比如网络地址转换、数据包内容修改等。

具体来说,iptables通过4张表实现4个功能,而这其中最重要的就是filter和nat了。

raw:关闭nat表上启用的连接追踪机制

mangle:拆解报文,做出修改,并重新封装

nat:网络地址转换

filter:过滤表

实验:初步理解Linux防火墙

我们设计一个实验来理解iptables的功能。

windowsxp的ip地址是192.168.1.1,网关是192.168.1.254

redhat1有两张网卡,一张的ip地址是192.168.1.254,另一张的ip地址是192.168.189.101

redhat2的ip地址是192.168.189.1,网关是192.168.189.101。

#yyds干货盘点#

我们首先通过windowsxp访问其网关192.168.1.254

#yyds干货盘点#

通过redhat2访问其网关192.168.189.101

#yyds干货盘点#

在redhat1上开启ip临时转发功能

echo "1" > /proc/sys/net/ipv4/ip_forward

或者开启永久转发功能

vim /etc/sysctl.conf
net.ipv4.ip_forward = 1

然后在windowsxp上直接ping redhat2 192.168.189.1

#yyds干货盘点#

在windowsxp上可以访问redhat2的httpd服务(前提是redhat2已经安装并且启动了httpd服务)

#yyds干货盘点#

如果打开防火墙。

#yyds干货盘点#

windowsxp就无法访问到了

#yyds干货盘点#

查看filter表

iptables -t filter -nvL

n是用数字查看ip地址、端口等信息

v是显示详细信息

L是列出所有的规则条目

它们可以分开写,也可以写在一起。

--line-numbers是查看规则时,显示规则的序号

[root@localhost ~]# iptables -t filter -nvL
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
62 3760 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
11 592 INPUT_direct all -- * * 0.0.0.0/0 0.0.0.0/0
11 592 INPUT_ZONES_SOURCE all -- * * 0.0.0.0/0 0.0.0.0/0
11 592 INPUT_ZONES all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
9 432 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
0 0 ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
0 0 ACCEPT all -- lo * 0.0.0.0/0 0.0.0.0/0
0 0 FORWARD_direct all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 FORWARD_IN_ZONES_SOURCE all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 FORWARD_IN_ZONES all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 FORWARD_OUT_ZONES_SOURCE all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 FORWARD_OUT_ZONES all -- * * 0.0.0.0/0 0.0.0.0/0
0 0 DROP all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate INVALID
0 0 REJECT all -- * * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT 51 packets, 11480 bytes)
pkts bytes target prot opt in out source destination
51 11480 OUTPUT_direct all -- * * 0.0.0.0/0 0.0.0.0/0

每个表都有专门写规则的地方,这就是链。

filter表主要有3个链,分别是

FORWARD转发规则链,当源地址和目的地址都不是本机地址,本机只是代为转发.

pkts:数据包数量
bytes:数据字节
target:对于该类数据包的处理方法。如REJECT拒绝,
prot:协议。all表示所有协议
in/out:数据进入/离开端口,*表示所有端口

INPUT入包规则链

OUTPUT出包规则链

如果希望动态检查数据被处理的情况,可以使用watch命令,具体是:

watch -n1 iptables -t filter -nvL

数据就会每秒刷新,便于我们观察

之前,我们由于开启了防火墙,导致windowsxp无法访问redhat2的http服务,主要原因是其FORWARD链中没有允许对80端口的数据包进行转发,所以我们可以修改FORWARD链中的内容,允许转发80端口的数据。

修改防火墙策略

iptables -t filter -I FORWARD -p tcp --dport 80 -j ACCEPT

此时,就可以在windowsxp中重新访问到redhat2的http服务了。

具体在iptables中的体现就是新增了一条

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
22 4019 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80

语法构成

iptables 【-t表名】选项【链名】【条件】【-j控制类型】

比如:

iptables -t filter -I INPUT -p icmp -j REJECT

表示阻止ping测试。

规则的增删

规则的增删通过选项来进行。

选项为I表示插入,表示在链的开头插入一条规则。

选项为A表示追加,表示在链的末尾追加一条规则。

选项为D表示删除链内指定序号或者内容的一条规则

iptables -D INPUT 3

选项为F表示清空所有的规则

iptables -F
iptables -t net -F
iptables -t mangle -F
iptables -t raw -F

redhat的防火墙默认是黑名单,即最末尾一条缺省规则是ACCEPT,如果清空了所有规则,那么就会匹配到它,即放通所有数据包。

不用担心清空规则表后怎么办,因为默认的规则是保存在/etc/sysctl

.conf中的。如果重启iptables的防火墙服务,就会重新生成默认的规则列表。

选项为P表示为指定的链设置默认规则

iptables -P OUTPUT ACCEPT

默认策略要么是ACCEPT、要么是DROP


注意事项:

不指定表名时,默认指filter表

不指定链名时,默认指表内的所有链

除非设置链的默认策略,否则必须指定匹配条件

选项、链名、控制类型使用大写字母,其余均为小写


数据包的常见控制类型

ACCEPT:允许通过

DROP:直接丢弃,不给出任何回应

REJECT:拒绝通过,必要时给出提示

LOG:记录日志信息,然后传给下一条规则继续匹配

丢弃和拒绝的区别

我们以ping为例,在Redhat1中新增一条规则

iptables -t filter -I FORWARD -p icmp -j DROP

在windowsxp中进行测试

#yyds干货盘点#

在redhat1中再新增一条规则

iptables -t filter -I FORWARD -p icmp -j REJECT

在windowsxp中进行测试

#yyds干货盘点#

由其网关,即redhat1告诉给windowsxp,目的端口不可达。同时我们也了解:防火墙是顺序匹配的,如果匹配到直接跳转执行,不再向下匹配。

规则的匹配条件

通用匹配

可以直接使用,不依赖于其他条件或者拓展,包括了网络协议、IP地址、网络接口等条件

常见的通用匹配条件

协议匹配 :-p 协议名

iptables -I INPUT -p icmp -j DROP
iptables -A FORWARD ! -p icmp -j ACCEPT

地址匹配 :-s 源地址、-d目的地址

iptables -A INPUT -s 10.20.30.0/24 -j DROP

接口匹配 : -i 入站网卡、-o 出站网卡

iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP

隐含匹配

要求以特定的协议匹配作为前提,包括端口、TCP标记、ICMP类型等条件

常见的隐含匹配条件

端口匹配:--sport 源端口 --dport 目的端口

iptables -A FORWARD -s 192.168.5.0/24 -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT

TCP标记匹配: --tcp-flags 检查范围 被设置的标记

ICMP类型匹配: --icmp-type ICMP类型

iptables -A INPUT -p icmp --icmp-type 8 -j DRO//8请求0回显3不可达

显式匹配

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

常见的显式匹配条件

多端口匹配 -m multiport --sport/--dport 源/目端口列表

IP范围匹配 -m iprange --src-range IP范围

MAC地址匹配 -m mac --mac-source MAC地址

iptables -A INPUT -p tcp -m multiport --dport 24,80 -j ACCEPT
iptables -A FORWARD -p tcp -m iprange --src-range
iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT

规则的备份和还原

备份规则

iptables的规则通过导出方式备份,结合重定向输出保存到指定文件

iptables-save > /opt/iprules_all.txt

还原规则

iptables的规则通过导入方式还原

iptables-restore< /root/Desktop/ipt.txt

可以将其保存成默认规则,使得iptables重启后不需要手动导入

service iptables sa

关于iptables更详细的理解,可以参考​​https://www.zsythink.net/archives/1199 ​

作者写得很详细。

也可以关注博主的个人微信公众号:旁骛(OtherThing),不定期分享一些技术干货。

#yyds干货盘点#

以上是关于#yyds干货盘点# web安全day34:一步一步学习Linux防火墙的主要内容,如果未能解决你的问题,请参考以下文章

#yyds干货盘点# web安全day9:5个实验实实在在学习windows域部署

#yyds干货盘点# web安全day12:PKI

#yyds干货盘点# web安全day13:简单深透测试流程

#yyds干货盘点# web安全day6:IIS之WEB服务器

#yyds干货盘点# web安全day21:学习使用最基本的批处理程序

#yyds干货盘点# web安全day7:IIS之FTP服务器