Linux下iptables
的设置,设置了它就能够有效地过滤掉相关的数据包从而阻挡相关攻击,感觉这个东西跟安全有很大用处,比如在我们学习的计算机网络知识里面,网络拓扑十分瓜皮,路由器没有过滤数据包的功能,直接就实现路由转发的过程,这样就会对一个LAN造成很大的安全隐患,现在我要更正一下自己的思路,路由器不单单实现转发功能,我现在还把他看成一台可以实现过滤功能的电脑,这样就对它所连接的LAN有保护作用了,但现在一般对于网络防火墙而言很少再使用iptables
了,现在一般都用一些大型厂商提供的防火墙。比如华3,深信服之类的,说白了就是牛逼了一点的电脑,但是对于一台服务器而言还是可以设置规则来防止别人拿下服务器的。
netfilter
:位于Linux内核中的包过滤功能体系,称为Linux防火墙的“内核态”
iptables
:位于/sbin/iptables,用来管理防火墙规则的工具,称为Linux防火墙的“用户态”
—— 上述2种称呼都可以表示Linux防火墙
其实用户层面使用iptables也是去调用内核里面的netfilter,这是操作系统里面的知识就不多说了
service iptables start 启动防火墙
service iptables status 查看防火墙状态,还可以使用这样一条命令iptables -L --line-numbers查看较为详细的命令
service iptables stop 停止服务
如果是阿里云的主机好像没有这个服务,他是直接在网页上让你设置防火墙,这是我自己的阿里云主机,命令行界面不能设置,但是在网页端可已自行控制端口的开放以及各种规则
主要实现在网络层也就是对IP数据包的处理上,详细一点就是对ip地址以及端口做处理
下面是些先行知识,关于iptables的链表结构
规则的作用:对数据包进行过滤或处理
链的作用:容纳各种防火墙规则
链的分类依据:处理数据包的不同时机
默认包括5种规则链
INPUT
:处理入站数据包
OUTPUT
:处理出站数据包
FORWARD
:处理转发数据包
POSTROUTING
链:在进行路由选择后处理数据包
PREROUTING
链:在进行路由选择前处理数据包
上面这5种规则,在现实生活中一般不是全都是使用
表的作用:容纳各种规则链
表的划分依据:防火墙规则的作用相似
默认包括4个规则表
raw
表:确定是否对该数据包进行状态跟踪
mangle
表:为数据包设置标记
nat
表:修改数据包中的源、目标IP地址或端口
filter
表:确定是否放行该数据包(过滤)
常用的就是其中filter表nat表多用于实现ip的转化功能,这里的表功能个人感觉相当于链下面的表功能,每种链都存在这四种表
raw>mangle>nat>filter
规则链之间的默认优先级
入站:PREROUTING>INPUT
出站:OUTPUT>POSTROUTING
转发:PREROUTING>FORWARD>POSTROUTING
规则链内的匹配顺序
按顺序依次检查,匹配即停止(LOG策略例外)
若找不到相匹配的规则,则按该链的默认策略处理,这跟路由转发还是有点区别的
整个基本流程大概就是这样,反正吧现在的网络环境一般都是只需要其中的一部分
基本格式
iptables [-t 表名] 选项 [链名] [条件] [-j 控制类型]
几个注意事项
不指定表名时,默认指filter表
不指定链名时,默认指表内的所有链
除非设置链的默认策略,否则必须指定匹配条件
选项、链名、控制类型使用大写字母,其余均为小写
数据包的常见控制类型
ACCEPT
:允许通过
DROP
:直接丢弃,不给出任何回应
REJECT
:拒绝通过,必要时会给出提示
LOG
:记录日志信息,然后传给下一条规则继续匹配
添加新的规则,这里考虑到他的匹配规则必要的时候需要换一下命令
-A
:在链的末尾追加一条规则
-I
:在链的开头(或指定序号)插入一条规则
iptables -t filter -A INPUT -p tcp -j ACCEPT 直接在最后加入规则
iptables -I INPUT 2 -p icmp -j ACCEPT 这样就是在第二条后面插入规则
删除、清空规则
-D
:删除链内指定序号(或内容)的一条规则
-F
:清空所有的规则
iptables -F 清空所有规则
iptables -D INPUT 3 删除第三条规则
设置默认策略
-P
:为指定的链设置默认规则
iptables -t filter -P FORWARD DROP 给FORWARD链默认设置DROP规则
协议匹配:-p
协议名
地址匹配:-s
源地址、-d
目的地址
接口匹配:-i
入站网卡、-o
出站网卡
iptables -A FORWARD -p ! icmp -j ACCEPT 这条命令的意思就是除了icmp协议之外的所有协议都ACCEPT
iptables -I INPUT -s 10.20.30.0/24 -j DROP 这条命令的意思就是把来自10.20.30.0这一个网段的包全都丢掉,有效防止了DDOS攻击
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类型
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
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)的效果
本来还想写写Windows下的防火墙,但由于是图形化界面,学起来也容易上手,就没写了,我比较懒~~~运用好防火墙,可以隐藏你自己的IP地址,减少被攻击的可能性,在生活中大有用处。