Linux防火墙学习

前言

Linux下iptables的设置,设置了它就能够有效地过滤掉相关的数据包从而阻挡相关攻击,感觉这个东西跟安全有很大用处,比如在我们学习的计算机网络知识里面,网络拓扑十分瓜皮,路由器没有过滤数据包的功能,直接就实现路由转发的过程,这样就会对一个LAN造成很大的安全隐患,现在我要更正一下自己的思路,路由器不单单实现转发功能,我现在还把他看成一台可以实现过滤功能的电脑,这样就对它所连接的LAN有保护作用了,但现在一般对于网络防火墙而言很少再使用iptables了,现在一般都用一些大型厂商提供的防火墙。比如华3,深信服之类的,说白了就是牛逼了一点的电脑,但是对于一台服务器而言还是可以设置规则来防止别人拿下服务器的。

正文

前置知识

netfilter :位于Linux内核中的包过滤功能体系,称为Linux防火墙的“内核态”
iptables:位于/sbin/iptables,用来管理防火墙规则的工具,称为Linux防火墙的“用户态”

—— 上述2种称呼都可以表示Linux防火墙
其实用户层面使用iptables也是去调用内核里面的netfilter,这是操作系统里面的知识就不多说了

Linux查看防火墙状态

1
2
3
service iptables start 启动防火墙
service iptables status 查看防火墙状态,还可以使用这样一条命令iptables -L --line-numbers查看较为详细的命令
service iptables stop 停止服务

如果是阿里云的主机好像没有这个服务,他是直接在网页上让你设置防火墙,这是我自己的阿里云主机,命令行界面不能设置,但是在网页端可已自行控制端口的开放以及各种规则
Pa5y1f.png

Pa5vNR.md.png

包过滤的工作层次

主要实现在网络层也就是对IP数据包的处理上,详细一点就是对ip地址以及端口做处理
PaI8Ej.md.png

下面是些先行知识,关于iptables的链表结构

规则链

规则的作用:对数据包进行过滤或处理
链的作用:容纳各种防火墙规则
链的分类依据:处理数据包的不同时机

默认包括5种规则链
INPUT:处理入站数据包
OUTPUT:处理出站数据包
FORWARD:处理转发数据包
POSTROUTING链:在进行路由选择后处理数据包
PREROUTING链:在进行路由选择前处理数据包

上面这5种规则,在现实生活中一般不是全都是使用

规则表

表的作用:容纳各种规则链
表的划分依据:防火墙规则的作用相似

默认包括4个规则表
raw表:确定是否对该数据包进行状态跟踪
mangle表:为数据包设置标记
nat表:修改数据包中的源、目标IP地址或端口
filter表:确定是否放行该数据包(过滤)
常用的就是其中filternat表多用于实现ip的转化功能,这里的表功能个人感觉相当于链下面的表功能,每种链都存在这四种表

规则表之间的默认优先级

raw>mangle>nat>filter
规则链之间的默认优先级
入站:PREROUTING>INPUT
出站:OUTPUT>POSTROUTING
转发:PREROUTING>FORWARD>POSTROUTING
规则链内的匹配顺序
按顺序依次检查,匹配即停止(LOG策略例外)
若找不到相匹配的规则,则按该链的默认策略处理,这跟路由转发还是有点区别的
PaIBb4.md.png

整个基本流程大概就是这样,反正吧现在的网络环境一般都是只需要其中的一部分

命令实现

基本格式

1
iptables  [-t 表名]  选项  [链名]  [条件]  [-j 控制类型]

几个注意事项
不指定表名时,默认指filter表
不指定链名时,默认指表内的所有链
除非设置链的默认策略,否则必须指定匹配条件
选项、链名、控制类型使用大写字母,其余均为小写

数据包的常见控制类型
ACCEPT:允许通过
DROP:直接丢弃,不给出任何回应
REJECT:拒绝通过,必要时会给出提示
LOG:记录日志信息,然后传给下一条规则继续匹配

添加新的规则,这里考虑到他的匹配规则必要的时候需要换一下命令
-A:在链的末尾追加一条规则
-I:在链的开头(或指定序号)插入一条规则

1
2
iptables -t filter -A INPUT -p tcp -j ACCEPT   直接在最后加入规则
iptables -I INPUT 2 -p icmp -j ACCEPT 这样就是在第二条后面插入规则

删除、清空规则
-D:删除链内指定序号(或内容)的一条规则
-F:清空所有的规则

1
2
 iptables -F  清空所有规则
iptables -D INPUT 3 删除第三条规则

设置默认策略
-P:为指定的链设置默认规则

1
iptables -t filter -P FORWARD DROP  给FORWARD链默认设置DROP规则

协议匹配:-p 协议名
地址匹配:-s 源地址、-d 目的地址
接口匹配:-i 入站网卡、-o 出站网卡

1
iptables -A FORWARD -p ! icmp -j ACCEPT  这条命令的意思就是除了icmp协议之外的所有协议都ACCEPT
1
iptables -I INPUT -s 10.20.30.0/24 -j DROP  这条命令的意思就是把来自10.20.30.0这一个网段的包全都丢掉,有效防止了DDOS攻击
1
2
3
iptables -A INPUT -i eth1 -s 192.168.0.0/16 -j DROP 
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP
iptables -A INPUT -i eth1 -s 172.16.0.0/12 -j DROP

上面这三条命令也很有实际意义,假设有人恶意串改了源地址,同时把这个包发送到内网,内网的机子会对这种包做出响应,此时源地址变成目的地址,就会直接在内网里面一个个尝试对应IP从而可以攻击内网的机子,因为这种源IP是内网地址的是不可能出现在互联网上的,理所当然应该禁止

端口匹配:--sport源端口、--dport 目的端口
TCP标记匹配:--tcp-flags 检查范围 被设置的标记
ICMP类型匹配:--icmp-type ICMP类型

1
2
iptables -A FORWARD -s 192.168.4.0/24 -p udp --dport 53 -j ACCEPT   对于192.168.4.0这个网段的DNS服务开启做相应规则
iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT 禁止FTP
1
2
3
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 3 -j ACCEPT

这就是我前面讲的对应自己ping别人可收到响应报文,别人却ping不到你,有效降低你被别人攻击的可能

再来看看一个例子
输入命令iptables -t filter -I INPUT -p icmp -j REJECTED
这条命令是对进入的数据包进行icmp所有协议包进行过滤,需要注意两点第一,控制类型不一样返回的效果也不一样,第二对于icmp这种类型的报文而言,响应包跟请求包都被截了,后面会讲到如何可以接受icmp响应包而不接受请求包
然后尝试ping一下对面的机子,这是拒绝(REJECT)的效果
PaIsa9.png

这是直接丢弃(DROP)的效果
PaIy5R.png

结语

本来还想写写Windows下的防火墙,但由于是图形化界面,学起来也容易上手,就没写了,我比较懒~~~运用好防火墙,可以隐藏你自己的IP地址,减少被攻击的可能性,在生活中大有用处。


听说,打赏我的人最后都成了大佬。



文章目录
  1. 1. 前言
  2. 2. 正文
    1. 2.1. 前置知识
    2. 2.2. Linux查看防火墙状态
    3. 2.3. 包过滤的工作层次
    4. 2.4. 规则链
    5. 2.5. 规则表
    6. 2.6. 规则表之间的默认优先级
    7. 2.7. 命令实现
  3. 3. 结语