Вероятно, проще всего реализовать это, используя серверный язык сценариев, такой как 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
.