Linux管理开放端口与防火墙笔记总结

引言

在工作中,如果不是用的云服务器,没有用户安全组规则的设置与修改,直接在Linux宿主机上操作,其实也算简单,但需要注意到的点就可能比较多,另外检测也都有相应的方法,所以想总结一下之前有遇到过的问题。

防火墙与开放端口

首先防火墙分为包过滤防火墙(pack filtering)和代理服务器型防火墙,而端口号标识了一个主机上进行通信的不同的应用程序,一个计算机最多有65535个端口,端口不能重复。当我们拿到一台服务器的时候,我们可以查看当前服务器的监听服务有多少:

netstat -ntlp

在这里插入图片描述
上面是我测试的图片,可以看到如果netstat -ntlp后如果local address没有显示相应的端口号,那么telnet是ping不通的(telnet就是查看某个端口是否可访问。当在开发的时候,经常要用的端口就是 8080。那么你可以启动服务器,用telnet 去查看这个端口是否可用。),因为我的Nginx并没有启动,在win下查看local address是netstat -q,意思也就是端口还没被占用,进程未起,那么远程登录或者传送文本的Telnet就无法连接。另外,如果要测试两台服务器间的连接,还可以用traceroute命令:
在这里插入图片描述
用来查看主机及目标主机之间的路由路径。每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不一样,但基本上来说大部分时候所走的路由是相同的。linux系统中,我们称之为traceroute。具体的可以看如下博客:

traceroute 详解及结果出现*的分析

作为一个新装好的服务器,比如说centos,默认都会开启22、25等端口,22是为了ssh,如果出现问题,需要重装openSSH,而若想开启其它端口,或者我Nginx服务开起来了,但不太清楚有没有入网规则,那么就需要看防火墙的状态了(因为现在写这篇博文是在两台云服务器上记忆,原先测试本地服务器的时候截图丢了。。)。

一般刚装好的机器,防火墙是关闭的,在项目上线之前其实都不太需要考虑防火墙规则,将ssh登录方式改成秘钥基本不会出现啥安全问题,一般被无差别攻击或者异地登录都是因为自己设置的是密码登录,并且太短,被植入脚本当成矿机。。。云服务器尤为严重,如果CPU一直是100%的情况就要考虑寻找脚本了,运气好能找到主程序立即杀死,运气不好脚本会像野草一样胡乱生长。。。

扯远了,下面可以查看当前防火墙的状态:
在这里插入图片描述
如果是ubuntu,防火墙的指令是ufw,好像。然后centos 7以上一般预装Firewalls,centos 7之前其实更推荐用iptables,而Firewalls是centos 6.5之后进行的升级,但很多人还是喜欢禁用Firewalls,然后yum install iptables开启这个防火墙,包括我。

iptables大概的命令为:

# 查询防火墙状态
	service iptables status
# 关闭防火墙
	service iptables stop
# 开启防火墙
	service iptables start
# 重启防火墙
	service iptables restart
# 永久关闭防火墙
	chkconfig iptables off
# 永久关闭后开启防火墙
	chkconfig iptables on 
# 查询当前iptables的规则
	iptables -L --line-numbers

上面如果启动iptables防火墙没有问题,那么可以跳过下面的我之前记录过的一个问题。

centos7启动iptables时报Job for iptables.service failed because the control process exited with error cod

上述错误的报错日志为:

Job for iptables.service failed because the control process exited with error code. See "systemctl status iptables.service" and "journalctl -xe" for details.

它提示输入上面两个命令具体看报错内容,然而这个问题大概率是因为centos上Firewalls未被关闭。

systemctl stop firewalld  
systemctl mask firewalld  # 锁定状态,最好不用

运行完第一句我们就可以看是否能起,第二句最好不用的原因是,如果以后忘了被mark了,会发现Firewalls怎么开都开不起来,然后就很难受。。。我就难受了很久,最后发现要UNmark回来。

当我们真正开启iptables后,进入/etc/sysconfig/iptables会看到如下基本配置以及我写入的三条规则:
在这里插入图片描述
这里写入规则有两种方式,第一种就是和我一样直接vim进去,然后复制其中一条,再在后面加上我想开放的端口,另一种就是一种软链接的写法:

iptables -I INPUT -p tcp --dport 8080 -j ACCEPT	# 开放8080的TCP端口服务
iptables -t filter -I INPUT 2 -s 192.168.5.0/24 -p tcp --dport 80 -j DROP		# 拒绝192.168.5.0这个ip中80的tcp服务
service iptables save

然后出现绿色的确定两字,就会保存进配置文件了,下面是我之前在公司服务器上做的测试:(后期删,到时候贴本机测试图)

这里还会存在的一个bug是,当我们向配置文件写入新的规则,但重启后发现还是老的设置,这里就需要检查iptables-config的配置中的IPTABLES_SAVE_ON_RESTART,需要它的设置为“NO”:

在这里插入图片描述
另外docker也会出现防火墙的问题,当时出现这个问题的时候我还排查了很久,如下图:
在这里插入图片描述

我认为是我的防火墙有问题,其实确实是,另一种可能是docker的防火墙文件被修改了,但我这个镜像是直接pull的,所以不可能有,而最后的解决方案其实是运行systemctl restart docker,重启了docker后就能正常启动了。。。并不是太清楚这个原理。照我的理解,举个例子,就是Windows下启动进程与虚拟机当前端口不匹配,但我释放掉虚拟机重启后,就又能连上了。。

总结

那么以上就是一些我写这篇博客想到的一些问题与解答,还有其它东西可能我忘了,也可能没有遇到过,在这里标记一下,之后想到会回来补充,另外下面的参考文献中mark了一下常用端口与配对的协议,以及一些写得很详细的博文。



参考与推荐:

[1]. Linux学习笔记—常用端口号总结
[2]. linux CentOS 7中firewall防火墙详解和配置以及切换为iptables防火墙
[3]. traceroute 详解及结果出现*的分析

猜你喜欢

转载自blog.csdn.net/submarineas/article/details/106535307