20190308 samba服務、inotify和rsync實現實時同步、防火牆

Samba服務
[root@centos7 ~]#yum install samba
[root@centos7 ~]#systemctl start smb
[root@centos7 ~]#ss -ntlu
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp LISTEN 0 50 :139 :
tcp LISTEN 0 50
:445 端口已開啓 : 可以做共享了。
主配置文件:/etc/samba/smb.conf
添加samba用戶:1、smbpasswd -a <user> 2、pdbedit -a -u <user>
修改用戶密碼: smbpasswd <user>
刪除用戶和密碼:1、smbpasswd –x <user> 2、pdbedit –x –u <user>
查看samba用戶列表: 1、/var/lib/samba/private/passdb.tdb 2、pdbedit –L –v
查看samba服務器狀態: smbstatus

[root@centos7 data]#useradd -s /sbin/nologin smb1
[root@centos7 data]#useradd -s /sbin/nologin smb2
[root@centos7 data]#useradd -s /sbin/nologin smb3
[root@centos7 data]#getent passwd
smb1:x:1001:1001::/home/smb1:/sbin/nologin
smb2:x:1002:1002::/home/smb2:/sbin/nologin
smb3:x:1003:1003::/home/smb3:/sbin/nologin
[root@centos7 data]#smbpasswd -a smb1 把linux用戶變爲Samba用戶
New SMB password:
Retype new SMB password:
Added user smb1. smb賬戶添加賬戶不用加a,但是我們是第一次添加,要加上a。
[root@200 ~]#yum install samba
[root@200 ~]#systemctl restart smb nmb samba共享已開啓,現在去windows上測試
20190308  samba服務、inotify和rsync實現實時同步、防火牆
此時登陸進去,可以看到有文件存在。若要想登陸smb2,就要在windows系統中刪除記錄後登陸。
20190308  samba服務、inotify和rsync實現實時同步、防火牆
20190308  samba服務、inotify和rsync實現實時同步、防火牆
此時就可以登陸smb2了。

SAMBA服務器全局配置:
config file=/etc/samba/conf.d/%U 用戶獨立的配置文件
Log file=/var/log/samba/log.%m 不同客戶機採用不同日誌
log level = 2 日誌級別,默認爲0,不記錄日誌
max log size=50 日誌文件達到50K,將輪循rotate,單位KB
Security三種認證方式:
share:匿名(CentOS7不再支持)
user:samba用戶(採有linux用戶,samba的獨立口令)
domain:使用DC(DOMAIN CONTROLLER)認證
passdb backend = tdbsam 密碼數據庫格式
實現samba用戶:包: samba-common-tools工具:smbpasswd pdbeditsamba用戶須是Linux用戶,建議使用/sbin/nologin

實驗:通過samba實現文件共享
[root@200 data]#mkdir share1
[root@200 data]#mkdir share2
[root@200 data]#vim /etc/samba/smb.conf
[tools]
comment = software tools
path = /data/share1/
[root@200 data]#systemctl restart smb
20190308  samba服務、inotify和rsync實現實時同步、防火牆
登陸smb1、2、3均可以看到如下信息:
20190308  samba服務、inotify和rsync實現實時同步、防火牆

