文章目录
iptables防火墙
1、什么是防火墙
防止恶意流量访问的软件就叫做防火墙。
2、防火墙的种类
软件防火墙
firewalld、iptables
硬件防火墙
F5,华为赛门铁克,思科的H3c
firewalld和iptables的区别?
firewalld更简单
firewalld底层操作的还是iptables。
iptables更底层
iptables底层操作是系统内核流量的走向。
四表五链
系统安全框架。
3、什么是iptables
iptables是用于监控进/出服务器流量的一个工具
防火墙版本
[root@lb01 ~]# iptables -V
iptables v1.4.21
4、什么是包过滤防火墙
包过滤防火墙也称分组过滤路由器,又叫网络层防火墙,它一般是通过检查单个包的地址,协议,端口等信息来决定是否允许此数据包通过,有静态和动态两种过滤方式。
5、什么是表
filter: 负责做过滤功能:INPUT、OUTPUT、FORWARD
nat: 负责网络地址转换:PREROUTING、INPUT、OUTPUT、POSTROUTING
mangle: 负责修改数据包内容:PREROUTING、INPUT、OUTPUT、POSTROUTING、FORWARD
raw: 负责数据包跟踪:PREROUTING、OUTPUT
6、什么是链
1) PREROUTING: 主机外报文进入位置,允许的表mangle, nat(目标地址转换,把本机地址转换为真正
的目标机地址,通常指响应报文)
2) INPUT:报文进入本机用户空间位置,允许的表filter, mangle
3) OUTPUT:报文从本机用户空间出去的位置,允许filter, mangle, nat
4) FORWARD:报文经过路由并且发觉不是本机决定转发但还不知道从哪个网卡出去,允许filter, mangle
5) POSTROUTING:报文经过路由被转发出去,允许mangle,nat(源地址转换,把原始地址转换为转发主
机出口网卡地址)
总结:表的作用各有不同,链的位置各有不同。表中的链就是将表的功能放到链的具体位置去执行。
7、什么是规则
防火墙规则右称之为防火墙策略,主要是描述执行什么防火墙功能的记录。
8、防火墙的增删改查
# 安装iptables服务端
[root@web01 ~]# yum install iptables-services -y
# 防火墙表与链之间的关系
filter: 负责做过滤功能:INPUT、OUTPUT、FORWARD
nat: 负责网络地址转换:PREROUTING、INPUT、OUTPUT、POSTROUTING
mangle: 负责修改数据包内容:PREROUTING、INPUT、OUTPUT、POSTROUTING、FORWARD
raw: 负责数据包跟踪:PREROUTING、OUTPUT
filter: INPUT ------------------> FORWARD ---------------> OUTPUT
nat: PREROUTING ----------> INPUT ----------> OUTPUT -----------> POSTROUTING
mangle: PREROUTING ---------> INPUT --------> FORWARD -------> OUTPUT --------> POSTROUTING
raw : PREROUTING ---------> OUTPUT
###########
ACCEPT 将数据包放行,进行完此处理动作后,将不再比对其它规则,直接跳往下一个规则链。
REJECT 拦阻该数据包,并传送数据包通知对方。
DROP 丢弃包不予处理,进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。
REDIRECT 将包重新导向到另一个端口,进行完此处理动作后,将会继续比对其它规则。
1、要求只有172.16.0.0网段的能够登录web01
iptables -t filter -I INPUT -p ALL -s 172.16.0.0/20 -j ACCEPT
iptables -t filter -A INPUT -p ALL -j DROP
2、访问web01的8080端口转发至80端口
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j REDIRECT --to-port 80
查
格式:iptables -t 表名 选项 链名称 条件 动作
-L, --list 列出当前的规则
[root@web01 ~]# iptables -L-n, 禁止反向解析-v, 显示数据包详情
[root@web01 ~]# iptables -vnL-t: 指定操作的表(默认的表是:filter )
[root@web01 ~]# iptables -vnL -t nat
增加
# 追加
-A, --append 追加一条规则到链中
案例1:不允许访问本机
iptables -t filter -A INPUT -p ALL -j DROP
案例2:要求172.16.1.0可以访问web01,其他的请求全部拒绝
iptables -t filter -A INPUT -p ALL -s 172.16.1.0/20 -j ACCEPT
iptables -t filter -A INPUT -p ALL -j DROP
插入
-I, --insert 插入一条规则,插入到顶部
案例3:要求在案例2的基础上,允许192.168.15.66可以访问?
iptables -t filter -I INPUT -p ALL -s 192.168.15.66 -j ACCEPT
案例4:只允许其他网络ping web01
iptables -t filter -I INPUT -p ICMP -s 192.168.15.7 -j ACCEPT
注意:链的匹配规则是从上到下的,一旦匹配上了就无法在往下进行匹配了。
-p : 指定对应的管理流量类型 TCP UDP ICMP : ping ALL : 所有协议
-j : 指定动作,转发模式-s 源地址-d 目标地址--sport 源端口--dport 目标端口
删
-F, --flush 清空iptables
-F : 清除所有的防火墙规则
格式:iptables -t [表] -D [链] [规则编号]
--line-number : 防火墙规则的编号
-D, --delete 删除链中的规则
[root@web01 ~]# iptables -t filter -D INPUT 2
改
-R, --replace 修改
iptables -t filter -R INPUT 2 -p ALL -s 192.168.15.0/24 -j ACCEPT-S,
--list-rules 列出所有的规则-Z,
--zero 清空计数器( 包数量 、包大小)
-N, --new-chain 创建一个自定义 链-X,
--delete-chain 删除一个自定义链
-P, --policy 指定链的默认策略
-i : 进来的网卡
-o : 出去的网卡
-m : 指定模块
-j : 转发模式
9、防火墙的模块
multiport
解释:连续匹配多个端口案例1:要求192.168.15.0/24网段的所有IP只能够访问22,80,443端口,其他的取决。
iptables -t filter -A INPUT -p TCP --dport 22 -s 192.168.15.0/24 -j ACCEPT iptables -t filter -A INPUT -p TCP --dport 80 -s 192.168.15.0/24 -j ACCEPT iptables -t filter -A INPUT -p TCP --dport 443 -s 192.168.15.0/24 -j ACCEPT iptables -t filter -A INPUT -p tcp -j DROP
iptables -t filter -A INPUT -p tcp -m multiport --dports 22,80,443 -j ACCEPT iptables -t filter -A INPUT -p tcp -j DROP
案例2:要求192.168.15.0/24网段的所有IP只能够访问70-90端口,其他拒绝
iptables -t filter -A INPUT -p tcp -m multiport --dports 10000:30000 -j ACCEPT iptables -t filter -A INPUT -p tcp -m multiport --dports 10:30 -j ACCEPT iptables -t filter -A INPUT -p tcp -j DROP
iprange模块
解释:连续匹配多个IP参数:
--src-range from[-to]: 源地址范围
--dst-range from[-to] 目标地址范围
案例1:要求只有192.168.15.7到192.168.15.66能够通过22端口登录,其他的拒绝
iptables -t filter -A INPUT -p tcp --dport 22 -s 192.168.15.7 -j ACCEPT
iptables -t filter -A INPUT -p tcp --dport 22 -s 192.168.15.66 -j ACCEPT
iptables -t filter -A INPUT -p tcp -j DROP
iptables -t filter -A INPUT -p tcp -m iprange --src-range 192.168.15.7-192.168.15.66 -j ACCEPT
string模块
解释:按照内容进行匹配参数:
--string pattern # 指定要匹配的字符串
--algo {bm|kmp} # 配的查询算法
案例1:要求访问的内容中包含HelloWorld的内容不允许访问,其他的可以。
iptables -t filter -A OUTPUT -p tcp -m string --string "hello" --algo kmp -j DROP
time模块(UTC)
解释:根据时间来控制访问(UTC)参数:
--timestart hh:mm[:ss] # 开始时间
--timestop hh:mm[:ss] # 结束时间
--monthdays day[,day...] # 指定一个月的某一天
--weekdays day[,day...] # 指定周 还是 周天
案例1:要求上午的 08:00 到 上午的 10:22 不允许访问,其他时间可以。
iptables -t filter -A INPUT -p tcp -m time --timestart 00:00 --timestop 02:22 -j DROP
icmp模块
解释:控制icmp协议参数:
--icmp-type {type[/code]|typename} echo-request (8) 请求(我可以ping别人,别人休想ping我)
echo-reply (0) 回应(别人可以ping我,我休想ping别人)
案例1:禁止别人ping我,但我可以ping别人
iptables -t filter -I INPUT -p icmp --icmp-type "echo-request" -j DROP
connlimit模块
# 控制并发数参数:
--connlimit-upto n # 如果现有连接数小于或等于 n 则 匹配
--connlimit-above n # 如果现有连接数大于n 则匹配
ACCEPT 将数据包放行,进行完此处理动作后,将不再比对其它规则,直接跳往下一个规则链。
REJECT 拦阻该数据包,并传送数据包通知对方。
DROP 丢弃包不予处理,进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。
REDIRECT 将包重新导向到另一个端口,进行完此处理动作后,将会继续比对其它规则。
案例1:要求登录192.168.15.5的窗口最多有两个
iptables -t filter -A INPUT -p ALL --dport 22 -m connlimit --connlimit-above 2 -j REJECT
limit模块
# 针对 报文速率 进行限制。 秒、分钟、小时、天。
--limit rate[/second|/minute|/hour|/day] # 报文数量
--limit-burst number # 报文数量(默认:5)网速 * 1000 / 1500 = 数据包数量
2.允许10个数据报文快速通过,超过的数据报文 1/m
iptables -t filter -A INPUT -p icmp -m limit --limit 1/m --limit-burst 10 -j ACCEPT iptables -t filter -A INPUT -p icmp -j DROP
3.限速:限制传输的带宽不可以超过500k(500 * 1000 / 1500 = 333 包)
案例1:要求每秒只能够传输500k大小数据
iptables -t filter -A INPUT -p tcp -m limit --limit 333/s -j ACCEPT iptables -t filter -A INPUT -p tcp -j DROP
10、防火墙的案例
4.对所有的地址开放本机的tcp(80、22、8080-9090)端口的访问
iptables -t filter -A INPUT -p tcp -m multiport --dports 80,22,8080:9090 -j ACCEPT
5.允许对所有的地址开放本机的基于ICMP协议的数据包访问
iptables -t filter -A INPUT -p icmp -j ACCEPT
6.其他未被允许的端口禁止访问
iptables -t filter -A INPUT -p tcp -j DROP