- 1. centos 7 修改ssh端口+Selinux+firewall
- 2. 修改动机
- 3. 修改 sshd_config 文件(这一段直接复制过来的)
- 4. 打开SElinux端口
- 5. 配置防火墙 firewalld
- 6. 启用防火墙 && 查看防火墙状态
- 7. 查看防火墙当前「默认」和「激活」zone(区域)
- 8. 激活 public 区域,增加网卡接口
- 9. 为 public zone 永久开放 2048/TCP 端口:
centos 7 修改ssh端口+Selinux+firewall
修改动机
突然想起看看服务器的日志,于是去网上搜索,last
ps -ef
iftop -np
也没看出什么来,不过du -h /var/log/secure 一看20多M,终于明白自己是多么的井蛙了,于是便想要更改ssh的端口。
参考网址
https://www.centos.bz/2017/08/centos-7-change-ssh-port/
修改 sshd_config 文件(这一段直接复制过来的)
1 | $ vi /etc/ssh/sshd_config |
取消 #Port 22 的注释,在下一行添加你需要修改的新端口 Port 2048。(这里不删除 22 端口是为了防止修改后新端口无法访问,造成无法用 ssh 连接服务器。)
1 | Port 22 |
修改保存 sshd_config 文件后重启 sshd 服务:
1 | $ systemctl restart sshd |
退出 ssh 会话后,再用新的端口连接:
1 | $ ssh -p 2048 [email protected] |
好吧,native 了……对于 CentOS 7 这一套修改端口的方法已经不能生效了。
于是进行下一步
打开SElinux端口
SELinux 全称 Security Enhanced Linux (安全强化 Linux),是 MAC (Mandatory Access Control,强制访问控制系统)的一个实现,目的在于明确的指明某个进程可以访问哪些资源(文件、网络端口等)。
对于 ssh,SELinux 默认只允许 22 端口,我们可以用 SELinux 管理配置工具 semanage,来修改 ssh 可访问的端口。
安装semanage工具,(这个工具来设置selinux)
1 | $ yum provides semanage |
为ssh打开2048端口
1 | # 为 ssh 添加新的允许端口 |
进行到这一步,我这里进行不下去了,我的是vultr的主机,然后安装的是centos7 64。semanage 命令一直报错,查看selinux状况,提示disabled
1 | [root@vultr ~]# sestatus |
然后就网上找这么开启selinux的方法,setenforce 1
修改 /etc/selinux/config 文件 ,可是到了这一步就诡异了,我的系统没有这个文件,连selinux这个文件夹也没有,于是我无奈之下就新建了文件夹和文件,并且参考网络上的文件内容复制进去,并且修改SELINUX=disabled ,折腾重启n次,无果,sestatus还是显示 disabled, 于是只能弃之不管,继续去配置firewall。原教程在selinux还有这一步:
错误处理
当 SELINUX 配置为禁用状态时,使用 semanage 会报错提示无法读取 policy 文件:
1
2
3
4
5 SELinux: Could not downgrade policy file /etc/selinux/targeted/policy/policy.30, searching for an older version.
SELinux: Could not open policy file <= /etc/selinux/targeted/policy/policy.30: No such file or directory
/sbin/load_policy: Can't load policy: No such file or directory
libsemanage.semanage_reload_policy: load_policy returned error code 2. (No such file or directory).
FileNotFoundError: [Errno 2] No such file or directory修改 /etc/selinux/config 配置,启用 SELinux:
1
2
3
4
5
6
7
8 $ vi /etc/selinux/config
SELINUX=permissive
# 重启服务器
$ init 6
# 重启后查看 SELinux 状态
$ sestatus
# if it shows disable, you can run
$ load_policy -qi检查配置
1
2
3
4
5 $ semanage port -a -t ssh_port_t -p tcp 2048
$ semanage port -l | grep ssh
ssh_port_t tcp 2048, 22
# 重启 ssh 服务
systemctl restart sshd注:semange 不能禁用 ssh 的 22 端口:
1
2 $ semanage port -d -t ssh_port_t -p tcp 22
ValueError: 在策略中定义了端口 tcp/22,无法删除。此路不通,继续往下….
配置防火墙 firewalld
1 | $ systemctl enable firewalld #使firewall开机启动 |
然后就悲剧了,服务启动不起来,按照提示好像是iptable 的规则有错误,服务启动不起来。于是又搜索
1 | iptables: Applying firewall rules: iptables-restore v1.4.7: iptables-restore: unable to initialize ta’le ‘security |
找到了初始化iptables的命令:
1 | iptables -F |
这下IPtables启动成功了,可是不知道是刚刚一通乱改动了那里的东西,systemctl start firewalld
一直是faild. 看来还是要从selinux下手。
突然想到重装一下selinux吧,这下用谷歌搜一下,然后就搜到这个网页 https://www.tecmint.com/things-to-do-after-minimal-rhel-centos-7-installation/4/ 30 Things to Do After Minimal RHEL/CentOS 7 Installation ,说的是centos7最小化安装后需要做的30件事情,其中就有一条 Install and Enable SELinux ,不管是不是最小化安装的,直接装一下看看,按照教程安装–这个教程也是个坑呀
1 | yum install selinux-policy |
这下/etc/selinux/config里面也有文件了,于是开启selinux,再去运行semanage 命令,可是还是报错,提示是缺少规则什么的,我想是不是需要重启一下,于是就重启了,然后就悲剧了,ssh什么的都连不上了,进vultr的网页控制台去看,重启卡进度条了,按ESC后提示
faild to load SELinux….
网上搜出现这种情况的解决办法,网页端又不好操作,而且晚上一下就掉线了,搞半天无果,这时想起自己以前在vultr控制台存了快照,于是又搜索快照恢复的方法,原来这不像我们电脑的备份,这个快照无法直接恢复,需要新建一个实例然后用这个快照做镜像。好吧,于是先在控制台保存一下公网IP,然后删除这个启动不了的实例,新开一个配置和原来一样的实例,镜像用原来的快照,IP用刚刚保留的IP,然后安装完成以后,搜索怎么全新安装一个selinux.
这是vultr恢复快照如果无法上网的解决方法 https://www.vultr.com/docs/correcting-network-configuration-after-snapshot-restore
参考 这三个网页,拼凑出下面的安装SElinux的命令
https://linode.com/docs/security/getting-started-with-selinux/
https://gist.github.com/amphineko/b0edb71c89dd91cff675
https://en.opensuse.org/SDB:SELinux
1 | yum install policycoreutils policycoreutils-python selinux-policy selinux-policy-targeted libselinux-utils setroubleshoot-server setools setools-console mcstrans |
这样安装完成以后 sestatus 显示
1 | SELinux status: enabled |
然后重启后 sestatus显示
1 | SELinux status: enabled |
然后再从原来的semanage 命令那里开始参照 https://www.centos.bz/2017/08/centos-7-change-ssh-port/ 一步一步来配置防火墙 firewalld
启用防火墙 && 查看防火墙状态
1 | $ systemctl enable firewalld |
查看防火墙当前「默认」和「激活」zone(区域)
1 | $ firewall-cmd --get-default-zone |
若没有激活区域的话,要执行下面的命令。
激活 public 区域,增加网卡接口
1 | $ firewall-cmd --set-default-zone=public |
为 public zone 永久开放 2048/TCP 端口:
1 | # 以防新端口不生效,先把 22 端口暴露 |
退出 ssh 后,尝试连接新端口
1 | $ ssh -p 2048 [email protected] |
成功登录的话,就可以做收尾工作了。
禁用 22 端口
删除 ssh 允许端口
1 | $ vi /etc/ssh/sshd_config |
防火墙移除 22 端口
1 | $ firewall-cmd --permanent --zone=public --remove-port=22/tcp |
ssh 取消监听 22 端口,就已经配置好了,防火墙只不过是在 ssh 外多一层访问限制。如果要做的更好还可以将 22 端口的访问流量转向访问者本地:
1 | $ firewall-cmd --permanen --zone=public --add-forward-port=port=22:proto=tcp:toport=22:toaddr=127.0.0.1 |
若要删除 forward 配置,可以:
1 | $ firewall-cmd --permanen --zone=public --remove-forward-port=port=22:proto=tcp:toport=22:toaddr=127.0.0.1 |
检验修改 ssh 端口是否成功:
1 | $ ssh -p 22 [email protected] |
修改Git端口
最后还要修改git 端口为修改后的端口,不然上传不了文件
windows下.ssh文件夹一般在 C:\User\用户名
, 然后在.ssh文件夹里面新建config文件,内容如下:
1 | Host 服务器IP |