inotify和rsync實現實時同步
實現實時同步:1、要利用監控服務(inotify),監控同步數據服務器目錄中信息的變化 2、發現目錄中數據產生變化,就利用rsync服務推送到備份服務器上
inotify+rsync 方式實現數據同步 使用方式:A:inotify 對同步數據目錄信息的監控 B:rsync 完成對數據的同步 C:利用腳本進行結合
inotify:異步的文件系統事件監控機制,利用事件驅動機制,而無須通過諸如cron等的輪詢機制來獲取事件,linux內核從2.6.13起支持 inotify,通過inotify可以監控文件系統中添加、刪除,修改、移動等各種事件
參考文檔:https://github.com/rvoicilas/inotify-tools/wiki
Inotify-tools包主要文件: 基於epel源
inotifywait: 在被監控的文件或目錄上等待特定文件系統事件(open close delete等)發生,常用於實時同步的目錄監控
inotifywatch:收集被監控的文件系統使用的統計數據,指文件系統事件發生的次數統計
inotifywait命令常見選項
-m, --monitor 始終保持事件監聽 -d, --daemon 以守護進程方式執行,和-m相似,配合-o使用 -r, --recursive 遞歸監控目錄數據信息變化 -q, --quiet 輸出少量事件信息 --timefmt <fmt> 指定時間輸出格式 --format <fmt> 指定的輸出格式;即實際監控輸出內容 -e 指定監聽指定的事件,如果省略,表示所有事件都進行監聽 --exclude <pattern> 指定排除文件或目錄,使用擴展的正則表達式匹配的模式實現 --excludei <pattern> 和exclude相似,不區分大小寫 -o, --outfile <file>打印事件到文件中,相當於標準正確輸出 -s, --syslogOutput 發送錯誤到syslog相當於標準錯誤輸出

防火牆
主機防火牆:服務範圍爲當前主機 網絡防火牆:服務範圍爲防火牆一側的局域網 硬件防火牆:在專用硬件級別實現部分功能的防火牆;另一個部分功能基於軟件: 實現,如:Checkpoint,NetScreen 軟件防火牆:運行於通用硬件平臺之上的防火牆的應用軟件 網絡層防火牆:OSI模型下四層 優點:對用戶來說透明,處理速度快且易於維護 缺點:無法檢查應用層數據,如病毒等
應用層防火牆/代理服務器:代理網關,OSI模型七層

Netfilter組件
內核空間,集成在linux內核中 擴展各種網絡服務的結構化底層框架
內核中選取五個位置放了五個hook(勾子) function(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING),而這五個hook function向用戶開放,用戶可以通過一個命令工具(iptables)向其寫入規則
由信息過濾表(table)組成,包含控制IP包處理的規則集(rules),規則被分組放在鏈(chain)上
三種報文流向:
流入本機:PREROUTING --> INPUT-->用戶空間進程
流出本機:用戶空間進程 -->OUTPUT--> POSTROUTING
轉發:PREROUTING --> FORWARD --> POSTROUTING
iptables的組成 iptables由五個表和五個鏈以及一些規則組成
五個表table:filter、nat、mangle、raw、security
filter表:過濾規則表,根據預定義的規則過濾符合條件的數據包
nat表:network address translation 地址轉換規則表
mangle:修改數據標記位規則表
raw:關閉NAT表上啓用的連接跟蹤機制,加快封包穿越防火牆速度
security:用於強制訪問控制(MAC)網絡規則,由Linux安全模塊(如SELinux)實現優先級由高到低的順序爲:security -->raw-->mangle-->nat-->filter
五個內置鏈chain 一、INPUT、 二、OUTPUT 三、FORWARD 四、PREROUTING 五、POSTROUTING
20190308  samba服務、inotify和rsync實現實時同步、防火牆
iptables規則:
匹配條件:默認爲與條件,同時滿足
基本匹配:IP,端口,TCP的Flags(SYN,ACK等)
擴展匹配:通過複雜高級功能匹配
處理動作:稱爲target,跳轉目標
內建處理動作:ACCEPT,DROP,REJECT,SNAT,DNATMASQUERADE,MARK,LOG...
自定義處理動作:自定義chain,利用分類管理複雜情形
規則要添加在鏈上,才生效;添加在自定義上不會自動生效
Filter表中INPUT規則:
iptables -t filter -A INPUT -s 192.168.141.1 -j DROP

