云服务器性能高的费用太高,特别是学习ai(人工智能后)。内网的实体服务器性价比高,但是访问和使用不方便。
现在开始使用frp内网穿透服务,将内网服务器映射到公网。特此记录。
https://github.com/fatedier/frp
安装和配置都很简单。启动服务器和客户段即可。
服务器防火规则
#### frp nat
# bind
-A INPUT -p tcp -m tcp –dport 7000 -j ACCEPT
# ssh
-A INPUT -p tcp -m tcp –dport 7022 -j ACCEPT
# mysql
-A INPUT -p tcp -m tcp –dport 33306 -j ACCEPT
####
# bind
-A OUTPUT -p tcp -m tcp –sport 7000 -j ACCEPT
# ssh
-A OUTPUT -p tcp -m tcp –sport 7022 -j ACCEPT
# mysql
-A OUTPUT -p tcp -m tcp –sport 33306 -j ACCEPT
Category Archives: 系统应用技术
VeraCrypt移动存储设备加密
VeraCrypt是一款开放源代码的即时加密软件(OTFE)。它可以创建一个虚拟加密磁盘文件或加密分区。
优点:加密级别高,速度快。跨平台。
确定:需要安装客户端。
centos7搭建sftp服务器
为了安全起见搭建sftp服务器。网上使用internal-sftp的方案很多都是照抄,在centos7没有跑通。
还有两个软件MySecureShell和proftpd。MySecureShell已经测试成功,proftpd没有试,看网上介绍也很简单好用。
我的主要步骤记录。安装就不写了。
新建用户名在/etc/passwd的格式。(推荐使用sftp-user create 命令创建新用户)
testsftp:x:999:999::/home/sftp/test:/bin/MySecureShell
配置部分
# cat /etc/ssh/sftp_config
GlobalDownload 50k #total speed download for all clients # o -> bytes k -> kilo bytes m -> mega bytes GlobalUpload 0 #total speed download for all clients (0 for unlimited) Download 5k #limit speed download for each connection Upload 0 #unlimit speed upload for each connection StayAtHome true #limit client to his home VirtualChroot true #fake a chroot to the home account LimitConnection 10 #max connection for the server sftp LimitConnectionByUser 3 #max connection for the account LimitConnectionByIP 2 #max connection by ip for the account IdleTimeOut 5m #(in second) deconnect client is idle too long time ResolveIP true #resolve ip to dns HideNoAccess true #Hide file/directory which user has no access StayAtHome true HideNoAccess true #Hide file/directory which user has no access UserFullPath false
重启sshd服务,大功告成。
iPhone 手机控制linux服务器,swift2语言使用pickerview控件源码
之前的写的“iPhone 手机控制linux服务器程序源码”(http://www.simonzhang.net/?p=2861 )。开启时间使用textfidld,太麻烦了。就保留常用的几个时间即可。所以改为使用pickerview控件。控制没有使用故事板,直接代码控制位置。源码如下,其他部分使用之前的代码。iphone6调试正常。
// // door.swift // mydoor // // Created by zhangzimeng on 16/1/6. // Copyright © 2016年 com. All rights reserved. // import UIKit import Alamofire import Crypto class ViewController: UIViewController,UIPickerViewDataSource,UIPickerViewDelegate { var timePicker:UIPickerView! var buildString = ["3秒", "30分钟" , "1小时", "2小时", "3小时", "4小时"] var buildInt = ["3", "1800" , "7200", "7200", "10800", "14400"] let kk = "09999999999999" let url = "http://www.simonzhang.net/door?" @IBAction func dangdang(sender: AnyObject) { // 获取要开发的时间 let row:Int = self.timePicker.selectedRowInComponent(0) let getSec=buildInt[row] // 获取当前两位小时和分 let Hour:NSDate = NSDate() let Min:NSDate = NSDate() let dateForm=NSDateFormatter() dateForm.dateFormat="HH" let getHour=dateForm.stringFromDate(Hour) dateForm.dateFormat="mm" let getMin=dateForm.stringFromDate(Min) // 拼接要加密的穿 let ss=kk+getHour+getMin let authMd5 = ss.MD5 // 拼接要访问的字符串 let doorUrl = url+"se="+getSec+"&au="+authMd5! // 开始访问 var returnText = "" Alamofire.request(.GET, doorUrl) .responseString{ openStatus in if openStatus.result.value == "成功"{ returnText="成功" }else{ returnText="失败" } UIAlertView(title: "敲门结果", message: returnText, delegate: nil, cancelButtonTitle: "确定").show() } } override func viewDidLoad() { super.viewDidLoad() timePicker=UIPickerView() // 定义位置 self.timePicker.frame = CGRectMake(120, 100, 150, 200) // 绑定数据 self.timePicker.delegate=self self.timePicker.dataSource=self //设置选择框的默认值 timePicker.selectRow(3,inComponent:0,animated:true) //添加到界面中 self.view.addSubview(timePicker) } //设置选择框的列数为1列,继承于UIPickerViewDataSource协议 func numberOfComponentsInPickerView(pickerView: UIPickerView) -> Int { return 1 } // 返回要显示文字的列表 func pickerView(pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { if (pickerView.tag == 1){ return buildString.count }else{ return buildString.count } } // 返回显示内容 func pickerView(pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { if (pickerView.tag == 1){ return "\(buildString[row])" }else{ return "\(buildString[row])" } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } }
iptables 开启 icmp
在debian的操作系统中做iptables。要求限制的比较严,出入都要过滤,内网可以ping通。
网上的规则,但还是ping不通
-A INPUT -s 192.168.1.0/24 -p icmp -j ACCEPT
-A OUTPUT -d 192.168.1.0/24 -p icmp -j ACCEPT
通过抓包看到icmp-type使用0和8
将规则修改为如下,可以ping通了
-A INPUT -s 192.168.1.0/24 -p icmp -m icmp –icmp-type 8 -j ACCEPT
-A INPUT -s 192.168.1.0/24 -p icmp -m icmp –icmp-type 0 -j ACCEPT
-A OUTPUT -d 192.168.1.0/24 -p icmp -m icmp –icmp-type 0 -j ACCEPT
-A OUTPUT -d 192.168.1.0/24 -p icmp -m icmp –icmp-type 8 -j ACCEPT
但是127.0.0.1还需要添加。如果简单的直接出去的不做限制,就比较方便了。icmp还有很多其他类型,需要根据实际业务编写。
这是一个完整的ICMP类型的列表:Table C-1. ICMP类型 见http://baike.baidu.com/view/30564.htm