Linux安全配置

1. 介绍

笔者发现每次登陆云服务器时都提示如下信息

There were xxx failed login attempts since the last successful login.

这让我非常诧异, 明显网络上有人尝试远程登陆云服务器.

2. 检测

首先我们可以使用nmap工具来检测服务器开发了哪些端口
注意在另一个Linux主机上运行, 这里设定云服务IP地址为A.A.A.A

# nmap A.A.A.A

Starting Nmap 6.40 ( http://nmap.org ) at 2017-08-02 15:24 CST
Nmap scan report for A.A.A.A
Host is up (0.013s latency).
Not shown: 995 closed ports
PORT     STATE    SERVICE
22/tcp   open     ssh
111/tcp  open     rpcbind
445/tcp  filtered microsoft-ds
3306/tcp open     mysql
Nmap done: 1 IP address (1 host up) scanned in 5.58 seconds

然后我们在云服务上查看本机监听了哪些端口
注意在云服务器运行

# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address   Foreign Address   State    PID/Program name
tcp        0      0 0.0.0.0:3306    0.0.0.0:*         LISTEN   6349/mysqld
tcp        0      0 127.0.0.1:6379  0.0.0.0:*         LISTEN   7067/redis-server 1
tcp        0      0 0.0.0.0:111     0.0.0.0:*         LISTEN   1/rpcbind
tcp        0      0 0.0.0.0:22      0.0.0.0:*         LISTEN   479/sshd
tcp6       0      0 :::22           :::*              LISTEN   479/sshd

3. 服务

端口之所以开放是由于服务器上运行了某些服务;下面的命令可以查看系统运行了哪些服务

# systemctl list-units --type=service
  UNIT                               LOAD   ACTIVE SUB     DESCRIPTION
  acpid.service                      loaded active running ACPI Event Daemon
...
  mariadb.service                    loaded active running MariaDB database server
● postfix.service                    loaded failed failed  Postfix Mail Transport Agent
  redis.service                      loaded active running Redis persistent key-value database
  rpcbind.service                    loaded active running RPC bind service
  serial-getty@ttyS0.service         loaded active running Serial Getty on ttyS0
  sshd.service                       loaded active running OpenSSH server daemon
  tuned.service                      loaded active running Dynamic System Tuning Daemon

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

40 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

下面的命令可以关闭nfs服务和postfix服务

/* 关闭NFS服务 */
# systemctl disable rpcbind.service
# systemctl stop rpcbind.service
Warning: Stopping rpcbind.service, but it can still be activated by: rpcbind.socket
# systemctl disable rpcbind.socket
# systemctl stop rpcbind.socket

/* 关闭Postfix服务 */
# systemctl disable postfix.service
# systemctl stop postfix.service

对于redis只允许本地访问, 不存在安全问题;
对于mysql(mariadb)其实也只是本地访问, 但是却开放了外网访问权限, 故而进行如下配置

# vi /etc/my.cnf
[mysqld]
...
bind-address=127.0.0.1
# systemctl restart mariadb

4. 防火墙

完成了上面的步骤之后, 排除了系统主动引起的安全问题, 而且操作起来比较繁琐
Linux比较常用的方法是采用防火墙, 也就是iptables(CentOS 7中称为firewalld)

Firewalld 提供了支持网络/防火墙区域(zone)定义网络链接以及接口安全等级的动态防火墙管理工具
它支持IPv4、IPv6防火墙设置以及以太网桥接, 并且拥有运行时配置和永久配置选项
它也支持允许服务或者应用程序直接添加防火墙规则的接口

firewall有预定义常见的服务, 以XML文件的方式存放在/usr/lib/firewalld/services/目录下
可以通过firewall-cmd命令方便地进行配置

下面的命令开放SSH服务然后启动Firewall

# systemctl start firewalld.service
# systemctl enable firewalld.service

# firewall-cmd --permanent --zone=public --add-service=ssh
# firewall-cmd --reload

/* 检查设置是否生效 */
# iptables -L -n | grep 22
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:22 ctstate NEW

其他常用命令如下:

/* 暂时开放服务 */
# firewall-cmd --add-service=AAA

/* 永久关闭服务 */
# firewall-cmd --remove-service=AAA --permanent

/* 查询某个服务的状态 */
# firewall-cmd --query-service AAA
yes(no)

/* 临时开放某个Port */
# firewall-cmd --add-port=9527/tcp

/* 检查防火墙状态 */
# firewall-cmd --state
running(not running)

/* 获取默认zone的设置 */
# firewall-cmd --list-all
public (default, active)
  interfaces: em1
  sources:
  services: dhcpv6-client http https samba ssh vnc-server
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

/* 获取所有支持的服务,即/usr/lib/firewalld/services/中预配置的服务 */
# firewall-cmd --get-service
RH-Satellite-6 amanda-client bacula bacula-client dhcp dhcpv6 dhcpv6-client dns freeipa-ldap freeipa-ldaps freeipa-replication ftp high-availability http https imaps ipp ipp-client ipsec iscsi-target kerberos kpasswd ldap ldaps libvirt libvirt-tls mdns mountd ms-wbt mysql nfs ntp openvpn pmcd pmproxy pmwebapi pmwebapis pop3s postgresql proxy-dhcp radius rpc-bind rsyncd samba samba-client smtp ssh telnet tftp tftp-client transmission-client vdsm vnc-server wbem-https

这里我们自定义服务ZZZ, 假设该服务需要开放TCP端口543和9999
在/usr/lib/firewalld/services/目录下新建文件zzz.XML, 其内容如下

# cat zzz.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>ZZZ</short>
  <description>Zzz is an ... service.</description>
  <port protocol="tcp" port="543"/>
  <port protocol="tcp" port="9999"/>
</service>

然后启动该服务

# firewall-cmd --reload
success
# firewall-cmd --permanent --zone=public --add-service=zzz
success
# firewall-cmd --reload
success
# firewall-cmd --query-service=mosquitto
yes
# firewall-cmd --list-all
public (default, active)
  interfaces: em1
  sources:
  services: dhcpv6-client http https mosquitto samba ssh vnc-server
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

5. SSH配置

这里着重讨论一下SSH的安全问题, 之所以那么多的人尝试入侵别人的主机SSH服务, 关键在于SSH服务提供了最大的权限.
比如说本人的云服务器主机只有root用户, 一旦暴力登陆成功将可完全控制主机.

通常有如下方法

- 禁止root登陆, 只允许普通用户登陆
- 禁止密码登陆, 使用密钥登陆
- 改变SSH默认端口号
- 使用fail2ban软件

这里讨论一下修改SSH默认端口号的办法

/* 修改防火墙ssh配置文件 */
# vi /usr/lib/firewalld/services/ssh.xml
  <port protocol="tcp" port="22"/>
--->
  <port protocol="tcp" port="2222"/>

/* 重启防火墙 */
# firewall-cmd --reload
success
# iptables -L -n | grep 2222
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:2222 ctstate NEW

/* 修改ssh配置文件 */
# vi /etc/ssh/sshd_config
#Port 22
--->
Port 2222

/* 重启SSH服务 */ # systemctl restart sshd # netstat -tunlp | grep ssh tcp 0 0 0.0.0.0:2222 0.0.0.0:* LISTEN 14608/sshd tcp6 0 0 :::2222 :::* LISTEN 14608/sshd

6. 十字节病毒

下面介绍一些处理十字节病毒的命令

/* 查看和删除启动项 */
# chkconfig --list | grep 3:on
# chkconfig --del aanrvkddxb

/* 查看和查找木马文件 */
# ls -al /tmp/rufgdrxggs
-rwxr-xr-x 1 root root 625817 Nov 30 10:39 /tmp/rufgdrxggs
# find / -size 625817c 2>/dev/null
/usr/bin/xhtxqgdfyg
/usr/bin/tfplppsppv
/tmp/rufgdrxggs

/* 查看进程 */
# pstree
# lsof | grep 'eaxrgexwwx'

Linux开源杀毒软件: ClamAV

参考:
<为MariaDB配置远程访问权限>
<CentOS 7中firewall-cmd命令>
<用活firewalld防火墙中的zone>
<快速自检电脑是否被黑客入侵过(Linux版)>
<linux上使用netstat查看当前服务和监听端口>
<Linux Firewall (firewalld, firewall-cmd, firewall-config)>
<Red Hat Enterprise Linux-Security Guide-Using Firewalls>

posted @ 2017-08-04 11:10  北落不吉  阅读(1315)  评论(0编辑  收藏  举报