iptables防火墙
主要作用:隔离功能,一般部署在网络边缘或者主机边缘,控制哪些数据可以被外网访问,哪些数据可以访问内网
硬件防火墙:路由器,交换机,三层交换机
软件防火墙:360,金山毒霸,iptables,firewalld
运用到的安全技术
1、入侵检测系统:当检测数威胁(例如:木马、病毒等),不会立刻阻断网络访问,而是过后才报警和监督
2、入侵防御系统:一旦检测出威胁,会立刻阻断,主动的方式保护网络安全,以透明模式工作,一般采取在线部署的方式
区分方式
1.按保护范围:
主机防火墙:服务范围就是当前自己的主机
网络防火墙:必经之路
2.按照实现方式
硬件:即有硬件的专业的防护,也有专业的软件防护
软件:代码实现,判断
3.按照网络协议划分
网络层:包过滤防火墙
应用层(代理服务器):设置数据的进出
Linux的防火墙:firewalld Centos7自带
iptables 包过滤防火墙
selinux 自带的安全工具
继承在内核netfilter之中 ---内核态
iptables 包过滤防火墙
工作在网络层;针对数据包进行过滤和限制
iptables属于用户态
过滤数据包:IP地址、端口、协议都可以在iptables中进行配置,同时页可以进行限制或者放行
主要的作用协议:TCP
iptables的组成和工作机制
组成部分:
四表五链
(特殊:selinux 也是一个表,但是,是不在讨论范围之内的第五表)
四表:
raw 表:连接跟踪机制;可以加快封包穿过防火墙的速度;数据包跟踪
mangle 表:数据标记
nat 表:地址转换表
filter 表:过滤规则表;根据规则来定义或者过滤符合条件的数据包;默认表
四表的优先级
security——>raw ——>mangle ——>nat ——>filter
五链
INPUT:处理数据包,进入本机的规则
OUTPUT:处理数据包发出本机的规则
prerouting:处理数据包进入的规则
postrouting:处理数据包离开本机之后的规则
FORWARD:处理数据包转发的规则
iptables 的规则
表里有链(每个表里都可以有着五个链),链里有规则(规则:自定义的对于数据包的控制命令)
匹配顺序
1、根据表的优先级进行匹配;在表中从上到下进行检查,找到匹配的规则后立刻停止,不在继续从表中向下查找,如果匹配不到规则,则按照链的
默认规则进行处理
2、报文流向
流入本机:prerouting——>INPUT链——>用户进程——>请求——>相应——>数据返回给用户
流出本机:例 httpd——>相应(报文)——>OUTPUT链——>postrouting(是否要进行地址转换)——>用户
转发:数据包进来,一定来自非同一网段,路由转发——>FORWARD链——>数据包出去(如不允许转发,则数据包将被直接丢弃)
iptables 的命令格式
iptables [-t 表名](如果不使用-t指定表则默认指定filter表) 管理选项 [链名] [匹配条件] [-j 控制类型]
末尾可以添加字段 --line-number :表示给自定义的条件编号
管理选项
-A:在链的末尾追加一条;添加一条规则
-I:在链中插入一条新的规则;指定插入的序号 -I 后指定序号
-P:修改默认策略(链的)
-D:删除规则;可以指定序号删除
-R:替换、修改规则(一般不使用)
-L:查看链中的规则;一般配合 v:显示详细信息,和 n:将规则以数字形式展示 -vnL
-F:清空链中的所有规则;慎用!!!!
匹配条件
-p:指定匹配的协议类型
-s:指定匹配的源IP地址(数据包)
-d:指定匹配的目的IP地址(数据包)
-i:指定数据包进入本机的网络接口
-o:指定数据包离开本机的网络接口
--sport:指定源端口号
--dport:指定目的端口号
控制类型
ACCEPT:允许数据包通过
DROP:拒绝,并且直接丢弃数据包,不给主机做出任何信息回应
REJECT:拒绝,但会给主机做出相应
SNAT:修改数据包的源IP地址
DNAT:修改数据包
在生产中,iptables 中所有链的默认规则都是DROP
隐藏模块
在 -p 指定协议时,如已经指明了是什么协议,就无需在用-m来指明控制模块;当指定端口号时,可以使用冒号的形式,也可以使用-m因此模块来实现
-m 可以用明确的形式来指出类型、多端口、mac地址、IP地址、数据包状态
用法: -p tcp -m multiport --dport 22,20,3306,80 -j ACCEPT
可以看出 使用-m multiport 来指定多端口时,要使用“.”隔开,而且不用顾及大小排序
IP范围
-m iprange --src-range 源ip范围
-m iprange --dst-range 目的IP范围
使用方法: -p icmp -m iprange --src-range 20.0.0.10-20.0.0.20 -j ACCEPT
mac地址范围
-m mac --mac-source
iptables 的备份与还原
1、在命令行中的iptables配置都是临时,即重启服务就会失效
2、永久配置
步骤:
首先将策略全部备份 ——> iptables-save > /opt/iptables.bak
再将备份的策略重定向到 iptables的默认永久配置文件 /etc/sysconfig/iptables
另外一种临时配置格式
iptables-restore < /opt/iptables.bak
创建自定义链
iptables -N 自定义链名
没有指定链名 (-t 链名),会默认创建在filter表中
更改表中的链名
iptables -E 原来的链名 新链名
创建在自定义链中的规则,需要添加到默认链中,才能启用
iptables -I INPUT -p icmp -j 自定义链名
删除自定义链
iptables -X 自定义链名
注意:如果自定义链的规则已经在默认链中引用,则需要先删除默认链中的引用规则,然后再删除自定义链中的规则,最后才能删除自定义的链
Linux系统如何实现抓包
使用tcpdump 来实现Linux的抓包;tcpdump为Linux自带的工具
命令示例:
tcpdump 协议 -i 设备名(如ens33) -t -s0 -c 10(指定抓包次数) and dst port 80 and src net 20.0.0.0/24 -w(保存) ./ens33.cap
-i ens33:只抓经过ens33的数据包
-t:不显示时间戳
-s0:抓取完整的数据包
and dst port 80 :目的端口为80
and src net 20.0.0.0/24 :指定网段 为数据包的源地址
-w :把数据包的内容保存; ./表示保存位置为当前目录;或/../..直接指定准确保存文件
动态抓包(即一直抓,手动停止)
tcpdump tcp -i ens33 -s0 -w ./ens33.acp
注意:Linux系统无法直接解析出,而要在winshark中直接打开保存的.cap类型的包
firewalld
firewalld 防火墙 ----包过滤防火墙。工作在:网络层。是centos7自带的默认防火墙,主要目的就是取代iptables
firewalld的两种配置模式:
1.运行时配置
2.永久配置
iptables是静态防火墙。firewalld是动态防火墙。
systemctl status firewalld.service :查看防火墙状态
1
firewalld是按照区域进行划分的:一共有9个区域。
每个区域的作用:
trusted:信任区域,允许所有的流量传入
public:公共区,默认区域,只允许ssh和dhcpv6这两个预定义服务的流量可以传入,其余都是拒绝的。
external:外部区域,只允许ssh和dhcpv6这两个预定义服务的流量可以传入,其余都是拒绝的。如果通过此区域转发的ipv4流量可以进行地址伪装
。
home:家庭区域,只允许ssh和dhcpv6这两个预定义服务的流量可以传入,其余都是拒绝的。
internal:内部区域,作为默认值和home是一个作用。
work:工作区域,只允许ssh和dhcpv6这两个预定义服务的流量可以传入,其余都是拒绝的。
dmz:隔离区域,也成为非军事区域,只允许ssh和dhcpv6这两个预定义服务的流量可以传入,其余都是拒绝的。
block:限制区域,所有的流量都拒绝。
drop:丢弃区域,直接丢弃,没有回显信息。
linux自带的预定义服务:
ssh:远程连接协议
dhcpv6:通过dhcpv6服务器进行报文交互,获取ipv6的地址。
ipp:编程语言交互 java python
samba:打印机
mdns:主机名地址解析。主要解析小型网络ip地址。
调用方式:
方式一:使用远程连接工具MobaXterm,输入命令:
使用命令行进行更改:
查看系统防火墙默认区域:
注意要确保防火墙属于开启状态!!!
firewall-cmd --get-default-zone 查看系统防火墙默认区域
1
切换默认区域:
firewall-cmd --set-default-zone=block 修改系统防火墙默认区域切换为block
1
firewall-cmd --list-all 查看默认区域的全部规则
1
添加单个服务:
firewall-cmd --add-service=http --zone=public
1
添加多个服务:
firewall-cmd --add-service=http --add-serviceftp --zone=public
5、同时添加httpd、ftp服务到默认区域,设置成永久生效
firewall-cmd --add-service=http --add-service=ftp --permanent
firewall-cmd --add-service={ftp,http} --zone=public --permanent #两种方式
firewall-cmd --reload
firewall-cmd --list-all
添加使用 --permanent选项表示设置成永久生效,需要重新启动firewalld服务或执行firewall-cmd --reload命令
重新加载防火墙规则时才会生效。若不带有此选项,表示用于设置运行时规则,
但是这些规则在系统或firewalld服务重启、停止时配置将失效。
6.删除public区域的httpd 服务
firewall-cmd --remove-service=http --zone=public
#删除永久规则
[root@localhost ~]# firewall-cmd --remove-service=ftp --zone=public --permanent
success
[root@localhost ~]# firewall-cmd --remove-service=http --zone=public --permanent
success
[root@localhost ~]# firewall-cmd --reload
success
[root@localhost ~]# systemctl restart firewalld.service
[root@localhost ~]# firewall-cmd --list-all
public (active)
target: default
icmp-block-inversion: no
interfaces: ens33
sources:
services: ssh dhcpv6-client
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
永久添加
方式一:firewall-cmd --add-service=http --add-service=ftp --permanent
方式二:firewall-cmd --add-service={ftp,http} --zone=public --permanent
修改完成后:firewall-cmd --reload 重启
注意:在生产环境中不要轻易关闭防火墙,或重启防火墙,否则会出大乱子!!!!
端口管理
1、允许TCP的443端口到internal区域
firewall-cmd --zone=internal --add-port=443/tcp
firewall-cmd --list-all --zone=internal
2、从internal 区域将TCP的443端口移除
firewall-cmd --zone=internal --remove-port=443/tcp
3、允许UDP的2048~2050端口到默认区域
firewall-cmd --add-port=2048-2050/udp
firewall-cmd --list-all