【发布时间】:2016-01-07 16:19:12
【问题描述】:
我正在尝试制作一个将 IP 添加到防火墙的 php 脚本。我不完全确定我做错了什么。我正在尝试将$ip 插入iptables 上数据的第12 行,然后将其写入iptables2。还有其他方法我应该这样做还是这是最简单的?
<?php
//Firewall string
$ip = "-A INPUT -s " . $_SERVER['SERVER_ADDR'] . " -j ACCEPT" . "\n";
//Turn file into array
$file = file('iptables');
//Insert string into array
$res = array_splice($file, 12, 0, $ip);
//Write to another file
file_put_contents("iptables2", $res);
//Display new file
$iptables2 = file("iptables2");
echo "<ul>";
foreach($iptables2 as $s => $r) {
echo "<li>" . $s . "=>" . $r . "</li>";
}
echo "</ul>";
?>
iptables 看起来像这样:
*filter
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state ESTABLISHED -j ACCEPT
-A INPUT -p udp --match multiport --dports 10000:20000 -j ACCEPT
# Port 5060
-A INPUT -s XXX.XXX.XXX.XXX -j ACCEPT
-A INPUT -s XXX.XXX.XXX.XXX -j ACCEPT
-A INPUT -s XXX.XXX.XXX.XXX -j ACCEPT
# Remote Operators
-A INPUT -s XXX.XXX.XXX.XXX -j ACCEPT
-A INPUT -s XXX.XXX.XXX.XXX -j ACCEPT
# Remote Phones
-A INPUT -s XXX.XXX.XXX.XXX -j ACCEPT
-A INPUT -s XXX.XXX.XXX.XXX -j ACCEPT
-A INPUT -s XXX.XXX.XXX.XXX -j ACCEPT
# Port 3306 - Mysql from Known Sources
-A INPUT -p tcp -m tcp -s 127.0.0.1 --dport 3306 -j ACCEPT
# Reject The Rest
-A INPUT -p tcp -m tcp -j REJECT --reject-with tcp-reset
-A INPUT -p udp -m udp -j REJECT
COMMIT
第 12 行是# Remote Phones,我想在第 12 行之后插入-A INPUT -s XXX.XXX.XXX.XXX -j ACCEPT。
【问题讨论】:
-
只要确保你只运行这个脚本一次 :)
-
但是如果我想多次使用它并在
# Remote Phones之后添加多个条目呢? -
我认为没有问题,只是尝试在您的 IP 表中没有条目的重复项,您的代码看起来很干净 :)
标签: php html arrays file preg-replace