3 minute read

如何设置只有一个我设置的ip能访问程序?

如果你想要限制一个程序只能被特定的IP地址访问,你可以使用iptables这个工具来实现。在Ubuntu系统中,iptables是一个非常强大的防火墙工具,能够对网络数据包进行过滤,控制哪些数据包可以通过,哪些不可以。

以下是一个基本的步骤,你可以根据需要进行调整:

  1. 打开终端,并使用下面的命令安装iptables:

    sudo apt-get update
    sudo apt-get install iptables
    
  2. 确定你的程序正在使用哪个端口。假设你的程序正在使用8080端口。

  3. 使用以下命令来允许特定的IP地址(比如1.2.3.4)访问你的程序:

    sudo iptables -A INPUT -p tcp --dport 8080 -s 1.2.3.4 -j ACCEPT
    
  4. 使用以下命令来阻止其他所有IP地址访问你的程序:

    sudo iptables -A INPUT -p tcp --dport 8080 -j DROP
    
  5. 最后,你可以使用下面的命令来查看你的iptables规则是否已经设置成功:

    sudo iptables -L
    

注意:这个设置在服务器重启后会失效,如果你想要让这个设置永久生效,你需要安装iptables-persistent包,并保存你的iptables规则。

sudo apt-get install iptables-persistent
sudo iptables-save > /etc/iptables/rules.v4

在修改iptables规则时请一定要小心,错误的规则可能会阻止你远程访问你的服务器。在应用任何新规则之前,一定要确保你有一个回滚的方法。

iptables的规则如何删除?

要删除iptables的规则,你可以使用 -D 选项,后面跟上规则链的名称和规则的编号。规则的编号是从1开始的,表示规则链中的位置。例如,如果你想删除INPUT链中的第1条规则,你可以运行以下命令:

sudo iptables -D INPUT 1

你也可以通过规则的内容来删除规则。例如,如果你之前添加了一个规则来拒绝来自IP地址1.2.3.4的所有连接,你可能使用了这样的命令:

sudo iptables -A INPUT -s 1.2.3.4 -j DROP

那么,你可以使用以下命令来删除这条规则:

sudo iptables -D INPUT -s 1.2.3.4 -j DROP

请注意,删除规则时需要指定完全相同的参数。如果你只是稍微改变了一些参数,iptables可能会找不到你想删除的规则。

另外,记得在修改了iptables规则后保存你的更改,否则在系统重启后,这些更改可能会丢失。你可以使用如下命令来保存规则(在Debian/Ubuntu系统上):

sudo iptables-save

或者在Red Hat/CentOS系统上:

sudo service iptables save

这样,当系统重启时,iptables规则就会自动恢复。

ubuntu如何停止某个systemctl运行的服务?

您可以使用 systemctl 命令来停止在 Ubuntu 上运行的服务。以下是具体的步骤:

  1. 首先,您需要打开终端。这通常可以通过在屏幕左上角的 “Activities” 菜单中搜索 “Terminal” 来完成。

  2. 在终端中,您可以使用以下命令来停止服务:

     sudo systemctl stop [service_name]
    

    其中,[service_name] 是您希望停止的服务的名称。例如,如果您希望停止 Apache 服务,那么您需要输入:

     sudo systemctl stop apache2
    
  3. 输入这个命令后,您可能需要输入您的密码,因为 sudo 命令会请求管理员权限。

  4. 一旦您输入了密码,该服务应该会立即停止。您可以通过运行以下命令来检查服务的状态:

     sudo systemctl status [service_name]
    

    这将显示关于该服务的信息,包括它是否正在运行。

以上就是在 Ubuntu 上使用 systemctl 命令停止服务的方法。如果您有任何其他问题,欢迎随时向我提问。

如何删除全部规则?

要删除iptables的所有规则,你可以使用以下命令:

sudo iptables -F

这个命令会删除所有链中的所有规则。-F--flush 的简写,表示“清空”。

此外,你可能还需要删除所有自定义的链。你可以使用以下命令:

sudo iptables -X

-X--delete-chain 的简写,表示“删除链”。

请注意,这些命令只会临时删除规则,如果你想永久地删除所有规则,你需要保存你的更改。在Debian/Ubuntu系统上,你可以使用以下命令:

sudo iptables-save

在Red Hat/CentOS系统上,你可以使用以下命令:

sudo service iptables save

另外,删除所有规则将使你的系统暴露在任何网络连接上,因此在你配置新的规则之前,你可能会面临安全风险。你应该尽快配置新的iptables规则,以保护你的系统。

如何查看所有systemctl运行的服务?

如果你想查看所有systemctl运行的服务,你可以使用以下的命令:

systemctl list-units --type=service

这将列出所有系统中的服务单位,不论它们现在的状态是什么。

