十八、網(wǎng)絡(luò)文件共享及iptables防火墻服務(wù)

一、NAS簡(jiǎn)介

???????網(wǎng)絡(luò)連接存儲(chǔ)(Network Attached Storage): 通過(guò)局域網(wǎng)在多個(gè)文件服務(wù)器之間實(shí)現(xiàn)了互聯(lián),基于文件的協(xié)議( FTP、NFS、SMB/CIFS等 ),實(shí)現(xiàn)文件共享。

特性:

  • 集中管理數(shù)據(jù),從而釋放帶寬、提高性能
  • 可提供跨平臺(tái)文件共享功能
  • 可靠性較差,適用于局域網(wǎng)或較小的網(wǎng)絡(luò)

1.1 FTP服務(wù)介紹

???????FTP(File Transfer Protocol):文件傳輸協(xié)議?;贑/S結(jié)構(gòu),采用數(shù)據(jù)和命令連接雙通道協(xié)議,數(shù)據(jù)傳輸方式可選擇二進(jìn)制(默認(rèn))和文本。

兩種模式:服務(wù)器角度
主動(dòng)(PORT style):服務(wù)器主動(dòng)連接
命令(控制):客戶端:隨機(jī)port ---服務(wù)器:tcp21
數(shù)據(jù):客戶端:隨機(jī)port---服務(wù)器:tcp20

被動(dòng)(PASV style):客戶端主動(dòng)連接
命令(控制):客戶端:隨機(jī)port ---服務(wù)器:tcp21
數(shù)據(jù):客戶端:隨機(jī)port ---服務(wù)器:隨機(jī)port

服務(wù)器被動(dòng)模式數(shù)據(jù)端口計(jì)算方式示例:
227 Entering Passive Mode (172,16,0,1,224,59)
服務(wù)器數(shù)據(jù)端口為:224*256+59=57,403

狀態(tài)碼:
1XX:信息 125:數(shù)據(jù)連接打開
2XX:成功類狀態(tài) 200:命令OK 230:登錄成功
3XX:補(bǔ)充類 331:用戶名OK
4XX:客戶端錯(cuò)誤 425:不能打開數(shù)據(jù)連接
5XX:服務(wù)器錯(cuò)誤 530:不能登錄

用戶認(rèn)證類型:
匿名用戶:ftp,anonymous,對(duì)應(yīng)Linux用戶ftp
系統(tǒng)用戶:Linux用戶,用戶/etc/passwd,密碼/etc/shadow
虛擬用戶:特定服務(wù)的專用用戶,獨(dú)立的用戶/密碼文件

nsswitch:network service switch 名稱解析框架

pam:pluggable authentication module 用戶認(rèn)證
/lib64/security /etc/pam.d/ /etc/pam.conf

1.1.1 FTP軟件

服務(wù)器:
Wu-ftpd,Proftpd,Pureftpd,ServU,IIS
vsftpd:Very Secure FTP Daemon,CentOS默認(rèn)FTP服務(wù)器,具備高速,穩(wěn)定的特點(diǎn),下載速度是WU-FTP的兩倍
ftp.redhat.com 數(shù)據(jù)傳輸單機(jī)最多可支持15000個(gè)并發(fā)

客戶端:
ftp,lftp,lftpget,wget,curl
示例:
ftp -A ftpserver port -A主動(dòng)模式 -p 被動(dòng)模式
lftp –u username ftpserver
lftp username@ftpserver
lftpget ftp://ftpserver/pub/file

filezilla,CuteFtp,F(xiàn)lashFXP,LeapFtp
IE ftp://username:password@ftpserver

1.1.2 vsftpd 服務(wù)配置

主配置文件:/etc/vsftpd/vsftpd.conf
幫助文檔:man 5 vsftpd.conf
格式:option=value
注:= 前后不能有空格

  • 匿名用戶(映射為系統(tǒng)用戶ftp )共享文件位置:/var/ftp
  • 系統(tǒng)用戶共享文件位置:用戶家目錄
  • 虛擬用戶共享文件位置:為其映射的系統(tǒng)用戶的家目錄

