我们需要学习到:封端口,封ip,实现nat功能,如共享上网,端口映射,ip映射
常见的硬件防火墙种类:
1、三层路由:H3c 华为 思科
2、防火墙:深信服
常见的软件防火墙种类:
1、iptables,被写到内核中,以后服务docker 工作在4层
2、firewalld centos7操作系统
3、nftalbes centos8操作系统
4、ufw ubuntu操作系统
云服务器的防火墙:
安全组(封ip 端口 处理不了七层) 阿里云的
waf防火墙 应用防火墙处理7层攻击 sql注入
基本组成:
4表(table):存放链的容器,防火墙最大概念 filter nat mangle raw
raw:对数据包进行状态跟踪,策略只能加在PRERUTING和OUTPUT
mangle:为数据包设置标记,在任何链中可以做(优先级)
filter:控制数据包是否允许进出及转发,ip,端口 在INPUT OUTPUT
nat:控制数据包中地址转换,转发 在PEREROUTING、POSTROUTING、FORWARD
5链(chain):存放规则的容器
INPUT(入站数据过滤) :处理来自外部的数据
OUTPUT(出站数据过滤):处理向外发送的数据。
FORWARD(转发数据过滤):将数据转发到本机的其他网卡设备上。
PREROUTING(路由前过滤) :– 处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址,通常用于DNAT。
POSTROUTING(路由后过滤): – 处理即将离开本机的数据包。它会转换数据包中的源IP地址,通常用于SNAT。
规则(policy):准许/拒绝规则,各种防火墙规则 生效顺序从第一条开始匹配
注意事项
基本语法
查看规则:iptables -t filter -L
iptables -t [表名] 选项 [链名] [条件] [-j 控制类型],如:
iptables -t filter -A INPUT -j DROP -p tcp --dport 8080 (目的地址8080)
iptables -t filter -A INPUT -s 192.168.0.11 -j DROP
iptables -t filter -I INPUT -p icmp -j REJECT 阻止ping测试
在修改规则时需要使用-R参数。
iptables -t filter -R INPUT 3(规则的编号) -s 192.168.0.12 -j DROP
iptables -t filter -A OUTPUT -j DROP -p tcp --d 192.168.0.144 往目的地址得包都被丢弃了
删除规则
iptables -D INPUT 6 -s 194.168.1.5 -j ACCEPT
iptables -D INPUT 6
指定条数在INPUT后加数字 也可以用iptables -i 直接插在第一个
默认策略:
nat表:工作在网络层
iptables -t nat -A PREROUTING -p tcp --dport 7788 -j DNAT(对目的地址进行转换) --to 192.168.0.11:7799
iptables -t nat -A POSTROUTING -p tcp -d 192.168.0.11 --dport 7799 -j SNAT(对源地址进行转换) --to 192.168.0.12
伪装:iptables -t nat -A POST -s 192.168.0.11 -o ens37 -j MASQUERADE
意义是:将从网卡出去的流量伪装成网卡ip,其实就是源地址转换
iptables -t nat -A PEREROUTING -d 200.0.0.1 -dport 22 -j DNAT --to 192.168.0.11:22 最终ssh登录的不是本机,因为在pere链上已经转换
2. 设置默认的 chain 策略
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
删除所有现有规则
iptables -F
Linux防火墙过滤框架
iptables-save命令
iptables-save 命令用来批量导出 Linux 防火墙规则,语法介绍如下:
保存在默认文件夹中(保存防火墙规则): iptables-save > /etc/sysconfig/iptables
iptables-restore 命令可以批量导入Linux防火墙规则,同时也需要结合重定向输入来指定备份文件的位置。命令如下:
iptables-restore < 文件名称 但是文件必须是save保存出来的
匹配条件
连续的端口可以用冒号连接,不连续的就要调用显式模块了
本机可以访问其他主机的tcp服务:如果全允许太多了
iptables -A INPUT -p tcp -m state --state ESTABLISHED(已建立连接) -j ACCRPT
iptables 的四种状态
NEW状态:主机连接目标主机,在目标主机上看到的第一个想要连接的包
ESTABLISHED状态:主机已与目标主机进行通信,判断标准只要目标主机回应了第一个包,就进入该状态。
RELATED状态:主机已与目标主机进行通信,目标主机发起新的链接方式,例如ftp
INVALID状态:无效的封包,例如数据破损的封包状态
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited
第二条规则的含义其实是:调用状态模块,匹配当状态为RELATED和ESTABLISHED的所有数据包通过,换句话说就是允许所有已经建立的连接,表现为本机可以ping其他主机,但是其他主机无法ping本机,只接受自己发出去的响应包,这是万能的一句话,允许所有自己发出去的包进来。后面跟具体规则
第三条规则的含义其实是:依据第二条来的,所有不满足第二条规则的,都会被拒绝,而且会给主机返回一个host-prohibited的消息。需要注意的则是,所有位于第三条规则之下的规则都无法生效,位于该规则之上的都会生效
小练习: 假设内网主机为192.168.1.2 外网为200.0.0.2 防火墙两个网卡 192.168.1.1 和200.0.0.1,先把默认策略调成DROP
1、iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 22 -i ens33 -j ACCEPT
iptables -A INPUT -s 192.168.1.0/24 -p icmp --icmp-type 8 -i ens33 -j ACCEPT
2、iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT 意思是无论tcp,udp,icmp,已建立连接或无连接只要是响应包的都允许
3、iptables -t nat -A POST -s 192.168.1.0/24 -o ens37 -j MASQUERADE/-j SNAT --to 200.0.0.1
6、iptables -A FORWARD -s 192.168.1.2 -j DROP