代码重构 防火墙 相关知识
生活随笔
收集整理的這篇文章主要介紹了
代码重构 防火墙 相关知识
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
參考
- 依據(jù)Linux命令
- 以及sysconf下現(xiàn)有的iptables命令,詳見(jiàn)hsm_sysconf_server/src/sysconf_server.cpp中的firewall規(guī)則。
接口名稱
- firewall_manager
目的(現(xiàn)實(shí))
- 根據(jù)網(wǎng)口直連獲取當(dāng)前eth0和eth1的各種信息
- 保證設(shè)置的正確性? ? ??以及要針對(duì)管理口和服務(wù)口設(shè)計(jì)不同的初始化操作以及繼承的恢復(fù)操作。
- 并且要把防火墻規(guī)則通過(guò)數(shù)據(jù)庫(kù)存儲(chǔ)
目的(虛擬)
- 最終設(shè)計(jì)出封裝性良好的接口與實(shí)現(xiàn)
- 要經(jīng)過(guò)詳細(xì)的額外設(shè)計(jì)保證其通用性
開(kāi)始
第一步
- 首先需要學(xué)習(xí)以及嘗試使用iptables命令控制防火墻
介紹
- iptables 的主要功能是實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)數(shù)據(jù)包進(jìn)出設(shè)備及轉(zhuǎn)發(fā)的控制。當(dāng)數(shù)據(jù)包需要進(jìn)入設(shè)備、從設(shè)備中流出或者由該設(shè)備轉(zhuǎn)發(fā)、路由時(shí),都可以使用 iptables 進(jìn)行控制
- iptables 是集成在 Linux 內(nèi)核中的包過(guò)濾防火墻系統(tǒng)。使用 iptables 可以添加、刪除具體的過(guò)濾規(guī)則,iptables 默認(rèn)維護(hù)著 4 個(gè)表和 5 個(gè)鏈,所有的防火墻策略規(guī)則都被分別寫入這些表與鏈中。
- “四表”是指 iptables 的功能,默認(rèn)的 iptable s規(guī)則表有 filter 表(過(guò)濾規(guī)則表)、nat 表(地址轉(zhuǎn)換規(guī)則表)、mangle(修改數(shù)據(jù)標(biāo)記位規(guī)則表)、raw(跟蹤數(shù)據(jù)表規(guī)則表):
- filter 表:控制數(shù)據(jù)包是否允許進(jìn)出及轉(zhuǎn)發(fā),可以控制的鏈路有 INPUT、FORWARD 和 OUTPUT。
- nat 表:控制數(shù)據(jù)包中地址轉(zhuǎn)換,可以控制的鏈路有 PREROUTING、INPUT、OUTPUT 和 POSTROUTING。
- mangle:修改數(shù)據(jù)包中的原數(shù)據(jù),可以控制的鏈路有 PREROUTING、INPUT、OUTPUT、FORWARD 和 POSTROUTING。
- raw:控制 nat 表中連接追蹤機(jī)制的啟用狀況,可以控制的鏈路有 PREROUTING、OUTPUT。
- “五鏈”是指內(nèi)核中控制網(wǎng)絡(luò)的 NetFilter 定義的 5 個(gè)規(guī)則鏈。每個(gè)規(guī)則表中包含多個(gè)數(shù)據(jù)鏈:INPUT(入站數(shù)據(jù)過(guò)濾)、OUTPUT(出站數(shù)據(jù)過(guò)濾)、FORWARD(轉(zhuǎn)發(fā)數(shù)據(jù)過(guò)濾)、PREROUTING(路由前過(guò)濾)和POSTROUTING(路由后過(guò)濾),防火墻規(guī)則需要寫入到這些具體的數(shù)據(jù)鏈中。
2>/dev/null
- 2> / dev / null是什么意思?
iptables -c用法? ?
- 這使管理員能夠初始化規(guī)則的包和字節(jié)計(jì)數(shù)器(在INSERT,APPEND,REPLACE操作期間)
重啟防火墻
- Reloading iptables
2021年4月20日
今日存在的疑惑? ?2012年4月21日解決
execute_command干嘛的
#include "common/logging.h"#include <cstdarg> #include <cstdio> #include <string>namespace hsm { namespace sys {int execute_command(const std::string &command, std::string *output = nullptr,bool redirect_stderr = false) {const auto &cmd = redirect_stderr ? command + " 2>&1" : command;auto pipe = popen(cmd.c_str(), "r");if (!pipe) {common::log_error("Can not exec command: {}", cmd);return -1;}// consume the output{char buffer[1024] = {0};while (fgets(buffer, sizeof(buffer), pipe) != nullptr) {if (output) {output->append(buffer);}}}return pclose(pipe); }} // namespace sys } // namespace hsm- Linux C popen()函數(shù)詳解
- C語(yǔ)言pclose()函數(shù):關(guān)閉管道I/O
- linux shell中"2>&1"含義
fmt::format是否實(shí)現(xiàn) 字符串替換 {}??
- format函數(shù)之幾種常規(guī)用法
- c++使用fmt::format格式化字符串
- c++ fmt 庫(kù)安裝和使用示例
- Fmt:更方便的 c++ format 庫(kù)
iptables -C啥意思
- -c, --set-counters?PKTS BYTES
- This enables the administrator to initialize the packet and byte counters of a rule (during?INSERT, APPEND, REPLACE?operations).
- -c, --set-counters PKTS BYTES? ?這使管理員能夠初始化一個(gè)規(guī)則的數(shù)據(jù)包和字節(jié)計(jì)數(shù)器(在INSERT、APPEND、REPLACE操作期間)。
{} 和 {1} 之間的區(qū)別
- {} 將輸入的參數(shù)進(jìn)行替代
- {1} 將輸入的第一個(gè)參數(shù)進(jìn)行替換
相關(guān)宏定義的聲明
| SYS_CONF_OK | #define SYS_CONF_OK 0x0 |
| SYS_CONF_SHELL_ERROR | #define SYS_CONF_SHELL_ERROR 0x2 |
| FIREWALL_CONF_FILE_PATH | #define FIREWALL_CONF_FILE_PATH "/etc/firewall.conf" |
| FIREWALL_RULES_FILE_PATH | #define FIREWALL_RULES_FILE_PATH "/etc/firewall.rules" |
| FIREWALL_INIT_SCRIPT | #define FIREWALL_INIT_SCRIPT "/etc/init.d/11-firewall" |
| SYS_CONF_UNKNOWN_TYPE | #define SYS_CONF_UNKNOWN_TYPE 0x4 |
std::unique_ptr<KeyValueConfStorage> firewall_config_storage;??KeyValueConfStorage結(jié)構(gòu)
- ?storage.h 繼承了類? SysconfStorage
- storage.cpp 頭文件中聲明函數(shù)的定義
獲取eth0和eth1的各種信息
- getifaddrs()和struct ifaddrs的使用,獲取本機(jī)IP
- getifaddrs(3) — Linux manual page
- getifaddrs
- ifaddrs
- getifaddrs()--Return All Interface Addresses
任務(wù)
- 梳理邏輯,畫uml圖
通用模型設(shè)計(jì)(補(bǔ)充)
- ?限制每個(gè)客戶端最大并發(fā)數(shù)不超過(guò)3個(gè)(xshell終端)
- iptables?–A INPUT?–p tcp --dport 22?–s 192.168.1.0/24?–m connlimt?–connlimit-above 2?–j DROP
- 限制速度(-m limit --limit匹配速率| --burst緩沖數(shù)量)
- iptables?–A INPUT?–d?192.168.1.63?–m limit --limit 5/s --burst 100–j ACCEPT(在100個(gè)包內(nèi)不限速,超過(guò)一百個(gè)包限制每秒只傳5個(gè)包)
- 查看當(dāng)前的iptables的狀態(tài)
- 1,iptables -nL #默認(rèn)查看filter表的狀態(tài),如果需要查看其他表的狀態(tài)加上 -t 表名
- 2,iptables -nL --line-numbers #可以列出序列號(hào),數(shù)據(jù)的插入和刪除和查看
- 3,iptables -nL --line-numbers --verbose #可以查看到包過(guò)濾的流量統(tǒng)計(jì),訪問(wèn)次數(shù)等
- 還原配置
- iptables-restore < /etc/sysconfig/iptables?
- 限制單個(gè)IP一分鐘內(nèi)建立的連接數(shù)
- iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 25 -j REJECT
- 拒絕所有訪問(wèn)
- iptables -A INPUT -j DROP #這個(gè)一般放到最后,不然會(huì)對(duì)前面的規(guī)則造成影響
- 針對(duì)端口開(kāi)放(需要指明協(xié)議)
- iptables -I INPUT -p tcp --dport 22 -j ACCEPT
- 針對(duì)協(xié)議開(kāi)放
- iptables -I INPUT -p imcp -j ACCEPT
- 根據(jù)時(shí)段限制訪問(wèn)
- iptables -A INPUT -p tcp -m time --timestart 00:00 --timestop 02:00 -j DROP #這里的時(shí)間是指UTC時(shí)間記得換算
2021年4月22日
注意事項(xiàng)
1,數(shù)據(jù)庫(kù)存儲(chǔ) 防火墻的規(guī)則,將先前的命令進(jìn)行細(xì)分
iptables -A INPUT -p tcp -s 10.159.1.0/24 --dport 22 -j ACCEPT- 比如上述命令,字段細(xì)分 INPUT、目標(biāo)設(shè)備(eth0/eth1)、端口 、跳轉(zhuǎn)行為(-j) 、ACCEPT等
2,同理? 也將上述字段 作為 函數(shù)的一個(gè)輸入?yún)?shù)?
2021年4月23號(hào)
- iptables -F #清除所有制定的規(guī)則
- iptables -X#清除用戶自定義的chain
- iptables -Z#將所有流量統(tǒng)計(jì)歸0
- 但是并非執(zhí)行后就萬(wàn)事大吉了。你仍然需要檢查規(guī)則是不是真的清空了,因?yàn)橛械膌inux發(fā)行版上這個(gè)命令不會(huì)清除NAT表中的規(guī)則,此時(shí)只能手動(dòng)清除:iptables -t NAT -F
- iptables工作原理及iptables命令行使用介紹
- 只允許 mac地址為aa:bb:cc:dd:ee:ff 的機(jī)器訪問(wèn)本地ssh端口? ?iptables -A INPUT -m mac --mac-source aa:bb:cc:dd:ee:ff -p tcp --dport 22 -j ACCEPT
??
- ?C++ 獲取物理Mac地址
- C語(yǔ)言如何獲得變量的物理地址以及簡(jiǎn)單的寫時(shí)拷貝測(cè)試
- linux中查看網(wǎng)卡mac地址
- MAC地址是什么
- 使用iptables基于MAC地址進(jìn)行訪控
- Linux 查看網(wǎng)卡的MAC地址
linux查看網(wǎng)卡的部分具體命令
- /sbin/ifconfig | grep ether? ?ether是使用ifconfig查看到的網(wǎng)口信息,有些Linux發(fā)行版本的MAC地址字段為HWaddr,有些Linux發(fā)行版本的MAC地址字段為ether。根據(jù)實(shí)際情況選擇上面命令
-
如果想只提取網(wǎng)卡MAC地址,可以使用下面命令(用具體的網(wǎng)卡名替換xxx)? ? ? ifconfig xxx | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}'
- ?cat?/sys/class/net/xxx/address查看
- dmesg | grep eth
?
和MAC有關(guān)的相關(guān)命令
- 1、阻止MAC地址為XX:XX:XX:XX:XX:XX主機(jī)的所有通信:? ?iptables -A INPUT -m mac --mac-source XX:XX:XX:XX:XX:XX -j DROP
- 2、允許MAC地址為XX:XX:XX:XX:XX:XX主機(jī)訪問(wèn)22端口:? ?iptables -A INPUT -p tcp --destination-port 22 -m mac --mac-source XX:XX:XX:XX:XX:XX -j ACCEPT
參考鏈接
- Linux iptables命令詳解
- Linux防火墻netfilter的編程接口libiptc簡(jiǎn)介
- Linux下使用libiptc庫(kù)編程下發(fā)規(guī)則
- linux筆記防火墻之iptables入門
- sysconf
- iptables編程文章列表
- iptables隨筆
- iptables-save
- iptables (簡(jiǎn)體中文)
- iptables(8) - Linux man page ? iptables -c用法? ?
- iptables常用的命令匯總
- Linux 防火墻端口開(kāi)放 屏蔽,IP開(kāi)放屏蔽,協(xié)議開(kāi)關(guān) 詳解Linux 防火墻? ??傳輸協(xié)議(如TCP、UDP、ICMP)和服務(wù)類型(如HTTP、FTP和SMTP)等
- Iptables 常用命令匯總
- iptables詳解及一些常用規(guī)則 yshenhn
- Linux iptables常用命令
- iptables
- 每天學(xué)習(xí)一個(gè)命令:iptables Linux 上的防火墻
- iptables工作原理及iptables命令行使用介紹
配置參考
- Linux下iptables防火墻配置詳解
- Linux防火墻配置(iptables, firewalld)
- ubuntu中防火墻iptables配置
- iptables 參數(shù)端口映射
?
總結(jié)
以上是生活随笔為你收集整理的代码重构 防火墙 相关知识的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 门诊自费后怎样报销?
- 下一篇: 使用named_mutex和named_