作为Linux 运维工程师,如何对网站或者业务系统试试安全加固呢?安全加固手段有哪些?
1. Linux服务器内核定期升级稳定版本,及时打补丁包(安装程序);
2.禁止不必要的Linux用户,关闭一些不常用的用户和组;
3.设置Linux用户和密码复杂度,定期修改服务器的密码;
4.禁止ROOT用户登录Linux系统,启用普通用户或者sudo用户;
5.隐藏远程登录SSH 22端口,修改为6022或者60022等;
6.定期升级SSH远程服务端版本,允许特定IP访问或者通过秘钥方式或者短信验证方式登录;
7.关闭Linux系统不常用的软件服务,不必要的端口和进程等;
8.隐藏常用软件程序的版本号:Nginx、Apache、Tomcat、MYSQL等;
9.开启Linux系统级别防火墙规则:Iptables、Firewalld限制端口访问和网络流量等;
10.设置应用程序、网站代码读写权限,尽量将权限控制到最小;
11.开启Linux应用层级的安全措施:Selinux安全策略配置等;
相关概念
1.Iptables是Linux内核级别软件级防火墙,区别于硬件设备的防火墙,IPtables是开源的、免费的,硬件防火墙收费的,成本比较高;一般工作在OSI层次的二、三、四层
2.Netfilter/iptables看成是统一基于Linux级别防火墙,其实基于IP数据包做过滤的,有两个组成部分:Netfilter和IPtables,其中Netfilter主要是集成在Linux内核中模块,而iptables是用于管理Netfilter模块的;
3.Iptables防火墙由表和链构成的,其中表是存储在Linux内核中(Netfilter模块),链是存在表中的,链中由单个规则或者多个规则组成的,规则是什么呢?规则(约定)允许访问、不允许访问等;
4.Netfilter主要是作用于内核空间,属于Linux内核中一个数据包过滤模块,而Iptables是用于管理Netfilter模块的(管理Netfilter中的表和链(规则)),通常称防火墙不是Netfilter/Iptables,而是直接称为Iptables(统称);
5. iptables 组件是一种工具,也称为用户空间(userspace),它使插入、修改和除去信息包过滤表中的规则变得容易。
iptables 防火墙关工作原理
首先 数据包请求来了,要么进入 input链 ,要么进入 forward 链。
请求进入input 链,一般需要 通过output链。
什么时候走froward 链呢。更具内核判断,如果请求的是自己,就进入input链,如果内核判断球球
的不是自己,就进入 forward 链。
据包先经过 preouting ,有该链确定数据包走向:
1.如果目的地址 是自己,则发送给 inPut 链。然后经过 output 链 发出去
2.若满足nat 表上的转发规则, 则发给foreard 在经过postrouting 发出去。
NAT表有三种内建链:
PREROUTING链 :处理刚到达本机并在路由转发前的数据包。它会转换数据包中的目标IP地址(destination ip address),通常用于DNAT(destination NAT)。
POSTROUTING链 :处理即将离开本机的数据包。它会转换数据包中的源IP地址(source ip address),通常用于SNAT(source NAT)。
OUTPUT链 :处理本机产生的数据包。
常用命令解析
1.命令
-A 顺序添加,添加一条新规则
-I 插入,插入一条新规则 -I 后面加一数字表示插入到哪行
-R 修改, 删除一条新规则 -D 后面加一数字表示删除哪行
-D 删除,删除一条新规则 -D 后面加一数字表示删除哪行
-N 新建一个链
-X 删除一个自定义链,删除之前要保证次链是空的,而且没有被引用
-L 查看
-E 重命名链
-F 清空链中的所有规则
-Z 清除链中使用的规则
-P 设置默认规则
2.匹配条件
隐含匹配:
-p tcp udp icmp
--sport指定源端口
--dport指定目标端
-s 源地址
-d 目的地址
-i 数据包进入的网卡
-o 数据包出口的网卡
扩展匹配 匹配状态的 -m
-m mutiport --source-port 端口匹配 ,指定一组端口
-m limit --limit 3/minute 每三分种一次
-m limit --limit-burst 5 只匹配5个数据包
-m string --string --algo bm|kmp --string"xxxx" 匹配字符串
-mtime--timestart 8:00 --timestop 12:00 表示从哪个时间到哪个时间段
-mtime--days 表示那天
-m mac --mac-sourcexx:xx:xx:xx:xx:xx 匹配源MAC地址
-m layer7 --l7proto qq 表示匹配腾讯qq的 当然也支持很多协议,这个默认是没有的,需要我们给内核打补丁并重新编译内核及iptables才可以使用 -m layer7 这个显示扩展匹配
3.动作:
-j
DROP 直接丢掉
ACCEPT 允许通过
REJECT 丢掉,但是回复信息
LOG --log-prefix"说明信息,自己随便定义" ,记录日志
SNAT 源地址转换
DNAT 目标地址转换
REDIRECT 重定向
MASQUERAED 地址伪装
4.查看规则
[root@localhost ~]# iptables -L -v 详细查看
[root@localhost ~]# iptables -L -n 以数字的方法查看
安装iptables软件(iptables ,iptables-devel ,iptables-services ,iptables-utils)
[root@localhost ~]# yum -y install iptables iptables-devel
[root@localhost ~]# yum -y install iptables-services iptables-utils
[root@localhost ~]# cat /etc/sysconfig/iptables
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
[root@localhost ~]#
[root@localhost ~]# vim /etc/sysconfig/iptables #首先删除所有的规则。
[root@localhost ~]# cat /etc/sysconfig/iptables
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
COMMIT
[root@localhost ~]#
1.禁止本地windows 访问服务器的 80端口
写规则
[root@localhost ~]# vim /etc/sysconfig/iptables
[root@localhost ~]# cat /etc/sysconfig/iptables
# sample configuration for iptables service
# you can edit this manually or use system-config-firewall
# please do not ask us to add additional ports/services to this default configuration
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -s 192.168.10.1 -p tcp --dport 80 -j DROP
COMMIT
默认规则允许所有,优先级是最低的,一旦我们配置了规则,同种规则,从上往下匹配,只匹配到第一条。
不同种规则
[root@localhost ~]# systemctl restart iptables
测试
如果默认INPUT规则是DROP,就需要写进/出的规则
*filter
:INPUT DROP [0:0] #这里的规则拒绝了
:FORWARD ACCEPT [0:0]
:OUTPUT DROP [0:0] #这里拒绝了
-A INPUT -s 192.168.10.1 -p tcp --dport 22 -j ACCEPT
-A OUTPUT -s 192.168.10.11 -p tcp --sport 22 -j ACCEPT
不建议,这样写
----
*filter
:INPUT DROP [0:0] #input 是drop的话
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -s 192.168.10.1 -p tcp --dport 80 -j DROP #
-A INPUT -s 192.168.10.1/32 -p tcp -m tcp --dport 8090 -j ACCEPT
-m 静态模块,匹配状态的。允许192.168.10.1 使用tcp 协议访问8090服务
-A INPUT -s 192.168.10.0/24 -P tcp -m tcp --dport 8080 -j ACCEPT
允许192.168.10.0 网段 使用tcp 协议访问8080服务
-A INPUT -m mac --mac-source 02:42:a8:83:36:ec -p tcp --dport 22 -j ACCEPT
拒绝 mac地址是02:42:a8:83:36:ec 远程连接自己
-A INPUT s 111.111.110.111 -j ACCEPT
允许111.111.110.111 访问所有
WEB服务器,开启80端口
[root@localhost ~]# iptables -A INPUT -p tcp --dport 80 -j ACCEPT
邮件服务器,开启25,110端口
[root@localhost ~]# iptables -A INPUT -p tcp --dport 110 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p tcp --dport 25 -j ACCEPT
FTP服务器,开启21端口
[root@localhost ~]# iptables -A INPUT -p tcp --dport 21 -j ACCEPT
[root@localhost ~]# iptables -A INPUT -p tcp --dport 20 -j ACCEPT
DNS服务器,开启53端口
[root@localhost ~]# iptables -A INPUT -p tcp --dport 53 -j ACCEPT
允许icmp包通过,也就是允许ping
[root@localhost ~]# iptables -A OUTPUT -p icmp -j ACCEPT (OUTPUT设置成DROP的话)
[root@localhost ~]# iptables -A INPUT -p icmp -j ACCEPT (INPUT设置成DROP的话)
将本机的8080端口转发至其他主机,主机IP:192.168.10.12,目标主机IP和端口:192.168.10.11:8088
规则如下;
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8080 -j DNAT --to-destination 192.168.1.11:8088
iptables -t nat -A POSTROUTING -p tcp -m tcp --dport 8088 -j SNAT --to-source 192.168.1.12
echo 1 > /proc/sys/net/ipv4/ip_forward
Firewalld提供更加智能化的防火墙管理规则,优化策略配置方案,支持网络“zones(域)”,并为网络及其关联的链接、接口或源分配信任级别,不同信任级别默认开放服务不同。
支持IPV4,IPV6,以太网桥以及IPSET防火墙设置。
运行时态与永久配置分离,运行时态可手动更改,重置后回到永久配置(文件配置)
优化iptables添加规则,还支持图形界面(本文不介绍),除了iptables,还有ip6tables和ebtables规则。
Reinwald 软件安装
[root@localhost ~]# yum -y install firewalld
firewall d 基础命令
systemctl status firewalld 查看防火墙状态
systemctl stop firewalld 关闭防火墙
systemctl start firewalld 开启防火墙
systemctl restart firewalld 重启防火墙
systemctl enable firewalld.service 开机时自动启动 firewall 服务
systemctl disable firewalld.service 开机时自动禁用 firewall 服务
ystemctl is-enabled firewalld 查看 firewall 服务是否开机启动
查看 firewall-cmd 状态,即查看 firewall 防火墙程序是否正在运行:
firewall-cmd --state
开启一个端口:firewall-cmd --zone=public --add-port=80/tcp --permanent
关闭 80端口:firewall-cmd --zone=public --remove-port=80/tcp --permanent
重新加载firewalld: firewall-cmd --reload
firewlld 基础操作
从事Linux技术,安全是我么必须掌握的技术。我们通常考虑从 硬件、软件、系统和网络方面准备。
创作不易,点个赞,收藏下哦。以后说不定还需要我呢