虛擬用戶:
所有虛擬用戶會(huì)統(tǒng)一映射為一個(gè)指定的系統(tǒng)帳號(hào):訪問(wèn)共享位置,即為此系統(tǒng)帳號(hào)的家目錄
各虛擬用戶可被賦予不同的訪問(wèn)權(quán)限,通過(guò)匿名用戶的權(quán)限控制參數(shù)進(jìn)行指定

虛擬用戶帳號(hào)的存儲(chǔ)方式:
文件:編輯文本文件,此文件需要被編碼為hash格式
奇數(shù)行為用戶名,偶數(shù)行為密碼
db_load -T -t hash -f vusers.txt vusers.db ##生成數(shù)據(jù)庫(kù)文件

關(guān)系型數(shù)據(jù)庫(kù)中的表:實(shí)時(shí)查詢數(shù)據(jù)庫(kù)完成用戶認(rèn)證
mysql庫(kù):pam要依賴于pam-mysql

庫(kù)文件
/lib64/security/pam_mysql.so
/usr/share/doc/pam_mysql-0.7/README

示例:實(shí)現(xiàn)基于MYSQL驗(yàn)證的vsftpd虛擬用戶訪問(wèn)
使用1臺(tái)主機(jī)FTP + MySQL實(shí)現(xiàn):

1、關(guān)系型數(shù)據(jù)庫(kù)及驗(yàn)證模塊安裝配置
yum -y install mariadb mariadb-server  ##安裝MySQL
systemctl start mariadb  ##啟動(dòng)服務(wù)

mysql -uroot -p  ##連接數(shù)據(jù)庫(kù)
create database vsftpd;  ##創(chuàng)建數(shù)據(jù)庫(kù)
use vsftpd
CREATE TABLE users (  ##創(chuàng)建表結(jié)構(gòu)
id INT AUTO_INCREMENT NOT NULL PRIMARY KEY,
name CHAR(50) BINARY NOT NULL,
password CHAR(48) BINARY NOT NULL
);
insert users (name,password) value('ftpuser1',password('000000'));  ##插入數(shù)據(jù)創(chuàng)建虛擬用戶

grant select on vsftpd.users to vsftpd@'localhost' identified by  '000000';  ##賦予vsftpd用戶具備查詢權(quán)限

##編譯安裝pam_mysql
tar zxvf pam_mysql-0.7RC1.tar.gz
cd pam_mysql-0.7RC1/

yum install gcc gcc-c++ pam-devel mariadb-devel  ##安裝依賴軟件包

./configure  --with-pam-mods-dir=/lib64/security/
make && make install

2、FTP服務(wù)安裝配置
yum install vsftpd  ##安裝vsftpd軟件

vi /etc/pam.d/vsftpd.mysql  ##編輯pam模塊配置文件,添加如下內(nèi)容
auth required pam_mysql.so user=vsftpd passwd=000000 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required pam_mysql.so user=vsftpd passwd=000000 host=localhost db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

useradd -d /data/ftproot -s /sbin/nologin vuser  ##創(chuàng)建虛擬用戶映射的系統(tǒng)賬號(hào)
mkdir -pv /data/ftproot/upload  ##創(chuàng)建默認(rèn)登陸目錄
chmod 555 /data/ftproot  ##賦予相應(yīng)權(quán)限
setfacl -m u:vuser:rwx /data/ftproot/upload  ##設(shè)置基于賬號(hào)的訪問(wèn)控制權(quán)限

vim /etc/vsftpd/vsftpd.conf  ##編輯主配置文件,追加如下內(nèi)容
pam_service_name=vsftpd.mysql  ##指定pam模塊服務(wù)文件
guest_enable=YES
guest_username=vuser
user_config_dir=/etc/vsftpd/vusers.d/  ##定義用戶配置文件目錄

mkdir /etc/vsftpd/vusers.d/  
vi /etc/vsftpd/vusers.d/ftpuser1  ##添加如下內(nèi)容
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES

systemctl restart vsftpd  ##重啟服務(wù),使其更改生效

