Linux防火墙

一.防火墙

netfilter 是真正的防火墙,位于Linux内核中的包过滤功能体系
称为Linux防火墙的"内核态"
firewalld 和iptables 是默认的管理防火墙规则的工具
称为Linux防火墙的“用户态”

二.防火墙的分类

按保护范围划分:

  • 主机防火墙:服务范围为当前一台主机
  • 网络防火墙:服务范围为防火墙一侧的局域网

按实现方式划分:

  • 硬件防火墙:在专用硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现,如:华为, 山石hillstone,天融信,启明星辰,绿盟,深信服, PaloAlto , fortinet, Cisco, Checkpoint,等
  • 软件防火墙:运行于通用硬件平台之上的防火墙的应用软件,Windows 防火墙 ISA --> Forefront

按网络协议划分:

  • 网络层防火墙:OSI模型下四层,又称为包过滤防火墙
  • 应用层防火墙/代理服务器:proxy 代理网关,OSI模型七层

三.iptables
概述

属于“用户态”(User Space, 又称为用户空间)的防火墙管理体系。是一种用来管理Linux防火墙的命令程序,它使插入、修改和删除数据包过滤表中的规则变得容易,通常位于/sbin/iptables目录下。
netfilter/iptables后期简称为iptables。iptables是基于内核的防火墙,其中内置了raw、mangle、 nat和filter四个规则表。表中所有规则配置后,立即生效,不需要重启服务。

五种规则链

规则的作用:对数据包进行过滤或处理

链的作用:容纳各种防火墙规则

脸的分类依据:处理数据包不同的时机

INPUT :处理发送到本站入站数据包

OUTPUT:处理出本站数据包

FORWARD:处理转发数据包

POSTROUTING链:在进行路由选择后处理数据包

PREROUTING链:在进行路由选择前处理数据包

链内匹配规则

按照顺序一次检查,匹配即停止

若找不到相匹配的规则,则按链的默认策略处理

四个规则表

作用:容纳各种规则链

raw表:确定是否对该数据包进行状态跟踪

mangle表:为数据包设置标记

nat表: 修改数据包的源、目标IP地址或端口

filter表: 确定是否放行该数据包

规则表之间的顺序

raw→mangle→nat→filter

Linux防火墙_第1张图片

规则链

INPUT:进入到本机的流量 

OUTPUT:从本机出去的流量

FORWARD:转发

PREROUTING:路由选择前

POSTROUTING:路由选择后

相关操作
#查看有没有安装
iptables --version 

操作前关闭防火墙,安装iptables
systemctl stop firewalld.service
yum -y install iptables iptables-services

格式
iptables  [-t 表名]  管理选项  [链名]  [匹配条件]  [-j 控制类型]
iptables   table    command  chain   parameter target

iptables -t #默认指定filter表
		 -t nat
		 
command -A 追加
		-D 删除
		-vnL 显示详细规则链
		-R 替换
		-F 清空所有
		-I 插入
		-P 设置规则链的默认策略
iptables -vnL --line-numbers  #查看规则的编号

chain 链名
INPUT		#处理发送到本站入站数据包
OUTPUT		#处理出本站数据包
FORWARD		#处理转发数据包
POSTROUTING #在进行路由选择后处理数据包
PREROUTING 	#在进行路由选择前处理数据包

parameter匹配条件
		 -p 协议
		 -s 源ip
		 -d 目的ip
		 -i 入站网卡
		 -o 出站网卡
		 --sport 源端口
		 --dport 目的端口
target控制类 
		-j ACCEPT 允许
		-j DROP	  拒绝
		-j REJECT 拒绝并回复
		-j LOG	  生成日志
		
 添加新的防火墙
iptables -t filter -A INPUT -p icmp -j DROP #不允许任何主机ping本主机

