防火墙:Firewall
工作在网络或主机的边缘,对进出的数据包根据定义的规则进行检查
并作出相应处理的一套组件;这个组将可能是硬件,也可能是软件,或二者的结合
有网络防火墙;主机防火墙
1、防火墙的类型
包过滤性防火墙:工作在tcp/ip的2,3,4层
应用层网关防火墙:对特定的应用层协议做检查的
2、防火墙的功能:
filter:过滤,拒绝或者放行(与本机有关)
工作在input,forward,output
nat:地址装换(与后端有关)Network Addess translation
prerouting output postrouting
mangle:拆开,改改,再合上,表示路由的数据可以改(与标记有关)
可称为'破坏者' 在五个链上都可工作
raw:在prerouting,output上工作
3、规则链:
INPUT:主要与想要进入linux主机的封包有关
OUTPUT:主要与linux本机所要送出的封包有关
FORWARD:转递封包到后端的计算机中,与nat table相关性较高
PREROUTING:路由前,在进行路由判定之前所要进行的规则
POSTROUTING:路由后,在进行路由判断之后所要进行的规则
4、iptables的使用
iptables是写规则的工具,可以添加,删除,替换规则等
使用语法为:
iptables [-t TABLE] COMMAND(选项) CHAIN [CRETIRIA] -j TARGET
简要说明:
4.1:[-t TABLE] 表是包含仅处理特定类型信息包的规则和链的信息包过滤表。
4.2:COMMAND CHAIN:对链或者链中的规则进行管理操作
链中规则:
-A : 添加,追加
-I #:插入第几条
-R #:替换 或替换某一个规则
-D #:删-除第几条规则 -D CRETERIA
链管理:
-N:new新建一个自定义链
-E:重命名一条自定义链
-P:设定链的默认策略
eg:iptables -P INPUT ACCEPT|DROP
-F:flush,清空指定连,如果不指定链,则清空整个表中的所有链
-X: 删除所有自定义的空链
-Z:置零,每条规则都有两个计数器:一个是被本规则匹配到的
所有数据包的个数,另一个是被本规则匹配到的所有数据包的大小之和(即流量)
4.3:匹配条件
指定信息包与规则匹配所应具有的特征(如源地址、目的地址、协议等)。
匹配分为通用匹配和特定于协议的扩展匹配两大类。
4.3.1:通用匹配:
-s:源地址
-d:目标地址
-p :{icmp|tcp|udp}:对应的协议
-i in_interface :流入接口
-o out_interface:流出接口
4.3.2:扩展匹配:又可分为两种:
隐含扩展:
-p tcp
--sport PORT[-PORT2]:要么是连续的,要么是单个的
--dport PORT[-PORT2]
--tcp-flages:标志位 SYN=1 ACK=0 ,RST, SYN,FIN SYN
-p udp
--sport
--dport
-p icmp
--icmp-type
0:echo-reply
8:echo-request
显式扩展:
常用选项有:
-m state:用于实现链接的状态检测
-m:指定的模块;libipt_standard.so
--state:状态
NEW:想要新建立联机的封包状态
ESTABLISHED:已经联机成功的封包状态
RELATED:这个封包与主机发送出去的封包有关;一个协议用多个链接
INVALID:无效的封包
-m multiport :规则的合并
--source-ports:多个port用,分开;源端口有哪些
--destination-pors:目标端口有哪些
--ports:无论源与目标都匹配
limit:令牌桶过滤器
-m limit:
--limit 3/min :后跟速率
--limit-burst 30:速率峰值;后跟数量
最大连接数限制:
-m connlimit:
--connlimit-above n :多余n个拒绝
多余n个表示满足条件,表示应该不允许,可以取反
ip地址序列:
-m iprange:
--src-range ip-ip(开始ip-结束ip)
--dst-range ip-ip
-m iprange --src-range 172.16.100.1-172.16.100.10
限定字符串的
-m string:
--algo bm|kmp :指定算法
--string "pattern" :匹配字符串
创建动态ip名单,指定时间内访问多少次;就禁止他在多长时间内不允许访问
-m recent:最近使用的机制
--name NAME
--set
--rcheck
--update
--remove:从列表中释放
--seconds 禁止多长时间,和--rcheck,--update以前使用
--hitcount 行为达到多少次归为坏蛋,
时间
-m time
--datastart
--datastop
--timestop
--timestart
--weekdays:
实例1:不允许172.16.0.0这台主机ping进来,在INPUT链上做处理:
允许任意主机访问172.16.14.1这台主机的22号端口:0.0.0.0要加掩码
-m state用于对链接状态的检查:下面实现允许新建和链接成功的封包进入172.16.14.1;允许链接成功的状态出去:
查看结果:
将80和22端口的请求合并为一个:
合并后:
令牌桶过滤器 -m limit的使用:设定从eth0的封包的速率和最大峰值:
查看结果:
转载于:https://blog.51cto.com/4882681/1050032