防火墙与SELinux
防火墙的概念和分类
从逻辑上讲。防火墙可以大体分为主机防火墙和网络防火墙。
主机防火墙:针对于单个主机进行防护。
网络防火墙:往往处于网络入口或边缘,针对于网络入口进行防护,服务于防火墙背后的本地局域网。
网络防火墙和主机防火墙并不冲突,可以理解为,网络防火墙主外(集体), 主机防火墙主内(个人)。
从物理上讲,防火墙可以分为硬件防火墙和软件防火墙。
硬件防火墙:在硬件级别实现部分防火墙功能,另一部分功能基于软件实现,性能高,成本高。
软件防火墙:应用软件处理逻辑运行于通用硬件平台之上的防火墙,性能低,成本低。
iptables防火墙(CentOS6默认)
iptables 其实不是真正的防火墙,我们可以把它理解成一个客户端代理,用户通过iptables这个代理,将用
户的安全设定执行到对应的"安全框架"中,这个"安全框架"才是真正的防火墙,这个框架的名字叫 netfilter
netfilter才是防火墙真正的安全框架(framework),netfilter位于内核空间。
iptables其实是一个命令行工具,位于用户空间,我们用这个工具操作真正的框架。

Netfilter具有如下功能:
网络地址转换(Network Address Translate)
---数据包内容修改
---以及数据包过滤的防火墙功能
---所以说,虽然我们使用service iptables start启动iptables"服务",但是其实准确的来
说,iptables并没有一个守护进程,所以并不能算是真正意义上的服务,而应该算是内核提供的功能。我们知道iptables是按照规则来办事的,规则其实就是网络管理员预定义的条件,规则一般的定义为"如果数据包头符合这样的条件,就这样处理这个数据包"。规则存储在内核空间的 信息包过滤表中,这些规则分别指定了源地址、目的地址、传输协议(如TCP、UDP、ICMP)和服务类型(如HTTP、FTP和SMTP)等。当数据包与规则匹配时,iptables就根据规则所定义的方法来处理这些数据包,如放行(accept)、拒绝(reject)和丢弃(drop)等。配置防火墙的主要工作就是添加、修改和删除这些规则。
---当客户端访问服务器的web服务时,客户端发送报文到网卡,而tcp/ip协议栈是属于内核的一部分,所以,客户端的信息会通过内核的TCP协议传输到用户空间中的web服务中,而此时,客户端报文的目标终点为web服务所监听的套接字(IP:Port)上,当web服务需要响应客户端请求时,web服务发出的响应报文的目标终点则为客户端,这个时候,web服务所监听的IP与端口反而变成了原点,我们说过,netfilter才是真正的防火墙,它是内核的一部分,所以,如果我们想要防火墙能够达到"防火"的目的,则需要在内核中设置关卡,所有进出的报文都要通过这些关卡,经过检查后,符合放行条件的才能放行,符合阻拦条件的则需要被阻止,于是,就出现了INPUT、OUTPUT、PREROUTING、FORWARD、POSTROUTING等关卡,而这些关卡在iptables中不被称为"关卡",而被称为"链"。