iptables -I  INPUT 2 -p tcp --dport 22 -j ACCEPT  #允许主机ssh端口 通过我的
查看规则表
iptables [-t表名] -n -L [链名] |[-- line-numbers]
或
iptables - [vn]L  #不可以合写为-Ln
[root@localhost ~]iptables -vnL --line-numbers
删除、替换、清空规则
删除:
iptables -D INPUT 5
替换:
iptables -A INPUT -s 192.168.91.101 -j DROP
iptables -R INPUT 1 -s 192.168.91.101 -j ACCEPT
清空:
iptables -F INPUT
设置默认策略
iptables -P INPUT <策略>
iptables -P OUTPUT <策略>
iptables -P FORWARD <策略>
INPUT 是针对进入系统的数据包,
OUTPUT 是针对离开系统的数据包,
FORWARD 是针对通过系统的数据包
策略可以是 ACCEPT、DROP 或 REJECT

以下操作可以将 filter 表中 FORWARD 链的默认策略设为丢弃, OUTPUT 链的默认策略设为允许。   
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT  
通用匹配
直接使用,不依赖于其他条件或扩展,包括网络协议、IP地址、网络接口等条件
iptables -I INPUT -i ens33 -s 192.168.91.0/24 -j DROP#拒绝从en33进入的192.168.91网段
iptables -I INPUT -p icmp -j DROP #拒绝icmp协议访问
iptables -A FORWARD ! -p icmp -j ACCEPT           #感叹号”!”表示取反
隐含扩展
 --source-port, --sport port[:port]:匹配报文源端口,可为端口连续范围
 --destination-port,--dport port[:port]:匹配报文目标端口,可为连续范围
 --tcp-flags mask comp
     mask 需检查的标志位列表,用,分隔 , 例如 SYN,ACK,FIN,RST
     comp 在mask列表中必须为1的标志位列表,无指定则必须为0,用,分隔tcp协议的扩展选项
注意: --sport和--dport 必须配合-p <协议类型>使用

[root@localhost ~]iptables -A INPUT -p tcp  --sport 10000:30000 -j REJECT 
#10000到30000 全部被拒

root@localhost ~]iptables -I INPUT -i ens33 -p tcp --tcp-flags FIN,RST,ACK SYN -j ACCEPT
#丢弃SYN请求包,放行其他包
显示扩展模块

multiport扩展

以离散方式定义多端口匹配,最多指定15个端口
[!] --source-ports,--sports port[,port|,port:port]...
#指定多个源端口 逗号隔开
[!] --destination-ports,--dports port[,port|,port:port]...
# 指定多个目标端口 逗号隔开
[!] --ports port[,port|,port:port]...
#多个源或目标端

[root@localhost ~]iptables -t filter -A INPUT -s 192.168.91.101 -p tcp --dport 22,80 -j REJECT  #不支持离散的端口号

iprange扩展

指明连续的(但一般不是整个网络)ip地址范围
[!] --src-range from[-to] 源IP地址范围
[!] --dst-range from[-to] 目标IP地址范围

[root@localhost ~]iptables -A INPUT  -m iprange --src-range 192.168.91.101-192.168.91.103 -j REJECT 
# 指定 源地址为192.168.91.101-192.168.91.103   3个地址无法访问 当前主机
mac地址
mac 模块可以指明源MAC地址
[!] --mac-source XX:XX:XX:XX:XX:XX

[root@localhost ~]iptables -A INPUT -m mac --mac-source 00:0c:29:2a:d6:05 -j REJECT

state

状态类型*:

NEW :与任何连接无关的,还没开始连接

ESTABLISHED :响应请求或者已建立连接的,连接态

RELATED :与已有连接有相关性的(如FTP主被动模式的数据连接),衍生态,一般与

ESTABLISHED 配合使用

INVALID:不能被识别属于哪个连接或没有任何状态
 

--state state
 
iptables  -A INPUT -m state --state   NEW            -j  REJECT
iptables  -A INPUT  -m state --state  ESTABLISHED    -j   ACCEPT #新用户不可以访问  就用胡可以访问  
iptables -A FORWARD -m state --state NEW -P tcp ! --syn -j DROP
#禁止转发与正常TCP连接无关的非--syn请求数据包(如伪造的网络攻击数据包)   

你可能感兴趣的:(linux,服务器,apache)