【Linux学习】iptables

iptables

iptables其实不是正真的防火墙,而Linux内核中的netfilter安全框架才是正真的防火墙,iptable只不过是操作此框架的一个工具而已。netfilter是Linux内核层的一个数据包处理模块,具有网络地址转换、数据包内容修改、数据包过滤功能。防火墙服务不能停止,所以我们使用service iptables stop并不是正真停止防火墙,而是把规则库清空变成允许通过而已。注意:red hat7中使用firewalld工具代替传统的iptables工具

策略和规则链

防火墙会从上到下的顺序来读取配置的策略规则,在找到匹配项后就立刻结束匹配工作去执行匹配项中定义的行为(放行还是阻止),防火墙策略规则设置有两种:放行和阻止。iptables服务把用于处理或过滤流量的策略条目称之为规则,多个规则组成一个规则链,而规则链依据数据包位置不同进行分类:

  • PREROUTING:在进行路由选择前处理数据包
  • INPUT:处理流入的数据包
  • OUTPUT:处理流出的数据包
  • FORWARD:处理转发的数据包
  • POSTROUTING:在进行路由选择后处理数据包

一般用的最多的就是INPUT处理流入的数据包,可以阻止攻击者从外部攻击内网。

但是防火墙是根据什么来进行匹配的呢?这里分为两种匹配条件:

基本匹配条件:
源地址IP,目标地址IP

扩展匹配条件:
源地址端口、目标地址端口

但是有策略规则还不能保障安全,还需要采用什么动作来匹配流量:

  • ACCEPT:允许流量通过
  • REJECT:拒绝流量通过
  • LOG:记录日志流量,在/var/log/messages文件记录
  • DROP:拒绝流量通过
  • SNAT:源地址转换,解决内网用户用同一个公网问题
  • DNAT:目标地址转换
  • REDIRECT:在本机做端口映射
  • MASQUERADE:是SNAT的一种特殊形式,适合动态的,临时会变的IP

REJECT和DROP都是拒绝流量通过,区别是REJECT会在拒绝流量后在回复一条信息给客户端,而DROP则是直接丢弃不响应。所以防止端口扫描需要使用DROP动作让扫描器无法判断。

表的概念

我们在每个规则链都放入了一串规则,但是这些规则链有些很相似,比如,A类规则链都是对IP进行过滤,B类规则链都是修改报文,那么可以把实现相同功能的规则链放在一起的集合叫做表。不同的规则链放置不同的表中进行管理,而iptables以为我们定义了4种表。

  • filter表:负责过滤功能,内核模块是iptable_filter
  • nat表:网络地址转换功能,内核模块是iptable_nat
  • mangle表:拆解报文,进行修改并重新封装,内核模块是iptab_mangle
  • raw表:关闭nat表上启用的连接追踪机制,内核模块是iptab_raw

我们定义的所有规则,都是这四种分类中的规则,都存在这四张表中。

表和规则链的关系

规则链都是放入表中进行管理,那么每个表都能存储什么规则链呢?

  • raw表 -> PREROUTING、OUTPUT
  • mangle -> PREROUTING、INPUT、OUTPUT、FORWARD、POSTROUTING
  • nat表 -> PREROUTING、OUTPUT、POSTROUTING
  • filter表 -> INPUT、FORWARD、OUTPUT

反过来,每个规则链都能放入哪些表呢?

  • PREROUTING -> raw表、mangle表、nat表
  • INPUT -> mangle表、filter表、
  • FORWARD -> mangle表、filter表
  • OUTPUT -> raw表、mangle表、ant表、filter表
  • POSTROUTING -> mangle表、nat表

查看filter表中的规则信息-查

filter表负责过滤功能, 如允许哪些IP访问,拒绝哪些IP访问,禁止访问哪些端口等,是我们经常用到的表。

查看filter表中的规则:
iptables -t filter -L
-t:指定要操作的表
-L:查看-t选项对应的表的规则

其实这里可以省略-t filter,因为没有用-t指定时,默认操作为filter表。
iptables -L

每个表中都包含不同的规则链,这样看起很复杂,可以指定查看规则链
如:查看filter表中的INPUT链的规则:
iptables -vL INPUT
也可以加入--line-number选项查看规则的序号

在这里插入图片描述

字段详解:
pkts:对应规则匹配到的报文个数
bytes:对应规则匹配到的报文大小总和
target:表示规则对应的协议
prot:表示规则对应的应用协议
opt:表示规则对应的选项
in:表示数据包由哪个网卡接口流入
out:表示数据包由哪个网卡流出
source:表示规则对应的源地址,可以是一个IP或网段
destination:表示规则对应的目标地址

根据结果可以看到,iptables默认对源地址和目的地址进行了名称解析。使用-n选项表示不对IP地址进行名称解析,这样更清晰直观。
iptables -vL INPUT

在这里插入图片描述

增加filter表中规则-增

iptables -t filter -I INPUT -s 192.168.0.102 -j DROP
-t:指定要操作的表,不写默认为filter表
-I:表示insert,指定将规则插入到哪个链中,添加规则
-s:指定匹配条件中的源地址,也就是source
-j:指定当条件满足时,所对应的动作,这里为DROP丢弃
#也就是说当报文的源地址为192.168.1.14时,报文被丢弃

