iptables 防火墙

Linux 防火墙基础
netfilter :指的是 Linux 内核中实现包过滤防火墙的内部结构,不以程序或文件的形式存在,属于“ 内核态 Kernel Space ,又称为内核空间)的防火墙功能体系。iptables:指的是用来管理 Linux 防火墙的命令程序,通常位于 /sbin/iptables 目录下,属于“ 用户态 User Space ,又称为用户空间)的防火墙管理体系。
iptables 的表、链结构
iptables 的作用是为包过滤机制的实现提供规则(或称为策略),通过各种不同的规则,告诉 netfilter 对来自某些源、前往某些目的或具有某些协议特征的数据包应该如何处理。
1 .规则表
filter 表: filter 表用来对数据包进行过滤,根据具体的规则要求决定如何处理一个数据包filter 表对应的内核模块为 iptable_filter ,表内包含三个链,即 INPUT FORWARD 、OUTPUT。
        
nat 表: nat 表主要用来修改数据包的IP 地址、端口号等信息。 nat 表对应的内核模块 iptable_nat ,表内包含三个链,即PREROUTING、 POSTROUTING OUTPUT
mangle 表: mangle 表用来修改数据包的 TOS TTL ,或者为数据包设置 Mark 标记,以实现流量整形、策略路由等高级 应 用 。 mangle 表 对 应 的 内 核 模 块 为 iptable_mangle , 表 内 包 含 五 个 链 , 即PREROUTING、 POSTROUTING INPUT OUTPUT FORWARD
raw 表: raw 表是自 1.2.9 以后版本的 iptables 新增的表,主要用来决定是否对数据包进行状态跟踪。raw 表对应的内核模块为 iptable_raw ,表内包含两个链,即 OUTPUT 、 PREROUTING。
2 .规则链
INPUT 链:当收到访问防火墙本机地址的数据包(入站)时,应用此链中的规则。
OUTPUT 链:当防火墙本机向外发送数据包(出站)时,应用此链中的规则。
FORWARD 链:当接收到需要通过防火墙中转发送给其他地址的数据包(转发)时,应用此链中的规则。
PREROUTING 链:在对数据包做路由选择之前,应用此链中的规则。
POSTROUTING 链:在对数据包做路由选择之后,应用此链中的规则
数据包过滤的匹配流程
1 .规则表之间的顺序
当数据包抵达防火墙时,将依次应用 raw 表、 mangle 表、 nat 表和 filter 表中对应链内的规则,应用顺序为 raw→mangle→nat→filter
2 .规则链之间的顺序
根据规则链的划分原则,不同链的处理时机是比较固定的,因此规则链之间的应用顺序 取决于数据包的流向
规则链内部各条防火墙规则之间的顺序
当数据包经过每条规则链时,依次按第一条规则、第二条规则 …… 的顺序进行匹配和处理。链内的过滤遵循“ 匹配即停止 的原则,一旦找到一条相匹配的规则 ,则不再检查本链内后续的其他规则。
编写防火墙规则
ptables 的安装
CentOS 7.3 默认使用 firewalld 防火墙,如果想使用 iptables 防火墙,必须先关闭firewalld 防火墙。
Firewalld 防火墙关闭之后,可以通过 yum 方式再安装 iptables ,因为默认 CentOS7.3系统中并没有安装 iptables ,执行以下命令即可安装 iptables
# yum -y install iptables iptables-services
启动 iptables 防火墙并设置开机启动
基本语法、数据包控制类型
使用 iptables 命令管理、编写防火墙规则时,基本的命令格式如下所示。
iptables [-t 表名 ] 管理选项 [ 链名 ] [ 匹配条件 ] [-j 控制类型 ]
对于防火墙,数据包的控制类型非常关键,直接关系到数据包的放行、封堵及做相应的
日志记录等。在 iptables 防火墙体系中,最常用的几种控制类型如下。
ACCEPT :允许数据包通过。
DROP :直接丢弃数据包,不给出任何回应信息。
REJECT :拒绝数据包通过,必要时会给数据发送端一个响应信息。
LOG :在 /var/log/messages 文件中记录日志信息,然后将数据包传递给下一条规则。
# iptables -t filter -I INPUT -p icmp -j REJECT
上述操作产生的直接效果是其他主机无法 ping 通本机。
添加、查看、删除规则等基本操作
1 .添加新的规则
添加新的防火墙规则时,使用管理选项 “-A” “-I” ,前者用来追加规则,后者用来插入规则。
# iptables -t filter -A INPUT -p tcp -j ACCEPT
当使用管理选项 “-I” 时,允许同时指定新添加规则的顺序号,未指定序号时默认作为第一条。
# iptables -I INPUT -p udp -j ACCEPT
# iptables -I INPUT 2 -p icmp -j ACCEPT
2 .查看规则列表
# iptables -L INPUT --line-numbers
当防火墙规则的数量较多时,若能够以数字形式显示地址和端口信息,可以减少地址解析的环节,在一定程度上加快命令执行的速度。
# iptables -n -L INPUT           //"-n -L"可合写为 "-nL"
3 .删除、清空规则
删除一条防火墙规则时,使用管理选项 “-D” 。例如,若要删除 filter INPUT 链中的第三条规则,可以执行以下操作。
# iptables -D INPUT 3
# iptables -n -L INPUT         //确认删除效果
使用管理选项 “-F” 时,允许省略链名而清空指定表所有链的规则。
# iptables -F INPUT
设置默认策略
iptables 的各条链中,默认策略是规则匹配的最后一个环节 —— 当找不到任何一条能够匹配数据包的规则时,则执行默认策略。
# iptables -t filter -P FORWARD DROP
# iptables -P OUTPUT ACCEPT
规则的匹配条件
在编写防火墙规则时,匹配条件的设置起着决定性的作用。
1 .通用匹配
通用匹配也称为常规匹配,这种匹配方式可以独立使用,不依赖于其他条件或扩展模块。
协议匹配
编写 iptables 规则时使用 “-p 协议名 的形式指定,用来检查数据包所使用的网络协议,如 tcp udp icmp all
地址匹配
编写 iptables 规则时使用 “-s 源地址 “-d 目标地址 的形式指定,用来检查数据包的源
地址 或目标地址
# iptables -A FORWARD -s 192.168.1.11 -j REJECT
# iptables -A FORWARD -s 192.168.7.0/24 -j ACCEPT
当遇到小规模的网络扫描或攻击时,封锁 IP 地址是比较有效的方式。
# iptables -I INPUT -s 10.20.30.0/24 -j DROP
# iptables -I FORWARD -s 10.20.30.0/24 -j DROP
网络接口匹配
编写 iptables 规则时使用 “-i 接口名 “-o 接口名 的形式,用于检查数据包从防火墙的哪一个接口进入或发出,分别对应入站网卡、出站网卡
隐含匹配
要以协议匹配作为前提条件,不可独立使用