iptables命令:
-t:table: raw mangle nat [filter]默認
SUBCOMMAND:
1、鏈管理: -N: new 自定義一條新的規則鏈 -X: delete 刪除自定義的空的規則鏈
-P:policy 設置默認策略:ACCEPT:接受 DROP:丟棄 -E:重命名自定義鏈
2、查看:-L: list, -n:以數字格式顯示地址和端口號 -v:詳細信息
3、規則管理:-A : append 追加 -I:insert 插入, -D:delete 刪除 -F:flush 清空指定規則鏈 -R:replace 替換指定鏈上的規則編號 -Z: zero :置零
tcp協議的擴展選項
--syn:用於匹配第一次握手
相當於:--tcp-flags SYN,ACK,FIN,RST SYN

擴展:REJECT:--reject-with:icmp-port-unreachable默認
1、RETURN:返回調用鏈 2、REDIRECT:端口重定向 3、LOG:記錄日誌,dmesg 4、MARK:做防火牆標記 5、DNAT:目標地址轉換 6、SNAT:源地址轉換 7、MASQUERADE:地址
一、顯式擴展:必須顯式地指明使用的擴展模塊進行的擴展
iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp -m multiport --dport20:22,80 -j ACCEPT
二、iprange擴展:指明連續的(但一般不是整個網絡)ip地址範圍
iptables -A INPUT -d 172.16.1.100 -p tcp --dport 80 -m iprange --srcrange 172.16.1.5-172.16.1.10 -j DROP
三、mac擴展:指明源MAC地址 適用於:PREROUTING, FORWARD,INPUT chains
iptables -A INPUT -s 172.16.0.100 -m mac --mac-source00:50:56:12:34:56 -j ACCEPT
iptables -A INPUT -s 172.16.0.100 -j REJECT
四、tring擴展:對報文中的應用層數據做字符串模式匹配檢測
iptables -A OUTPUT -s 172.16.100.10 -d 0/0 -p tcp --sport 80 -m string --algo bm --string “google" -j REJECT
五、time擴展:根據將報文到達的時間與指定的時間範圍進行匹配
iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.10 -p tcp --dport 80 -m time --timestart 14:30 --timestop 18:30 --weekdays Sat,Sun --kerneltz -j DROP
六、connlimit擴展:根據每客戶端IP做併發連接數數量匹配,可防止CC(Challenge Collapsar挑戰黑洞)***
iptables -A INPUT -d 172.16.100.10 -p tcp --dport 22 -m connlimit --connlimit-above 2 -j REJECT
七、limit擴展:基於收發報文的速率做匹配
iptables -I INPUT -d 172.16.100.10 -p icmp --icmp-type 8 -m limit --limit10/minute --limit-burst 5 -j ACCEPT
iptables -I INPUT 2 -p icmp -j REJECT

查看鏈:[root@centos7 ~]#iptables -t mangle -nvL
Chain PREROUTING (policy ACCEPT 25891 packets, 21M bytes)
pkts bytes target prot opt in out source destination

Chain INPUT (policy ACCEPT 25692 packets, 21M bytes)
pkts bytes target prot opt in out source destination

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 2246 packets, 211K bytes)
pkts bytes target prot opt in out source destination

Chain POSTROUTING (policy ACCEPT 2275 packets, 215K bytes)
pkts bytes target prot opt in out source destination
0 0 CHECKSUM udp -- * virbr0 0.0.0.0/0 0.0.0.0/0 udp dpt:68 CHECKSUM fill

[root@centos7 ~]#iptables -A INPUT -s 192.168.141.253 -j DROP
[root@centos6 ~]#ping 192.168.141.200
PING 192.168.141.200 (192.168.141.200) 56(84) bytes of data.
64 bytes from 192.168.141.200: icmp_seq=1 ttl=64 time=2.47 ms
64 bytes from 192.168.141.200: icmp_seq=2 ttl=64 time=0.320 ms
| centos6 會是這種狀態,因爲在200主機被拒絕了。

[root@centos7 ~]#iptables -A INPUT -s 192.168.141.1 -j ACCEPT 可以接受本機的windows的訪問。
[root@centos7 ~]#iptables -A INPUT -s 192.168.141.253 -j ACCEPT
[root@centos7 ~]#iptables -vnL --line-numbers
Chain INPUT (policy ACCEPT 77 packets, 18048 bytes)
num pkts bytes target prot opt in out source destination
1 378 27126 ACCEPT all -- 192.168.141.1 0.0.0.0/0
2 0 0 ACCEPT all -- 192.168.141.253 0.0.0.0/0

