題主你好,我是小白一鍵重裝軟件的客服,問題的解決方法如下:
win10怎么關閉電腦防火墻
首先在Win10桌面找到“網(wǎng)絡”圖標,然后在其上鼠標右鍵,在彈出的右鍵菜單中,點擊進入“屬性”
在打開的網(wǎng)絡和共享中心界面的左下角就可以找到“Windows防火墻”設置選項,點擊進入
打開Windows防火墻設置后,就可以進行“啟用或關閉Windows防火墻”、“還原默認”、“高級設置”等操作,如果要關閉防火墻,則點擊進入“啟用或關閉Windows防火墻”選項
最后只需要將網(wǎng)絡設置選擇為“關閉Windows防火墻(不推薦)”,然后點擊底部的“確定”保存設置就可以了。
以上就是win10關閉電腦防火墻的操作流程了。
之前看了Mahout官方示例 20news 的調(diào)用實現(xiàn);于是想根據(jù)示例的流程實現(xiàn)其他例子。網(wǎng)上看到了一個關于天氣適不適合打羽毛球的例子。
訓練數(shù)據(jù):
Day Outlook Temperature Humidity Wind PlayTennis
D1 Sunny Hot High Weak No
D2 Sunny Hot High Strong No
D3 Overcast Hot High Weak Yes
D4 Rain Mild High Weak Yes
D5 Rain Cool Normal Weak Yes
D6 Rain Cool Normal Strong No
D7 Overcast Cool Normal Strong Yes
D8 Sunny Mild High Weak No
D9 Sunny Cool Normal Weak Yes
D10 Rain Mild Normal Weak Yes
D11 Sunny Mild Normal Strong Yes
D12 Overcast Mild High Strong Yes
D13 Overcast Hot Normal Weak Yes
D14 Rain Mild High Strong No
檢測數(shù)據(jù):
sunny,hot,high,weak
結果:
Yes=》 0.007039
No=》 0.027418
于是使用Java代碼調(diào)用Mahout的工具類實現(xiàn)分類。
基本思想:
1. 構造分類數(shù)據(jù)。
2. 使用Mahout工具類進行訓練,得到訓練模型。
3。將要檢測數(shù)據(jù)轉換成vector數(shù)據(jù)。
4. 分類器對vector數(shù)據(jù)進行分類。
接下來貼下我的代碼實現(xiàn)=》
1. 構造分類數(shù)據(jù):
在hdfs主要創(chuàng)建一個文件夾路徑 /zhoujainfeng/playtennis/input 并將分類文件夾 no 和 yes 的數(shù)據(jù)傳到hdfs上面。
數(shù)據(jù)文件格式,如D1文件內(nèi)容: Sunny Hot High Weak
2. 使用Mahout工具類進行訓練,得到訓練模型。
3。將要檢測數(shù)據(jù)轉換成vector數(shù)據(jù)。
4. 分類器對vector數(shù)據(jù)進行分類。
這三步,代碼我就一次全貼出來;主要是兩個類 PlayTennis1 和 BayesCheckData = =》
package myTesting.bayes;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.util.ToolRunner;
import org.apache.mahout.classifier.naivebayes.training.TrainNaiveBayesJob;
import org.apache.mahout.text.SequenceFilesFromDirectory;
import org.apache.mahout.vectorizer.SparseVectorsFromSequenceFiles;
public class PlayTennis1 {
private static final String WORK_DIR = "hdfs://192.168.9.72:9000/zhoujianfeng/playtennis";
/*
* 測試代碼
*/
public static void main(String[] args) {
//將訓練數(shù)據(jù)轉換成 vector數(shù)據(jù)
makeTrainVector();
//產(chǎn)生訓練模型
makeModel(false);
//測試檢測數(shù)據(jù)
BayesCheckData.printResult();
}
public static void makeCheckVector(){
//將測試數(shù)據(jù)轉換成序列化文件
try {
Configuration conf = new Configuration();
conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));
String input = WORK_DIR+Path.SEPARATOR+"testinput";
String output = WORK_DIR+Path.SEPARATOR+"tennis-test-seq";
Path in = new Path(input);
Path out = new Path(output);
FileSystem fs = FileSystem.get(conf);
if(fs.exists(in)){
if(fs.exists(out)){
//boolean參數(shù)是,是否遞歸刪除的意思
fs.delete(out, true);
}
SequenceFilesFromDirectory sffd = new SequenceFilesFromDirectory();
String[] params = new String[]{"-i",input,"-o",output,"-ow"};
ToolRunner.run(sffd, params);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("文件序列化失敗!");
System.exit(1);
}
//將序列化文件轉換成向量文件
try {
Configuration conf = new Configuration();
conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));
String input = WORK_DIR+Path.SEPARATOR+"tennis-test-seq";
String output = WORK_DIR+Path.SEPARATOR+"tennis-test-vectors";
Path in = new Path(input);
Path out = new Path(output);
FileSystem fs = FileSystem.get(conf);
if(fs.exists(in)){
if(fs.exists(out)){
//boolean參數(shù)是,是否遞歸刪除的意思
fs.delete(out, true);
}
SparseVectorsFromSequenceFiles svfsf = new SparseVectorsFromSequenceFiles();
String[] params = new String[]{"-i",input,"-o",output,"-lnorm","-nv","-wt","tfidf"};
ToolRunner.run(svfsf, params);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("序列化文件轉換成向量失??!");
System.out.println(2);
}
}
public static void makeTrainVector(){
//將測試數(shù)據(jù)轉換成序列化文件
try {
Configuration conf = new Configuration();
conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));
String input = WORK_DIR+Path.SEPARATOR+"input";
String output = WORK_DIR+Path.SEPARATOR+"tennis-seq";
Path in = new Path(input);
Path out = new Path(output);
FileSystem fs = FileSystem.get(conf);
if(fs.exists(in)){
if(fs.exists(out)){
//boolean參數(shù)是,是否遞歸刪除的意思
fs.delete(out, true);
}
SequenceFilesFromDirectory sffd = new SequenceFilesFromDirectory();
String[] params = new String[]{"-i",input,"-o",output,"-ow"};
ToolRunner.run(sffd, params);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("文件序列化失敗!");
System.exit(1);
}
//將序列化文件轉換成向量文件
try {
Configuration conf = new Configuration();
conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));
String input = WORK_DIR+Path.SEPARATOR+"tennis-seq";
String output = WORK_DIR+Path.SEPARATOR+"tennis-vectors";
Path in = new Path(input);
Path out = new Path(output);
FileSystem fs = FileSystem.get(conf);
if(fs.exists(in)){
if(fs.exists(out)){
//boolean參數(shù)是,是否遞歸刪除的意思
fs.delete(out, true);
}
SparseVectorsFromSequenceFiles svfsf = new SparseVectorsFromSequenceFiles();
String[] params = new String[]{"-i",input,"-o",output,"-lnorm","-nv","-wt","tfidf"};
ToolRunner.run(svfsf, params);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("序列化文件轉換成向量失??!");
System.out.println(2);
}
}
public static void makeModel(boolean completelyNB){
try {
Configuration conf = new Configuration();
conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));
String input = WORK_DIR+Path.SEPARATOR+"tennis-vectors"+Path.SEPARATOR+"tfidf-vectors";
String model = WORK_DIR+Path.SEPARATOR+"model";
String labelindex = WORK_DIR+Path.SEPARATOR+"labelindex";
Path in = new Path(input);
Path out = new Path(model);
Path label = new Path(labelindex);
FileSystem fs = FileSystem.get(conf);
if(fs.exists(in)){
if(fs.exists(out)){
//boolean參數(shù)是,是否遞歸刪除的意思
fs.delete(out, true);
}
if(fs.exists(label)){
//boolean參數(shù)是,是否遞歸刪除的意思
fs.delete(label, true);
}
TrainNaiveBayesJob tnbj = new TrainNaiveBayesJob();
String[] params =null;
if(completelyNB){
params = new String[]{"-i",input,"-el","-o",model,"-li",labelindex,"-ow","-c"};
}else{
params = new String[]{"-i",input,"-el","-o",model,"-li",labelindex,"-ow"};
}
ToolRunner.run(tnbj, params);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("生成訓練模型失??!");
System.exit(3);
}
}
}
package myTesting.bayes;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.PathFilter;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.mahout.classifier.naivebayes.BayesUtils;
import org.apache.mahout.classifier.naivebayes.NaiveBayesModel;
import org.apache.mahout.classifier.naivebayes.StandardNaiveBayesClassifier;
import org.apache.mahout.common.Pair;
import org.apache.mahout.common.iterator.sequencefile.PathType;
import org.apache.mahout.common.iterator.sequencefile.SequenceFileDirIterable;
import org.apache.mahout.math.RandomAccessSparseVector;
import org.apache.mahout.math.Vector;
import org.apache.mahout.math.Vector.Element;
import org.apache.mahout.vectorizer.TFIDF;
import com.google.common.collect.ConcurrentHashMultiset;
import com.google.common.collect.Multiset;
public class BayesCheckData {
private static StandardNaiveBayesClassifier classifier;
private static Map<String, Integer> dictionary;
private static Map<Integer, Long> documentFrequency;
private static Map<Integer, String> labelIndex;
public void init(Configuration conf){
try {
String modelPath = "/zhoujianfeng/playtennis/model";
String dictionaryPath = "/zhoujianfeng/playtennis/tennis-vectors/dictionary.file-0";
String documentFrequencyPath = "/zhoujianfeng/playtennis/tennis-vectors/df-count";
String labelIndexPath = "/zhoujianfeng/playtennis/labelindex";
dictionary = readDictionnary(conf, new Path(dictionaryPath));
documentFrequency = readDocumentFrequency(conf, new Path(documentFrequencyPath));
labelIndex = BayesUtils.readLabelIndex(conf, new Path(labelIndexPath));
NaiveBayesModel model = NaiveBayesModel.materialize(new Path(modelPath), conf);
classifier = new StandardNaiveBayesClassifier(model);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("檢測數(shù)據(jù)構造成vectors初始化時報錯。。。。");
System.exit(4);
}
}
/**
* 加載字典文件,Key: TermValue; Value:TermID
* @param conf
* @param dictionnaryDir
* @return
*/
private static Map<String, Integer> readDictionnary(Configuration conf, Path dictionnaryDir) {
Map<String, Integer> dictionnary = new HashMap<String, Integer>();
PathFilter filter = new PathFilter() {
@Override
public boolean accept(Path path) {
String name = path.getName();
return name.startsWith("dictionary.file");
}
};
for (Pair<Text, IntWritable> pair : new SequenceFileDirIterable<Text, IntWritable>(dictionnaryDir, PathType.LIST, filter, conf)) {
dictionnary.put(pair.getFirst().toString(), pair.getSecond().get());
}
return dictionnary;
}
/**
* 加載df-count目錄下TermDoc頻率文件,Key: TermID; Value:DocFreq
* @param conf
* @param dictionnaryDir
* @return
*/
private static Map<Integer, Long> readDocumentFrequency(Configuration conf, Path documentFrequencyDir) {
Map<Integer, Long> documentFrequency = new HashMap<Integer, Long>();
PathFilter filter = new PathFilter() {
@Override
public boolean accept(Path path) {
return path.getName().startsWith("part-r");
}
};
for (Pair<IntWritable, LongWritable> pair : new SequenceFileDirIterable<IntWritable, LongWritable>(documentFrequencyDir, PathType.LIST, filter, conf)) {
documentFrequency.put(pair.getFirst().get(), pair.getSecond().get());
}
return documentFrequency;
}
public static String getCheckResult(){
Configuration conf = new Configuration();
conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));
String classify = "NaN";
BayesCheckData cdv = new BayesCheckData();
cdv.init(conf);
System.out.println("init done...............");
Vector vector = new RandomAccessSparseVector(10000);
TFIDF tfidf = new TFIDF();
//sunny,hot,high,weak
Multiset<String> words = ConcurrentHashMultiset.create();
words.add("sunny",1);
words.add("hot",1);
words.add("high",1);
words.add("weak",1);
int documentCount = documentFrequency.get(-1).intValue(); // key=-1時表示總文檔數(shù)
for (Multiset.Entry<String> entry : words.entrySet()) {
String word = entry.getElement();
int count = entry.getCount();
Integer wordId = dictionary.get(word); // 需要從dictionary.file-0文件(tf-vector)下得到wordID,
if (StringUtils.isEmpty(wordId.toString())){
continue;
}
if (documentFrequency.get(wordId) == null){
continue;
}
Long freq = documentFrequency.get(wordId);
double tfIdfValue = tfidf.calculate(count, freq.intValue(), 1, documentCount);
vector.setQuick(wordId, tfIdfValue);
}
// 利用貝葉斯算法開始分類,并提取得分最好的分類label
Vector resultVector = classifier.classifyFull(vector);
double bestScore = -Double.MAX_VALUE;
int bestCategoryId = -1;
for(Element element: resultVector.all()) {
int categoryId = element.index();
double score = element.get();
System.out.println("categoryId:"+categoryId+" score:"+score);
if (score > bestScore) {
bestScore = score;
bestCategoryId = categoryId;
}
}
classify = labelIndex.get(bestCategoryId)+"(categoryId="+bestCategoryId+")";
return classify;
}
public static void printResult(){
System.out.println("檢測所屬類別是:"+getCheckResult());
}
}
1. 請介紹一下WebGIS的概念和作用,以及在實際應用中的優(yōu)勢和挑戰(zhàn)。
WebGIS是一種基于Web技術的地理信息系統(tǒng),通過將地理數(shù)據(jù)和功能以可視化的方式呈現(xiàn)在Web瀏覽器中,實現(xiàn)地理空間數(shù)據(jù)的共享和分析。它可以用于地圖瀏覽、空間查詢、地理分析等多種應用場景。WebGIS的優(yōu)勢包括易于訪問、跨平臺、實時更新、可定制性強等,但也面臨著數(shù)據(jù)安全性、性能優(yōu)化、用戶體驗等挑戰(zhàn)。
2. 請談談您在WebGIS開發(fā)方面的經(jīng)驗和技能。
我在WebGIS開發(fā)方面有豐富的經(jīng)驗和技能。我熟悉常用的WebGIS開發(fā)框架和工具,如ArcGIS API for JavaScript、Leaflet、OpenLayers等。我能夠使用HTML、CSS和JavaScript等前端技術進行地圖展示和交互設計,并能夠使用后端技術如Python、Java等進行地理數(shù)據(jù)處理和分析。我還具備數(shù)據(jù)庫管理和地理空間數(shù)據(jù)建模的能力,能夠設計和優(yōu)化WebGIS系統(tǒng)的架構。
3. 請描述一下您在以往項目中使用WebGIS解決的具體問題和取得的成果。
在以往的項目中,我使用WebGIS解決了許多具體問題并取得了顯著的成果。例如,在一次城市規(guī)劃項目中,我開發(fā)了一個基于WebGIS的交通流量分析系統(tǒng),幫助規(guī)劃師們評估不同交通方案的效果。另外,在一次環(huán)境監(jiān)測項目中,我使用WebGIS技術實現(xiàn)了實時的空氣質(zhì)量監(jiān)測和預警系統(tǒng),提供了準確的空氣質(zhì)量數(shù)據(jù)和可視化的分析結果,幫助政府和公眾做出相應的決策。
4. 請談談您對WebGIS未來發(fā)展的看法和期望。
我認為WebGIS在未來會繼續(xù)發(fā)展壯大。隨著云計算、大數(shù)據(jù)和人工智能等技術的不斷進步,WebGIS將能夠處理更大規(guī)模的地理數(shù)據(jù)、提供更豐富的地理分析功能,并與其他領域的技術進行深度融合。我期望未來的WebGIS能夠更加智能化、個性化,為用戶提供更好的地理信息服務,助力各行各業(yè)的決策和發(fā)展。
這塊您需要了解下stm32等單片機的基本編程和簡單的硬件設計,最好能夠了解模電和數(shù)電相關的知識更好,還有能夠會做操作系統(tǒng),簡單的有ucos,freeRTOS等等。最好能夠使用PCB畫圖軟件以及keil4等軟件。希望對您能夠有用。
1.負責區(qū)域大客戶/行業(yè)客戶管理系統(tǒng)銷售拓展工作,并完成銷售流程;
2.維護關鍵客戶關系,與客戶決策者保持良好的溝通;
3.管理并帶領團隊完成完成年度銷售任務。
你好,面試題類型有很多,以下是一些常見的類型:
1. 技術面試題:考察候選人技術能力和經(jīng)驗。
2. 行為面試題:考察候選人在過去的工作或生活中的行為表現(xiàn),以預測其未來的表現(xiàn)。
3. 情境面試題:考察候選人在未知情境下的決策能力和解決問題的能力。
4. 案例面試題:考察候選人解決實際問題的能力,模擬真實工作場景。
5. 邏輯推理題:考察候選人的邏輯思維能力和分析能力。
6. 開放性面試題:考察候選人的個性、價值觀以及溝通能力。
7. 挑戰(zhàn)性面試題:考察候選人的應變能力和創(chuàng)造力,通常是一些非常具有挑戰(zhàn)性的問題。
需要具體分析 因為cocoscreator是一款游戲引擎,面試時的問題會涉及到不同的方面,如開發(fā)經(jīng)驗、游戲設計、圖形學等等,具體要求也會因公司或崗位而異,所以需要根據(jù)實際情況進行具體分析。 如果是針對開發(fā)經(jīng)驗的問題,可能會考察候選人是否熟悉cocoscreator常用API,是否能夠獨立開發(fā)小型游戲等等;如果是針對游戲設計的問題,則需要考察候選人對游戲玩法、關卡設計等等方面的理解和能力。因此,需要具體分析才能得出準確的回答。
以下是一些可能出現(xiàn)在MyCat面試中的問題:
1. 什么是MyCat?MyCat是一個開源的分布式數(shù)據(jù)庫中間件,它可以將多個MySQL數(shù)據(jù)庫組合成一個邏輯上的數(shù)據(jù)庫集群,提供高可用性、高性能、易擴展等特性。
2. MyCat的優(yōu)勢是什么?MyCat具有以下優(yōu)勢:支持讀寫分離、支持分庫分表、支持自動切換故障節(jié)點、支持SQL解析和路由、支持數(shù)據(jù)分片等。
3. MyCat的架構是怎樣的?MyCat的架構包括三個層次:客戶端層、中間件層和數(shù)據(jù)存儲層。客戶端層負責接收和處理客戶端請求,中間件層負責SQL解析和路由,數(shù)據(jù)存儲層負責實際的數(shù)據(jù)存儲和查詢。
4. MyCat支持哪些數(shù)據(jù)庫?MyCat目前支持MySQL和MariaDB數(shù)據(jù)庫。
5. MyCat如何實現(xiàn)讀寫分離?MyCat通過將讀請求和寫請求分別路由到不同的MySQL節(jié)點上實現(xiàn)讀寫分離。讀請求可以路由到多個只讀節(jié)點上,從而提高查詢性能。
6. MyCat如何實現(xiàn)分庫分表?MyCat通過對SQL進行解析和路由,將數(shù)據(jù)按照一定規(guī)則劃分到不同的數(shù)據(jù)庫或表中,從而實現(xiàn)分庫分表。
7. MyCat如何保證數(shù)據(jù)一致性?MyCat通過在多個MySQL節(jié)點之間同步數(shù)據(jù),保證數(shù)據(jù)的一致性。同時,MyCat還支持自動切換故障節(jié)點,從而保證系統(tǒng)的高可用性。
8. MyCat的部署方式有哪些?MyCat可以部署在單機上,也可以部署在多臺服務器上實現(xiàn)分布式部署。
一、防火墻基礎知識
防火墻主要用于保護一個網(wǎng)絡免受來自另一個網(wǎng)絡的攻擊和入侵行為。因其隔離、防守的屬性,防火墻靈活應用于網(wǎng)絡邊界、子網(wǎng)隔離等位置,如企業(yè)網(wǎng)絡出口、大型網(wǎng)絡內(nèi)部子網(wǎng)隔離、數(shù)據(jù)中心邊界等
防火墻與路由器、交換機是有區(qū)別的。路由器用來連接不同的網(wǎng)絡,通過路由協(xié)議保證互聯(lián)互通,確保將報文轉發(fā)到目的地;交換機用來組建局域網(wǎng),作為局域網(wǎng)通信的重要樞紐,通過二層、三層交換快速轉發(fā)報文;防火墻主要部署在網(wǎng)絡邊界,對進出網(wǎng)絡的訪問行為進行控制,安全防護是其核心特性。路由器與交換機的本質(zhì)是轉發(fā),防火墻的本質(zhì)是控制。
1、接口、網(wǎng)絡和安全區(qū)域
安全區(qū)域,security zone,是一個或多個接口的集合,防火墻通過安全區(qū)域來劃分網(wǎng)絡、標識報文流動的 路線。
在華為防火墻上,一個接口只能加入到一個安全區(qū)域中。
Trust區(qū)域: 該區(qū)域內(nèi)網(wǎng)絡的受信任程度高,通常用來定義內(nèi)部用戶所在的網(wǎng)絡。
Untrust區(qū)域:該區(qū)域代表的是不受信任的網(wǎng)絡,通常用來定義Internet等不安全的網(wǎng)絡。
Dmz區(qū)域:該區(qū)域內(nèi)網(wǎng)絡的受信任程度中等,通常用來定義內(nèi)部服務器所在的網(wǎng)絡。
Local區(qū)域: 防火墻上提供Local區(qū)域,代表防火墻本身。凡是由防火墻主動發(fā)出的報文均可認為是從Local區(qū)域中發(fā)出,凡是需要防火墻響應并處理,而不是轉發(fā)的報文均可認為是由 Local接收。
Local 區(qū)域中不能添加任何接口,但防火墻上所有接口本身都隱含屬于Local區(qū)域。也就是說,報文通過接口去往某個網(wǎng)絡時,目的安全區(qū)域是該接口所在的安全區(qū)域;報文通過接口到達防火墻本身時,目的安全區(qū)域是Local區(qū)域。
安全級別
在華為防護墻上,每個安全區(qū)域都必須有一個安全級別,該安全級別是唯一的,范圍是1-100,數(shù)值越大,則代表該區(qū)域內(nèi)的網(wǎng)絡越可信。
Local: 100
Trust:85
DMZ: 50
Untrust: 5
華為規(guī)定:報文從低級別的安全區(qū)域向高級別的安全區(qū)域流動時為入方向,從高級別的安全區(qū)域向低級別的安全區(qū)域流動時為出方向。
如何確定報文的源目安全區(qū)域呢?
普通情況下,防火墻從哪個接口接收到報文,該接口所屬的安全區(qū)域就是報文的源安全區(qū)域。
三層模式下,防火墻通過查找路由表確定報文將從哪個接口發(fā)出,該接口所屬的安全區(qū)域就是報文的目的安全區(qū)域,二層模式下,防火墻通過查找MAC地址轉發(fā)表確定報文將要從哪個接口發(fā)出,該接口所屬的安全區(qū)域就是報文的目的安全區(qū)域。
VPN場景中,防火墻收到的是封裝的報文,將報文解封裝后得到原始報文,然后還是通過查找路由表來確定目的安全區(qū)域,報文將要從哪個接口發(fā)出,該接口所屬的安全區(qū)域就是報文的目的安全區(qū)域。
而源安全區(qū)域不能簡單地根據(jù)收到報文的接口來確定,此時防火墻會采用“反向查找路由表”的方式來確定原始報文的源安全區(qū)域。具體來說,防火墻會把原始報文中的源地址假設成是目的地址,然后通過查找路由表確定這個目的地址的報文將要從哪個接口發(fā)出,該接口所屬的安全區(qū)域是報文將要去往的安全區(qū)域。反過來說,報文也就是從該安全區(qū)域發(fā)出的,所以反查路由表得到的這個安全區(qū)域就是報文的源安全區(qū)域。
確定報文的源和目的安全區(qū)域是我們精確的配置安全策略的前提條件,請大家一定要掌握判斷報文的源和目的安全區(qū)域的方法。
2、安全區(qū)域的配置
[FW] firewall zone name test //創(chuàng)建安全區(qū)域
[fw-zone-test] set priority 10 //必須先設置安全級別,才能將接口加入到安全區(qū)域
[fw-zone-test] add interface gi 0/0/1 //將接口 gi 0/0/1加入安全區(qū)域
除了物理接口,防火墻還支持邏輯接口,如子接口、vlanif接口、GRE中的TUNNEL接口,L2TP中的virtual-template接口等,這些接口在使用時也需要加入到安全區(qū)域。
3、狀態(tài)監(jiān)測與會話機制
狀態(tài)監(jiān)測使用基于連接的檢測機制,將通信雙方之間交互的屬于同一連接的所有報文都作為整體的數(shù)據(jù)流來對待。同一個數(shù)據(jù)流內(nèi)的報文不再是孤立的個體,而是存在聯(lián)系的。例如,為數(shù)據(jù)流的第一個報文建立會話,后續(xù)報文就會直接匹配會話轉發(fā),不需要在進行規(guī)制的檢查,提高了轉發(fā)效率。
會話表
http VPN: public ---->public 192.168.0.1:2049---->172.16.0.1:80
http 表示協(xié)議
192.168.0.1 表示源地址
2049 表示源端口
172.16.0.1 表示目的地址
80 表示目的端口
五元組:源地址、源端口、目的地址、目的端口和協(xié)議 ,唯一確定一條連接,這5個元素相同的報文即可認為屬于同一條流。
還有一些協(xié)議,他們的報文中沒有端口信息,防火墻處理這些協(xié)議的報文時,如何生成會話表呢?如ICMP協(xié)議,報文中不存在端口信息,那么防火墻會把ICMP報文頭中ID字段值作為icmp會話的源端口,會以固定值2048作為ICMP會話的目的端口。
[FW]dis firewall session table
2022-10-19 04:18:45.930
Current Total Sessions : 5
icmp VPN: public --> public 192.168.10.1:41338 --> 172.16.0.1:2048
icmp VPN: public --> public 192.168.10.1:41082 --> 172.16.0.1:2048
icmp VPN: public --> public 192.168.10.1:41850 --> 172.16.0.1:2048
icmp VPN: public --> public 192.168.10.1:42106 --> 172.16.0.1:2048
icmp VPN: public --> public 192.168.10.1:41594 --> 172.16.0.1:2048
[FW]dis firewall session table verbose
2022-10-19 04:21:43.590
Current Total Sessions : 5
icmp VPN: public --> public ID: c387fe127dddb48858634f7b51
Zone: trust --> untrust TTL: 00:00:20 Left: 00:00:15
Recv Interface: GigabitEthernet1/0/1
Interface: GigabitEthernet1/0/0 NextHop: 172.16.0.1 MAC: 5489-985b-694f
<--packets: 1 bytes: 60 --> packets: 1 bytes: 60
192.168.10.1:20603 --> 172.16.0.1:2048 PolicyName: trust-untrust
Zone:表示報文在安全區(qū)域之間流動的方向,trust --> untrust表示報文是從Trust區(qū)域流向Untrust區(qū)域。
TTL:表示報文的老化時間,這條會話到期后,這條會話也將會被清楚。
Left: 表示該會話的剩余時間。
Interface: 出接口
Nexthop :下一跳地址
MAC地址 :報文去往的下一跳MAC地址,本組網(wǎng)中是WEB服務器的MAC地址。
<--packets: 1 bytes: 60 表示會話反向方向上的報文統(tǒng)計信息,即WEB服務器向PC發(fā)送報文的個數(shù)和字節(jié)數(shù)
--> packets: 1 bytes: 60 表示會話正向方向上的報文統(tǒng)計信息,即PC向WEB服務器發(fā)送報文的個數(shù)和字節(jié)數(shù)
華為防火墻為不同的協(xié)議設置了響應的會話默認老化時間,比如ICMP的會話老化時間是20s,DNS的會話老化時間是30S等。
通常情況下采用這些默認值就可以保證各個協(xié)議正常運行,如果需要調(diào)整默認值,可以通過 firewall session aging-time 命令在配置。如
【FW] firewall session aging-time dns 10
調(diào)試命令
display zone 查看防火墻安全區(qū)域
狀態(tài)檢查防火墻核心技術就是分析通信雙方的連接狀態(tài),然后建立會話輔助后續(xù)報文轉發(fā)。所以當業(yè)務不通時,在防火墻上檢查會話是否成功建立,也是一個定位故障的重要切入點。
配置完成后,如果業(yè)務不通,我們可以在防火墻上使用display firewall session table 命令查看是否存在該業(yè)務的會話,然后分情況進一步排查。
1、防火墻上不存在該業(yè)務的會話
如果防火墻上沒有為該業(yè)務建立會話,可能的原因包括:第一,業(yè)務報文沒有到達防火墻;第二,業(yè)務報文被防火墻丟棄。
[fw]display firewall statistics system discard
packets discard statistic
total packets discarded: 2
interzone miss packets discarded: 2
造成上述丟包的原因是接口沒有加入到安全區(qū)域。此時就可以進一步檢查接口是否加入安全區(qū)域了,可見通過查看防火墻丟包信息能比較快速地定位問題所在。
[fw]display firewall statistics system discard
packets discard statistic
total packets discarded: 2
ARP miss packets discarded: 2
如果發(fā)現(xiàn)上述信息,說明防火墻因為無法找到ARP表項而丟包。此時需要檢查防火墻上下行連接的設備的ARP功能是否工作正常。
[fw] display firewall statistic system discard
packets discarded statistic
total packets discarded :2
FIB miss packets discarded: 2
造成上述丟包的原因是防火墻上的路由配置出現(xiàn)問題,此時應該檢查防火墻上是否存在去往目的地址的路由
[fw] display firewall statistic system discard
packets discarded statistic
total packets discarded :2
session miss packets discarded: 2
造成上述丟包的原因可能是防火墻只收到了后續(xù)報文,沒有收到首包報文,此時請檢查網(wǎng)絡環(huán)境中是否存在報文來回路徑不一致的情況。如果需要的話,可以在防火墻上執(zhí)行
undo firewall session link-state check 命令關閉狀態(tài)檢測功能,然后再驗證業(yè)務是否正常。
[fw] display firewall statistic system discard
packets discarded statistic
total packets discarded :2
session create fail packets discarded: 2
造成上述丟包的原因可能是防火墻上的會話數(shù)量已經(jīng)達到規(guī)格限制,無法再創(chuàng)建新的會話。此時應該檢查防火墻上是否存在大量的其他業(yè)務的會話,并且長時間沒有老化,占用了系統(tǒng)資源。
2、防火墻上存在該業(yè)務的會話
如果發(fā)現(xiàn)如下信息,說明會話的正向方向上有統(tǒng)計信息(有報文經(jīng)過),而反向方向上沒有統(tǒng)計信息(沒有報文經(jīng)過)
造成會話反向方向上沒有統(tǒng)計信息的原因可能是回應報文沒有到達防火墻或者回應報文被防火墻丟棄,此時應首先檢查報文在到達防火墻之前是否被其他網(wǎng)絡設備丟棄,然后在防火墻上查看丟包統(tǒng)計信息。
二、安全策略
安全策略是基于安全區(qū)域的域間關系來呈現(xiàn),其內(nèi)容包括兩個組成部分。
條件 檢查報文的依據(jù),防火墻將報文中攜帶的信息與條件逐一對比,以此來判斷報文是否匹配。
動作 允許permit 拒絕通過 deny 一條策略中只能有一個動作
安全策略中的條件,可分為多個字段,如源地址、目的地址、源端口、目的端口等,這些字段之間是“與”的關系,也就是說,只有報文中的信息和所有字段都匹配上,才算是命中了這條策略。
如果同一個字段中有多個匹配項,如同時有兩個源地址或三個目的地址,那么這些匹配項之間是 “或 ”的關系,只要報文匹配了其中的一項,就算匹配了該條件。
1、匹配順序
安全策略之間是存在順序的,防火墻在兩個安全區(qū)域之間轉發(fā)報文時,會按照從上到下的順序逐條查找域間存在的安全策略。如果報文命中了某一條安全策略,就會執(zhí)行該安全策略中的動作,或允許通過或拒絕通過,不會再繼續(xù)向下查找;如果報文沒有命中某條安全策略,則會向下繼續(xù)查找。
基于上述實現(xiàn)方式,我們在配置安全策略時要遵循“先精細,后粗獷”的原則。具體來說,就是先配置匹配范圍小、條件精確的安全策略,然后在配置匹配范圍大、條件寬泛的安全策略。相信大家都配置過ACL規(guī)則,安全策略的配置和ACL規(guī)則是同一個道理。
例如:
允許Trust安全區(qū)域到Untrust安全區(qū)域的、源地址是192.168.0.0/24網(wǎng)段、目的地址是172.16.0.0/24網(wǎng)段的報文通過。
拒絕192.168.0.0網(wǎng)段中的特定地址192.168.0.100 訪問172.16.0.0/24網(wǎng)段,該如何配置呢?
要先配置第一條安全策略:拒絕Trust 安全區(qū)域到Untrust 安全區(qū)域的、源地址是192.1689.0.100的報文通過;
然后配置第二條安全策略:允許Trust安全區(qū)域到Untrust安全區(qū)域的、源地址是192.168.0.0/24網(wǎng)段、目的地址是172.16.0.0/24網(wǎng)段的報文通過。
防火墻在查找安全策略時,源地址是192.168.0.100的報文會首先命中第一條策略,然后執(zhí)行拒絕通過的動作;而192.168.0.0/24網(wǎng)段的其他報文會命中第二條策略,執(zhí)行允許通過的動作。如果我們把兩條安全策略的順序調(diào)換,源地址是192.168.0.100的報文就永遠不會命中動作為拒絕通過的那條策略,目的也沒法達到。
如果查找安全策略時,所有的策略都沒有命中,防火墻該如何處理呢?
報文如果沒有命中任何一條安全策略,最后將會命中缺省包過濾,防火墻將會對報文執(zhí)行缺省包過濾中配置的動作。
默認情況下,缺省包過濾的動作是拒絕通過。有時候,為了簡化配置,會把兩個安全區(qū)域之間缺省包過濾的動作設置為允許通過。這樣操作確實省事省時,但是會帶來極大的安全風險,網(wǎng)絡隔離和訪問控制都沒法實現(xiàn)。
華為防火墻默認情況下,報文在安全區(qū)域之內(nèi)流動是不受安全策略控制的。報文可以自由通行。
2、local 區(qū)域的安全策略
管理員會登錄到防火墻上進行管理、INternet上的設備或用戶會與防火墻建立VPN、防火墻和路由器之間會運行OSPF路由協(xié)議、防火墻會與認證服務器對接等。
這些業(yè)務如果想要正常運行,必須在防火墻上配置相應的安全策略,允許防火墻接收各個業(yè)務的報文。具體來說,就是要在防火墻的Local區(qū)域與業(yè)務使用的接口所在的安全區(qū)域之間配置安全策略。
(1)針對OSPF協(xié)議配置Local區(qū)域的安全策略
本實驗驗證的是防火墻本身參與到OSPF路由計算得場景,即驗證防火墻接口所在安全區(qū)域與LOcal區(qū)域之間如何配置安全策略。在防火墻不參與OSPF路由計算,只是透傳OSPF路由報文的場景中,接收和發(fā)送OSPF報文的兩個接口屬于不同的安全區(qū)域時,則必須配置安全策略,運行OSPF報文通過。
防火墻上配置如下:
interface GigabitEthernet1/0/0
undo shutdown
ip address 10.1.13.3 255.255.255.0
ospf 1 router-id 3.3.3.3
area 0.0.0.0
network 10.1.13.0 0.0.0.255
路由器R1上配置:
interface GigabitEthernet0/0/0
ip address 10.1.13.1 255.255.255.0
interface GigabitEthernet0/0/1
ip address 10.1.12.1 255.255.255.0
ospf 1 router-id 1.1.1.1
area 0.0.0.0
network 10.1.12.0 0.0.0.255
network 10.1.13.0 0.0.0.255
路由器R2上配置:
interface GigabitEthernet0/0/0
ip address 10.1.12.2 255.255.255.0
ospf 1 router-id 2.2.2.2
area 0.0.0.0
network 10.1.12.0 0.0.0.255
[FW]dis ospf peer brief
2022-10-20 02:17:48.760
OSPF Process 1 with Router ID 3.3.3.3
Peer Statistic Information
----------------------------------------------------------------------------
Area Id Interface Neighbor id State
0.0.0.0 GigabitEthernet1/0/0 1.1.1.1 ExStart
----------------------------------------------------------------------------
Total Peer(s): 1
dis ospf peer brief
OSPF Process 1 with Router ID 1.1.1.1
Peer Statistic Information
----------------------------------------------------------------------------
Area Id Interface Neighbor id State
0.0.0.0 GigabitEthernet0/0/0 3.3.3.3 ExStart
0.0.0.0 GigabitEthernet0/0/1 2.2.2.2 Full
----------------------------------------------------------------------------
可以看出,防火墻和R1之間OSPF鄰居狀態(tài)停留在ExStart狀態(tài)。
我們懷疑,可能是防火墻丟棄了DD報文。在防火墻上使用display firewall statistic system discarded 命令查看丟包信息。
dis firewall statistics system discard
2022-10-20 02:23:38.660
Discard statistic information:
Fib miss packets discarded: 3
Invalid receive zone packets discarded: 181
Invalid send zone packets discarded: 179
接下來我們在防火墻上開啟LOCAL和UNTRUST區(qū)域的安全策略,允許OSPF報文通過。需要注意的是,因為防火墻既要發(fā)送又要接收ospf報文,所以inbound和outbound方向的安全策略都要開啟。
firewall zone untrust
set priority 5
add interface GigabitEthernet1/0/0
security-policy
rule name local-untrust
source-zone local
destination-zone untrust
service ospf
action permit
rule name untrust-local
source-zone untrust
destination-zone local
service ospf
action permit
驗證結果
[FW]dis ospf peer brief
2022-10-20 02:33:26.290
OSPF Process 1 with Router ID 3.3.3.3
Peer Statistic Information
----------------------------------------------------------------------------
Area Id Interface Neighbor id State
0.0.0.0 GigabitEthernet1/0/0 1.1.1.1 Full
----------------------------------------------------------------------------
Total Peer(s): 1
dis ospf peer b
OSPF Process 1 with Router ID 1.1.1.1
Peer Statistic Information
----------------------------------------------------------------------------
Area Id Interface Neighbor id State
0.0.0.0 GigabitEthernet0/0/0 3.3.3.3 Full
0.0.0.0 GigabitEthernet0/0/1 2.2.2.2 Full
可以看出,防火墻和R1之間已經(jīng)建立了FULL的鄰居關系。
總結,一般情況下,單播報文是受安全策略控制,所以需要配置安全策略允許報文通過;而組播報文不受安全策略控制,也就不需要配置相應的安全策略。
網(wǎng)絡類型是broadcast類型時,ospf報文中的DD報文和LSR報文都是單播報文,需要配置安全策略;網(wǎng)絡類型是P2P時,OSPF報文都是組播報文,因此無需配置安全策略。
在實際網(wǎng)絡環(huán)境中,如果防火墻上的OSPF運行狀態(tài)不正常,也可以從安全策略這個角度入手,檢查是不是由于沒有配置安全策略允許報文通過所導致的。
3、ASPF
應用:
1、幫助FTP數(shù)據(jù)報文穿越防火墻
2、幫助QQ/MSN報文穿越防火墻
3、幫助用戶自定義協(xié)議報文穿越防火墻
此外,防火墻上的ASPF功能還可以阻斷HTTP協(xié)議中的有害插件。HTTP協(xié)議中會包含Java和ActiveX插件,他們非常容易被制作成木馬和病毒,危害內(nèi)網(wǎng)主機安全。Java和ActiveX插件通常被包含在HTTP報文的載荷中進行傳輸,如果只檢查HTTP報文頭信息,無法將其識別出來。所以必須通過ASPF來對HTTP報文的載荷信息進行檢測,識別并阻斷Java和ActiveX插件,保護內(nèi)網(wǎng)主機。
阻斷HTTP協(xié)議中有害插件的配置也很簡單,在安全區(qū)域的域間或域內(nèi)執(zhí)行detect activex-blocking或detect java-blocking命令即可。當然,不同型號的防火墻產(chǎn)品上的支持情況和命令格式略有不同。
FTP數(shù)據(jù)報文穿越防火墻
在這里把PC換成一臺路由器
在路由器上配置靜態(tài)路由 ip route-static 172.16.0.1 24 192.168.10.254
在防火墻上配置安全策略
rule name trust-untrust
source-zone trust
destination-zone untrust
service ftp
action permit
在路由器上做測試
ping 172.16.0.1
PING 172.16.0.1: 56 data bytes, press CTRL_C to break
Reply from 172.16.0.1: bytes=56 Sequence=1 ttl=254 time=10 ms
Reply from 172.16.0.1: bytes=56 Sequence=2 ttl=254 time=20 ms
ftp 172.16.0.1
Trying 172.16.0.1 ...
Press CTRL+K to abort
Connected to 172.16.0.1.
220 FtpServerTry FtpD for free
User(172.16.0.1:(none)):
331 Password required for .
Enter password:
230 User logged in , proceed
FTP協(xié)議是一個典型的多通道協(xié)議,在其工作過程中,F(xiàn)TP客戶端和FTP服務器之間將會建立兩條連接:控制連接和數(shù)據(jù)連接。控制連接用來傳輸FTP指令和參數(shù),其中就包括建立數(shù)據(jù)連接所需要的的信息;數(shù)據(jù)連接用來獲取目錄及傳輸數(shù)據(jù)。
根據(jù)數(shù)據(jù)連接的方式,F(xiàn)TP協(xié)議分為兩種工作模式:
主動模式(PORT模式): FTP服務器主動向FTP客戶端發(fā)起數(shù)據(jù)連接
被動模式(PASV模式): FTP服務器被動接收FTP客戶端發(fā)起的數(shù)據(jù)連接
ASPF主要是檢測報文的應用層信息,記錄應用層信息中攜帶的關鍵數(shù)據(jù),使得某些在安全策略中沒有明確定義要放行的報文也能夠得到正常轉發(fā)。
記錄應用層信息中關鍵數(shù)據(jù)的表項成為server-map表,報文命中該表后,不再受安全策略的控制,這相當于在防火墻上開啟了一條“隱形通道".
這條server-map表項不會永遠存在,老化時間到期之后就會被刪除,這就確保了這條“隱形通道”不會永久開啟,保證了安全性。
調(diào)試命令 display firewall server-map 查看server-map表
華三防火墻怎樣通過命令查看策略命中數(shù)
# 顯示IPv4安全策略下名稱為abc的規(guī)則的統(tǒng)計信息。
display security-policy statistics ip rule 安全策略的名字
dis acl all //查看ACL的命中數(shù)
SQL Server 使用的端口
SQL Server 使用的典型端口和關聯(lián)的數(shù)據(jù)庫引擎服務是:
TCP:1433、4022、135、1434
UDP:1434。
1.在 SQL Server 配置管理器的控制臺窗格中,展開 "SQL Server 網(wǎng)絡配置",選擇 "實例名稱的協(xié)議",然后在右窗格中雙擊 "tcp/ip"。
2.在“TCP/IP 屬性”對話框的“IP 地址”選項卡上,將顯示若干個 IP 地址,格式為:IP1、IP2...,一直到 IPAll。 這些 IP 地址中有一個是環(huán)回適配器的 IP 地址 (127.0.0.1)。 其他 IP 地址是計算機上的各個 IP 地址。 (可能會同時看到 IP 版本 4 和 IP 版本 6 地址。) 右鍵單擊每個地址,再單擊“屬性”,標識要配置的 IP 地址。
3.如果 "TCP 動態(tài)端口" 對話框中包含0,則指示數(shù)據(jù)庫引擎正在偵聽動態(tài)端口,請刪除0。
4.在“IPn屬性”區(qū)域框的“TCP 端口”框中,鍵入希望此 IP 地址偵聽的端口號,然后單擊“確定”。 通過逗號分隔,可指定多個端口。 選擇“確定”。
5.在控制臺窗格中,單擊“SQL Server 服務”。
6.在詳細信息窗格中,右鍵單擊 " SQL Server ( 實例名稱 > ">然后單擊 "重新啟動" 以停止并重新啟動 SQL Server。
在防火墻中為 SQL Server 程序創(chuàng)建例外,如數(shù)據(jù)庫引擎)sqlservr.exe(。 當使用高級安全 Windows 防火墻 MMC 管理單元時,端口號將不會顯示在“入站規(guī)則”頁的“本地端口”列中 。
使用高級安全 Windows Defender 防火墻向防火墻添加程序例外:
C:\Program Files\Microsoft SQL Server\MSSQL15.<InstanceName>\MSSQL\Binn\sqlservr.exe
選擇“下一頁”。默認情況下,SQL Server Analysis Services 使用的典型端口和關聯(lián)的服務是:
TCP
如果用戶通過 IIS 和 Internet 訪問 Analysis Services,則必須打開 IIS 偵聽的端口。 接下來,在客戶端連接字符串中指定端口。 在這種情況下,不需要打開任何端口就能直接訪問 Analysis Services。 默認端口 2389 和端口 2382 應當與所有其他并非必需的端口一起受到限制。
默認情況下,SQL Server Reporting Services 和關聯(lián)的服務使用的典型端口是:
TCP
當 Reporting Services 連接到數(shù)據(jù)庫引擎或 Analysis Services 的實例時,還必須為這些服務打開相應的端口。
TCP 135:Integration Services 服務在端口135上使用 DCOM。 服務控制管理器使用端口135來執(zhí)行任務,例如啟動和停止 Integration Services 服務,以及將控制請求傳輸?shù)秸谶\行的服務。 此端口號無法更改。
注意:僅當要從 Management Studio 或自定義應用程序連接到 Integration Services 服務的遠程實例時,才需要打開此端口。
可以通過使用高級安全 Windows 防火墻 MMC 管理單元來配置高級防火墻設置。 此管理單元包括規(guī)則向?qū)б约啊翱刂泼姘濉钡摹癢indows 防火墻”項中未提供的設置。 這些設置包括:
以下工具和方法對于解決防火墻問題會非常有用:
感謝支持 :):):)