linux 防火墙和iptables
介绍
-
防火墙是什么
防火墙是位于内外网之间的一组软硬件部件的组合,`主要目的是保护内外网的数据流通的安全`,当外网访问内网的时候发送的数据包必须经过内网的防火墙检验是否符合规则。
-
作用
防止流量攻击
-
防火墙分类
-
硬件防火墙 :F5
-
软件防火墙:iptables 、firwalld 、 netfilter
-
iptables
- 属于“用户态”(User Space, 又称为用户空间) 的防火墙管理体系
-
firwalld
-
netfiter
- 属于“内核态”(KernelSpace,又称为内核空间) 的防火墙功能体系
-
-
云防火墙 :阿里云 的安全锁
-
四表五链
-
表:存放、管理链的集合/容器
-
链:存放规则的集合/容器
-
规则表的作用: 容纳各种规则链
-
规则链的作用: 容纳各种防火墙规则
-
表的优先级:raw--》mangle--》nat--》filter
-
iptables 的默认表是filter
表名称 | 功能 | 管理的链 |
---|---|---|
filter | 过滤 | INPUT FORWARD OUTPUT |
nat<br>(Network Address Translation)表 | 用于网络地址转换(IP、端口) | PREROUTING INPUT<br>OUTPUT POSTROUTING |
mangle表 | 修改数据包内容 | PREROUTING INPUT FORWARD OUTPUT POSTROUTING |
raw表 | 数据包跟踪 | PREROUTING OUTPUT |
-
五链
-
PREROUTING: 主机外报文进入位置,允许的表mangle, nat(目标地址转换,把本机地址转换为真正的目标机地址,通常指响应报文)
-
INPUT:报文进入本机用户空间位置,允许的表filter, mangle
-
OUTPUT:报文从本机用户空间出去的位置,允许filter, mangle, nat
-
FOWARD:报文经过路由并且发觉不是访问本机,而是通过本机转发出去的流量,允许filter, mangle
-
POSTROUTING:报文经过路由被转发出去,允许mangle,nat(源地址转换,把原始地址转换为转发主机出口网卡地址)
-
防火墙流程
防火墙是层层过滤的,实际是按照配置规则的顺序从上而下,从前到后过滤的,
如果匹配到规则,即明确表示是通过还是拒绝,数据包不再向下匹配新的规则。
如果没有匹配到规则,向下匹配,直到匹配到默认规则。
防火墙的默认规则是所有规则执行完才执行的。
iptables的规则管理
格式
格式:iptables -t 表名 选项 链名称 条件 动作
参数
-t: 指定操作的表,不指定默认为filter
-A, --append 追加一条规则到链中
-D, --delete 删除链中的规则
-I, --insert 插入一条规则,插入到顶部
-R, --replace 修改
-L, --list 列出当前的规则
-S, --list-rules 列出所有的规则
-F, --flush 清空
-Z, --zero 清空计数器(包括数量 、包括大小)
-N, --new-chain 创建一个自定义链
-X, --delete-chain 删除一个自定义链
-P, --policy 指定链的默认策略,(默认规则)
-p --指定协议 通常有TCP,UDP,ICMP,ALL
-n --不反解ip
-s --源地址
-d --目标地址
--sport --源端口
--dport --目标端口
协议
TCP
UDP
ICMP #禁ping
ALL
动作
ACCEPT 将数据包放行,进行完此处理动作后,将不再比对其它规则,直接跳往下一个规则链。
REJECT 拦阻该数据包,并传送数据包通知对方。
DROP 丢弃包不予处理,进行完此处理动作后,将不再比对其它规则,直接中断过滤程序。
REDIRECT 将包重新导向到另一个端口,进行完此处理动作后,将会继续比对其它规则。
-i : 进来的网卡
-o : 出去的网卡
-m : 指定模块
-j : 转发模式
练习
[root@lb01-5 ~]# iptables -n -L
Chain INPUT (policy ACCEPT)<============默认规则
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
#禁止访问22号端口
[root@lb01-5 ~] # iptables -A INPUT -p tcp --dport 22 -j DROP
#删除上一条规则
[root@lb01-5 ~]# iptables -D INPUT 1
仅允许 192.168.230.3 访问 192.168.230.5 的80端口,其他的都拒绝。
1、允许192.168.230.3 访问 192.168.230.5
2、拒绝所有请求
iptables -t filter -I INPUT -p tcp -s 192.168.230.3 -d 192.168.230.5 --dport 80 -j ACCEPT
iptables -t filter -A INPUT -p tcp -j DROP
凡是由本机发出的TCP协议报文都允许出去,其他的协议不允许(可以访问baidu但是不能ping百度)
1、允许TCP协议
2、拒绝所有协议
iptables -t filetr -I OUTPUT -p tcp -j ACCEPT
iptables -t filter -A OUTPUT -j DROP
在上次的基础上,放行所有的协议
[root@lb01 ~]# iptables -t filter -R OUTPUT 2 -j ACCEPT
只允许192.168.230.3通过22号端口链接192.168.230.5
先允许,后拒绝
iptables -t filter -I INPUT -p tcp -s 192.168.230.3 --dport 22 -j ACCEPT
iptables -t filter -A INPUT -p tcp -J DROP
只允许192.168.230.3访问192.168.230.5的20到90号端口
先允许,后拒绝
iptables -t filter -I INPUT -p tcp -s 192.168.230.3 --dport 20:90 -j ACCEPT
iptables -t filter -A INPUT -p tcp -J DROP
常见的企业扩展模块
1、multiport模块
允许匹配多个不连续端口
只允许192.168.230.3访问192.168.230.5的22、80、3306、2379、8080、8090号端口
iptables -t filter -I INPUT -p tcp -s 192.168.230.3 -m multiport --dports 22,80,3306,2379,8080,8090 -j ACCEPT
iptables -t filter -A INPUT -p tcp -J DROP
2、iprange模块
指定一段连续的ip地址范围
--src-range from[-to]: 源地址范围
--dst-range from[-to] 目标地址范围
192.168.230.3-192.168.230.7 地址段都 不允许ping 192.168.230.5
iptables -t filter -I INPUT -p icmp -m iprange --src-range 192.168.230.3-192.168.230.7 -j DROP
3、string模块
过滤数据包中包含某个字符串
--string pattern # 指定要匹配的字符串
--algo {bm|kmp} # 匹配的查询算法
过滤访问到自己主机上的hello
iptables -t filter -I INPUT -p tcp -m string --string "hello" --algo bm -j DROP