[root@centos7 ~]#iptables -D INPUT 2 -D是刪除記錄。
[root@centos7 ~]#iptables -vnL --line-numbers
Chain INPUT (policy ACCEPT 24 packets, 4665 bytes)
num pkts bytes target prot opt in out source destination
1 428 30890 ACCEPT all -- 192.168.141.1 0.0.0.0/0

[root@centos7 ~]#iptables -I INPUT 2 -s 192.168.141.150 -j REJECT -I 是插入,2 是第條數據之前
[root@centos7 ~]#iptables -vnL --line-numbers
Chain INPUT (policy ACCEPT 8 packets, 2365 bytes)
num pkts bytes target prot opt in out source destination
1 1111 82147 ACCEPT all -- 192.168.141.1 0.0.0.0/0
2 0 0 REJECT all -- 192.168.141.150 0.0.0.0/0 reject-with icmp-port-unreachable
3 0 0 REJECT all -- 192.168.141.0/24 0.0.0.0/0 reject-with icmp-port-unreachable

[root@centos7 ~]#iptables -R INPUT 2 -s 192.168.141.100 -j ACCEPT -R是替換。
[root@centos7 ~]#iptables -vnL --line-numbers
Chain INPUT (policy ACCEPT 6 packets, 2264 bytes)
num pkts bytes target prot opt in out source destination
1 1249 91632 ACCEPT all -- 192.168.141.1 0.0.0.0/0
2 0 0 ACCEPT all -- 192.168.141.100 0.0.0.0/0
3 0 0 REJECT all -- 192.168.141.0/24 0.0.0.0/0

鏈管理:
-N:新增一條自定義鏈; -X:delete,刪除自定義的空鏈;先清除規則,才能刪除鏈; -P:policy,設置鏈的默認策略; ACCEPT:接受; DROP:丟棄;不響應; REJECT:拒絕; -E:rename,重命名自定義的未被引用的鏈;(引用計數爲0)
規則管理:
-A:append,追加,默認爲最後一個; -I:insert,默認插入,默認爲第一個; -D:delete,刪除,兩種格式,指定規則或指定規則條數; (1)rule specification (2)rule number
-R:replace替換,類似-D,指明替換哪一條;rule number -F:flush,清空規則表,沖刷規則,可衝表上的一條鏈,也沖掉一個表上的所有鏈,也可指明沖掉哪條鏈上的哪條規則; -Z:zero,置0;給iptables計數器置0;
iptables的每條規則,都有兩個計數器: (1)有本規則匹配到的所有的packets (2)由本規則匹配到的所有packets大小之和
-S:列出規則selected,以iptables-save命令的格式顯示鏈上的規則;
重定向保存規則;相當於iptables-save命令;
-L:list,列出規則; -n:numeric,以數字格式顯示地址和端口;禁止反解端口號對應的服務名; -v:verbose,顯示詳細信息;支持-vv,-vvv -x:exactly,顯示計數器的精確值而非單位換算後的結果;
iptables --line-numbers:顯示鏈上的規則的編號 這就是爲什麼-D刪除規則條目時,有兩種方式,一是指明規則編號,二是指明具體規則;組合使用:-nvL,L要寫在後面;
iptables舉例:
一、iptables -t mangle -nL 查看mangle表 二、iptables -N testchain 創建自定義鏈,添加鏈testchain 三、iptables -E testchain mychain 重命名自定義鏈爲mychain 四、iptables -X mychain 只能刪除空鏈 五、iptables -t filter -P FORWARD DROP 設定FORWARD默認策略,過濾爲丟棄轉發,-t filter可省略
六、iptables -P INPUT DROP 設置INPUT默認策略 七、iptables -nL INPUT 查看指定某個鏈上的規則
rpm -ql iptables 查看安裝後生成的文件
以小寫字母.so結尾的一般爲matches模塊;例如:/usr/lib64/xtables/libxt_addrtype.so
以大寫字母.so結尾的一般爲target模塊;例如:/usr/lib64/xtables/libipt_REJECT.so

