Linux防火墙管理

计算机防火墙用于保护内部网络,主机和网络安全,有硬件防火墙和软件防火墙两种,软件主要是用对数据包进行分析过滤来保证软件层面安全。

此外还有根据对数据封包形式确定的分类方法,
如代理服务器,类似网关的形式监控整个区域流量,
和封包过滤机制,直接分析最底层的封包表头数据来进行过滤。

针对如REHL和centos这些红帽类Linux操作系统,我们常用的防火墙主要有iptables和firewalld两种,
IP tables是用规则表和规则链控制数据包的流向并进行处理
firewalld则是采用区域和服务的概念来管理防火墙规则。

但上述二者都只是防火墙的管理工具,并非防火墙本身,防火墙的具体功能是由内核中的netfilter网络过滤器实现。

IPtables

iptables过滤数据包的方式:
允许/拒绝让 Internet 的封包进入 Linux 主机的某些 port
允许/拒绝让某些来源 IP 的封包进入
允许/拒绝让带有某些特殊标志( flag )的封包进入
分析硬件地址(MAC)来提供服务

五链

具体的处理策略为规则,多个规则合成一条链,根据处理数据包的位置不同分为不同的链,
在路由判断前的规则prerouting
进入路由的规则input
出路由的规则output
转发规则forward
路由判断后进行的规则postrouting
数据进入系统在链上的流动

四表

规则表用于容纳链,表允许则链禁止,表设置如下:
raw表,确定是否对该数据包进行状态跟踪
mangle表,为数据包设置标记(较少使用)
filter确定是否放行该数据包(过滤)
nat修改数据包中的源、目标IP地址或端口
表和链的对应关系
规则表的先后顺序:raw->mangle->nat->filter

规则链的先后顺序:
入站顺序
PREROUTING→INPUT
出站顺序
OUTPUT→POSTROUTING
转发顺序
PREROUTING→FORWARD→POSTROUTING

一个包可能经过多个表的同一条链,在不同事件触发相同动作的链
数据包在表内流动过程

基本选项和用法

iptables参数和作用如下表:

-P	设置默认策略:iptables -P INPUT (DROP\	ACCEPT)类似于黑白名单
-F	清空规则链
-A:添加规则,跟要添加规则的链
-I num	在规则链的头部加入新规则
-D num	删除某一条规则
-s	匹配来源地址IP/MASK,加叹号"!"表示除这个IP外。
-d	匹配目标地址
-i 网卡名称	匹配从这块网卡流入的数据
-o 网卡名称	匹配从这块网卡流出的数据
-p	匹配协议,如tcp,udp,icmp
--dports num	匹配目标端口号
--sports num	匹配来源端口号

-L	查看规则链
	-n    不进行IP与主机名的反查,显示信息的速度会快很多
	-v    列出更多的信息,包括封包数,相关网络接口等
	--line-numbers 显示规则的序号
-t 	table指定表
	raw
	mangle
	nat
	filter 默认
-j:设置处理策略
	accept:接受
	drop:丢弃
	reject:拒绝
-s:指定数据包的来源地址
-p:指定数据包协议类型
	tcp
	udp
	icmp

通用手段为iptables 匹配 处理动作
匹配条件:

基本匹配条件:sip、dip
扩展匹配条件:sport、dport
扩展条件也是条件的一部分,只不过使用的时候需要用-m参数声明对应的模块

处理动作

accept:接受
drop:丢弃
reject:拒绝
snat:源地址转换,解决内网用户同一个公网地址上上网的问题
masquerade:是snat的一种特殊形式,使用动态的、临时会变的ip上
dnat:目标地址转换
redirect:在本机作端口映射
log:记录日志,/var/log/messages文件记录日志信息,然后将数据包传递给下一条规则

自定义规则链

可以通过自定义链实现规则分组重复调用的目的,使用-N 新链名添加链,-E 旧链名 新链名修改链名称,通过-A 链名 规则的方式给自定义链添加规则,因为数据包指挥经过五个系统链,所以自定义的链需要关联到表中才能使用,iptables -t 表名-A 链名 -s 源地址 -j 新链名将新的链关联到系统链上,示例如下:

