安全技术和防火墙
安全技术
入侵检测系统
特点:不阻断网络访问,主要是提供告警和事后监督,不主动介入,默默地看着你(监控)
入侵防御系统
特点:透明工作,数据包,网络监控,服务攻击,木马,蠕虫,系统漏洞等等进行准确的分析和判断.在判断为攻击行为会立即阻断,是主动的防御(所有的数据在进入本机之前,必须要通过的设备或者软件)
防火墙
作用和核心:隔离
工作在网络或者主机的边缘
(工作于网络层)对网络或者主机的数据包基于一定的规则进行检查
根据匹配到的规则做出放行或是拒绝,如果拒绝,数据包将会被丢弃,会开放允许访问的策略
所以,是白名单机制(拒绝所有,允许个别)
iptables linux自带的防火墙,一般用于内部配置.对外一般不使用(对外都使用专业的)
firewalld linux自带的防火墙,centos7以后默认的防火墙.功能
包过滤防火墙
(数据包进行控制)
网络层对数据包进行选择,选择的依据就是防火墙设置的策略
策略:ip地址,端口,协议
优点:处理速度快,易于维护
缺点:无法检查应用层数据,病毒无法进行处理.
应用层防火墙
在应用层对数据进行检查,比较安全
优点:更安全,问题可以精准定位.
缺点:所有数据都要检查,会增加负荷.
防水墙
是一种防止内部信息泄露的产品,对外有防火墙的功能,对内是透明模式工作,类似监控
事前,事中,事后都知道
1.拒绝所有,允许个别
2.监控行为
通信的要素
五大要素
原目ip,原目端口,协议(TCP/UDP)
四大要素
原目ip,原目端口
内核态和用户态
内核态:
涉及到软件的底层代码或者系统的基层逻辑,以及一些硬件的编码,一般是开发人员关注的
数据如果是内核态处理,速度相对较快.
iptables的过滤就是由内核态来进行控制
用户态:
指的是应用层软件层面,多是一些人为控制的一系列操作,使用功能
作为运维人员,我们只考虑用户态.
主打一个用
数据如果只通过用户态处理,速度是比较慢的
iptables配置与策略
四表五链
四表
raw表:用于控制数据包的状态,可以跟踪数据包的状态
mangle:可以用来修改数据包的头部信息
NAT表:网络地址转换,可以改变数据包的原地址和目的地址
filter表:也是iptables的默认表,不做申明,默认就是filter表,过滤数据包,控制数据包的进出,以及接受和拒绝数据包.
五链
PREROUTING链:处理数据包进入本机之前的规则(主要工作于nat表和mangle表)
INPUT链:处理数据包进入本机的规则(主要在filter表和nat表工作)
OUTPUT链:处理本机发出的数据包的规则,或者是数据包离开本机的规则(主要在nat表和mangle表工作)
FORWARD链:处理数据包转发到其他主机的规则,或者是否允许本机进行数据包转发(主要在filter表工作)
POSTROUTING链:处理数据包离开本机之后的规则(主要工作于nat表和mangle表)
表里有链,链里有规则
优先级
raw mangle nat filter
数据包进入防火墙先匹配raw表的规则
然后mangle的规则
nat表的规则
filter表规则
管理选项
在表的链中插入,增加,删除,查看规则.
匹配的条件:根据数据包的ip地址,端口,协议
控制类型:允许,拒绝,丢弃
注意事项
1.不指定表名,默认就是filter表
2.不指定链名,默认就是所有链(禁止默认链行为,会出事)
3.除非设置了链的默认策略,否则必须执行匹配条件(一般都是指定匹配条件)
4.选项,链名和控制类型都是大写,其余都是小写.
管理选项
-A 在链中添加一条规则,在链尾添加
-I 在链中指定位置插入一条规则
-P 指定链的默认规则,一般都是设置成拒绝(可改)
-D 删除规则
-R 修改规则(一般不用,且慎用)
-vnL v是显示详细信息,n以数字形式展示内容,L是查看
-line-numbers 显示规则的编号,一般是和查看一起使用
-F 清空链中的所有规则(慎用)
-X 清除自定义链的规则
匹配条件
-t 指定表名
-p 指定协议类型
-s 指定匹配的原ip地址
-d 指定匹配的目的ip地址
-i 指定数据包进入本机的网络设备(就是网卡)
-o 指定数据包离开本机的设备(也是网卡)
--sport 指定原端口
--dport 指定目的端口
-m multiport --sport 匹配多个源端口
-m multiport --dport 匹配多个目的端口
-m iprange --src-range 匹配多个源地址
-m iprange --dst-range 匹配多个目的地址
匹配原则
每个链中的规则都是从上倒下的顺序来进行一次匹配,匹配到之后不再向下匹配
如果链中没有规则,则执行链的默认策略进行处理
控制类型
-j
ACCEPT 允许数据包通过
DROP 直接丢弃数据包,没有任务回应信息
REJECT 拒绝数据包通过,数据包也会被丢弃,但是会有一个响应的信息.
SNAT 修改数据包的原地址
DNAT 修改数据包的目的地址
命令格式
iptables [-t 表名] 管理选项 链名(大写) 匹配条件 [-j 控制类型]
#链 #协议
iptables -A INPUT -p icmp -j REJECT
实操
添加规则
#关闭默认防火墙,防止冲突
systemctl stop firewalld
#安装是为了方便控制
yum -y install iptables iptables-services
systemctl restart iptables
systemctl enable iptables.services
#不指定表名,只针对filter表
#列出默认表(filter表)防火墙规则
iptables -L
#列出默认表(filter表)防火墙规则详细信息以及行号
iptables -nvL --line-numbers
#清空规则
iptables -F
#拒绝所有其他主机ping本机
iptables -A INPUT -p icmp -j REJECT
#在INPUT表第一行插入一条允许ping通的规则
iptables -I INPUT 1 -p icmp -j ACCEPT
iptables -F
#禁止20地址ping通10
iptables -A INPUT -s 192.168.118.20 -p icmp -j REJECT
iptables -F
#禁止多个ip地址ping通10
iptables -A INPUT -s 192.168.118.20,192.168.118.30 -p icmp -j REJECT
iptables -F
#指定端口拒绝
#协议在前,端口在后
#此命令会把xshell断开
iptables -A INPUT -p tcp --dport 22 -j REJECT
iptables -F
#拒绝被对方ip地址访问,端口访问,
#要ip地址在前,协议在中,端口在后
iptables -A INPUT -s 192.168.118.20 -p tcp --dport 22 -j REJECT
删除规则
#查看一下行数
iptables -vnL --line-number
iptables -D INPUT 3
修改规则
#先添加一条规则
iptables -A INPUT -s 192.168.118.20 -p tcp --dport 80 -j ACCEPT
iptables -vnL --line-number
#根据行数修改
iptables -R INPUT 1 -s 192.168.118.20 -p tcp --dport 80 -j REJECT
修改链的默认策略
(仅限于演示,闲着没事改它等死)
生产中的策略都是拒绝所有,允许个别
#整个INPUT链的默认策略改为拒绝
iptables -P INPUT DROP
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
网络设备如何指定
iptables -A INPUT -i ens33 -s 192.168.118.20 -p tcp --dport 80 -j REJECT
拒绝整个网段连接
iptables -A INPUT -s 192.168.118.0/24 -p tcp -j REJECT
一次性操作多个端口
yum -y install mariadb
systemctl restart mariadb.service
net
iptables -A INPUT -p tcp --dport 80:3306 -j REJECT
#-m使用拓展模块,可以一次性禁止多端口,还可以匹配ip范围,还可以指定mac地址
iptables -A INPUT -p tcp -m multiport --dport 80,22,21,53,3306 -j REJECT
#ip范围操作
iptables -A INPUT -m iprange --src-range 192.168.118.20-192.168.118.30 -p tcp --dport 80 -j REJECT
#-m multiport --sport 匹配多个源端口
#-m multiport --dport 匹配多个目的端口
#-m iprange --src-range 匹配多个源地址
#-m iprange --dst-range 匹配多个目的地址
#iptables -A INPUT -m mac --mac-source 马克地址 -j DROP
#ip 协议 端口
策略永久保存
cat /sysconfig/iptables
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -s 192.168.118.20 -p icmp -j REJECT
iptables -save > /opt/iptables.bak
cat /opt/iptables.bak > /etc/sysconfig/iptables
#iptables-restore < /opt/iptables.bak
cat /etc/sysconfig/iptables
自定义链
iptables -vnL
#自定义链
iptables -N xy
#重命名自义链
iptables -E dn
#新增规则
iptables -t -I dn -p tcp -j ACCEPT
iptables -D dn 1
iptables -X dn
snat和dnat
snat 原地址转换
dnat 目的地址转换
内网--外网 内网ip转换成可以访问外网的ip
内网的多个主机可以使用一个有效的公网ip地址访问外部网络
外部用户可以通过一个公网地址访问服务内部的私网服务,也就是把私网的ip和公网的ip做一个映射.
实操
test1 192.168.118.10 nginx
test2 192.168.118.20 路由器转发数据,做地址转换
test3 192.168.118.30 nginx
#关闭三个机器的防火墙
systemct stop firewalld
#关闭安全机制
setenforece 0
test1
yum -y install nginx
systemctl restart nginx
curl 192.168.118.10
cd /etc/sysconfig/network-scripts/
ls
vim /etc/sysconfig/network-scripts/ifcfg-ens33
TYPE=Ethernet
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.118.10
NETMASK=255.255.255.0
GATEWAY=192.168.118.254
DNS1=218.2.135.1
DNS2=112.4.0.55
:wq
systemctl restart network
curl 12.0.0.100
test2
yum -y install iptable iptable-service
systemctl restart iptables.service
systemctl enable iptables.services
#虚拟机添加一张网卡
#查看是否添加了
ifconfig
cd /etc/sysconfig/network-scripts/
ls
vim ifcfg -ens33
TYPE=Ethernet
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.118.254
NETMASK=255.255.255.0
#GATEWAY=192.168.118.2
DNS1=218.2.135.1
DNS2=112.4.0.55
:wq
cp ifcfg-ens33 ifcfg-ens36
vim ifcfg-ens36
TYPE=Ethernet
DEVICE=ens36
ONBOOT=yes
BOOTPROTO=static
IPADDR=12.0.0.254
NETMASK=255.255.255.0
#GATEWAY=192.168.118.2
DNS1=218.2.135.1
DNS2=112.4.0.55
:wq
#linux内核参数的配置文件,内核优化都在这个配置文件当中设置
vim /etc/sysctl.conf
#打开路由器的转发功能
net.ipv4.ip_forward=1
:wq
#可以使内核参数的配置立刻生效
sysctl -p
#-t nat 指定表为nat表
#-A POSTROUTING 添加离开本机时
#-s 指定原ip
#-o 指定输出设备
#-j SNAT 控制类型
#--to 指定整个网络192.168.118.0/24从ens36出去时,做源地址转,转换成10.0.0.10
iptables -t nat -A POSTROUTING -s 192.168.118.0/24 -o ens36 -j SNAT --to 10.0.0.10
#-d 11.0.0.11 指定做为目的地址转换的ip地址
#-i 从指定的设备进入本机
#-p 指定协议
#-dport 指定端口
#-j DNAT 使用目的地址转换
#--to
#外网想要访问内网的web服务,只需要访问11.0.0.11就可以访问内网的web服务
iptables -t nat -A PREROUTING -d 11.0.0.11 -i ens36 -p tcp --dport 80 -j DNAT --to 192.168.118.10:80
iptable -L
systemctl restart network
test3
yum -y install nginx
systemctl restart nginx
curl 192.168.118.30
cd /etc/sysconfig/network-scripts/
ls
vim ifcfg-ens33
TYPE=Ethernet
DEVICE=ens33
ONBOOT=yes
BOOTPROTO=static
IPADDR=12.0.0.100
NETMASK=255.255.255.0
GATEWAY=12.0.0.254
DNS1=218.2.135.1
DNS2=112.4.0.55
:wq
systemctl restart network
tail -f /var/log/nginx/access.log
在linux中如何抓包
tcpdump就是linux自带的抓包工具(最小化安装时不带的,需要额外安装)
静态和动态
#tcp 指定抓包的协议,也可以不指定协议
#-i 只抓经过指定设备的包
#-t 不显示时间戳,可以不加
#-s0 抓完整的数据包
#-c 10 抓十个包
#dst port 指定抓包的目的端口
#src net 192.168.118.0/24 抓指定抓包的ip地址
#net 网段
#host 主机ip地址
#src
tcpdump tcp -i ens33 -t -s0 -c 10 and dst port 80 and src net 192.168.118.0/24 -w /opt/target.cap
如果要用wireshark对数据包进行分析,tcpdump在抓包时,要使用-s0,抓取完整格式,否则wireshare不太行
Firewalld
centos7以前是iptables,7和7之后是firewalld
和iptables一样,都是包过滤
firewalld是按照区域来进行划分的
public 公共区域,默认配置了ssh以及DHCPv6预定服务是放通的,其他全部都是拒绝,默认区域
trusted 信任区域,默认允许所有的数据包放通
block 限制区域,拒绝所有
drop 丢弃区域
dmz 非军事区域,默认只允许ssh通过
home 家庭区域,默认只允许ssh通过
internal 内部区域,和home区一样
external 外部区域,一样也是只允许ssh通过,其他的全部拒绝
work 工作区域,默认放通ssh
firewall-cmd #命令行工具
firewall-cmd --list-all #查看所有
firewall-cmd --get-default-zone #查看当前系统的默认区域
firewall-cmd --set-default-zone=block #切换区域
firewall-cmd --list-Service #查看区域内允许访问的服务