3、測(cè)試
[root@localhost ~]# ftp localhost
Trying ::1...
Connected to localhost (::1).
220 (vsFTPd 3.0.2)
Name (localhost:root): ftpuser1
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> pwd
257 "/"
ftp> cd upload
250 Directory successfully changed.
ftp> dir
229 Entering Extended Passive Mode (|||25687|).
150 Here comes the directory listing.
-rw-------    1 1007     1007         7946 Aug 15 03:12 config.h
-rw-------    1 1007     1007          156 Aug 15 01:10 yesorno.sh
226 Directory send OK.
ftp> put b.sh
local: b.sh remote: b.sh
229 Entering Extended Passive Mode (|||10424|).
150 Ok to send data.
226 Transfer complete.
10 bytes sent in 0.0216 secs (0.46 Kbytes/sec)
ftp> dir
229 Entering Extended Passive Mode (|||7318|).
150 Here comes the directory listing.
-rw-------    1 1007     1007           10 Aug 23 12:56 b.sh
-rw-------    1 1007     1007         7946 Aug 15 03:12 config.h
-rw-------    1 1007     1007          156 Aug 15 01:10 yesorno.sh
226 Directory send OK.
ftp

從以上輸出結(jié)果可以發(fā)現(xiàn),基于MySQL虛擬用戶vsftpd虛擬用戶連接測(cè)試正常

1.2 NFS服務(wù)介紹

???????NFS(Network File System )網(wǎng)絡(luò)文件系統(tǒng),基于內(nèi)核的文件系統(tǒng)。通過(guò)使用NFS,用戶和程序可以像訪問(wèn)本地文件一樣訪問(wèn)遠(yuǎn)端系統(tǒng)上的文件,基于RPC(Remote Procedure Call Protocol遠(yuǎn)程過(guò)程調(diào)用)實(shí)現(xiàn)。
???????RPC采用C/S模式,客戶機(jī)請(qǐng)求程序調(diào)用進(jìn)程發(fā)送一個(gè)有進(jìn)程參數(shù)的調(diào)用信息到服務(wù)進(jìn)程,然后等待應(yīng)答信息。在服務(wù)器端,進(jìn)程保持睡眠狀態(tài)直到調(diào)用信息到達(dá)為止。當(dāng)一個(gè)調(diào)用信息到達(dá),服務(wù)器獲得進(jìn)程參數(shù),計(jì)算結(jié)果,發(fā)送答復(fù)信息,然后等待下一個(gè)調(diào)用信息,最后,客戶端調(diào)用進(jìn)程接收答復(fù)信息,獲得進(jìn)程結(jié)果,然后調(diào)用執(zhí)行繼續(xù)進(jìn)行。

特點(diǎn):

  • 節(jié)省本地存儲(chǔ)空間
  • 將常用的數(shù)據(jù),如home目錄,存放在NFS服務(wù)器上且可以通過(guò)網(wǎng)絡(luò)訪問(wèn),本地終端將可減少自身存儲(chǔ)空間的使用

1.2.1 NFS工作原理

1.2.2 NFS 服務(wù)配置

NFS服務(wù)主要進(jìn)程:
rpc.nfsd 最主要的NFS進(jìn)程,管理客戶端是否可登錄
rpc.mountd 掛載和卸載NFS文件系統(tǒng),包括權(quán)限管理
rpc.lockd 非必要,管理文件鎖,避免同時(shí)寫出錯(cuò)
rpc.statd 非必要,檢查文件一致性,可修復(fù)文件

通信端口:2049(nfsd), 其它端口由portmap(111)分配

主配置文件:/etc/exports
語(yǔ)法:
/dir 主機(jī)1(opt1,opt2) 主機(jī)2(opt1,opt2)
主機(jī)格式:

  • 單個(gè)主機(jī):ipv4,ipv6,F(xiàn)QDN
  • IP networks:兩種掩碼格式均支持
    172.18.0.0/255.255.0.0
    172.18.0.0/16
  • wildcards:主機(jī)名通配,例如*.magedu.com,IP不支持
  • netgroups:NIS域的主機(jī)組,@group_name
  • anonymous:表示使用*通配所有客戶端

相關(guān)的權(quán)限和選項(xiàng):

  • 默認(rèn)選項(xiàng):(ro,sync,root_squash,no_all_squash)
  • ro,rw 只讀和讀寫
  • async 異步,數(shù)據(jù)變化后不立即寫磁盤,性能高
  • sync(1.0.0后為默認(rèn))同步,數(shù)據(jù)在請(qǐng)求時(shí)立即寫入共享
  • no_all_squash (默認(rèn))保留共享文件的UID和GID
  • all_squash 所有遠(yuǎn)程用戶(包括root)都變成nfsnobody
  • root_squash (默認(rèn))遠(yuǎn)程root映射為nfsnobody,UID為65534,早期版本是4294967294 (nfsnobody)
  • no_root_squash 遠(yuǎn)程root映射成root用戶
  • anonuid和anongid 指明匿名用戶映射為特定用戶UID和組GID,而非nfsnobody,可配合all_squash使用

