具体步骤
二、Iptables网络黑白名单(防火墙)实现细节
因为考虑到一些权限的问题所以在实现方法上采用的是创建一个系统服务器来运行这些方法。并提供出经理到三方应用,这样在调用时可以排除一些权限的限制。同时本文只是做一个简单的参考概述,所以在后文中只提供了增加黑白名单的方法和防火墙规则,并没有提供相应的删除规则等,原理类似大家可自行补充添加。
(资料图片仅供参考)
2.1、创建系统服务器
2.1.1、 在/system/sepolicy/service.te中添加
fxjnet_service,system_api_service,system_server_service,service _ manager _ type
2.2.2、在/system/se策略/服务上下文中添加如下,
fxjnet u:object _ r:fxjnet _ service:s0
2.2.3、在框架/base/core/Java/Android/content/context。爪哇中添加
也可以不添加这个,只不过为了后面调用方便所以添加了。如果跳过此步,那么后面出现语境FXJNET_SERVICE的地方都用字串代替即可。
公共静态最终字符串FXJNET _ SERVICE=" fxjnet
2.2.4、在/frameworks/base/core/Java/Android/app/systemserviceregistry。爪哇的静态代码块中添加如下代码注册服务.
注册服务(上下文FXJNET_SERVICE,FXJNETManager.class,
新CachedServiceFetcher() {
@覆盖
公共FXJNETManager创建服务(ContextImpl ctx) {
服务经理。获取服务(上下文. FXJNET _ SERVICE);
IFXJNETService service=IFXJNETService .存根。作为接口(b);
返回新的FXJNETManager(ctx,服务);
}});
2.2.5、在框架/基础/服务/Java/com/Android/服务器/系统服务器。爪哇中添加如下代码,将服务加入系统服务器中。
ServiceManager.addService(上下文. FXJNET_SERVICE,new FXJNET SERVICE());
2.2.6、AIDL文件
打包android.os
接口IFXJNETService{
void addNetworkRestriction(List IP name,int type);
}
2.2.7、提供给外部的FXJNETManager
打包android.app
导入安卓。OS。ifxjnetservice
导入安卓。OS。远程异常;
导入安卓。内容。语境;
公共类FXJNETManager{
IFXJNETService mService
公共FXJNETManager(上下文ctx,IFXJNETService服务){
mService=服务;
}
public void addNetworkRestriction(List IP name,int type) {
尝试{
mservice。addnetworkrestriction(IP名称,类型);
}catch(远程异常e){
}
}//end addNetworkRestriction
}
2.2.8、系统服务即接口描述语言的实现计算机网络服务器
包com。安卓。服务器;
导入安卓。OS。ifxjnetservice
导入Java。io。文件;
导入Java。io。文件输出流;
导入Java。io。io异常;
公共类FXJNETService扩展了IFXJNETService .存根{
最终文件文件=新文件("/data/fxj/","防火墙。sh’);
/**
* 增加{网络互联网协议(互联网协议)访问}黑白名单数据
*/
public void addNetworkRestriction(List IP name,int type) {
String str=getIPlist(类型,IP名称);
setiptablesrestression();
}
//构建Iptables的规则,1-黑名单;2-白名单
私有字符串getIPlist(int类型,列出iplist){
StringBuilder sb=new StringBuilder();
某人(somebody的简写)append(" echo运行脚本开始\ n ");
某人(somebody的简写)append(" iptables-F OUTPUT \ n ");
if (type==1){
如果(iplist!=null iplist.size() 0){
for(int I=0;我相信。size();i ){
string IP name=iplist。get(I);
某人追加("回显黑名单模式\ n’);
某人(somebody的简写)append(" iptables-I OUTPUT-d ");
某人(somebody的简写)追加(IP名称);
某人(somebody的简写)追加("-j DROP \ n ");
}
}
}else if (type==2){
如果(iplist!=null iplist.size() 0){
for(int I=0;我相信。size();i ){
string IP name=iplist。get(I);
某人追加("回显白名单模式\ n’);
某人追加(" iptabless -P输出DROP \ n ");
某人(somebody的简写)append(" iptables-I OUTPUT-d ");
某人(somebody的简写)追加(IP名称);
某人(somebody的简写)append("-j ACCEPT \ n ");
}
}
}
某人追加("运行脚本结束\ n’);
return sb . tostring();
}
私有void setiptablesRestriction(字符串ipName){
final fxjscripttrunner runner=new fxjscripttrunner(file,ipName,new StringBuilder());
新线程(新Runnable() {
@覆盖
公共无效运行(){
runner . run();
}
}).start();
}
}
2.2.9.用于运行IPTABLES脚本命令的工具类
包com . Android . server;
导入Java . io . file;
导入Java . io . file output stream;
导入Java . io . io exception;
导入Java . io . inputstream;
导入Java . io . output streamwriter;
导入Android . OS . fileutils;
导入Android . OS . system properties;
导入Android . util . log;
公共类FXJScriptRunner扩展线程{
私有最终文件File;
私有最终字符串脚本;
私有final StringBuilder res
public int exit code=-1;
private final String TAG=" script runner ";
public ScriptRunner(文件File,字符串脚本,StringBuilder res,
boolean asroot) {
this.file=file
this.script=script
this.res=res
}
@覆盖
公共无效运行(){
//TODO自动生成的方法存根
尝试{
file . delete();
file . create new file();
最终字符串abspath=file . getabsolutepath();
//确保我们对脚本文件有执行权限
fileutils . set permissions(abspath,00700,-1,-1);
Runtime.getRuntime()。exec("chmod 777 " abspath)。wait for();//为创建的sh文件设置权限
//编写要执行的脚本
final output streamwriter out=new output streamwriter(
new file output stream(file));
if(新文件("/system/bin/sh ")。exists()) {
out.write("#!/system/bin/sh \ n ");
}
out.write(脚本);
如果(!script.endsWith("\n "))
out . write(" \ n ");
out.write("退出0 \ n ");
out . flush();
out . close();
//通过system properties . set(" CTL . start "," fxjmotmonitor ")执行服务运行脚本,
///fxjmotnitor是服务的名称,你喜欢怎么叫都行。
system properties . set(" CTL . start "," fxjmotnitor ");
} catch (Exception ex) {
if (res!=空)
RES . append(" \ n " ex);
}最后{
//destroy();
}
}
}
补充阅读:防火墙主要技能
首先,必须更改所有防火墙文件规则。
虽然这种方法听起来很容易,但是因为防火墙没有内置的更改管理过程,所以文件更改对于许多企业来说并不是最佳实践方法。如果防火墙管理员由于紧急情况或某种其他形式的业务中断而做出更改,他更有可能会开枪。但是如果这个变化抵消了之前的协议变化,会导致宕机吗?这是一种发生率相当高的情况。
防火墙管理产品的中央控制台可以全面查看所有的防火墙规则,因此团队的所有成员必须达成共识,并观察谁做了什么更改。这样可以及时发现并修复故障,使得整个协议管理更加简单高效。
第二,用最低权限安装所有访问规则。
另一个常见的安全问题是权限过多的规则设置。防火墙规则由三个域组成:源(IP地址)、目的地(网络/子网)和服务(应用软件或其他目的地)。为了保证每个用户都有足够的端口接入他们需要的系统,常用的方法是在一个或多个域中指定呼入的目标对象。当你为了业务连续性而允许大范围的IP地址访问大型企业的网络时,这些规则就会变得过度发布,从而增加不安全性。该域的规则是打开任何带有65535个TCP端口的。防火墙管理员的意思真的是为黑客开放65535个攻击向量吗?
第三,根据法律法规和变更要求,检查各防火墙的变更情况。
在防火墙的运营中,每天的工作都是以发现问题、修正问题、安装新系统为中心。在安装最新的防火墙规则来解决问题和应用新产品和业务单元的过程中,我们常常忘记防火墙也是企业安全协议的物理执行者。应当重新审查每一项规则,以确保其符合担保协议和任何监管协议的内容和精神,而不仅仅是一项法律规定。
4.当服务过期时,从防火墙规则中删除无用的规则。
规则膨胀是防火墙经常出现的安全问题,因为大多数运营团队没有删除规则的过程。业务部门善于让你知道他们知道这些新规则,但永远不要让防火墙团队知道他们不再使用某些服务。了解退役的服务器和网络以及应用软件的更新周期是达成规则共识的良好开端。运行无用规则的报告是另一个步骤。黑客喜欢从不删除规则的防火墙团队。
利用Iptables实现网络黑白名单防火墙怎么设置相关文章:
1.如何设置1.vmware防火墙?
2.Linux如何关闭iptables?Linux如何关闭防火墙
3.阿里云防火墙怎么设置?
4.4.linux如何关闭防火墙?
5.如何设置5.suse linux防火墙
本文到此结束,希望对大家有所帮助。