请编写Shell代码实现以下逻辑 ?

仅开放本机两个IP地址中的一个地址172.16.0.X上绑定的sshd和vsftpd服务给172.16.0.0/16网络中除了
172.16.0.0/24网络中的主机之外的所有主机,但允许172.16.0.200访问,每次的用户访问都要记录于日志文件
中,注:其中X为学号

要实现这个逻辑,我们需要编写一个 Shell 脚本来设置防火墙规则(假设使用的是 iptables),并配置服务(如 sshdvsftpd)只允许特定的 IP 地址访问。请根据你的实际学号替换下面脚本中的 X 值。同时,确保你具有足够的权限(通常需要 root 权限)来执行以下操作。

步骤 1: 定义变量

首先,定义一些变量以简化脚本中的引用。

#!/bin/bash

# 学号对应的IP地址部分
X=<你的学号对应的IP部分>

# 服务端口
SSHD_PORT=22
VSFTPD_PORT=21

# 允许访问的网络,排除的网络,以及特别允许的IP地址
ALLOWED_NET="172.16.0.0/16"
EXCLUDED_NET="172.16.0.0/24"
ALLOWED_IP="172.16.0.200"

# 日志文件路径
LOG_FILE="/var/log/service_access.log"
Bash

步骤 2: 设置 iptables 规则

然后,设置 iptables 规则来限制访问,并记录每次用户访问。

# 清除现有的iptables规则
iptables -F

# 允许本地回环接口(localhost)上的所有流量
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# 记录允许的访问尝试到日志文件
iptables -A INPUT -p tcp -s ALLOWED_NET --dportSSHD_PORT -j LOG --log-prefix "SSH access: " --log-level 4
iptables -A INPUT -p tcp -s ALLOWED_NET --dportVSFTPD_PORT -j LOG --log-prefix "VSFTP access: " --log-level 4

# 允许来自特定网络的访问,但排除特定子网,同时允许特定IP
iptables -A INPUT -p tcp -s ALLOWED_NET -d 172.16.0.X --dport SSHD_PORT -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp -sALLOWED_NET -d 172.16.0.X --dportVSFTPD_PORT -m state --state NEW -j ACCEPT
iptables -A INPUT -p tcp -s EXCLUDED_NET -d 172.16.0.X --dport SSHD_PORT -j DROP
iptables -A INPUT -p tcp -sEXCLUDED_NET -d 172.16.0.X --dportVSFTPD_PORT -j DROP
iptables -A INPUT -p tcp -s ALLOWED_IP -d 172.16.0.X --dport SSHD_PORT -j ACCEPT
iptables -A INPUT -p tcp -sALLOWED_IP -d 172.16.0.X --dportVSFTPD_PORT -j ACCEPT

# 允许已建立连接的数据包通过
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# 拒绝默认其它所有未被允许的流量
iptables -A INPUT -j DROP
Bash

步骤 3: 配置日志记录

确保 iptables 的日志消息能够正确记录。iptables 的日志通常被发送到 kern.logsyslog 中。你可以在 /etc/rsyslog.conf/etc/syslog.conf 中配置规则来将这些日志消息重定向到自定义的文件路径。以下是一个 rsyslog 的配置示例:

:msg,contains,"SSH access: " /var/log/service_access.log
:msg,contains,"VSFTP access: " /var/log/service_access.log
& stop

添加完配置后,重启 rsyslog 服务:

service rsyslog restart
Bash

注意

  • 确保你已经安装并正确配置了 iptablesrsyslog(或任何你使用的日志守护进程

)。

  • 根据你的具体环境(如 iptables 版本和系统配置),命令和配置可能需要适当调整。
  • 运行这些脚本和配置更改之前,请确保备份相关配置文件,并在安全环境中进行测试,以避免不必要的服务中断。
  • 操作 iptables 规则和系统配置通常需要 root 权限。

发表评论

后才能评论