iptables -t filter -N web_chain  # 添加名为web_chain的自定义规则链
iptables -t filter -A web_chain -p tcp -m multiport --dports 80,443 -j ACCEPT  # 创建的自定义链中添加规则,开放80端口上的服务
iptables -t filter -A INPUT -s 192.168.88.1 -j web_chain # 只允许指定IP访问,其他的拒绝

删除自定义规则链,首先要清空链上的规则iptables -t 表名 -F 链名,再使用iptables -t 表明 -X 链名删除自定义链。

其他用法——模块

使用模块可以极大拓展iptables的功能,对数据报的各种内容加以限制和筛选,常用示例如下:

tcp/udp
--dport:指定目的端口
--sport:指定源端口

iprange
--src-range
--dst-range

string
--algo:指定匹配算法,可以是bm/kmp
	bm:Boyer-Moore
	kmp:Knuth-Pratt-Morris
--string:指定需要匹配的字符串
--from offset:开始偏移
--to offset:结束偏移

time:指定匹配报文的时间
--timestart
--timestop
--weekdays
--monthdays
--datestart
--datestop

connlimit:限制每个ip连接到server端的数量,不需要指定ip默认就是针对每个ip地址,可防止Dos(Denial of Service,拒绝服务)攻击
--connlimit-above:最大连接数

limit:对报文到达的速率继续限制,限制包数量
10/second
10/minute
10/hour
10/day
--limit-burst:空闲时可放行的包数量,默认为5,前多少个包不限制

规则持久化

命令行中执行的规则在重启后消失,要使规则永久生效需要写入到规则文件中,使用 iptables-save > /etc/sysconfig/iptables-config保存到文件中,再使用iptables-restore < /etc/sysconfig/iptables-config从文件中导入规则,也可以yum -y install iptables-services下载服务,让其帮助我们自动管理iptables服务。

禁止访问特定网站

为防止iptables和firewalld冲突,在此处先使用systemctl stop firewalld禁用firewalld,
为了展示限制外来流量访问,我们安装yum install -y epel-release安装扩展源和yum install -y nginx安装web服务器nginx,然后通过systemctl start nginx启动web服务器,此时通过浏览器打开自己的IP地址,会有如下的特定界面
自身地址
此时增加iptables -A INPUT -p tcp --dport 80 -j DROPINPUT链上的策略,丢弃掉来自80端口tcp协议的请求报文,再访问网站就无法进入。

firewalld

想要代替iptables但失败的产品,采用按区域划分管理的思想,给不同区域设置不同的防火墙规则,常用区域如下:

public		默认区域,对应普通网络环境。允许选定的连接,拒绝其他连接
drop		所有传入的网络包都会被直接丢弃,不会发送任何响应
block		所有传入的网络包会被拒绝,并发送拒绝信息
external	用于路由/NAT流量的外部网络环境。与public类似,更适用于网关、路由器等处理外部网络流量的设备
dmz			隔离区域,只允许选定的连接,适用于部署公开服务的网络区域,如 Web 服务器,可以最大限度地降低内部网络的风险
work		适用于工作环境,开放更多服务,如远程桌面、文件共享等。比 public 区域更加信任
home		适用于家庭环境,开放更多服务,比如默认情况下会开放一些如:3074端口(Xbox)、媒体、游戏数据等待
trusted		信任区域,允许所有连接

规则匹配顺序为,根据数据包源地址确定区域,再根据端口细化区域,默认为public zone

Linux中使用firewall-cmd作为管理工具,简单用法示例如下:

firewall-cmd --zone=public --add-service=http		public区域允许http访问请求
firewall-cmd --zone=public --add-port=80/tcp		publci区域允许80端口通过
firewall-cmd --zone=public --remove-service=http --permanent		public区域永久关闭http
firewall-cmd --set-default-zone=public				默认区域设置为public
firewall-cmd --zone=public --list-all				查看public区域的详细配置
firewall-cmd --panic-on								打开紧急模式,默认策略为drop,除了 ssh 和 ICMP 回送(ping)请求,拒绝所有网络连接
firewall-cmd --reload								重启服务,一般用于修改规则后