根据上图,报文的流向:
到本机某进程的报文:PREROUTING --> INPUT
由本机转发的报文:PREROUTING --> FORWARD --> POSTROUTING
由本机的某进程发出报文(通常为响应报文):OUTPUT --> POSTROUTING
链的概念
-----前面讲的“关卡”为什么叫“链”, 防火墙的作用就在于对经过的报文匹配"规则",然后执行对应的"动作",所以,当报文经过这些关卡的时候,关卡上可能不止有一条规则,而是有很多条规则,当我们把这些规则串到一个链条上的时候,就形成了"链"
表的概念
每个"链"上都放置了一串规则,但是这些规则有些很相似,比如,A类规则都是对IP或者端口的过滤,B类规则是
修改报文,那么这个时候,我们是不是能把实现相同功能的规则放在一起,我们把具有相同功能的规则的集合叫
做"表",不同功能的规则,我们可以放置在不同的表中进行管理,而iptables已经为我们定义了4种表,每种表
对应了不同的功能,而我们定义的规则也都逃脱不了这4种功能的范围,iptables为我们提供了如下规则的分
类,或者说,iptables为我们提供了如下"表":
filter表: 负责过滤功能,真正的防火墙;内核模块:iptables_filter
nat表: network address translation,网络地址转换功能;内核模块:iptable_nat
mangle表:拆解报文,做出修改,并重新封装 的功能;内核模块:iptable_mangle
raw表:跳过nat表上的连接追踪机制,以提高性能。如大量访问的web服务器,可以让80端口不再让
iptables做数据包的链接跟踪处理,以提高用户的访问速度。内核模块:iptable_raw
表链关系
---某些"链"中注定不会包含"某类规则",就像某些"关卡"天生就不具备某些功能一样,比如,A"关卡"只负责打击陆地敌人,没有防空能力,B"关卡"只负责打击空中敌人,没有防御步兵的能力,C"关卡"可能比较NB,既能防空,也能防御陆地敌人,D"关卡"最屌,海陆空都能防。
每个"链"中的规则都存在于哪些"表"中:
PREROUTING 的规则可以存在于:raw表,mangle表,nat表。
INPUT 的规则可以存在于:mangle表,filter表,(centos7中还有nat表,centos6中没有)。
FORWARD 的规则可以存在于:mangle表,filter表。
OUTPUT 的规则可以存在于:raw表mangle表,nat表,filter表。
POSTROUTING 的规则可以存在于:mangle表,nat表。
反过来:
表(功能)<--> 链(钩子):
raw 表中的规则可以被哪些链使用:PREROUTING,OUTPUT
mangle 表中的规则可以被哪些链使用:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
nat 表中的规则可以被哪些链使用:PREROUTING,OUTPUT,POSTROUTING(centos7中还有INPUT,centos6中没有)
filter 表中的规则可以被哪些链使用:INPUT,FORWARD,OUTPUT
在同一条链中,的规则那些在前那些在后,是有优先规则的:
iptables为我们定义了4张"表",当他们处于同一条"链"时,执行的优先级如下。
优先级次序(由高而低):
raw --> mangle --> nat --> filter
将数据包通过防火墙的流程总结为下图

处理动作
iptables对数据包的常见动作:
T ACCEPT:允许数据包通过。
P DROP:直接丢弃数据包,不给任何回应信息,这时候客户端会感觉自己的请求泥牛入海了,过了超时时间才会有反应。
REJECT:拒绝数据包通过,必要时会给数据发送端一个响应的信息,客户端刚请求就会收到拒绝的信息。
T SNAT:源地址转换,解决内网用户用同一个公网地址上网的问题,修改报文的源地址。
E MASQUERADE:是SNAT的一种特殊形式,适用于动态的、会变的ip上。
T DNAT:目标地址转换,修改报文的目的地址。
T REDIRECT:在本机做端口映射。
G LOG:在/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则,也就是说除了记录以外不对数据包做任何其他操作。

