`

openssh端口修改,监听ip修改、20 个最佳实践

 
阅读更多

在/etc/ssh/sshd_config中找到Port 22,将其修改为60000,或使用/usr/sbin/sshd -p 60000指定端口。
 
[root@localhost /]# vi /etc/ssh/sshd_config
Port 60000
[root@localhost /]# /usr/sbin/sshd -p 60000
[root@localhost /]# service ssh restart  (或者 /etc/init.d/ssh restart)

如果用户想让22和60000端口同时开放,只需在/etc/ssh/sshd_config增加一行内容如下:
[root@localhost /]# vi /etc/ssh/sshd_config
Port 22
Port 60000
保存并退出
[root@localhost /]# /etc/init.d/ssh restart

===============================================

 

ListenAddress参数确定sshd监听的ip地址,想修改成只监听内网ip,用外网ip登录上去修改,重启后发现sshd进程起不来,改用内网ip登录上去操作就能成功

 

===============================================

OpenSSH 是 SSH 协议的开源实现。 OpenSSH 可进行远程登录、备份、通过 scp 或 sftp 进行远程文件传输等等。 SSH 最完美的确保两个网络和系统之间交换数据的机密性和完整性。其主要的优点是通过使用公共密钥加密进行服务器身份验证。然而,不时有传闻关于 OpenSSH 零日漏洞。这里我们列出一些重要的事情,你需要作出调整来提高 OpenSSH 服务器的安全性。

 

默认配置文件和端口

 

  • /etc/ssh/sshd_config - OpenSSH 服务器配置文件
  • /etc/ssh/ssh_config - OpenSSH 客户端配置文件
  • ~/.ssh/ - 用户独立的 ssh 配置目录
  • ~/.ssh/authorized_keys or ~/.ssh/authorized_keys - 公钥 (RSA or DSA)
  • /etc/nologin - 如果该文件存在,则只允许 root 帐号登录
  • /etc/hosts.allow and /etc/hosts.deny : 访问控制定义
  • SSH 默认端口 : TCP 22

 

SSH Session in Action

连接中的 SSH 会话

 

#1: 禁用 OpenSSH 服务

 

一些工作站或者是笔记本是无需 OpenSSH 服务的,你不需要提供远程登录和文件传输,那么就禁用 SSHD 服务吧。CentOS/RHEL/Fedora Linux 用户可通过 yum 命令来禁用并删除 openssh-server 服务:

 

1
2
# chkconfig sshd off
# yum erase openssh-server

Debian / Ubuntu Linux 用户可通过 apt-get 命令来处理:

1
# apt-get remove openssh-server

你还需要更新 iptables 脚本来移除 ssh 例外规则,在 CentOS / RHEL / Fedora 下可编辑 /etc/sysconfig/iptables 和 /etc/sysconfig/ip6tables. 搞定后重启 iptables 服务即可:

1
2
# service iptables restart
# service ip6tables restart<code></code>

 

#2: 只使用 SSH Protocol 2

 

SSH 协议版本 1 有很多漏洞和安全问题,应该避免使用 SSH-1,可通过在 sshd_config 文件中配置如下信息来启用 SSH-2:

 

1
Protocol 2

 

#3: 限制用户访问 SSH

 

默认所有系统用户都可以通过 SSH 登录,只需要用密码或者公钥即可。有时候你创建某个用户只是为了使用邮件或者是 FTP,但是这些用户也可以通过 ssh 登录,登录后就可以访问很多的系统工具,包括编译器和脚本语言,可打开网络端口以及做很多其他的事情。我们可以通过 sshd_config 文件中的 AllowUsers 和 DenyUsers 来设置可访问 SSH 服务的用户名单。

 

下面配置只允许 root, vivek 和 jerry 三个帐号使用 SSH 服务

 

1
AllowUsers root vivek jerry

 

你也可以设置哪些用户不能访问 SSH:

 

1
DenyUsers saroj anjali foo

 

你也可以 配置 Linux PAM 来允许或者拒绝通过 sshd 服务器登录,你也可以对一个分组进行设置是否可以访问 ssh (详情

 

#4: 配置空闲登出的超时间隔

 

用户通过 ssh 登录到服务器后,如果长时间没有任何动作的话,可通过设置空闲超时时间来让登录的用户自动登出,以避免一些不必要的 ssh 会话连接。打开 sshd_config 文件查看并编辑如下配置:

 

1
2
ClientAliveInterval 300
ClientAliveCountMax 0

 

这里我们设置了 300 秒(5分钟),一旦用户在 5 分钟内没有动作则会自动被踢出。请看 如何自动登出 BASH / TCSH / SSH  以了解更多无活动状态自动登出的详情。

 

#5: 禁用 .rhosts 文件

 

不读取用户命令下的 ~/.rhosts 和 ~/.shosts 文件,只需在 sshd_config  中使用如下设置:

 

1
IgnoreRhosts yes

 

SSH 可模拟过时的 rsh 命令的行为,需要禁用通过 RSH 的非安全登录。

 

#6: 禁用基于主机的认证

 

在 sshd_config 中使用如下配置:

 

1
HostbasedAuthentication no

 

#7: 禁止 root 帐号通过 SSH 登录

 

没必要让 root 帐号可通过 ssh 登录,可通过正常用户登录后然后执行 su 或者 sudo 来执行 root 权限的操作,可在 sshd_config 中使用如下配置来禁用 root 帐号登录:

 

1
PermitRootLogin no

 

关于这个问题,Bob 给出了很棒的说明

 

Saying "don't login as root" is h******t. It stems from the days when people sniffed the first packets of sessions so logging in as yourself and su-ing decreased the chance an attacker would see the root pw, and decreast the chance you got spoofed as to your telnet host target, You'd get your password spoofed but not root's pw. Gimme a break. this is 2005 - We have ssh, used properly it's secure. used improperly none of this 1989 will make a damn bit of difference. -Bob

 

#8: 启用警告的 Banner

 

可以在 sshd_config 中通过如下配置来启用通过 ssh 登录后的警告信息:

 

1
Banner /etc/issue

 

下面是 /etc/issue 文件的示例内容:

 

----------------------------------------------------------------------------------------------
欢迎访问 oschina 服务器,请不要乱来!!!
----------------------------------------------------------------------------------------------

 

#8: 防火墙处理 SSH 端口 # 22

 

你需要在防火墙规则中打开 22 端口,除非你的服务器只允许通过局域网访问:

 

Netfilter (Iptables) 配置

 

编辑 /etc/sysconfig/iptables (红帽系列 Linux) 以允许来自 192.168.1.0/24 和 202.54.1.5/29 两个网段的连接:

 

1
2
-A RH-Firewall-1-INPUT -s 192.168.1.0/24 -m state --state NEW -p tcp --dport 22 -j ACCEPT
-A RH-Firewall-1-INPUT -s 202.54.1.5/29 -m state --state NEW -p tcp --dport 22 -j ACCEPT

 

如果你的系统启用了 IPv6 ,编辑 /etc/sysconfig/ip6tables (Redhat and friends specific file):

 

1
-A RH-Firewall-1-INPUT -s ipv6network::/ipv6mask -m tcp -p tcp --dport 22 -j ACCEPT

 

用实际的 IPv6 范围替换其中的 ipv6network::/ipv6mask

 

*BSD PF 防火墙配置

 

如果你使用了 PF 防火墙,可更新 /etc/pf.conf 配置如下:

 

1
pass in on $ext_if inet proto tcp from {192.168.1.0/24, 202.54.1.5/29} to $ssh_server_ip port ssh flags S/SA synproxy state

 

#9: 修改 SSH 端口和限制 IP 绑定

 

默认 SSH 绑定到所有网卡的所有 IP,端口号是 22,建议只绑定到需要的网卡 IP ,并修改默认的端口。可通过 ssh_config 配置文件中使用如下配置信息将端口修改为 300:

 

1
2
3
Port 300
ListenAddress 192.168.1.5
ListenAddress 202.54.1.5

 

还有一个更好的方法是使用积极主动的脚本,诸如 fail2ban 或者是 denyhosts

 

#10: 使用强的 SSH 密码

 

使用强而复杂的密码是多么重要的一件事。蛮力攻击之所以有效,是因为你使用基于字典的密码。你可以强制要求用户不能使用基于字典的密码,并通过使用 john the ripper tool 来找出已有的弱密码,下面是一个随机密码生成器的示例:(放在你的 ~/.bashrc):

 

1
2
3
4
5
genpasswd() {
    local l=$1
        [ "$l" == "" ] && l=20
        tr -dc A-Za-z0-9_ < /dev/urandom | head -c ${l} | xargs
}

运行: genpasswd 16
输出:uw8CnDVMwC6vOKgW

#11: 使用基于公钥的认证

 

使用公/私钥配对,并对私钥提供密码保护,详情请看使用基于 RSADSA key 的认证。绝对不要使用密码短语免费密钥(密码键更少)登录。

 

#12: 使用 Keychain 认证

 

keychain 是一个特别的 bash 脚本,用于方便灵活的生成基于密钥认证,提供多种安全措施,详情请看 keychain software.

 

#13: Chroot SSHD (将用户锁定在他的主目录下)

 

默认用户允许浏览服务器上的目录,如 /etc、/bin 等,我们可使用 chroot 或者是 special tools such as rssh 来保护 ssh。而 OpenSSH 4.8p1 和 4.9p1 让你不再依赖第三方的工具(如rssh和组合 chroot)来将用户锁定在他的主目录下,详情请看 blog post 关于如何使用 ChrootDirectory 指令。

 

#14: 使用 TCP Wrappers

 

TCP Wrapper 是一个基于主机地址的网络 ACL 系统,用来过滤网络地址访问互联网。OpenSSH 支持 TCP Wrappers。只需要更新你的 /etc/hosts.allow 文件只允许通过 192.168.1.2 172.16.23.12 访问 sshd:

 

1
sshd : 192.168.1.2 172.16.23.12

 

详情请看 FAQ about setting and using TCP wrappers

 

#15: 禁用空密码

 

你应该禁止帐号使用空密码进行远程登录,在 sshd_config 使用如下配置即可:

 

1
PermitEmptyPasswords no

 

#16: 阻止 SSH 破解 (蛮力破解攻击)

 

蛮力破解是一种试图通过大量使用单一或分布式计算机网络来战胜一个加密方案。为了阻止这种方法,可结合使用如下软件:

 

  • DenyHosts 是Python语言写的一个程序,它会分析SSHD的日志文件,当发现重复的攻击时就会记录IP到/etc/hosts.deny文 件,从而达到自动屏蔽IP的功能。
  • 解释如何在 RHEL、Fedora 和 CentOS 系统下安装 DenyHosts
  • Fail2ban 是一个 IP 自动屏蔽工具
  • security/sshguard-pf 在 pf 中防止暴力破解
  • security/sshguard-ipfw 在 ipfw 中防止暴力破解
  • security/sshguard-ipfilter 在 ipfilter 中防止暴力破解
  • security/sshblock block abusive SSH login attempts.
  • security/sshit checks for SSH/FTP bruteforce and blocks given IPs.
  • BlockHosts Automatic blocking of abusive IP hosts.
  • Blacklist Get rid of those bruteforce attempts.
  • Brute Force Detection A modular shell script for parsing application logs and checking for authentication failures. It does this using a rules system where application specific options are stored including regular expressions for each unique auth format.
  • IPQ BDB filter May be considered as a fail2ban lite.

 

#17: 限制 22 端口连接的速率

 

netfilter 和 pf 都提供了连接速率限制选项

 

Iptables 示例

 

下面配置禁止在一分钟内 22 端口超过 5 个连接:

 

1
2
3
4
5
#!/bin/bash
inet_if=eth1
ssh_port=22
$IPT -I INPUT -p tcp --dport ${ssh_port} -i ${inet_if} -m state --state NEW -m recent  --set
$IPT
-I INPUT -p tcp --dport ${ssh_port} -i ${inet_if} -m state --state NEW
-m recent  --update --seconds 60 --hitcount 5 -j DROP

 

另外的配置选项:

 

1
2
3
4
5
$IPT -A INPUT  -i ${inet_if} -p tcp --dport ${ssh_port} -m state --state NEW -m limit --limit 3/min --limit-burst 3 -j ACCEPT
$IPT -A INPUT  -i ${inet_if} -p tcp --dport ${ssh_port} -m state --state ESTABLISHED -j ACCEPT
$IPT -A OUTPUT -o ${inet_if} -p tcp --sport ${ssh_port} -m state --state ESTABLISHED -j ACCEPT
# another one line example
#
$IPT -A INPUT -i ${inet_if} -m state --state NEW,ESTABLISHED,RELATED -p
tcp --dport 22 -m limit --limit 5/minute --limit-burst 5-j ACCEPT

 

更多的配置详情请看 iptables 的 man 页。

 

*BSD PF 示例

 

以下将限制的最大连接数到20,每个源速率限制连接数,在一个5秒的跨度15。如果有人打破我们的规则将它们添加到我们的阻止的ip表和阻止他们做任何进一步的连接。

 

1
2
3
4
sshd_server_ip="202.54.1.5"
table <abusive_ips> persist
block in quick from <abusive_ips>
pass in on $ext_if proto tcp to $sshd_server_ip port ssh flags S/SA keep state (max-src-conn 20, max-src-conn-rate 15/5, overload <abusive_ips> flush)

 

#18: 使用端口碰撞技术(Port Knocking)

 

端口碰撞技术 是一个方法的外部开放端口防火墙通过生成一个连接请求在一组预先指定关闭端口。一旦一个正确的顺序连接尝试接收,防火墙规则是动态修改为允许主机将连接尝试连接在特定端口(s)。

 

使用 iptables 配置端口碰撞的示例:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$IPT -N stage1
$IPT -A stage1 -m recent --remove --name knock
$IPT -A stage1 -p tcp --dport 3456 -m recent --set --name knock2
  
$IPT -N stage2
$IPT -A stage2 -m recent --remove --name knock2
$IPT -A stage2 -p tcp --dport 2345 -m recent --set --name heaven
  
$IPT -N door
$IPT -A door -m recent --rcheck --seconds 5 --name knock2 -j stage2
$IPT -A door -m recent --rcheck --seconds 5 --name knock -j stage1
$IPT -A door -p tcp --dport 1234 -m recent --set --name knock
  
$IPT -A INPUT -m --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A INPUT -p tcp --dport 22 -m recent --rcheck --seconds 5 --name heaven -j ACCEPT
$IPT -A INPUT -p tcp --syn -j doo

 

两个软件:

 

  • fwknop 是一个结合端口碰撞和被动操作系统识别技术的实现
  • Multiple-port knocking 仅限于 Netfilter/IPtables 的实现

 

#19: 使用日志分析器

 

可通过 logwatch or logcheck 来阅读日志,这些工具可以让你轻松的浏览日志。通过指定时间来给出日志的报告。首先要确保在 sshd_config 中将日志级别 LogLevel 设置为 INFO 或者 DEBUG:

 

1
LogLevel INFO

 

#20: 对 OpenSSH 和操作系统打补丁

 

推荐你使用诸如 yum, apt-get, freebsd-update 工具来保持系统的即时获取最新的安全补丁。

 

其他选项

 

为了隐藏 openssh 版本,你可更新源码然后再次编译 openssh ,并确保在 sshd_config 中使用如下配置:

 

1
2
3
4
5
6
7
8
9
10
11
#  Turn on privilege separation
UsePrivilegeSeparation yes
# Prevent the use of insecure home directory and key file permissions
StrictModes yes
# Turn on  reverse name checking
VerifyReverseMapping yes
# Do you need port forwarding?
AllowTcpForwarding no
X11Forwarding no
#  Specifies whether password authentication is allowed.  The default is yes.
PasswordAuthentication no

 

在重启 openssh-server 之前先用如下命令验证配置是否正确:

 

1
# /usr/sbin/sshd -t

 

使用 two-factor 或者 three-factor (or more) 认证来加强 OpenSSH 的安全。

 

分享到:
评论

相关推荐

    openssh 9.3p2 rpm包 for bclinux8.6 ,龙蜥8.6升级包

    6. **使用端口转发**:考虑将 SSH 服务监听在非标准端口上,增加攻击难度。 7. **审计日志**:定期查看 `auth.log` 或 `secure.log`,查找可疑活动。 通过遵循这些最佳实践并保持 OpenSSH 客户端和服务器的最新...

    openssh-server离线安装包

    默认情况下,OpenSSH Server会自动启动并监听22号端口。 6. **安全与最佳实践**: - 生成强密钥对:使用`ssh-keygen`命令生成公钥和私钥,提高安全性。 - 禁用密码登录:鼓励使用密钥对认证,可通过修改`/etc/ssh...

    openssh8.7p1.tar.gz

    《OpenSSH 8.7p1在CentOS 7.9系统中的编译与安全实践》 OpenSSH,全称为Open Source Secure Shell,是用于网络服务的安全协议,它提供了加密的网络通信,使得数据传输更加安全。在Linux环境中,OpenSSH广泛应用于...

    openssh-8.5p1rpm包

    《OpenSSH 8.5p1 RPM 包详解与应用》 OpenSSH 是一个用于在不同网络之间提供安全通信的开源软件套件,它包含了 SSH ...正确安装和配置 OpenSSH,遵循最佳实践,可以极大地提升系统的安全性,并优化远程访问体验。

    windows 下openssh服务安装包

    7. **安全考虑**:默认的安全设置可能不足以抵挡所有攻击,因此强烈建议定期更新OpenSSH到最新版本,并根据最佳实践调整配置,例如限制密码登录、启用公钥认证、禁用不安全的加密算法等。 总之,安装OpenSSH服务...

    openssh 安装包和安装教程

    在实际应用中,还应注意安全最佳实践,如定期更新OpenSSH版本以防止已知漏洞,限制不必要的SSH端口访问,启用公钥认证以减少密码攻击风险,以及监控sshd的日志文件以检测潜在的安全威胁。理解这些概念和步骤对于任何...

    openssh 9.1p1 for redhat 7.9

    - `Port`:设置SSH服务监听的端口号,避免默认的22端口以减少被扫描的可能性。 - `PermitRootLogin`:禁止root用户直接登录,提升安全性。 - `PasswordAuthentication`:建议禁用密码登录,启用公钥认证。 - `...

    教程openssh中文版

    - **防火墙设置**:确保只允许可信IP地址访问SSH端口。 - **登录尝试限制**:通过PAM模块或第三方工具如Fail2Ban来限制失败登录尝试次数。 - **更新与维护**:定期更新OpenSSH版本以获取最新的安全补丁和功能改进。 ...

    openssh ubuntu 离线包

    例如,修改默认端口、限制允许登录的用户或IP、启用公钥认证等,都是提高系统安全性的常见做法。 总结来说,离线安装OpenSSH-server对于没有网络连接的Ubuntu系统是必要的,它涉及到获取deb包、传输、安装、解决...

    openssh-8.0.tar.gz

    在Linux操作系统中,OpenSSH(Open Source Secure SHell)是一个实现网络服务安全连接的重要工具,它提供了加密的网络通信...记住,安全是OpenSSH使用的核心,所以务必遵循最佳实践,保护你的网络资源不被非法访问。

    OpenSSH-Win32.zip

    为了确保OpenSSH的安全,用户应遵循以下最佳实践: 1. 使用强密码或公钥认证,避免使用弱密码。 2. 定期更新OpenSSH到最新版本,以修复已知的安全漏洞。 3. 配置sshd_config文件,限制只接受特定的认证方法,禁用...

    openssh 9.3p2-el7.zip

    1. `Port`:设置SSH服务监听的端口,默认为22,可更改以增加安全性。 2. `PermitRootLogin`:控制是否允许root用户直接登录,推荐设置为`no`,以增强安全性。 3. `PasswordAuthentication`:开启或关闭密码认证,...

    fpipe端口转发工具

    【fpipe端口转发工具】是一种实用的网络工具,它允许用户通过本地不受限制的端口来访问那些受到远程访问限制的端口。...在使用fpipe时,应充分了解网络环境,遵循最佳实践,以确保网络的稳定和安全。

    openssh-8.8p1-aarch64.zip

    根据系统配置文件`/etc/ssh/sshd_config`进行定制化配置,比如设置监听端口、认证方式等。 2. **密钥管理**:推荐使用密钥对认证而非密码认证,以提高安全性。生成密钥对后,将公钥分发到客户端,私钥保留在服务器...

    openssh9.2p1-rpm包.zip

    安装完成后,需要根据你的需求配置`/etc/ssh/sshd_config`文件,比如设置监听端口、认证方式、密码策略等。启动服务并设置开机启动: ```bash sudo systemctl start sshd sudo systemctl enable sshd ``` 7. ...

    linux的openssh

    Port 选项用来设置 sshd 监听的端口,默认的端口号为 22。 2. Protocol 2,1 Protocol 选项用来设置使用的 ssh 协议,可以选择 ssh1 或 ssh2,如果仅仅使用 ssh2,可以设置为 Protocol 2。 3. ListenAddress 0.0....

    openssh-8.1p1.rar

    4. **配置OpenSSH**:安装完成后,需要编辑`/etc/ssh/sshd_config`文件,根据需求配置SSH服务,如设置监听端口、认证方式、密码策略等。 5. **启动和启用服务**:使用`systemctl start sshd`启动SSH服务,用`...

    openssh-8.8p1_rpm_centos7

    - **防火墙规则**:使用 `firewalld` 或 `iptables` 限制 SSH 的入站流量,只允许必要的 IP 地址或端口访问。 4. **日志管理和监控**: OpenSSH 的日志默认记录在 `/var/log/auth.log` 或 `/var/log/secure` 文件...

    OpenSSH.zip

    使用OpenSSH时,需要注意以下最佳实践: 1. 使用强密码和密钥:避免使用弱密码,对于私钥,应设置复杂的口令并定期更换。 2. 定期更新:保持OpenSSH软件版本最新,以便及时修补安全漏洞。 3. 限制root登录:为了...

    windows安装openssh-server安装包

    Port 22 # 默认SSH端口,可根据需要更改 PasswordAuthentication yes # 允许密码认证 PubkeyAuthentication yes # 允许公钥认证 ``` 4. **启动服务**:在命令提示符中,启动OpenSSH Server服务: ``` ...

Global site tag (gtag.js) - Google Analytics