示例:通過(guò)NFS實(shí)現(xiàn)服務(wù)器/www共享訪問(wèn)
通過(guò)2臺(tái)主機(jī)實(shí)現(xiàn),一臺(tái)作為NFS服務(wù)端,另外一臺(tái)作為NFS客戶端

NFS服務(wù)端:

vi /etc/exports  ##編輯導(dǎo)出配置文件,添加如下內(nèi)容
/data/nfsshare  *(rw,all_squash)
mkdir /data/nfsshare  ##創(chuàng)建共享文件夾
setfacl -m u:nfsnobody:rwx /data/nfsshare  ##為nfsnobody匿名用戶設(shè)置相應(yīng)訪問(wèn)控制權(quán)限

exportfs -arv  ##重新加載配置文件并輸出本機(jī)所有共享

NFS客戶端:

showmount -e 172.16.77.132  ##查看遠(yuǎn)程主機(jī)共享的目錄
Export list for localhost:
/home/user1    *

mount.nfs 172.16.77.132:/data/nfsshare /www  ##掛載遠(yuǎn)程主機(jī)共享的目錄
[root@localhost ~]# df -hT
Filesystem               Type      Size  Used Avail Use% Mounted on
……
172.16.77.132:/data/nfsshare nfs4       18G   14G  4.4G  76% /www

測(cè)試:

touch /www/index.html  ##在客戶端主機(jī)上測(cè)試能否在共享目錄創(chuàng)建文件

ls -l /www
total 0
-rw-r--r--. 1 nfsnobody nfsnobody 0 Aug 23 21:30 index.html

1.3 SMB服務(wù)介紹

???????SMB(Server Message Block服務(wù)器消息塊),IBM發(fā)布,最早是DOS網(wǎng)絡(luò)文件共享協(xié)議。CIFS(common internet file system),微軟基于SMB發(fā)布。

功能:

  • 共享文件和打印服務(wù),實(shí)現(xiàn)在線編輯
  • 實(shí)現(xiàn)登錄SAMBA用戶的身份認(rèn)證
  • 可以進(jìn)行NetBIOS名稱解析
  • 外圍設(shè)備共享

1.3.1 SMB軟件

???????SAMBA:1991年Andrew Tridgell,實(shí)現(xiàn)windows和UNIX相通。

???????計(jì)算機(jī)網(wǎng)絡(luò)管理模式:
???????工作組WORKGROUP:計(jì)算機(jī)對(duì)等關(guān)系,帳號(hào)信息各自管理
???????域DOMAIN:C/S結(jié)構(gòu),帳號(hào)信息集中管理,DC,AD

1.3.2 SMB 服務(wù)配置

smbd:提供smb(cifs)服務(wù) TCP:139,445
nmbd:NetBIOS名稱解析 UDP:137,138

示例:配置samba共享,實(shí)現(xiàn)/www目錄共享
通過(guò)2臺(tái)主機(jī)實(shí)現(xiàn),一臺(tái)作為NFS服務(wù)端,另外一臺(tái)作為NFS客戶端

NFS服務(wù)端:

yum -y install samba  ##安裝基本組件包
vi /etc/samba/smb.conf  ##編輯主配置文件,追加如下內(nèi)容
[www]
comment = www
path = /data/wwwshare
writeable = yes
public = yes

mkdir /data/wwwshare  ##創(chuàng)建共享目錄

useradd -s /sbin/nologin smbuser2  ##創(chuàng)建普通賬號(hào)
smbpasswd -a smbuser2  ##創(chuàng)建SMB訪問(wèn)用戶
New SMB password:
Retype new SMB password:

systemctl restart smb  ##重啟服務(wù),使其更改生效

NFS客戶端:

yum -y install samba-client  cifs-utils ##安裝客戶端工具包
smbclient -L 172.16.77.132 ##匿名訪問(wèn)SMB服務(wù)器,無(wú)需輸入密碼。直接按下回車鍵
Enter WOAKGROUP\root's password:
Anonymous login successful

        Sharename       Type      Comment
        ---------       ----      -------
        print$          Disk      Printer Drivers
        share           Disk      public share
        www             Disk      www
        IPC$            IPC       IPC Service (Samba 4.9.1)
Reconnecting with SMB1 for workgroup listing.
Anonymous login successful

        Server               Comment
        ---------            -------

        Workgroup            Master
        ---------            -------
        SAMBA                LOCALHOST

mkdir /www  ##創(chuàng)建SMB共享掛載點(diǎn)
mount.cifs -o username=smbuser2,password=000000 //172.16.77.132/www /www  ##掛載SMB共享目錄
df -hT
Filesystem              Type      Size  Used Avail Use% Mounted on
……
//172.16.77.132/www     cifs       18G   14G  4.3G  76% /www

touch /www/index.html  ##在客戶端主機(jī)上測(cè)試能否在共享目錄創(chuàng)建文件

ls -l /www
total 0
-rwxr-xr-x. 1 root root 0 Aug 23 22:07 index.html

1.4 數(shù)據(jù)同步工具介紹

???????rsync:基于ssh和rsh服務(wù)實(shí)現(xiàn)高效率的遠(yuǎn)程系統(tǒng)之間復(fù)制文件
???????inotify:異步的文件系統(tǒng)事件監(jiān)控機(jī)制,利用事件驅(qū)動(dòng)機(jī)制,而無(wú)須通過(guò)諸如cron等的輪詢機(jī)制來(lái)獲取事件,linux內(nèi)核從2.6.13起支持 inotify,通過(guò)inotify可以監(jiān)控文件系統(tǒng)中添加、刪除,修改、移動(dòng)等各種事件。相關(guān)軟件:inotify-tools,sersync,lrsyncd

1.4.1 文件監(jiān)控服務(wù)工具

???????inotifywait: 在被監(jiān)控的文件或目錄上等待特定文件系統(tǒng)事件(open close delete等)發(fā)生,常用于實(shí)時(shí)同步的目錄監(jiān)控
???????inotifywatch:收集被監(jiān)控的文件系統(tǒng)使用的統(tǒng)計(jì)數(shù)據(jù),指文件系統(tǒng)事件發(fā)生的次數(shù)統(tǒng)計(jì)

inotifywait常見選項(xiàng):
-m, --monitor 始終保持事件監(jiān)聽
-d, --daemon 以守護(hù)進(jìn)程方式執(zhí)行,和-m相似,配合-o使用
-r, --recursive 遞歸監(jiān)控目錄數(shù)據(jù)信息變化
-q, --quiet 輸出少量事件信息
--exclude <pattern> 指定排除文件或目錄,使用擴(kuò)展的正則表達(dá)式匹配的模式實(shí)現(xiàn)
--excludei <pattern> 和exclude相似,不區(qū)分大小寫
-o, --outfile <file>打印事件到文件中,相當(dāng)于標(biāo)準(zhǔn)正確輸出
-s, --syslogOutput 發(fā)送錯(cuò)誤到syslog相當(dāng)于標(biāo)準(zhǔn)錯(cuò)誤輸出
--timefmt <fmt> 指定時(shí)間輸出格式
--format <fmt> 指定的輸出格式;即實(shí)際監(jiān)控輸出內(nèi)容
-e 指定監(jiān)聽指定的事件,如果省略,表示所有事件都進(jìn)行監(jiān)聽

--timefmt <fmt>時(shí)間格式,參考 man 3 strftime

  • %Y 年份信息,包含世紀(jì)信息
  • %y 年份信息,不包括世紀(jì)信息
  • %m 顯示月份,范圍 01-12
  • %d 每月的第幾天,范圍是 01-31
  • %H 小時(shí)信息,使用 24小時(shí)制,范圍 00-23
  • %M 分鐘,范圍 00-59
    例如:--timefmt "%Y-%m-%d %H:%M"