端口转发firewall-cmd --permanent --add-forward-port=port=原端口:proto=tcp:toport=新端口

富规则,用于支持更复杂的规则匹配和操作,通常方法为firewall-cmd --permanent --add-rich-rule='富规则'
其中富规则定义为rule family="ipv4" source address="" port port="80" protocol="tcp" accept,字段解释如下:

family: 指定地址族,可以是 ipv4 或 ipv6
source/destination: 指定源/目标地址
port: 指定端口号
protocol: 指定协议,如 tcp、udp 等
icmp-block-inversion: 反转 ICMP 阻止规则
forward-port: 端口转发规则
masquerade: 启用地址伪装
log: 日志记录规则,可指定前缀、日志级别、限速
accept/reject/drop: 动作,分别表示允许、拒绝、丢弃

服务访问控制 TCP Wrapper

用于限制特定网络服务的访问,配置文件在/etc/hosts.allow/etc/hosts.deny中,可以通过指定主机名或网段来限制网络服务,通用方法为服务名称:限制目的编写规则要注意一下两点:
编写拒绝策略规则时,填写的是服务名称,而非协议名称
建议先编写拒绝策略规则,再编写允许策略规则

编写拒绝sshd连接
此时远程连接退出再连就连不上了。

该服务已经落后了,并且生产中不常用,只做简单了解。

安全子系统SELinux

建立在内核上,基于角色和类型的识别访问控制,最大限度减小系统中服务进程可访问的资源,遵循最小权限原则,即指授予程序运行所需的最小权限。

子系统的三个状态分别为:

enforcing 	1 	完全执行策略
permissive 	0 	只记录
disable 		关闭系统功能

当前状态可通过getenforce查看,并使用setenforce 序号更改,这种更改方式临时生效,且不能调到关闭模式,永久调整需要更改/etc/selinux/config文件中的SELINUX字段。

自主访问控制DAC

主体是用户,检查用户是否有资源的各种权限,但root用户不作任何管制,系统中的任何资源都能无限制访问,针对这种情况,提出了强访问控制。

强访问控制MAC

主体是进程,首先判断进程是否有访问资源的权限,再判断对资源的具体读写权限,使用这种方法可以避免root用户在系统内无法无天,即使在被恶意劫持后,造成的破坏也有限。

SELinux 会为 Apache 进程设置专门的安全上下文(context),限制它只能访问特定的资源。比如:

Apache 进程的安全上下文是 httpd_t
Apache 网页文件的安全上下文是 httpd_sys_content_t
Apache 日志文件的安全上下文是 httpd_log_t

semanage

SELinux策略管理工具,使用yum install -y policycoreutils-python安装,通用格式为semanage 选项 文件,具体选项如下:

port: 管理定义的网络端口类型
fcontext: 管理定义的文件上下文
-l: 列出所有记录
-a: 添加记录
-m: 修改记录
-d: 删除记录
-t: 添加的类型
-p: 指定添加的端口是tcp或udp协议的,port子命令下使用
-e: 目标路径参考原路径的上下文类型,fcontext子命令下使用

示例语句semanage fcontext -a -t httpd_sys_content_t /data/html网站新的工作目录中新添加一条SELinux安全上下文,restorecon -Rv /data/html递归检查并更新文件。

总结

本章学习了Linux防火墙管理配置方法,主要是通过工具,如iptables、firewalld和selinux限制对外对内的访问,主要在于理清数据包流向,找到过滤和限定的口,但selinux中有关安全上下文的概念并不清楚,目前只能理解到是对进程限制,无关用户,在系统内部使用不授权不可为的管理方式,子系统设置好了常用的上下文,需要时查询添加到位置即可实现保护。

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值