iptables + php 上网计费实现
最近有一个香港的酒店提出需求,要到酒店业内的商务中心实行计费上网, 提供了如下技术方案:
1、设一台CENTOS5的机器做为路由,把需要计费的机器都设为用此服务器做网关。
2、服务器开启IPTABLE,通过IPTABLE控制能不能使用互联网。
记录下以下技术要点:
一、 php可以通过shell_exec来执行shell指令,但iptables的指令是root才有权限执行的,所在需要借助sudo.
具体做法如下:
1. 执行visudo, 注释掉 Default requiretty 一行
2. 在文件最后,加入apache ALL = NOPASSWD: /sbin/iptables
3. 用php shell_exec("/usr/bin/sudo /sbin/iptables -I FORWARD -s xxx.xxx.xxx.xxx -j DROP")实现断网
4. 用php shell_exec("/usr/bin/sudo /sbin/iptables -I FORWARD -s xxx.xxx.xxx.xxx -j ACCEPT")实现开通
二、CENTOS开启路由功能:
1、nano /etc/sysctl.conf,找到其中net.ipv4.ip_forward,设为1,保存后退出。
2、sysctl -p /etc/sysctl.conf让修改生效。
三、/etc/sysconfig/iptables内容:
# Firewall configuration written by system-config-securitylevel
# Manual customization of this file is not recommended.
*filter
:FORWARD ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:RH-Firewall-1-INPUT - [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i eth0 -j ACCEPT
-A INPUT -j RH-Firewall-1-INPUT
-A FORWARD -j RH-Firewall-1-INPUT
-A RH-Firewall-1-INPUT -i lo -j ACCEPT
-A RH-Firewall-1-INPUT -i eth0 -j ACCEPT
-A RH-Firewall-1-INPUT -p icmp --icmp-type any -j ACCEPT
-A RH-Firewall-1-INPUT -p 50 -j ACCEPT
-A RH-Firewall-1-INPUT -p 51 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -d 224.0.0.251 --dport 5353 -j ACCEPT
-A RH-Firewall-1-INPUT -p udp -m udp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m tcp --dport 631 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state -m tcp --dport 1404 --state NEW -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state -m tcp --dport 80 --state NEW -j ACCEPT
-A RH-Firewall-1-INPUT -p tcp -m state -m tcp --dport 10000 --state NEW -j ACCEPT
-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
COMMIT
*n
相关文档:
用PHPmyAdmin操作MySQL数据库汉字显示正常 ,但用PHP网页显示MySQL数据时所有汉字都变成了?号。
症状:用PHPmyAdmin输入汉字正常,但当PHP网页显示MySQL数据时汉字就变成了?号,并且有多少个汉字就有多少个?号。很多学员都遇到了此问题,尤其是在安装了最新版的Appserv后。为此许多学员放弃了PHP,改学ASP了。
原因:没 ......
<?PHP
/**
* HTTP Protocol defined status codes
* @param int $num
*/
function https($num) {
$http = array (
100 => "HTTP/1.1 100 Continue",
101 => "HTTP/1.1 101 Switching Protocols",
200 => "HTTP/1.1 200 OK",
201 => "HTTP/1.1 201 Created",
202 => "HTTP/1.1 202 ......
<!--<?php
<!--
EOT;
if($yy_en_lang==1){
echo <<<EOT
-->
<a href="$index_e_url">English</a>
<!--
EOT;
}
echo <<<EOT
-->
?>
这是一段Smarty模板代码,可是我看不懂这个规则请高手指点一下啊!!谢谢!
或者 ......
1 内存溢出
当程序运行的时候..定义了的储存变量就会被内存分配空间..空间大小由编写者定义的时候规定的...但..程序运行了..却需要的空间比定义的大..这样就溢出了.
一个比较简单的判断内存泄漏的方法,看一下你的程序所占用的private bytes是多少,如果一直增加,也就说明有内存泄漏。
解决方法
http://blog.zol.com.c ......