--format <fmt> 格式定義

  • %T 輸出時(shí)間格式中定義的時(shí)間格式信息,通過(guò) --timefmt option 語(yǔ)法格式指定時(shí)間信息
  • %w 事件出現(xiàn)時(shí),監(jiān)控文件或目錄的名稱信息
  • %f 事件出現(xiàn)時(shí),將顯示監(jiān)控目錄下觸發(fā)事件的文件或目錄信息,否則為空
  • %e 顯示發(fā)生的事件信息,不同的事件默認(rèn)用逗號(hào)分隔
  • %Xe顯示發(fā)生的事件信息,不同的事件指定用X進(jìn)行分隔
    例:
    --format "%T %w%f event: %;e"
    --format '%T %w %f'

-e 選項(xiàng)指定的事件類型

  • create 文件或目錄創(chuàng)建
  • delete 文件或目錄被刪除
  • modify 文件或目錄內(nèi)容被寫入
  • attrib 文件或目錄屬性改變
  • close_write 文件或目錄關(guān)閉,在寫入模式打開之后關(guān)閉的
  • close_nowrite 文件或目錄關(guān)閉,在只讀模式打開之后關(guān)閉的
  • close 文件或目錄關(guān)閉,不管讀或是寫模式
  • open 文件或目錄被打開
  • moved_to 文件或目錄被移動(dòng)到監(jiān)控的目錄中
  • moved_from 文件或目錄從監(jiān)控的目錄中被移動(dòng)
  • move 文件或目錄不管移動(dòng)到或是移出監(jiān)控目錄都觸發(fā)事件
  • access 文件或目錄內(nèi)容被讀取
  • delete_self 文件或目錄被刪除,目錄本身被刪除
  • unmount 取消掛載
    例: -e create,delete,moved_to,close_write, attrib

1.3.2 數(shù)據(jù)實(shí)時(shí)同步

  • 實(shí)現(xiàn)實(shí)時(shí)同步思路
    1、要利用監(jiān)控服務(wù)(inotify),監(jiān)控同步數(shù)據(jù)服務(wù)器目錄中信息的變化
    2、發(fā)現(xiàn)目錄中數(shù)據(jù)產(chǎn)生變化,利用rsync服務(wù)推送到備份服務(wù)器上
    3、利用腳本進(jìn)行結(jié)合

  • 實(shí)現(xiàn)實(shí)時(shí)同步方法
    inotify+rsync 方式實(shí)現(xiàn)數(shù)據(jù)同步

示例:使用rsync+inotify實(shí)現(xiàn)/www目錄實(shí)時(shí)同步
通過(guò)2臺(tái)主機(jī)實(shí)現(xiàn),一臺(tái)作為同步服務(wù)器,另外一臺(tái)作為同步客戶端

同步服務(wù)器:

vi  /etc/rsyncd.conf ## 編輯rsync 服務(wù)器端主配置文件,添加或修改如下內(nèi)容
uid = root
gid = root
use chroot = no
max connections = 0
ignore errors
exclude = lost+found/
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
reverse lookup = no
hosts allow = 172.16.77.0/24  ##允許同步連接的主機(jī)列表
[www]
path = /www
comment = backup
read only = no
auth users = rsyncuser
secrets file = /etc/rsync.pass  ##指定驗(yàn)證文件

echo "rsyncuser:bza" > /etc/rsync.pass  ##生成驗(yàn)證文件
chmod 600 /etc/rsync.pass

mkdir /www  ##創(chuàng)建同步目錄

systemctl start rsyncd  ##啟動(dòng)服務(wù),使更改生效

同步客戶端:

yum -y install inotify-tools  ##安裝監(jiān)控服務(wù)工具包

echo "bza" > /etc/rsync.pass  ##生成密碼文件
chmod 600 /etc/rsync.pass

vi /etc/inotify_rsync.sh  ##創(chuàng)建實(shí)時(shí)同步腳本,添加如下內(nèi)容
#!/bin/bash
SRC='/data/nfsshare'
DEST='rsyncuser@172.16.77.132::www'
inotifywait -mrq --timefmt '%Y-%m-%d %H:%M' --format '%T %w %f' -e create,delete,moved_to,close_write,attrib ${SRC} |while read DATE TIME DIR FILE;do
FILEPATH=${DIR}${FILE}
rsync -az --delete --password-file=/etc/rsync.pass $SRC $DEST && echo "At ${TIME} on ${DATE}, file $FILEPATH was backuped up via rsync" >> /var/log/changelist.log
done

chmod +x inotify_rsync.sh  ##賦予可執(zhí)行權(quán)限