常用命令:
-A 追加规则 -->iptables -A INPUT 在所有规则最后加入规则
-D 删除规则 -->iptables -D INPUT 1( 编号 ) //链中规则的编号,从1开始,后面23456…………
-R 修改规则 -->iptables -R INPUT 1 -s 192.168.12.0 -j DROP 取代现行规则,顺序不变 (1 是位置 )
-I 插入规则 -->iptables -I INPUT 1 --dport 80 -j ACCEPT 插入一条规则,原本位置上的规则将会往后移动一个顺位,不指定编号,
就会在最前加入规则
-L 查看规则 -->iptables -L INPUT 列出规则链中的所有规则, 加 --line-numbers 显示规则编号
-N 新的规则 -->iptables -N allowed 定义新的规则
-n :以数字的方式显示 ip ,它会将 ip 直接显示出来,如果不加 -n ,则会将 ip 反向解析成主机名。 和 -L 一起用, n 要放前面
-P : 设置默认策略的(设定默认门是关着的还是开着的)
//默认策略一般只有两种
iptables -P INPUT (DROP|ACCEPT)
//默认是关的 / 默认是开的
//比如:
iptables -P INPUT DROP
//通用参数:
-p 协议 例: iptables -A INPUT -p tcp
-s 源地址 例: iptables -A INPUT -s 192.168.1.1 ip 范围: 192.168.0.0/24 //'/24'表示子网掩码,前24位都是1---即255.255.255.0
-d 目的地址 例: iptables -A INPUT -d 192.168.12.1
--sport 源端口 例 :iptables -A INPUT -p tcp --sport 22
--dport 目的端口 例 :iptables -A INPUT -p tcp --dport 22
-i 指定入口网卡 例 :iptables -A INPUT -i eth0
-o 指定出口网卡 例 :iptables -A FORWARD -o eth0
-m 扩展各种模块
-m multiport :表示启用多端口扩展
-j 指定要进行的处理动作
//常用的 ACTION :
DROP :丢弃
REJECT :明示拒绝
ACCEPT :接受
//SNAT 基于原地址的转换
source-- 指定地址
//比如我们现在要将所有 192.168.10.0 网段的 IP 在经过的时候全都转换成 172.16.100.1 这个假设出来的外网地址:
iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -j SNAT --to-source 172.16.100.1( 外网有效 ip)
最后提一下:
实质上,上面的设置命令就是将规则写到配置文件:/etc/sysconfig/iptables,
所以也可以直接修改这个配置文件来添加或修改规则,但是改完后要再执行命令
/etc/init.d/iptables reload 使变更的规则生效,而命令的方法则不用
查询防火墙状态 : [root@localhost ~]# service iptables status
停止防火墙 : [root@localhost ~]# service iptables stop
启动防火墙 : [root@localhost ~]# service iptables start
重启防火墙 : [root@localhost ~]# service iptables restart
永久关闭防火墙 : [root@localhost ~]# chkconfig iptables off
永久关闭后启用 : [root@localhost ~]# chkconfig iptables on
Centos7
firewalld 防火墙(CentOS7默认)
systemctl status firewalld.service #查看firewalld状态
systemctl stop firewalld #关闭
systemctl start firewalld #开启
systemctl disable firewalld #开机自动关闭
systemctl enable firewalld #开机自动启动
firewalld和iptables的关系:
1、CentOS7里firewalld和iptables是共存的,真正的防火墙是
netfilter,firewalld,iptables都是netfilter对用户提供的一个操作接口
2、firewalld底层是调用iptables的,是建立在iptables之上的防火墙
3、firewalld比iptables更人性化,可以理解为firewalld是iptables的升级版本,本质上是同一个东西
firewalld和iptables的区别:
1 、 iptables 用命令一条一条规则的写进去,如果改配置文件还需要执行命令 /etc/init.d/iptables reload新规则才生效
2 、 firewalld 新引入了域的概念,不同的域规则不同,同一个域规则一样,用域对规则进行了分组
查看firewalld的域操作firewalld的命令firewall-cmd
//查看firewalld的域操作firewalld的命令firewall-cmd
# firewall-cmd --list-all-zones //查看所有的域以及他们的规则配置,默认有 9个
# firewall-cmd --list-all //查看firewalld的默认域以及域中的规则配置
# firewall-cmd --set-default-zone=work //切换默认的域
# firewall-cmd --get-active-zone //查看激活的域

firewalld的域和网卡接口
//1、一个网卡接口只能属于一个zone
//2、一个zone可以绑定多个网卡接口
//3、只要配置上网卡接口或者配置上源ip地址,zone就变成了活动域
# firewall-cmd --zone=home --change-interface=ens33 //这样改后,public域还是默认的域,但缺不是激活的域了
# firewall-cmd --zone=home --e remove -interface=ens33 //移除指定的网卡接口
# firewall-cmd --zone=home --d add
firewalld的规则配置
------firewalld的默认规则:

-----我们要做的工作就是在白名单上加入允许尽量的端口、服务、ip地址
firewalld中区域默认规则设定
阻塞区域( block ):任何传入的网络数据包都将被阻止。
工作区域( work ):相信网络上的其他计算机,不会损害你的计算机。
家庭区域( home ):相信网络上的其他计算机,不会损害你的计算机。
公共区域( public ):不相信网络上的任何计算机,只有选择接受传入的网络连接。
隔离区域( DMZ ):隔离区域也称为非军事区域,内外网络之间增加的一层网络,起到缓冲作用。对隔
离区域,只有选择接受传入的网络连接。
信任区域( trusted ):所有的网络连接都可以接受。
丢弃区域( drop ):任何传入的网络连接都被拒绝。
内部区域( internal ):信任网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络连
接。
外部区域( external ):不相信网络上的其他计算机,不会损害你的计算机。只有选择接受传入的网络
连接。
测试用的httpd服务配置
- 安装
yum install httpd -y - 安装好后启动httpd
systemctl start httpd
显示running是代表运行的意思,inactive代表未运行
image.png -
启动之后可以通过浏览器访问主机ip地址(默认端口80)
image.png - httpd服务配置文件和存放的目录
服务目录: /etc/httpd
主配置文件: /etc/httpd/conf/httpd.conf
网站数据目录: /var/www/html
访问日志: /var/log/httpd/access_log
错误日志:/var/log/httpd/error_log -
使用vim 编辑主配置文件
vim /etc/httpd/conf/httpd.conf
image.png
image.png
需要修改网站数据目录,在主配置文件中将/var/www/html改成你想要的网站目录重启服务即可
image.png
举例1:开启80端口