設:此時在本機地址爲172.18.11.114,在遠程主機172.18.11.111不能ping通,ssh鏈接也無法登錄;
iptables -A INPUT -s 172.18.11.112 -d 172.18.11.114 -j ACCEPT 設置入棧放行;
iptables -A OUTPUT -d 172.18.11.112 -s 172.18.11.114 -j ACCEPT 設置出棧放行; 此時,只有172.18.11.112能ping通本地主機;

iptables -A INPUT ! -s 172.18.11.112 -d 172.18.11.114 -j ACCEPT
iptables -A OUTPUT ! -d 172.18.11.112 -s 172.18.11.114 -j ACCEPT 此時,只有172.18.11.112不能連接本地主機;

iptables -A INPUT -s 172.18.0.0/16 -d 172.18.11.114 -p tcp -j ACCEPT
iptables -A INPUT -s 172.18.0.0/16 -d 172.18.11.114 -p tcp -j ACCEPT 此時,在172.18.11.111主機不能ping通本機,但可以ssl本機;

ping命令中的ICMP協議: 00 協議類型和代碼:表示ping應答; 80 協議類型和代碼:表示ping請求;
本機被ping時,別人的請求時,icmp協議類型,入棧爲8,出棧是0; 本機ping別人時,icmp協議類型,出棧是8,入棧是0;
允許自己ping別人,禁止別人ping自己:
iptables -A OUTPUT -s 172.18.11.114 -d 0/0 -p icmp --icmp-type 8 -j ACCEPT 出棧設置
iptables -A INPUT -s 0/0 -d 172.18.11.114 -p icmp --icmp-type 0 -j ACCEPT 入棧設置

開放別人可ping自己:
iptables -A INPUT -d 172.18.11.114 -p icmp --icmp-type 8 -j ACCEPT 入棧設置
iptables -A OUTPUT -s 172.18.11.114 -p icmp --icmp-type 0 -j ACCEPT 出棧設置

顯示擴展:必須使用-m指明擴展名稱;小寫名稱都是匹配條件擴展,大寫名稱爲顯示擴展;
multiport:多端口匹配 以離散方式定義多端口匹配,最多可以指定15個端口
1、顯示擴展,多端口一條規則指明:開放22和80端口:
iptables -I INPUT -s 0/0 -d 172.18.11.114 -p tcp -m multiport --dports 22,80 -j ACCEPT

iprange:指明一段連續的ip地址範圍作爲原地址或目標地址匹配;
[!] --src-range from[-to]:原地址範圍; [!] --dst-range from[-to]:目標地址範圍;
string:對報文中的應用層數據做字符串匹配檢測;對內核版本要大於2.6.14
-algo {bm|kmp}:算法 (mbboyer-moore,kmp=knuth-pratt-morris)
[!] --string pattern:給定要檢查的字符串模式 [!] --hex-string pattern:給定要檢查的字符串模式,十六進制;
2、禁止響應頁面內容有test字樣
iptables -I OUTPUT -s 172.18.11.114 -d 0/0 -p tcp --sport 80 -m string --algo bm --string "test" -j REJECT
3、工作時間內9:00-16:00,放行訪問telnet服務
iptables -R INPUT 4 -d 172.18.11.114 -p tcp --dport 23 -m iprange --src-range 172.18.11.1-172.18.11.111 -m time --timestart 09:00:00 --timestop 16:00:00 --weekdays 1,2,3,4,5 -j ACCEPT