如果你只想看到那些当前正在运行的服务,你可以使用以下命令:

systemctl | grep running

这个命令会列出所有正在运行的服务。

如果你想看到那些启用的服务(这意味着它们在启动时会自动运行),你可以使用以下命令:

systemctl list-unit-files --type=service | grep enabled

这些命令应该可以帮助你查看systemctl管理的所有服务,以及它们的当前状态。

日志查看

journalctl 是 Systemd 的日志管理工具,下面是一些常用的命令和选项:

  1. 查看所有日志:

    bashCopy code
    journalctl
    
  2. 查看特定服务的日志:

    bashCopy code
    journalctl -u [service_name]
    
  3. 查看最新的10行日志:

    bashCopy code
    journalctl -n
    

    你也可以指定显示的行数,例如 journalctl -n 20 会显示最新的20行日志。

  4. 实时查看最新的日志:

    bashCopy code
    journalctl -f
    
  5. 查看特定时间段的日志:

    bashCopy code
    journalctl --since "2023-01-01" --until "2023-01-02 03:00"
    
  6. 查看特定优先级的日志:

    bashCopy code
    journalctl -p [priority]
    

    优先级可以是 emergalertcriterrwarningnoticeinfodebug

  7. 从最新的日志开始显示:

    bashCopy code
    journalctl -e
    
  8. 清理旧的日志:

    bashCopy code
    journalctl --vacuum-size=1G
    

    这会删除日志,直到剩余的日志大小小于1GB。

更多详细的选项和用法,你可以查看 man journalctl 或者 journalctl --help 获取。

journalctl -xeu

journalctl -xeujournalctl 的一个特定用法:

  • -x:对某些字段的内容进行解释或翻译。例如,对于显示的消息,它可能会显示解释或建议的解决方案。
  • -e:在日志的末尾开始,也就是从最新的日志开始显示。
  • -u:仅显示指定服务的日志。

这个命令的整体作用是,从最新的日志开始显示指定服务的日志,并对日志进行解释或翻译。例如,journalctl -xeu celery 会显示 Celery 服务的日志,并从最新的日志开始显示。

如何查看是否有其他程序正在使用 8080 端口?

你可以通过使用 netstatlsof 命令来检查是否有其他程序正在使用特定的端口。

使用 netstat 命令:

netstat 是一个用来显示网络状态的命令行工具。你可以使用 -tuln 参数查看所有正在监听的服务:

netstat -tuln

如果你只对 8080 端口感兴趣,你可以将 grep 命令与 netstat 组合起来,如下所示:

netstat -tuln | grep :8080

如果 8080 端口被占用,这个命令将显示正在使用该端口的服务的相关信息。

使用 lsof 命令:

lsof 是一个用来显示当前系统打开文件的命令行工具,因为在 Unix 和 Linux 中,设备、目录和网络套接字都被视为文件,所以可以用 lsof 检查端口使用情况。

你可以使用 -i 参数和端口号来检查特定端口的使用情况:

lsof -i :8080

这个命令将列出所有正在使用 8080 端口的进程。

redis数据库部分

展示数据库所有内容(只有字符串值的情况,其它情况类似,只要修改获得值的代码)

redis-cli keys "*" | while read key; do echo "Key : '$key'"; echo "Value : `redis-cli get $key`"; echo; done

这段 Shell 脚本主要是利用了 Unix/Linux 系统下的管道 (pipe) 和循环。

这段脚本的主要步骤如下:

  1. redis-cli keys "*":这部分通过 Redis 的 CLI 工具获取了所有的键。keys 是一个 Redis 命令,它返回数据库中所有匹配给定模式的键。在这个例子中,模式是 *,这表示匹配所有的键。

  2. |:这是一个管道操作符,它将前一个命令的输出作为后一个命令的输入。在这个例子中,redis-cli keys "*" 命令的输出(也就是所有的键)被传递给了后面的 while read key; do ... done 循环。

  3. while read key; do ... done:这是一个 while 循环。read key 命令从输入中读取一行,并将它赋值给变量 key。然后,循环体(do ... done 之间的部分)对每一个键进行处理。

  4. echo "Key : '$key'":这个命令打印出 “Key :” 和当前处理的键的名字。

  5. echo "Value : redis-cli get $key":这个命令首先执行了 redis-cli get $key,这是一个嵌套的命令,它获取了当前键的值。然后,这个命令打印出 “Value :” 和获取到的值。注意,这个命令假设键是字符串类型的。如果键不是字符串类型的,这个命令可能会失败。

  6. echo:这个命令打印出一个空行,使得输出更易读。

这个脚本的整体效果是:对于 Redis 数据库中的每一个键,打印出键的名字和值。

展示全部数据

redis-cli --eval "return redis.call('keys', '*')" | while read line ; do echo "Key : '$line'" ; redis-cli dump "$line" | xxd -p -r ; echo ; done

