文章目录
这里继续讲等保的整改,这节讲讲堡垒机和防火墙的配置,有经费当然是直接上硬件,或者直接租用类似阿里云的安全环境,如果没有可用用开源的设置。本节主要讲基于jumpserver的堡垒机配置和Linux自带的iptables防火墙
堡垒机配置
堡垒机服务概念介绍
概念(来自百度百科):堡垒机也叫跳板机,即在一个特定的网络环境下,为了保障网络和数据不受来自外部和内部用户的入侵和破坏,而运用各种技术手段监控和记录运维人员对网络内的服务器、网络设备、安全设备、数据库等设备的操作行为,以便集中报警、及时处理及审计定责。
1.操作系统权限集中管理主要针对多用户操作系统,例如:linux。
可以想象一下,我们有10个服务器要管理,然后有两个管理员,这这两个管理员要记住这10台机器的各种账号,最起码就是20个相互关系。如果用堡垒机进行防护,那么就简单了。
2.网络安全访问控制限制
3.上图来自百度搜索结果,可以看到所有的运维管理操作都是通过堡垒机进行的,因此其作用可以记录管理人员操作行为日志记录、录屏等
开源堡垒机:https://www.jumpserver.org/index.html
堡垒机服务环境准备
这里以jumpserver配置为例进行简单的讲解
操作系统环境:CentOS7.x以上
安装完毕后需要对系统进行一些基本的配置,也可以直接下载软件优化:
可以参考这里https://blog.csdn.net/a13568hki/article/details/102922206
不过阿里云的镜像站目前在升级,不知道什么时候好,貌似网易也有。
具体命令再贴一下:
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
EPEL (Extra Packages for Enterprise Linux), 是由 Fedora Special Interest Group 维护的 Enterprise Linux(RHEL、CentOS)中经常用到的包
当然安装前可以备份一下。
mv /etc/yum.repos.d/epel.repo /etc/yum.repos.d/epel.repo.backup
除了软件方面的配置,还需要手动关闭防火墙以及关闭selinux
检查防火墙状态:
/etc/init.d/iptables status
临时关闭防火墙:
/etc/init.d/iptables stop
永久关闭防火墙:
chkconfig iptables off
查看防火墙服务:
chkconfig--list iptables
临时关闭selinux
setenforce 0
查看selinux
getenforce
永久关闭要编辑config文件:
vim /etc/selinux/config
修改第七行:SELINUX=disabled
堡垒机服务安装部署
可以参考:https://docs.jumpserver.org/zh/master/install/setup_by_fast/
第一步:依赖软件下载安装
yum-y install git python-pip mysql-devel gcc automake autoconf python-devel vim sshpass Lrzsz
readline-devel
这里安装的软件如下表所示:
名称 | 用途 |
---|---|
git | 代码版本控制管理,下载jumpserver代码 |
python-pip | 下载python组件下载工具,利用pip下载python程序依赖 |
mysql-devel | mysql数据库程序依赖包 |
gcc | GNU编译器, 编译识别c语言代码信息 |
automake | 实现自动编译 ,相当于make的升级版 |
autoconf | 实现自动配置 |
python-devel | 相关python依赖 |
vim | 这个不用介绍了,编辑器 |
sshpass | 免交互远程连接(就是SSH免密登陆) |
lrzsz | 实现windows系统和linux系统之间传输数据 |
readline-devel | python语言自动补全 |
第二步:下载jumpserver
cd /opt
git clone https://github.com/jumpserver/jumpserver.git
github比较慢的,可以去coding托管网站下载
第三步:初始化配置
安装python模块,主要是一些组件的版本要对上,有现成的软件。
创建.pip目录,并编辑pip.conf文件
mkdir ~/.pip/
vim ~/.pip/pip.conf
然后在里面加入如下内容:
[global]
index-url=https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
在/opt/jumpserver/install目录下面,有一个requirements.txt文件,里面是要安装的模块,做好上面的pip操作准备后,就可以使用下面命令进行安装。如果不做上面的操作可能安装过程会非常慢。无红色错误即可,黄色警告可忽略。
pip instalL -r requirements.txt
该文件包含的内容包含:
#sphinx-me==0.3
django==1.6
pycrypto==2.4.1
paramiko==1.16.0
ecdsa==0.13
MySQL-python==1.2.5
#django-uuidfield==0.5.0
psutil==3.3.0
xlsxwriter==0.7.7
x1rd==0.9.4
django-bootstrap-form==3.2
tornado==4.3
ansible==1.9.4
pyinotify==0.9.6
passlib==1.6.5
argparse==1.4.0
这里安装过程还需要注意pycrypto版本问题,如果报错,需要卸载重装为2.4.1版(这个问题在新版jumpserver貌似没有了,这个也和centos版本有关。)卸载脚本如下:
pip uninstall pycrypto
rm -rf /usr/lib64/python2.6/site-packages/Crypto/
rm -rf /usr/lib64/python2.6/site-packages/pycrypto-2.6.1-py2.6-linux-x86_64.egg
python环境好了后,执行:
python install.py
然后选择是否安装mysql,如果没有单独的数据库服务器,可以直接安装。
然后配置smtp服务器和端口。
然后输入邮箱账号
然后输入邮箱的授权码,这里不是密码。
然后登录邮箱收取确认邮件。
然后在数据库中创建表。
然后创建管理员账号密码。
若服务提示启动成功,则over;
若服务提示failed,则需要手工启动该服务。
需要跳转到/opt/jumpserver目录,执行
./service.sh start
服务启动成功后,查看进程ps -ef|grep python可以看到如下进程
python /opt/jumpserver/manage.py runserver 0.0.0.0:80#这个进程表示可以通过web访问和管理jumpserver
python /opt/jumpserver/run_websocket.py#这个进程表示jumpserver可以用socket管理其他主机
堡垒机应用配置
堡垒机应用配置就是要为不同的角色配置不同的权限,使其能够访问不同的主机。
基本都是图形界面,大概步骤是:
1.用户/组管理
2.资产/组管理(主机/主机组/机房)
3.权限管理:sudo管理员权限下放,主机登录账号(记得要将账号信息推送到相应主机a)
配置成功后,就可以在日志审计中看到:
登录历史
命令记录(有视频)
上传下载文件历史
iptables 防火墙
简介
以下内容来自百度百科:
IPTABLES 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统。如果 Linux 系统连接到因特网或 LAN、服务器或连接 LAN 和因特网的代理服务器, 则该系统有利于在 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。
防火墙在做数据包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的数据包过滤表中,而这些表集成在 Linux 内核中。在数据包过滤表中,规则被分组放在我们所谓的链(chain)中。而netfilter/iptables IP 数据包过滤系统是一款功能强大的工具,可用于添加、编辑和移除规则。
虽然 netfilter/iptables IP 信息包过滤系统被称为单个实体,但它实际上由两个组件netfilter 和 iptables 组成。
netfilter 组件也称为内核空间(kernelspace),是内核的一部分,由一些信息包过滤表组成,这些表包含内核用来控制信息包过滤处理的规则集。
iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。除非您正在使用 Red Hat Linux 7.1 或更高版本,否则需要下载该工具并安装使用它。
补充总结说明:
iptables 防火墙可以在低配置的服务器上运行。
1)可以实现包过滤功能开源服务软件
2)iptables 防火墙服务只能工作OSI7层模式二层三层四层(传输层:端口过滤、网络层:ip过滤、数据链路层:MAC地址过滤)
相关概念
- 规则:iptables防火墙是层层过滤的,实际是按照配置规则的顺序从上到下,从前到后进行过滤的。数据包通过防火墙时,如果匹配上规则,即明确表示是阻止还是通过,数据包就不再向下匹配新的规则;如果规则中没有明确表明是阻止还是通过的,也就是没有匹配规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。默认规则是所有规则执行完才执行的。
- 链:可以理解为防火墙中一层层的关卡,符合条件的才能过这个关卡。每一个关卡可以包含多个规则,很多个规则串起来就变成了链。默认有五种链:
名称 | 作用 |
---|---|
OUTPUT | 流出数据流量进行访问控制 |
INPUT | 流入数据流量进行访问控制 |
FORWARD | 流经数据流量进行访问控制 |
POSTROUTING | 在经过路由之后,要对数据包做什么处理(改写数据包信息-改源地址、端口信息) |
PREROUTING | 在经过路由之前,要对数据包做什么处理(改写数据包信息-改目标地址、端口信息) |
- 表:用来保存相同功能的规则的集合,前面说了iptables 可以工作在OSI7层模式二层三层四层,这里可以把端口过滤的规则放到一个表中,ip过滤的放到一个表中。默认的表有四种:
名称 | 作用 | 内核模块 |
---|---|---|
*filter表 | 实现过滤功能 | iptables_filter |
*nat表 | network address translation,网络地址转换功能 | iptable_nat |
mangle表 | 拆解数据包,做出修改,并重新封装的功能,例如标记VLAN数据包 | iptable_mangle |
raw表 | 关闭nat表上启用的连接追踪机制,取消数据包的标记信息 | iptable_raw |
星号的两个表是重点,其中filter对应前面三个链,nat对应后面两个链。当然这些链还可以用在后面两个表,不常用就不详写了。
服务策略配置
初始化配置
1.清空策略信息
iptables -F
查看规则:
/etc/init.d/iptables status
2.清空防火墙计数器
iptables -Z
计数器可以排查通讯过程产生的错误。用于记录规则匹配的数据包个数
3.清空防火墙自定义链、自定义脚本变量
iptables -X
查看及增加/插入规则信息
查看帮助
iptables --help
iptables -L -n -v --line-number
-n代表以数字的方式显示端口和IP,否则以协议的方式显示。
-v代表显示更详细的信息
–line-number代表显示规则行号,便于规则很多的时候定位插入位置。
对于配置规则,以下面命令为例:
iptables -A 大写链名 -s 源地址 -p 协议名 --dport 端口号 -j 处理方式
-A:指定规则信息添加到规则列表后,后面接链名(链名必须大写),如果用-I则表示将规则信息添加到规则列表前。如果需要在指定位置插入,可在链名后面加行号。
-s:链名为INPUT时,指定可以访问服务器的源地址,格式为:192.168.1.0/24,如果在-s前面加!,表示取反操作。
-d:链名为OUTPUT时,指定可以访问服务器的目的地址
-p:协议信息(tcp/udp/icmp/all)
–dport:链名为INPUT时,指定源端口
–sport:链名为OUTPUT时,指定目的端口
端口如果是连续的,可以用冒号分隔,例如21:80表示对21到80所有端口进行操作;
如果要指定多个不连续的端口,需要用逗号隔开,但是在链名后面要加-m multiport参数
-m:还有设置禁止ICMP数据包的功能(防止ping探测),后接icmp 参数
-j:防火墙完成处理动作,有三种:ACCEPT、DROP、REJECT
小例子:规则需求:阻止10.0.0.0/24网段主机远程连接服务器,只允许10.0.0.5主机可以访问服务器
iptables -A INPUT -s 10.0.0.5 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j DROP
注意上面两个命令顺序不可调换
以上两条整合为一条
iptables -A INPUT !-s 10.0.0.5 -p tcp --dport 22 -j DROP
完全禁止ping命令,此时服务器也无法平通别的机器:
iptables -A INPUT -m icmp -p icmp --icmp-type any-j DROP
如果想要禁止别人ping通服务器,而允许服务器ping通别人,则要根据ICMP包类型分别设置规则(具体看:https://baike.baidu.com/item/ICMP/572452?fr=aladdin),其中:
禁止别人向服务器发送8–回显请求(Ping请求)
或者禁止0–回显应答(Ping应答)output,下面两个语句功能一样。
iptables -A INPUT -p icmp --icmp-type 8 -j DROP
iptables -A OUTPUT -p icmp --icmp-type 0 -j DROP
修改删除规则
修改:
iptables -R 链名 行号 后面和增加规则一样
删除
iptables -D 链名 行号
默认规则
比较安全的方式应该是默认阻止,但是默认是允许,因此需要对默认规则进行修改。默认规则一般根据链进行配置,需要用到- P参数,例如:
iptables -P INPUT DROP
iptables -P FORWARD DROP
但是一般OUTPUT链应该是默认允许。
iptables -P OUTPUT ACCEPT
防火墙NAT配置
假设防火墙服务器有两块网卡,分别连接外网eth0和内网eth0,内网网卡应配置为内网网关:
内到外
1.要将经过防火墙之后的数据包映射为外网地址,准确的说是要把从内网出来的数据包的源地址映射为eth0的ip
iptables -t nat A POSTROUTING -s 内网计算机IP -o eth0 -j SNAT --to-source eth0的IP
2.配置内核默认信息,打开ip转发功能
2.1修改vim /etc/sysctl.conf文件,添加如下信息:
net.ipv4.ip_forward = 1
2.2重新加载sysctl.conf文件
sysctl -p
如果不起作用,要检查FORWARD链。
外到内
1.要将经过防火墙之后的数据包映射为内网地址,准确的说是要把从外网进来的数据包的目的地址和目的端口映射为内网IP和内网端口。
iptables -t nat -A PREROUTING -d eth0IP地址 -p tcp--dport 外网映射端口号 -j DNAT--to-destination 内网IP:内部服务端口
防火墙自定义链
可以想象一下这样的场景,如果链中存放了300条规则,这些规则有针对http服务的,有针对ssh服务的…假如,我们突然想要修改针对http服务的相关规则,如果没有自定义链,需要从头到尾重新一条条看一遍这些规则,很麻烦。
iptables中可以通过自定义链即可解决上述问题。
下面在INPUT链上自定义一个自定义链名,内含一个将来针对http要使用多次的操作
iptables -N 自定义链名
iptables -A INPUT -p tcp -- dport 80 -j 自定义链名
调用自定义链:
iptables-A 自定义链名 -s 网段或IP -j ACCEPT
这里不展开,其实这块比较复杂,自定义链内可以包含多个规则、可以在自定义链上修改某些规则、自定义链可以引用自定义链。