二、iptables介紹

???????核心:Netfilter組件
???????位于內(nèi)核空間,集成在linux內(nèi)核中,擴(kuò)展各種網(wǎng)絡(luò)服務(wù)的結(jié)構(gòu)化底層框架

???????實(shí)現(xiàn)原理:內(nèi)核中選取五個(gè)位置放了五個(gè)hook(勾子) function(INPUT、OUTPUT、FORWARD、PREROUTING、POSTROUTING),而這五個(gè)hook function向用戶開放,用戶可以通過(guò)一個(gè)命令工具(iptables)向其寫入規(guī)則由信息過(guò)濾表(table)組成,包含控制IP包處理的規(guī)則集(rules),規(guī)則被分組放在鏈(chain)上。

???????三種報(bào)文流向:
???????流入本機(jī):PREROUTING --> INPUT-->用戶空間進(jìn)程
???????流出本機(jī):用戶空間進(jìn)程 -->OUTPUT--> POSTROUTING
???????轉(zhuǎn)發(fā):PREROUTING --> FORWARD --> POSTROUTING

2.1 iptables 基本結(jié)構(gòu)

五個(gè)表table:
filter表:過(guò)濾規(guī)則表,根據(jù)預(yù)定義的規(guī)則過(guò)濾符合條件的數(shù)據(jù)包
nat表:network address translation 地址轉(zhuǎn)換規(guī)則表
mangle:修改數(shù)據(jù)標(biāo)記位規(guī)則表
raw:關(guān)閉NAT表上啟用的連接跟蹤機(jī)制,加快封包穿越防火墻速度
security:用于強(qiáng)制訪問(wèn)控制(MAC)網(wǎng)絡(luò)規(guī)則,由Linux安全模塊(如SELinux)實(shí)現(xiàn)

優(yōu)先級(jí)由高到低的順序?yàn)椋簊ecurity -->raw-->mangle-->nat-->filter

五個(gè)內(nèi)置鏈chain:
INPUT
OUTPUT
FORWARD
PREROUTING
POSTROUTING

2.2 iptables 工作過(guò)程

???????當(dāng)一個(gè)數(shù)據(jù)包進(jìn)入網(wǎng)卡時(shí),數(shù)據(jù)包首先進(jìn)入PREROUTING鏈,內(nèi)核根據(jù)數(shù)據(jù)包目的IP判斷是否需要轉(zhuǎn)送出去
???????如果數(shù)據(jù)包就是進(jìn)入本機(jī)的,數(shù)據(jù)包就會(huì)向下移動(dòng),到達(dá)INPUT鏈。數(shù)據(jù)包到達(dá)INPUT鏈后,任何進(jìn)程都會(huì)收到它。本機(jī)上運(yùn)行的程序可以發(fā)送數(shù)據(jù)包,這些數(shù)據(jù)包經(jīng)過(guò)OUTPUT鏈,然后到達(dá)POSTROUTING鏈輸出
???????如果數(shù)據(jù)包是要轉(zhuǎn)發(fā)出去的,且內(nèi)核允許轉(zhuǎn)發(fā),數(shù)據(jù)包就會(huì)向右移動(dòng),經(jīng)過(guò)FORWARD鏈,然后到達(dá)POSTROUTING鏈輸出

2.3 iptables 規(guī)則

2.3.1 iptables 規(guī)則組成

規(guī)則rule:根據(jù)規(guī)則的匹配條件嘗試匹配報(bào)文,對(duì)匹配成功的報(bào)文根據(jù)規(guī)則定義的處理動(dòng)作作出處理
匹配條件:默認(rèn)為與條件,同時(shí)滿足
基本匹配:IP,端口,TCP的Flags(SYN,ACK等)
擴(kuò)展匹配:通過(guò)復(fù)雜高級(jí)功能匹配
處理動(dòng)作:稱為target,跳轉(zhuǎn)目標(biāo)
內(nèi)建處理動(dòng)作:ACCEPT,DROP,REJECT,SNAT,DNATMASQUERADE,MARK,LOG...
自定義處理動(dòng)作:
自定義chain,利用分類管理復(fù)雜情形
規(guī)則要添加在鏈上,才生效;添加在自定義上不會(huì)自動(dòng)生效

