我想知道,是否可以编写一个脚本,根据其他 PC 的请求在 iptables 中添加规则?我的意思是,脚本“知道”要做什么,但规则的地址来自请求。
那你觉得应该怎么实现呢?我觉得应该是守护进程,或者说是被魔化了的脚本...
答案1
使用 PHP 或 Perl 等服务器端脚本语言来实现这一点可能是最简单的。但是,由于脚本的输入可由用户控制,因此您应该非常谨慎使用它作为输入。
下面是一个示例(我不是网络编码员,因此该代码可能存在巨大的安全问题,请谨慎使用):
#!/usr/bin/perl -wT
# Send HTTP content-type
print "Content-type:text/html\r\n\r\n";
my $requester_ip;
# Do some sanity checking on the IP send by the webserver
if ( $ENV{'REMOTE_ADDR'} =~ m/(\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b)/ ) {
my $requester_ip = $1;
} else {
print "An error occurred\n";
exit;
}
# Open SMTP for the requester
`sudo iptables -A INPUT -d $requester_ip -p tcp --dport 25 -j ACCEPT`
如果你想使用此功能,请确保你的网络服务器用户可以运行sudo
仅有的使用这个特定的命令。再次强调,提供此代码是希望它能够有用,但不对任何特定用途提供任何保证或适用性。
如果能分两个阶段进行,效果会更好:
- 让网络服务器将 IP 写入文件
- 让单独的脚本从 crontab 运行以从文件中获取 IP 并运行
iptables
。