这段 Shell 脚本主要是利用了 Unix/Linux 系统下的管道 (pipe)、循环以及 Redis 中的 Lua 脚本功能。下面是这段脚本的详细解释:

  1. redis-cli --eval "return redis.call('keys', '*')":这部分通过 Redis 的 CLI 工具和内置的 Lua 解释器获取了所有的键。--eval 是一个命令行选项,它允许你在 Redis 服务器上执行 Lua 脚本。在这个例子中,Lua 脚本是 "return redis.call('keys', '*')",这个脚本调用了 Redis 的 keys 命令并返回了所有的键。

  2. |:这是一个管道操作符,它将前一个命令的输出作为后一个命令的输入。在这个例子中,redis-cli --eval "return redis.call('keys', '*')" 命令的输出(也就是所有的键)被传递给了后面的 while read line; do ... done 循环。

  3. while read line; do ... done:这是一个 while 循环。read line 命令从输入中读取一行,并将它赋值给变量 line。然后,循环体(do ... done 之间的部分)对每一个键进行处理。

  4. echo "Key : '$line'":这个命令打印出 “Key :” 和当前处理的键的名字。

  5. redis-cli dump "$line" | xxd -p -r:这个命令首先执行了 redis-cli dump "$line",这是一个嵌套的命令,它获取了当前键的序列化的值。然后,这个序列化的值被传递给 xxd -p -r 命令,这个命令将序列化的值以二进制的形式打印出来。

  6. echo:这个命令打印出一个空行,使得输出更易读。

这个脚本的整体效果是:对于 Redis 数据库中的每一个键,打印出键的名字和序列化的值。这个脚本将值以二进制的形式打印出来,这就意味着某些类型的值(例如,列表或哈希表)可能会以一种不直观的方式展示出来。

开放redis接口,供vercel程序调用

1. 设置密码

首先,你需要修改Redis的配置文件来设置密码。在Ubuntu上,你可以通过以下命令来打开Redis配置文件:

sudo nano /etc/redis/redis.conf

然后,找到这一行:

# requirepass foobared

将其取消注释并设置为你想要的密码,例如:

requirepass yourpassword

然后,保存并关闭文件。

最后,你需要重启Redis服务以使更改生效:

sudo systemctl restart redis-server

2. 开放端口供远程调用

默认情况下,Redis仅允许本地主机连接。为了能够允许远程主机连接,你需要做一些配置。

首先,打开Redis配置文件:

sudo nano /etc/redis/redis.conf

找到下面这行:

bind 127.0.0.1 ::1

修改为:

bind 0.0.0.0 ::1

这样将允许所有IPv4地址连接到你的Redis服务器。

然后,找到这一行:

protected-mode yes

将其修改为:

protected-mode no

保存并关闭文件。

最后,重启Redis服务:

sudo systemctl restart redis-server

注意,开放Redis服务器供远程访问可能会带来安全风险,所以请确保你已经正确设置了密码,并且只允许信任的主机连接到你的Redis服务器。

3. 防火墙设置

如果你的服务器运行了防火墙,你需要确保Redis的端口(默认为6379)是开放的。你可以使用以下命令来开放端口:

sudo ufw allow 6379

然后,使用以下命令来启用更改:

sudo ufw reload

以上就是在Ubuntu系统上为Redis设置密码和开放端口供远程调用的步骤。

  1. 开放 Redis 端口:默认情况下,Redis 运行在 6379 端口。你需要确保你的 VPS 的防火墙设置允许外部连接到这个端口。

  2. 绑定 Redis 到公共 IP:默认情况下,Redis 只允许来自本地的连接。你需要修改 Redis 的配置文件,使其接受来自任何 IP 的连接。这通常涉及到编辑 redis.conf 文件,并将 bind 指令的值改为 0.0.0.0

  3. 设置 Redis 密码:为了安全起见,你应该为你的 Redis 实例设置一个密码。这可以通过在 redis.conf 文件中设置 requirepass 指令来实现。

  4. 在 Vercel 中设置环境变量:在你的 Vercel 应用的设置中,你需要添加一个环境变量,比如 REDIS_URL,其值为你的 Redis 连接字符串。连接字符串通常的格式为 redis://:<password>@<host>:<port>/<db>,其中 <password> 是你的 Redis 密码,<host> 是你的 VPS 的公共 IP 地址,<port> 是 Redis 的端口(通常是 6379),<db> 是 Redis 数据库的编号(通常是 0)。

注意,这种设置方式存在一定的安全风险,因为它允许任何知道你的 Redis 密码和 IP 地址的人连接到你的 Redis 实例。你应该使用一些安全措施,如 IP 白名单,SSL/TLS 加密等,来增强安全性。

Categories:

Updated:

Leave a comment