connlimit:根據每客戶端做併發連接數限制,即每客戶端最多發起的連接數量;
--connlimit-upto n:連接數量小於等於n,則匹配; --connlimit-abvoe n:連接數量大於n則匹配;
4、限制每臺主機訪問telnet最大併發數爲2個
iptables -A INPUT -s 0/0 -d 172.18.11.114 -p tcp --dport 23 -m connlimit --connlimit-upto 2 -j ACCEPT
5、允許別人ping設置一分鐘20包,突發值爲3,表示一次ping需要3秒;
iptables -R INPUT 5 -d 172.18.11.114 -p icmp --icmp-type 8 -m limit --limit 20/minute --limit-burst 3 -j ACCEPT

state:是conntrack的子集,用於實現對報文的狀態做連接追蹤; [!] --state state
5種狀態:一、INVALID:無法識別的連接; 二、ESTABLISHED:連接追蹤模板當中存在的記錄的連接; 三、NEW:連接追蹤模板當中不存在的連接請求; 四、RELATED:相關聯的連接; 五、UNTRACKED:未追蹤的連接;

6、允許172.18網段訪問,本機的telnet,ssh,web服務
iptables -F 清空規則,默認均爲拒絕訪問
iptables -A INPUT -s 172.18.0.0/16 -d 172.18.11.114 -p tcp -m multiport --dports 22,23,80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -d 172.18.0.0/16 -s 172.18.11.114 -p tcp -m multiport --sports 22,23,80 -m state --state ESTABLISHED -j ACCEPT
7、開放ping請求,讓別人能ping進來
iptables -A INPUT -d 172.18.11.114 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -s 172.18.11.114 -p icmp --icmp-type 0 -m state --state ESTABLISHED -j ACCEPT

練習:判斷下述規則的意義:
1、iptables -N clean_in 創建自定義鏈
2、iptables -A clean_in -d 255.255.255.255 -p icmp -j DROP 丟棄目標地址爲全1,ping包請求;
3、iptables -A clean_in -d 172.16.255.255 -p icmp -j DROP 丟棄172.16網段的主機ping包;
4、iptables -A clean_in -p tcp ! --syn -m state --state NEW -j DROP 協議爲tcp,狀態爲new,不是tcp第一次握手都丟棄;
5、iptables -A clean_in -p tcp --tcp-flags ALL ALL -j DROP 協議爲TCP標誌位全部爲1都丟棄;
6、iptables -A clean_in -p tcp --tcp-flags ALL NONE -j DROP 協議爲TCP標誌位全部爲0都丟棄;
7、iptables -A clean_in -d 172.16.100.7 -j RETURN 目標地址爲172.16.100.7就返回調用clean_in的鏈上;
8、iptables -A INPUT -d 172.16.100.7 -j clean_in 在input鏈上目標地址爲172.16.100.7就調用clean_in鏈;
9、iptables -A INPUT -i lo -j ACCEPT 在input鏈上放行流入本地接口的數據;
10、iptables -A OUTPUT -o lo -j ACCEPT 在output鏈上放行流出本地接口的數據;
11、iptables -A INPUT -i eth0 -m multiport -p tcp --dports 53,113,135,137,139,445 -j DROP
在input鏈上,tcp協議目標端口爲53,113,135,137,139,445,流入eth0接口的數據都丟棄;
12、iptables -A INPUT -i eth0 -m multiport -p udp --dports 53,113,135,137,139,445 -j DROP
在input鏈上,udp協議目標端口爲53,113,135,137,139,445,流入eth0接口的數據都丟棄;
13、iptables -A INPUT -i eth0 -p udp --dport 1026 -j DROP
在input鏈上,udp協議目標端口爲1026,流入eth0接口的數據都丟棄;
14、iptables -A INPUT -i eth0 -m multiport -p tcp --dports 1433,4899 -j DROP
在input鏈上,udp協議目標端口爲1433,4899,流入eth0接口的數據都丟棄;
15、iptables -A INPUT -p icmp -m limit --limit 10/second -j ACCEPT
在input鏈上,協議爲icmp,限制爲每秒10個;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章