请编写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),并配置服务(如 sshd 和 vsftpd)只允许特定的 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"
步骤 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
步骤 3: 配置日志记录
确保 iptables 的日志消息能够正确记录。iptables 的日志通常被发送到 kern.log 或 syslog 中。你可以在 /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
注意
- 确保你已经安装并正确配置了
iptables和rsyslog(或任何你使用的日志守护进程
)。
- 根据你的具体环境(如
iptables版本和系统配置),命令和配置可能需要适当调整。 - 运行这些脚本和配置更改之前,请确保备份相关配置文件,并在安全环境中进行测试,以避免不必要的服务中断。
- 操作 iptables 规则和系统配置通常需要 root 权限。