# firewall-cmd --zone=public --add-port=80/tcp //这样的配置只是临时生效,防火墙重启后,配置丢失
# firewall-cmd --zone=public --add-port=80/tcp --permanent //想要永久生效,后面加要给参数--permnent 表示永久
# firewall-cmd --zone=public -- remove -port=80/tcp --permanent
# firewall-cmd --reload // 防火墙热重载,如果新规则没生效可以热重载试试
举例2:开启服务,其实服务和端口是一致的,因为没个服务必然绑定对应的端口

// /usr/lib/firewalld/services这个目录下有很多的xml配置文件,对应着可以配置的服务,可以看一下
//如果我们要加,是可以自己新建xml文件放这里的,这里有xml配置文件的服务就可以用服务的方
//法放开防火墙的限制
# firewall-cmd --zone=public --remove-port=80/tcp 先移除刚刚设置的端口
# firewall-cmd --zone=public --add-service=http 然后设置服务,同样这样是临时的
# firewall-cmd --zone=public --add-service=http --permanent 永久生效
# firewall-cmd --reload 重载一下
举例3:限制所有的ip地址访问,除开白名单上的ip地址
-----下面设置了信任的网段为192.168.238.0,其它任何网ip都不可访问.
# firewall-cmd --set-default-zone=drop
# firewall-cmd --zone=drop --change-interface=ens33 //绑定到网卡上
# firewall-cmd --zone=trusted --add-source=192.168.238.0/24 # 同样要删除, add 改成 remove
常见的网络攻击
- DDOS
DDOS
-----一群恶霸试图让对面那家有着竞争关系的商铺无法正常营业,恶霸们扮作普通客户一直拥挤在对手的商铺,赖着不走,真正的购物者却无法进入;恶霸们完成这些坏事有时凭单干难以完成,需要叫上很多人一起,网络安全领域中 DoS 和DDoS 攻击就遵循着这些思路。DoS ( Denial of Service ),即拒绝服务攻击,该攻击方式利用目标系统网络服务功能缺陷或者直接消耗其系统资源,使得该目标系统无法提供正常的服务。
-----DdoS 的攻击方式有很多种,最基本的 DoS 攻击就是利用合理的服务请求来占用过多的服务资源,从而使合法用户无法得到服务的响应。单一的 DoS 攻击一般是采用一对一方式的,当攻击目标 CPU 速度低、内存小或者网络带宽小等等各项指标不高的性能,它的效果是明显的。随着计算机与网络技术的发展,计算机的处理能力迅速增长,内存大大增加,同时也出现了千兆级别的网络,这使得 DoS 攻击的困难程度加大了 - 目标对恶意攻击包的 " 消化能力 " 加强了不少。这时候分布式的拒绝服务攻击手段( DDoS )就应运而生了。 DDoS 就是利用更多的傀儡机(肉鸡)来发起进攻,以比从前更大的规模来进攻受害者。 - CC
DDoS 攻击打的是网站的服务器,而 CC 攻击是针对网站的页面攻击的,用术语来说就是,一个是 WEB 网络
层拒绝服务攻击( DDoS ),一个是 WEB 应用层拒绝服务攻击( CC ) - SYN
SYN 攻击属于 DOS 攻击的一种,它利用 TCP 协议缺陷,通过发送大量的半连接请求,耗费目标的 CPU 和内存资源。服务
器进入 SYN_RECV 状态后,如果未收到客户端的确认包时,会重发请求包,一直到超时。
linux清理缓存内存
1---查看内存状况 free -m


sync && echo 3 > /proc/sys/vm/drop_caches
sudo sysctl -w vm.dirty_ratio=0
sudo sysctl -w vm.dirty_background_ratio=0
SELinux配置
sestatus //查看SELinux状态
SELinux status: disabled //表示禁用状态
setenforece 0 //临时修改为宽容模式
setenforce 1 //临时修改为强制模式
永久修改 SELinux 模式,编辑 /etc/selinux/config 文件并将 SELINUX 的值修改为 enforcing、permissive 或 disabled。
系统设置的一些命令
1-修改系主机名
hostnamectl status //查看当前主机配置
sudo hostnamectl set-hostname 新主机名 //退出并重新登录以确保新的主机名生效,或者重启系统。