(1)端口匹配

搭建vsftpd服务时需要开放20、21端口,以及用于被动模式的端口范围为24500-24600

(2)ICMP类型匹配

若要禁止从其他主机ping本机,但是允许本机ping其他主机

显式匹配

要有额外的内核模块提供支持,以手动“-m 模块名称”调用相关的模块,然后在再置匹配条件,显示匹配就是需要手动指定模块的匹配方式。

多端口匹配

允许本机开放25、80、110、143端口,以提供电子邮件服务

# iptables -A INPUT -p tcp -m multiport --dport 25,80,110,143 -j ACCEPT

IP范围匹配(iprange用于ip范围)

禁止转发源IP地址位于192.168.4.21-192.168.4.28之间的TCP数据包

# iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.21-192.168.4.28 -j ACCEPT

MAC地址匹配

根据MAC地址封锁主机,禁止其访问本机的任何应用

# iptables -A INPUT -m mac --mac-source 00:0C:29:C9:3D:F7 -j DROP

状态匹配

要禁止转发与正常TCP连接无关的非"--syn"请求的数据包,如伪造的网络攻击数据包

# iptables -A FORWARD -m state --state NEW -p tcp ! --syn -j DROP

只开放本机的WEB服务(80端口),但对发给本机的TCP应答数据包予以放行,其他入站数据包均丢弃,对应的入站规则为(ESTABLISHED:已建立的)

  • 25
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值