文章目录
Linux防火墙基础
防火墙主要工作在网络层,针对TCP/IP数据包实施过滤和限制,属于典型的包过滤防火墙或称为网络层防火墙。.liunx系统的防火墙体系基于内核编码实现,具有非常稳定的性能和极高效率。
netfilter
1.位于Linux内核中的包过滤能体系
2.称为Linux防火墙的 “内核态”
iptables
1.位于/sbin/iptables,用于管理防火墙规则的工具
2.称为Linux防火墙的 “用户态”
包过滤的工作层次
主要是网络层,针对IP数据包。
体现在对包内的IP地址,端口等信息的信息的处理上。
iptables的表,链结构
规则表
表的作用:容纳各种规则链。
表的划分依据:防火墙规则的作用相似。
默认包括4个规则表
raw表:确定是否对该数据包进行状态跟踪。
mangle表:为数据包设置标记。
nat表:修改数据包中的源、目标lP地址或端口。
filter:表确定是否放行该数据包(过滤)。
默认的表,链结构示意图
数据包过滤的匹配流程
规则表之间的顺序: raw→mangle→nat→filter
规则链之间的顺序:
人站:PREROUTING→INPUT
出战:OUTPUT→POSTROUTING
转发:PREROUTING→FORWARD→POSTROUTING
规则链内的匹配顺序:
按顺序依次检查,匹配即停止(LOG策略例外)。
若找不到相匹配的规则,则按该链的默认策略处理。
规则表之间的顺序
当数据包抵达防火墙时,将依次应用raw表,mangle表,nat表,filter表中对应链内的规则(如果存在),应用顺序为raw-mangle-nat-filter。
入站数据流向:
来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理(是否修改数据包地址等),之后会进行路由选择(判断该数据包应该发往何处),如果数据包的目标地址是防火墙本机(如Internet用户访问防火墙主机中Web服务的数据包),那么内核将其传递给INPUT链进行处理(决定是否允许通过等),通过以后再交给系统上层的应用程序(如httpd服务器)进行响应。
转发数据流向:
来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理,之后会进行路由选择,如果数据包的目标地址是其他外部地址(如局域网用户通过网关访问QQ站点的数据包),则内核将其传递给FORWARD链进行处理(是否转发或拦截),然后再交给POSTROUTING规则链(是否修改数据包的地址等)进行处理。
出站数据流向:
防火墙本机向外部地址发送的数据包,首先被OUTPUT规则链处理,之后进行路由选择,然后传递给POSTTOUTING规则链(是否修改数据包的地址等)进行处理。
编写防火墙规则
基本语法格式,数据包控制类型,以及如何管理,编写防火墙规则等。
iptables安装
注:iptables安装火墙,若想使用iptables防火墙,必须先关闭firewalld防火墙。
关闭firewalld防火墙
[root@localhost ~]# systemctl stop firewalld.service
[root@localhost ~]# systemctl disable firewalld.service
安装iptables防火墙
[root@localhost ~]# yum -y install iptables iptables-services
设置iptables开机启动
[root@localhost ~]# systemctl start iptables.service
[root@localhost ~]# systemctl enable iptables.service
基本语法,数据包控制类型
使用iptables命令管理,编写防火墙规则时,基本命令格式:
iptables [-t 表名] 管理选项 [ 链名 ] [匹配条件] [-j 控制类型]
在iptables防火墙体系中,最常见的几种控制类型:
// An highlighted block
ACCEPT:允许数据包通过
DROP:直接丢弃数据包,不给出如何回应信息。
REJECT:拒绝数据包通过,必要时会给数据发送一个响应信息。
LOG:在/var/log/messages文件中纪录日志信息,然后将数据包传递给下一条规则。”
添加,查看,删除规则等基本操作
添加新规则
[root@localhost ~]# iptables -t filter -A INPUT -p tcp -j ACCEPT
//-A -I前者用来追加规则,后者用来插入规则。使用I时,允许同时指定添加规则的序号,未指定序号默认作为第一条。
[root@localhost ~]# iptables -I INPUT -p udp -j ACCEPT
[root@localhost ~]# iptables -I INPUT 2 -p icmp -j ACCEPT
查看规则列表
//查看已有防火墙规则时
iptables -L INPUT --line-numbers //--line-numbers选项还可显示各条规则在链内的顺序号。
iptables -n -L INPUT //-n-L可合写为“-nL”
删除,清空
iptables -D INPUT 2 //删除filter表INPUT链中第2条规则
iptables -n -L INPUT //确认删除效果
iptables -F //-F清空指定链或表中的所有防火墙规则,使用管理选项-F。
如:
iptables -t nat -F
iptables -t mangle -F
设置默认策略
'当匹配最后一个环节-找不到如何一条能够匹配数据包的规则时,则执行默认策略。'
iptables -t filter -P FORWARD DROP
iptables -P OUTPUT ACCEPT //默认策略的控制类类型ACCEPT允许,DROP丢弃两种。
规则匹配条件
通用匹配
1.协议匹配
iptables -I INPUT -p icmp -j DORP //-p 协议名 来指定
iptables -A FORWARD ! -P icmp -j ACCEPT //感叹号“!”表示取反。
2.地址匹配
iptables -A FORWARD -s 192.168.1.10 -j REJECT
iptables -A FORWARD -s 192.168.2.0/24 -j ACCEPT //-s 源地址 -d 目标地址
iptables -I INPUT -s 192.168.30.10/24 -j DROP
3.网络接口匹配
iptables -A INPUT -i eth1 -s 10.0.0.0/8 -j DROP //-i接口名 -o接口名
隐含匹配
1.端口匹配
'--sport源端口 --dport目标端口 53端口号'
iptables -A INPUT FORWARD -s 192.168.1.0/24 -p udp --dport 53 -j ACCEPT
iptables -A INPUT FORWARD -s 192.168.1.0/24 -p udp --sport 53 -j ACCEPT
'构建vsftpd 若要开放20,21端口 以及被动模式端口范围24500-24600'
iptables -A INPUT -p tcp --dport 20:21 -j ACCEPT
iptables -A INPUT -p tcp --dport 24500:24600 -j ACCEPT
2.ICMP类型匹配
'编写--icmp-type类型 针对协议为ICMP ICMP类型使用字符串或数字表示 如 Echo-Request代码为8'
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
iptables -A INPUT -p icmp -j DROP
'帮助信息的最后部分列出所有支持类型'
iptables -p icmp -h
显式匹配
1.多端口匹配
'-m 模块名称 ' '-m multiport --dports 端口列表'
iptables -A INPUT -p tcp -m multiport --dport 25,80,110 -j ACCEPT
2.ip范围匹配
'-m iprange --src-range IP范围'
iptables -A FORWARD -p tcp -m iprange --src-range 192.168.4.10-192.168.4.30
-j ACCEPT
3.MAC地址匹配
'-m mac --mac--source MAC地址'
iptables -A INPUT -m mac --mac--source 00:0c:29:c0: 55:3f -j DROP
4.状态匹配
连接状态:
NEW(与如何连接无关的)
ESTABLISHED (响应请求或者已连接的)
RELATED(与已有连接的相关性的 如FTP数据连接)
'-m state --state 连接状态 基于跟踪器制用来检查数据包的连接状态(state)'
iptables -A FORWARD -m state --state NEW -p tcp !--syn -j DROP
'开放本机web服务80端口,对发给本机的TCP应答数据包给予放行,其他入站数据包丢弃。'
iptables -I INPUT -p tcp -m multiport --dport 80 -j ACCEPT
iptables -I INPUT -p tcp -m state --state ESTABLISHED -j ACCEPT
iptables -P INPUT DROP