现在查看表中的规则,已新增一条规则:
iptables -t filter -vnL INPUT

在这里插入图片描述

iptables -t filter -A INPUT -s 192.168.0.102 -j ACCEPT
-A:append,在对应的链中追加规则,在链的尾部追加,而-I插入是在首部插入
防火墙是根据规则的先后顺序匹配的,如果前面已拒绝了,则后面允许也没有任何用处,定义规则的顺序是很重要的。

在这里插入图片描述

删除filter表的规则-删

首先查看要删除规则的序号,使用--line选项
iptables -t filter --line -nvL INPUT

在这里插入图片描述

iptables -t filter -D INPUT 1
-D:删除指定链中的某条规则

当然,也可以根据匹配的条件与动作去删除规则:
iptables -t filter -D INPUT -s 192.168.0.102 -j DROP

删除指定表中某条链中所有规则可以用-F
iptables -t filter -F INPUT

删除指定表中的所有规则链中所有规则
iptables -t filter -F

修改filter表中的规则-改

iptables -t filter -R INPUT 1 -s 192.168.1.2 -j REJECT
-R:修改指定链中的规则,对应规则相应的编号

保存规则

我们上诉所做的操作修改都是临时的,当iptables重启后,所添加的规则都会消失,所以需要将规则保存。

centos6中保存规则:默认保存在/etc/sysconfig/iptables
service iptables save

通用方法:
iptables-save > /etc/sysconfig/iptables
iptables-save命令将显示当前所有规则(以保存格式显示)

匹配条件详解

-s:匹配报文源地址,可以是单个IP或多个IP或IP段

iptables -t filter -I INPUT -s 1.1.1.1 -j DROP
iptables -t filter -I INPUT -s 1.1.1.1,1.1.2 -j DROP
iptables -t filter -I INPUT -s 1.1.0.0/24 -j DROP
匹配条件取反:!
iptables -t filter -I INPUT -s ! 1.1.1.1 -j DROP
只要报文源IP不为1.1.1.1都满足

-d:匹配目标地址

iptables -t filter -I INPUT -s 1.1.1.1 -d 2.2.2.2 -j DROP
当报文源地址为1.1.1.1时,并且向目的地址2.2.2.2发送报文时丢弃

-p:匹配报文的协议类型:tcp、udp、icmp、sctp、esp、ah、udplite

iptables -t filter -I INPUT -s 1.1.1.1 -p tcp -j DROP
丢弃来自源地址1.1.1.1的tcp协议
不使用-p指定协议类型,默认为所有类型都会被匹配到

-i:匹配报文从哪个网卡接口流入

iptables -t filter -I INPUT -i eth1 -p icmp -j DEOP
拒绝由网卡eth1流入的ping请求报文

-o:匹配报文从哪个网卡接口流出

只能应用于OUTPUT链、DORWARD链、POSTROUTIN链

–dport:匹配报文的目标端口

使用匹配端口时,需要先指定-p使用过哪种协议
iptables -t filter -I INPUT -s 1.1.1.1 -p tcp -m tcp --drop 22 -j DROP

丢弃来自源地址为1.1.1.1的TCP协议且连接到本服务器的22端口
-m:指定对应的扩展模块为tcp,要想使用--dport这个扩展条件,需要依靠某个扩展模块完成

–sport:匹配报文的源端口,和–dport类似
匹配端口范围:
–dport 22:25 #22到25之间所有的端口

-m multiport模块:可以指定不连续的多个端口

iptables -t filter -I INPUT -s 1.1.1.1 -p tcp -m multiport --dport 22,80,110 -j DROP

常用扩展模块

iprange模块:可以指定一段连续的IP地址范围,用于匹配源地址或目标地址,有2个匹配条件:–src-range、–dst-range

iptables -t filter -I INPUT -m iprange --scr-range 192.168.1.127-230 -j FROP

String模块:可以匹配要匹配的字符串,如果报文包含这个字符串就符合匹配

iptables -t filter -I INPUT -m string --algo bm --string "heloo" -j DROP
-m string:使用string模块
--algo bm:表示使用bm算法去匹配指定的字符串
--string "hello":表示我们想要匹配的字符串

time模块:根据时间段匹配报文,如果报文到达的时间在指定的范围内,则符合标准

iptables -t filter -I INPUT -p tcp --drop 80 -m time --timestart 09:00:00 --timestop 18:00:00 -j DROP
每天早上9点到下午6点不能看网页

connlimit模块:可以限制每个IP地址同时连接到server端的连接数量,但IP的并发连接数限制

iptables -I INPUT -p tcp --drop 22 -m connlimit --connlimit-above 20 -j DROP
--connlimit-above:表示限制每个IP连接数上线为20
#限制每个客户端IP的ssh并发数量不高于20

limit模块:对报文到达速率进行限制,也就是限制单位时间内流入的包的数量,可以以秒、分钟、小时、天为单位进行限制

iptables -t filter -I INPUT -p icmp -m limit --limit 10/minute -j ACCEPT
#限制每分钟最多流入30个包
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值