linux总结--防火墙
防火墙相关概念
安全技术
1)入侵检测与管理系统(Intrusion Detection Systems ):
特点是不阻断任何网络访问,量化、定位来自内外网络的威胁情况,主要以提供报告和事后监督为主,提供有针对性的指导措施和安全决策依据,一般采用旁路部署方式
2)入侵防御系统(Intrusion Prevention System ):
以透明模式工作,分析数据包的内容如:溢出攻击、拒绝服务攻击、木马、蠕虫、系统漏洞等进行准确的分析判断,在判定为攻击行为后立即予以阻断,主动而有效的保护网络的安全,一般采用在线部署方式
3)防火墙( FireWall ):
隔离功能,工作在网络或主机边缘,对进出网络或主机的数据包基于一定的规则检查,并在匹配某规则时由规则定义的行为进行处理的一组功能的组件,基本上的实现都是默认情况下关闭所有的通过型访问,只开放允许访问的策略
防火墙也就是一种用设置的规则限制访问的安全技术
防火墙的分类
主机防火墙:服务范围为当前主机
网络防火墙:服务范围为防火墙一侧的局域网
硬件防火墙:在专用硬件级别实现部分功能的防火墙;另一个部分功能基于软件实现,Checkpoint,NetScreen
软件防火墙:运行于通用硬件平台之上的防火墙的应用软件
网络层防火墙:OSI下面第三层
应用层防火墙/代理服务器:代理网关,OSI七层
网络层防火墙
又称包过滤防火墙
服务于OSI下面第三层
网络层对数据包进行选择,选择的依据是系统内设置的过滤逻辑,被称为访问控制列表(ACL),通过检查数据流中每个数据的源地址,目的地址,所用端口号和协议状态等因素,或他们的组合来确定是否允许该数据包通过
优点:对用户来说透明,处理速度快且易于维护
缺点:无法检查应用层数据,如病毒等
应用层防火墙
应用层防火墙/代理服务型防火墙(Proxy Service)
将所有跨越防火墙的网络通信链路分为两段
内外网用户的访问都是通过代理服务器上的“链接”来实现
优点:在应用层对数据进行检查,比较安全
缺点:增加防火墙的负载
现实生产环境中所使用的防火墙一般都是二者结合体
即先检查网络数据,通过之后再送到应用层去检查
linux系统上的三种安全防范手段
1)包过滤防火墙:如iptables
2)应用程序防火墙:主要针对应用层服务来进行安全访问控制,如TCP Wrappers
3)代理服务器防火墙:通过代理服务器来分析使用者的ip来源是否合法,以及想要访问的资源是否合法等,通常情况为代理服务器来代理内部主机访问互联网,代理软件有squid、nginx等。
防火墙框架
1)防火墙框架是一种机制:
凡是到达本机内部来的数据包都将其按照某种规则进行转发;
凡是要从本机内部出去的将其按照另外一种规则进行转发;
另外凡是经过本机转发的我们按照对应的转发规则进行转发。
2)防火墙的框架
就是在内核的TCP/IP协议栈中精心设置几个卡点,对于数据包必流经的位置设置几个钩子函数,这些卡点位置就是进出口,钩子函数就是把到来数据钩起来然后进行规则匹配,匹配通过的就对数据进行放行,匹配不通过的就直接扔掉。
卡点共五个:
1》内存空间中:从一个网络接口进来,到另一个网络接口出去的。
2》数据包从内核流入用户空间的。
3》数据包从用户空间流出的。
4》进入或离开本地的外网接口。
5》进入或离开本地的内网接口。
防火墙的NET(网络地址转换)功能
通过NET功能,我们可以对数据包进行一些修改,如重新封装目标地址、源地址或目标端口、源端口,通过这些修改来改变原来数据包的身份从而到达把数据包送到想要送到的地方。
linux系统上的防火墙
1)是由iptables和netfilter组成,其中iptables是规则的制定工具,netfilter组件是内核空间,netfilter在内核协议中定义了5个卡点的位置,并在这5个位置通过钩子函数对进出的数据包进行过滤,从而达到防火墙的功能。
2)iptables工具工作在用户空间,它可以制定一些规则然后送达内核空间,然后结合netfilter组件的钩子函数及处理方法对数据包进行放行或者拒绝处理。
3)防火墙工具:
iptables
命令行工具,工作在用户空间
用来编写规则,写好的规则被送往netfilter组件,告诉内核如何去处理信息包
firewalld
CentOS 7 引入了新的前端管理工具
firewall-cmd 命令行
firewall-config 图形化
防火墙管理工具
从centos7开始,firewalld代替iptables成为默认的防火墙管理工具
firewalld
禁用firewalld
键入以下命令以停止FirewallD服务:sudo systemctl stop firewalld
禁用FirewallD服务在系统启动时自动启动:sudo systemctl disable firewalld
屏蔽FirewallD服务以防止其他服务启动它:sudo systemctl mask --now firewalld
iptables
iptables不是防火墙,是防火墙用户代理,用于把用户的安全设置添加到安全框架中,安全框架(netfilter)是防火墙
iptables是用于在用户空间对内核空间的netfilter进行操作的命令行工具
安装iptables
sudo yum install iptables-services
修改完后要service iptables restart
命令语法
iptables(选项)(参数)
选项
-t<表>:指定要操纵的表;
-A:向规则链中添加条目;
-D:从规则链中删除条目;
-i:向规则链中插入条目;
-R:替换规则链中的条目;
-L:显示规则链中已有的条目;
-F:清楚规则链中已有的条目;
-Z:清空规则链中的数据包计算器和字节计数器;
-N:创建新的用户自定义规则链;
-P:定义规则链中的默认目标;
-h:显示帮助信息;
-p:指定要匹配的数据包协议类型;
-s:指定要匹配的数据包源ip地址;
-j<目标>:指定要跳转的目标;
-i<网络接口>:指定数据包进入本机的网络接口;
-o<网络接口>:指定数据包要离开本机所使用的网络接口。
-m选项,表示用什么模块来匹配
查看防火墙状态
service iptables status
默认情况下,仅打开SSH端口22。
开启关闭重启防火墙
1、永久性生效(重启系统生效),重启后不会复原
开启:chkconfig iptables on
关闭:chkconfig iptables off
2、即时生效,重启后复原
重启防火墙
方式一:/etc/init.d/iptables restart
方式二:service iptables restart
关闭防火墙:
方式一:/etc/init.d/iptables stop
方式二:service iptables stop
启动防火墙
方式一:/etc/init.d/iptables start
方式二:service iptables start
查看已添加的iptables规则
iptables -L -n -v
target:
- DROP : 丢弃
- REJECT : 拒绝
- ACCEPT : 接受
- RETURN : 返回主链继续匹配
- REDIRECT: 端口重定向
- MASQUERADE :地址伪装
- DNAT : 目标地址转换
- SNAT :源地址转换
- MARK :打标签
- LOG 自定义链
开放指定的端口
使用命令
或直接修改配置文件
修改iptables文件
vim /etc/sysconfig/iptables
增加
-A INPUT -p tcp –dport 8080 -j ACCEPT
增加的内容一定要放到
-A INPUT -j REJECT –reject-with icmp-host-prohibited之上,否则不会起作用
重启防火墙以便改动生效
service iptables restart
屏蔽IP
删除已添加的iptables规则
生产环境防火墙配置策略
第一步:清空当前的所有规则和计数
iptables -F #清空所有的防火墙规则
iptables -X #删除用户自定义的空链
iptables -Z #清空计数
第二步:配置允许ssh端口连接
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 22 -j ACCEPT
#22为你的ssh端口,
-s 192.168.1.0/24表示允许这个网段的机器来连接,其它网段的ip地址是登陆不了你的机器的。
-j ACCEPT表示接受这样的请求
第三步:允许本地回环地址可以正常使用
iptables -A INPUT -i lo -j ACCEPT #本地圆环地址就是那个127.0.0.1,是本机上使用的,它进与出都设置为允许
iptables -A OUTPUT -o lo -j ACCEPT
第四步:设置默认的规则
(由于在生产上,我们设置默认的入与转发都不允许,出的允许)
iptables -P INPUT DROP #配置默认的不让进
iptables -P FORWARD DROP #默认的不允许转发
iptables -P OUTPUT ACCEPT #默认的可以出去
第五步:配置白名单
iptables -A INPUT -p all -s 192.168.1.0/24 -j ACCEPT #允许机房内网机器可以访问
iptables -A INPUT -p all -s 192.168.140.0/24 -j ACCEPT #允许机房内网机器可以访问
iptables -A INPUT -p tcp -s 183.121.3.7 --dport 3380 -j ACCEPT #允许183.121.3.7访问本机的3380端口
iptables -A INPUT -p tcp --dport 8809 -j ACCEPT
第六步:开启相应的服务端口
iptables -A INPUT -p tcp --dport 80 -j ACCEPT #开启80端口,因为web对外都是这个端口
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT #允许被ping
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT #已经建立的连接得让它进来
第七步:保存规则到配置文件中
因为刚刚的所有的规则都还是在内存中的,如果重启机器或者执行service iptables restart都会让其它失效,所以我们要把它保存在文件中,让它重启的时候能够被加载到。
先备份
cp /etc/sysconfig/iptables /etc/sysconfig/iptables.bak
保存到文件
iptables-save > /etc/sysconfig/iptables
iptables优化
当服务器收到一条请求时,它会把iptables从上往下,一条条匹配定制的规则,那么假如机器收到一个正常的web请求,要走80端口,它需要先去检验前面5条规则,发现都不符合,直到第六条满足条件,那么这样的话防火墙的工作效率就低了很多。
所以我们优化的思路是:请求最频繁的放在最上面,请求频率较小的放在最后面。
我们此时可以直接去修改文件:vi /etc/sysconfig/iptables
调整后顺序大概为: