服务器防火墙规则及进出站端口设置

2018-06-28 5.49k 次阅读 0 条评论


相信会有很多个人用户出于各种需要买服务器,目前国内的服务器多数会有专业的控制面板来给你设置防火墙规则或者通行端口规则,比如阿里云或者腾讯云。
但是,出于不同的需要(比如域名备案、科学上网),相信很多用户会选择海外的VPS服务器,比如海外VPS口碑比较好的LinodeVultrDigitalOceanArukas樱花等服务器。这个时候,可能你就会用到我今天总结的小白教程了——因为诸如Linode等服务器,是不提供防火墙规则和通行端口设置面板的,你只能通过代码解决了。

开放服务器入站规则端口

比如开放22端口,则代码如下:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

设置好之后,可以用命令

iptables -L -n

确认是否设置好了。
设置后的情况下代码会展示如下:

Chain FORWARD (policy DROP)
target prot opt source destination
Chain INPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22

同理,我们可以通过复用代码替换22这个阿拉伯数字来设置放行自己想要开放的服务器入站端口,比如443、301、8888等。

开放服务器出站规则端口

比如开放22端口,则代码如下:

iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT

设置好之后,可以用命令

iptables -L -n

确认是否设置好了。
设置后的情况下代码会展示如下:

Chain FORWARD (policy DROP)
target prot opt source destination
Chain OUTPUT (policy DROP)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp spt:22

同理,我们可以通过复用代码替换22这个阿拉伯数字来设置放行自己想要开放的服务器出站端口,比如443、301、8888等。

命令讲解

  • -A 参数命令可以理解为添加一条INPUT规则的动作;
  • -p 指定是什么协议,我们常用的TCP协议,当然也有UDP,例如53端口的DNS,配置DNS用到53端口大家就会发现是使用UDP协议的;
  • -dport 就是目标端口,当数据从外部进入服务器为目标端口,反之数据从服务器出去,则为数据源端口;
  • --sport 22 -j 就是指定ACCEPT 接收22端口或者 DROP不接收22端口。


禁止某个IP访问

一台服务器的带宽是有限的,而且很多时候我们的站点可能会被别人放置爬虫恶意抄袭内容,这个时候如果我们知道对方的IP地址,我们就可以通过禁止这个IP地址来实现屏蔽对方访问的目的。
比如,我想禁止92.68.5.7这个地址的访问,我们可以通过如下代码实现

iptables -A INPUT -p tcp -s 92.68.5.7 -j DROP

这里通过-A 命令来添加大多数人访问网站使用的TCP规则或者UDP规则,如果是TCP我们就用 -p tcp , 如果是udp就把命令中的TCP换成UDP。
这里就用tcp了,-s就是来源的意思,命令中ip来源为92.68.5.7 ,-j 就是让服务器判断怎么做,我们拒绝它代码就应该是DROP。
好,现在你就可以试试自己设置的效果啦看192.168.1.2的访问是否会被拒绝。

如何删除指定端口规则

删除某条规则之前,我们首先要知道这条规则的编号,每条规则都有一个编号,我们可以通过

iptables -L -n --line-number

显示的规则和相对应的编号来判断。

num target prot opt source destination
1 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:3306
2 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21
3 DROP tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80

多了num这一列, 我们就可以判定规则对应的编号了。比如我们找到21端口对应编号为2,那我们就可以通过

iptables -D INPUT 2

进行21端口的删除了。
操作完毕之后,可以通过指令iptables -L -n 查看一下是否清除成功。

过滤无效的数据包

假设有人进入了服务器,或者有病毒木马程序,它可以通过22、80端口向服务器外传送数据。它的这种方式和我们正常访问22、80端口是有区别的——它向外发的数据不是通过访问网页请求,而是回应的数据包。
如果我们想要禁止这些没有通过请求回应的数据包,统统把它们堵住掉,iptables函数指令同样提供了一个参数,这个参数就是用来检查状态的,我们通过这个参数就可以来配置 22 和 80 端口,防止无效的数据包。
指令代码:

iptables -A OUTPUT -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT

设置完毕之后我们就能看到
iptables -A OUTPUT -p tcp --sport 22 -j ACCEPT
多了一个状态判断。同理,80端口也是一样。但是这里要提示下,每次删掉端口规则后,规则变化会发生变化,你可以通过

iptables -L -n --line-number 

指令查看规则编号,然后根据编号来删除对应规则

hayeen

愿所有人都能被这世界温柔以待。

发走心评论,交知心好友

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据