鏈chain:
內(nèi)置鏈:每個(gè)內(nèi)置鏈對(duì)應(yīng)于一個(gè)鉤子函數(shù)
自定義鏈:用于對(duì)內(nèi)置鏈進(jìn)行擴(kuò)展或補(bǔ)充,可實(shí)現(xiàn)更靈活的規(guī)則組織管理機(jī)制;只有Hook鉤子調(diào)用自定義鏈時(shí),才生效

iptables規(guī)則注意事項(xiàng)

  • 要實(shí)現(xiàn)哪種功能:判斷添加在哪張表上
  • 報(bào)文流經(jīng)的路徑:判斷添加在哪個(gè)鏈上
  • 報(bào)文的流向:判斷源和目的
  • 匹配規(guī)則:業(yè)務(wù)需要

2.3.1 iptables 命令

語(yǔ)法:iptables [-t table] SUBCOMMAND chain [-m matchname [per-match-options]] -j targetname [per-target-options]
選項(xiàng):
-t table: 指定表名
raw, mangle, nat, filter(默認(rèn))

-P:設(shè)置默認(rèn)策略;對(duì)filter表中的鏈而言,其默認(rèn)策略有:
ACCEPT 接受
DROP 丟棄

-s:指定源IP地址或范圍
-p, --protocol protocol:指定協(xié)議,可使用數(shù)字如0(all),可使用如下:
tcp, udp, icmp, icmpv6, udplite,esp, ah, sctp, mh

--dport:指定目標(biāo)服務(wù)端口,可設(shè)置范圍:
port[:port]

-j:處理動(dòng)作,可使用如下:
ACCEPT(允許),DROP(丟棄),REJECT(拒絕),RETURN(返回調(diào)用鏈),REDIRECT(端口重定向),LOG(記錄日志),MARK(做防火墻標(biāo)記),DNAT(目標(biāo)地址轉(zhuǎn)換),SNAT(源地址轉(zhuǎn)換),MASQUERADE(地址偽裝)

-L:list, 列出指定鏈的所有規(guī)則,本選項(xiàng)須置后
-n:numberic,以數(shù)字格式顯示地址和端口號(hào)
-v:verbose,詳細(xì)信息
--line-numbers:顯示規(guī)則的序號(hào)

2.3.2 iptables 常見擴(kuò)展

multiport擴(kuò)展:以離散方式定義多端口匹配,最多指定15個(gè)端口
格式:--dports port[,port|,port:port]... 指定多個(gè)目標(biāo)端口

iprange擴(kuò)展:指明連續(xù)但一般不是整個(gè)網(wǎng)絡(luò)的ip地址范圍
格式:--src-range from[-to] 源IP地址范圍

state擴(kuò)展:根據(jù)“連接追蹤機(jī)制”去檢查連接的狀態(tài),較耗資源
conntrack機(jī)制:追蹤本機(jī)上的請(qǐng)求和響應(yīng)之間的關(guān)系

  • 狀態(tài)有如下幾種:
    NEW:新發(fā)出請(qǐng)求;連接追蹤信息庫(kù)中不存在此連接的相關(guān)信息條目,因此,將其識(shí)別為第一次發(fā)出的請(qǐng)求
    ESTABLISHED:NEW狀態(tài)之后,連接追蹤信息庫(kù)中為其建立的條目失效之前期間內(nèi)所進(jìn)行的通信狀態(tài)
    RELATED:新發(fā)起的但與已有連接相關(guān)聯(lián)的連接,如:ftp協(xié)議中的數(shù)據(jù)連接與命令連接之間的關(guān)系
    INVALID:無(wú)效的連接,如flag標(biāo)記不正確
    UNTRACKED:未進(jìn)行追蹤的連接,如raw表中關(guān)閉追蹤

示例:放行telnet, ftp, web服務(wù),放行samba服務(wù),其他端口服務(wù)全部拒絕

modprobe nf_conntrack_ftp  ##裝載ftp連接追蹤的專用模塊

iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -m multiport --dports 21,23,80,139,445 -j ACCEPT
iptables -A INPUT -j REJECT

iptables -nL  ##查看入站規(guī)則列表
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:53
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:53
ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0            udp dpt:67
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:67
ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            multiport dports 21,23,80,139,445
REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-port-unreachable
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容