vsftpd丶NFS丶SAMBA nfs基於rpcsamba基於cifs(smb) DRBD:ftp:File Transfer protocol 文件傳輸協議 兩個連接: tcp:命令連接 tcp:數據連接 在被動模式下數據傳輸埠是隨機的除非自己指定 主動模式:伺服器端通過20埠主動連接客戶端 ...
vsftpd丶NFS丶SAMBA
nfs基於rpc
samba基於cifs(smb)
DRBD:
ftp:File Transfer protocol 文件傳輸協議
兩個連接:
tcp:命令連接
tcp:數據連接 在被動模式下數據傳輸埠是隨機的除非自己指定
主動模式:伺服器端通過20埠主動連接客戶端,
被動模式:客戶端使用自己與伺服器端建立連接。
預設情況下FTP協議使用TCP埠中的 20和21這兩個埠其中20用於傳輸數據,21用於傳輸控制信息。但是,是否使用20作為傳輸數據的埠與FTP使用的傳輸模式有關,如果採用主動模式,那麼數據傳輸埠就是20;如果採用被動模式,則具體最終使用哪個埠要伺服器端和客戶端協商決定。
防火牆上連接追蹤
數據要流式化
文本:文件流
二進位
c/s
Server:
wu-ftpd(華盛頓大學的fdtp)
proftpd
pureftp
vsftpd Very Secure ftpd
iis
ServU
Client:
GUI
windows
flashfxp
cuteftp
filezilla(開源)
linux
gftp
CLI
ftp
lftp
wget
lftpget
用戶認證:
系統用戶
虛擬用戶
hash file
mysql
匿名用戶
數據傳輸安全
sftp:ssh提供的基於ssh協議的ftp
ftps:基於ssl的ftp
相應碼:
1XX:信息碼
2XX:成功狀態碼
3XX: 進一步提示補全信息的狀態碼
4XX:客戶端錯誤,臨時錯誤
5XX: 伺服器端錯誤,永久性錯誤
安裝vsftpd
/etc/pam.d/vsftpd:認證文件
pam:Plugable Authentication Module 插件式認證模塊
nsswith:名稱解析框架
模塊化:/lib64/linbnss*,/usr/lib64/libnss*
配置文件:/etc/nsswitch.com
pam:認證框架
模塊化:/lib64/security/pam*.so
配置文件:/etc/pam.conf和/etc/pam.d/*
服務腳本:/etc/rc.d/init.d/vsftpd
配置文件:/etc/vsftp/vsftpd.conf
主程式文件:/usr/sbn/vsftpd
數據文件:/var/ftp
空閑頂格寫:
等號前後沒有空格
anonymous或ftp
對於ftp訪問ftp伺服器時應該對其chroot
禁錮用戶與其家目錄中
chroot_local_user={yes|no} 禁錮用戶,預設為no
需要禁錮開啟為yes,安全
chroot_list_enable={yes|no}
chroot_list_file=/etc/vsftp/chroot
不禁錮全部用戶,將禁錮的用戶保存在/etc/vsftp/chroot
每行一個用戶
兩項不能同時使用
local_enable={yes|no}是否需要本地用戶登錄
匿名用戶的配置
anonymous_enable=YES,啟動虛擬用戶登錄
anon_upload_enable=YES 允許虛擬用戶有寫許可權
anon_other_write_enable=YES 允許虛擬用戶有刪除許可權
anon_mkdir_write_enable=YES 允許虛擬用戶創建文件夾許可權
註意:啟用寫入功能時,ftp用戶對相應的本地文件系統也有相應的寫入許可權;
生效的許可權取決於文件系統許可權和服務許可權的交集
實現用戶的歡迎信息login banners
ftpd_banner=
banner_file=banner文件
切換目錄式的歡迎信息
dirmessage_enable=YES
在目錄中創建.messages
vsftp控制登陸系統用戶的機制
/etc/vsftpd/ftpusers中的用戶不允許使用ftp伺服器,這是在/etc/pam.d/vsftpd中定義的
user_list配置文件有兩種用法
黑名單: 裡面的無法登陸,不寫在裡面的可以登陸
userlist_enable=YES
uselist_deny=YES
白名單:裡面的可以登陸,不寫在裡面的無法登陸
userlist_enable=YES
uselist_deny=NO
連接限制
max_clients:最大併發連接數
max_per_ip:每IP可同時發起併發請求
傳輸速率:
anon_max_rete: 匿名用戶的傳輸速率,單位為“位元組/秒”
local_max_rate:本地用戶傳輸速率,單位為“位元組/秒”
上傳文件的umask:
anno_umask:匿名用戶上傳文件的umask;
local_umask:
修改匿名用戶上傳文件的屬主和屬主
chown_uploads=YES
chown_username=用戶名
實現虛擬用戶:使用虛擬用戶的原因是因為使用系統用戶不安全,增刪重要文件之類的。
所有的虛擬用戶會映射成一個系統用戶,訪問時的文件目錄是為此系統用戶的家目錄
虛擬用戶
hash編碼的文件:
奇數行為用戶名,偶數行為密碼
關係型資料庫:
pam-mysql(第三方模塊)實現認證
虛擬用戶的許可權
user_config_dir=文件夾
在文件夾中創建虛擬用戶同名的的文件
在虛擬用戶的文件中寫入許可權
總結:
ftp:命令和數據
ftp數據傳輸:文本和二進位
數據連接的工作模式:主動和被動
/etc/vsftpd
匿名用戶的許可權
本地用戶的訪問許可權
本地用戶禁錮於家目錄
本地用戶黑白名單
歡迎信息
上傳的umask
上傳文件的速率
上傳文件的屬主
最大併發連接數
虛擬用戶
日誌
NFS:network file system
V1
V2
V3
V4
為nfs提供監聽的
2049/tcp
2049/udp
NIS:Nerwork Infomction Service
NIS+
不完全相容
Kerberos
LDAP
RPC:portmapper
監聽
111/tcp
111/udp
各基於RPC提供的進程,在啟動時要向rpc註冊監聽在某埠上,rpc會從各未使用的埠中挑選一個埠給此進程監聽,即半隨機
NFS:
安裝配置:
nfs-utils
三個關鍵進程
moutnd 掛載守護進程,負責客戶端來源認證進程
nfsd:文件讀寫
idmapd:id映射進程
/etc/exports,建議直接導出一個分區(即給NFS文件系統一個單獨的分區會更好)
文件系統 客戶端1(文件系統導出屬性) 客戶端2(文件系統導出屬性)
文件系統
客戶端:
IP:172.16.100.7
Hostname: *.magedu.com
IP networks: 長短格式都可以
文件系統導出屬性:
rw:讀寫
async:非同步
sync:同步
root_squash:壓縮root用戶,基於imapd,將root通過網路訪問時轉換為nfsnobody用戶
no_root_squash:不壓縮用戶
all_squash:壓縮所有用戶
anonuid,anongid:指定
showmount
-a 全部 在nfs伺服器端顯示所有的掛載會話
-d 文件 在伺服器端執行,顯示那個導出的文件系統被那些客戶端掛載過
-e 共用,在客戶端執行,探查某主機所導出的nfs文件系統,使用格式為showmount -e Server_IP
exportfs導出nfs文件(可以不用重啟服務,避免瞭如果重啟服務正在傳輸一些文件的丟失)
-a:操作所有文件系統
-ra:重新導出所有文件系統
-ua:取消導出的所有文件系統
-v:顯示詳細信息
如果客戶端要啟用開機自動掛載NFS,掛載的設備為伺服器端IP:/nfs文件系統名 ,但是如果伺服器端需要導出NFS文件系統,那麼就得再掛載選項裡加入defaults,_netdev
保證其不會一直請求掛載。
nfs的輔助進程mountd等監聽在固定埠上,可以通過在編輯/etc/sysconfig/nfs等參數來實現
samba:
smb:Service Message Block smbd tcp:445
NetBIOS:本地名稱解析 nmbd udp:137 138 tcp:139
winbindd:window的綁定進程
註意:samba伺服器的啟動時 nmb 名稱解析,和smb協議 都應該啟動
AD(LDAP)
Active Directory
DC
UNC: \\Server\Shared
所謂的samba是因為WINDOS間只支持smb協議之間進行進程調用,而LINUX間只支持RPC下的NFS所以為了兩者能夠通信,所以在LINUX上有人開發了SAMBA支持兩者之間的進程調用。
samba的用戶:
1.系統用戶
2,密碼是獨立的,非為/etc/shadow中的密碼
使用smbpasswd -a 用戶名 設置訪問smb的密碼
密碼文件被加密後存在在一個特殊路徑下,ls -a 也無法查看、
預設訪問的是用戶的家目錄。 那麼如何配置一個公共的共用目錄提供訪問。
smbclient:
檢查伺服器上的共用:
sambclient -L Server -U username
以互動式模式連入伺服器的某共用
smbclient //Server/Shared -U username
vim /etc/smb.comf
新建一個共用文件
[shared name] 共用名
comment= 滑鼠懸停在文件夾上線顯示的機械能系
path 共用文件夾路徑
read only =
writeable =
browaeable =
public =
guset ok = 是否允許來賓賬號訪問。
write list = 可寫用戶列表
用戶名:hadoop
用戶組:@groupname,+groupname
測試配置文件語法錯誤,並顯示最終生效的配置
testparm
掛載cifs文件系統
mount -t cifs //IP/Shared /path/to/mount_point -o username=smbuser
iptables
iptables:基於軟體的形式實現的一種防火牆的軟體程式
Firewall:工作在主機或網路邊緣,對進出的報文按事先定義的規則進行檢查,並且由匹配到的規則進行處理的一組硬體或軟體,甚至可能是兩者的組合
主機防火牆:工作於主機邊緣,只能對一臺主機起到保護作用
網路防火牆:工作於網路邊緣,對多台主機起到保護作用
一般來講網路防火牆對多台主機起保護作用,那麼符合不同主機的不同功能的報文都會放行,而當到達某個主機的時候 就應該用主機防火牆來進一步隔離。因此 很多時候都是主機防火牆和網路防火牆配合工作的。
網路層:網路防火牆
應用層:網關
IDS:入侵檢測
HIDS:OSSEC 主機型入侵檢測
NIDS:snort 網路型入侵檢測
Filesystem:tireware 文件系統級別的入侵檢測
IPS:入侵防禦系統+Firewall 與防火牆聯動
honeypot:蜜罐 做誘補工作
系統評估安全工具:
Nessus,nmap
BTlinux
rootkit
烏雲平臺
iptables/netfilter:基於網路層的防火牆,連接追蹤(狀態檢測)
ipfw ipchains iptables
iptables:防火牆規則編寫工具
netfiter:網路過濾器,是一個框架
hook_function
PRERROUTING 路由前 主要做目標地址轉換
INPUT
OUTPUT
FORWARD
POSTROUTING 路由後 主要做源地址轉換
這裡稍微解釋一下:一個報文進來 發現目標地址並不是本機,那麼通過路由 指向FORWARD
這時候不應該做轉換。因為還沒有指向哪個地址 例如有多塊網卡的情況下。所以說FORWARD是用來判斷指向哪塊網卡的,當到達POSTROUTING時才進行源地址轉換,將源地址轉換為網關的地址,轉發到目標地址的主機上去。然後當響應報文進來的時候,目標地址肯定是本機,但是實際上是要將報文響應給用戶的。 於是PRERROUTING就發揮作用了,將目標地址進行轉換,轉換為用戶機。
filter:過濾:做報文篩選 私有地址發送的報文 是不會被送回來的,就像游覽網站時,發送過去的報文是不會被返回的。除非做代理和地址轉換。
NAT:Network Address Transltion 將報文中的源地址和目標地址 轉換為另外的地址
DNAT
SNAT
mangle:對報文進行修改,不實現過濾也不實現地址轉換,只對報文中的一些信息進行修改,然後重新封裝。因此在任何位置都能有這個功能
raw:
FORWARD:
filter
mangle
INPUT
filter
mangle
OUT
filter
mangle
nat
PREROUTING
mangle
nat
POSTOUTING
mangle
nat
將控制強的放在前面,應用訪問頻繁的也要放在前面
四表:
fileter,net,mangle,raw
五鏈
PREROUTING(路由前) INPUT FOREARD OUTPUT POSTROUTING(路由後)
表和鏈的對應關係
filer:INPUT,FORWARD.OUTPUT
nat:PREROUTING OUTPUT POSTROUTING
magle:PREROUTING FORWARD POSTROUTING INPUT OUTPUT
規則:檢查條件,處理機制,如果規則太多了,可能又將規則串為一條自定義的鏈,併在檢查時將報文送給自定義的鏈檢查後再送回原先的鏈繼續檢查
通:白名單,預設為堵,只對能識別的進行放行
堵:黑名單,預設為通,只對能識別的進行阻截
檢查條件:
IP:SIP,DIP
TCP:SPORT,DPORT,FLags
UDP:SPORT,DPORT
ICMP:ICMP-TYPE
擴展機制:
time string state(connection-tracking)連接追蹤
處理機制:
DROP(丟棄),
REJECT(拒絕,並返回)
ACCEPT(允許)
SNAT
DNAT
RETURN(返回)
REDIRECT(埠轉發)
LOG(只記錄日誌)
mangle:做防火牆標記
自己在網上找的關於TCP連接時3次握手和斷開時四次握手的必要性https://www.cnblogs.com/qiaoconglovelife/p/5733056.html(連接時的一些數值(+ -號可能沒標明)
如何寫規則
-t 表 -L 列出 -n 以數值方式顯示
iptables [-t table] -N chain
創建一條自定義的空規則鏈
iptables [-t table] -X chain
產出一條自定義的空規則鏈
iptables [-t table] -E old-chin-name new-chain-name
為鏈修改名
iptables [-t table] -P chain—name target
為鏈指定預設策略,修改預設的屬性
iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]
註意當省略"-t表名"時,預設表示操作filter表
-F 清空鏈中的規則 可以指定哪個鏈,或者哪個鏈中的哪些規則
規則由編號,在鏈中自上而下,從1開始
-L list 列出表中的所有規則
-n:數字格式顯示ip和port
-v:顯示信息,
pkts:packets,被本規則所有匹配到的報文的個數
baytes:被本規則所匹配到的所有報文的大小子和,單位是位元組,會執行單位換算
target:目標,即處理機制
port:協議一般為(TCP|UDP|ICMP)
opt:可選項
in:數據包的流入埠
out:數據包的流出介面
scource:源地址
destination:目標地址
-vv:
-vvv:更加詳細
-x:exactly:精確值,不執行單位換
--line-nambers:顯示各規則的行號
-Z:zero,清零:
把規則的計數器清零
-P 設置指定鏈的預設策略
iptables -P INPUT DROP
iptables [-t table] {-A|-D} chain rule-specification
-A:append,附加一條規則
rule-specification
匹配條件 -j 處理機制
匹配條件:
通用匹配
-s 匹配原地址,可以IP,也可以網路地址:可以使用!操作符取反,!172.168.0.0/16 相當於 --src,或 --source
-d 匹配目標地址,可以IP,也可以網路地址:可以使用!操作符取反,!172.168.0.0/16
-p 匹配協議,通常只能使用{TCP|UDP|ICMP}三者之一
-i 數據報文流入的介面,通常只用於INPUT,FORWARD和PREROUTING
-o 數據報文流出的介面,通常只用OUTPUT,FORWARD和POSTROUTING
保存規則:
service iptables save
規則會被保存至/etc/sysconfig/iptables文件中:
預設,start時也會讀取次文件中的內容篇日誌規則
iptables-save > /path/to/some_rulefile 保存iptables至別的位置
iptables-restore < /path/to/some_rulefile 從自定義的位置讀取並使之生效
規則命令:
-A:添加
-D:刪除
iptables [-t table] -D chain rulenum(規則所在行數)
當一條被刪除,後續的條目會被補上
插入規則
iptables [-t table] -I chain [rulenum] rule-specification
不帶規則行數 預設為第一行
替換規則(覆蓋指定規則)
iptables [-t table] -R chain rulenum rule-specification
顯示指定鏈上的規則添加命令
iptables [-t table] -S [chain [rulenum]]
擴展匹配
隱含擴展:使用-p {tcp|udp|icmp}指定某特定協議後,自動能夠對協議進行的擴展
-p tcp
--dport m[-n],匹配的目標埠,可以是連續的多個埠
--sport:m[-n],匹配的源埠,可以是連續的多個埠
--tcp-flags
URG PSH PST SYN ACK FIN
例如後面加上 rst,syn,ack,fin syn
那麼這個意思就是 必須syn為1 其他的必須為0 另外還能寫成ALL,NONE
-p udp
--dport m[-n],匹配的目標埠,可以是連續的多個埠
--sport:m[-n],匹配的源埠,可以是連續的多個埠
-p icmp
--icmp-type 8是ping請求 0是ping響應
例子:放行ping其他主機
iptables -A INPUT -d 192.168.48.128 -p icmp --icmp-type 0 -j ACCEPT
iptables -A OUTPUT -s 192.168.48.128 -icmp --icmp-type 8 -j ACCEPT
顯式擴展:必須要明確指定的擴展模塊
-m 擴展模塊名稱 --專用選項1 --專用選項2
multiport:多埠匹配,一次指定多個離散埠
--source-ports --sports ports{port1 port2}
--destination-ports, --dports
例子iptables -A INPUT -d 192.168.48.128 -p tcp -m multiport --dports 21,80 -A ACCEPT
iprange:ip地址服務
[!] --src-range from [-to]
[!] --dst-range from [-to]
例子:
iptables -A INPUT -d 192.168.48.128 -p tcp --dport 23 -m --src-range from 192.168.48.129-192.168.48.130 -j ACCEPT
iptables -A OUTPUT -s 192.168.48.128 -p tcp --dport 23 -m iprange --dst-range from 192.168.48.129-192.168.48.130 -j ACCEPT
time 指定時間範圍
--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--timestart hh:mm[:ss]
--timestart hh:mm[:ss]
[!] --weekdays day[,day....]
例子iptables -A INPUT -d 192.168.48.128 -p tcp -dport 80 -m time --weekdays 1,2,3,4,5 --timestart 8:00 --timestop 21:00 -j ACCEPT
string 字元串匹配
--alog {bm|kmp} :字元匹配查找時使用的演算法 必要選項
--string “STRING” :要查找的字元串 必要選項
--hex-string "HEX-STRING" 要查找的字元,先編碼成16進位格式
例子iptables -I OUTPUT -s 192.168.48.128 -p tcp -sport 80 -m string --alog bm --string "hello" -j DROP
例如對游覽器訪問限制含有字元串“hello"不能通行
另外很重要的一點是 這裡選擇了插入的方式,並且沒有選定插入的行數。說明插入的是第一行。因為這裡相比於其他阻截方式更為嚴格,即含有字元的限制。所以說如果你有對HTTP請求的一些普通限制,
connlimit:每IP對指定服務的最大併發連接數
[!] --connlimit-above
limit:報文速率控制
--limit number[/second|/minute|/hour|/day]
--limit-burst # number 峰值
hping3:安裝此包,做測試
state:狀態追蹤
ip_conntrack,nf_conntrack 通過這些模塊實現對整個連接的追蹤。內部有個表記錄各個連接的各種信息。
!註意:內部用來存儲記錄的空間是有限的,例如只能存儲1000個記錄連接,那麼下一個連接進來的時候就不會被記錄進來。這並不是沒有記錄信息那麼簡單,這造成了整個伺服器的拒絕連接請求。所以要將這部分記憶體空間加大。
netfilter:會話
這其中有個自己進行控制的連接狀態記時器,只要新連接進來成為NEW,在連接狀態計時器倒計時為0前,一直處於ESTABLISHED狀態,這種可以使用與任何協議(與TCP三次握手的ESTABLISHED有區別)
--state
NEW 新的連接
ESTABLISHED 連接中
RELATED 即一些連接之間是有依賴關係的(特別適用於被動模式下的FTP服務)
INVALID 無效連接
狀態匹配的簡單介紹:例如我們對HTTP的INPUT的鏈做了限制,但是OUTPUT鏈是無法做限制的。因為我們HTTP的回覆是面向全體的。於是 一些木馬程式攻破了INPUT鏈,通過控制了新的程式埠並從OUTPUT出去並控制了主機。所以這時候基於狀態追蹤就能很好的防護,INPUT鏈 只能夠接受NEW和ESTABLISHED 這兩種狀態的連接。而OUTPUT鏈只接受ESTABLISHED 狀態的連接 。這樣就起到了很好的防護作用
調整連接追蹤功能所能容納的最大連接數
cat /proc/sys/net/nf_conntrack_max
定義了連接追蹤的最大值,因此,建議按需調大此值
cat /proc/net/nf_conntrack
記錄了當前追蹤的所有連接
cat /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established
超時時間 這個超時時間比較難定義 定義少了在用戶訪問時間挺長時就會給你自動斷開,定義長了,有大量用戶訪問的網站將出現一些用戶無法訪問的跡象
因此state 是一把雙刃劍,他能夠對安全起更好的作用,但是對一些大流量的網站來說需要謹慎開啟
法則:
1.對於進入狀態為ESTABLISHED都應該放行 ,即將狀態為ESTABLISHED的規則放置在input規則鏈中的第一個,只要是ESTABLISHED的連接都可以直接放行,而後續規則則嚴格檢查NEW狀態的。但是後續的一些更嚴格的規則比如速率控制的規則將無法生效。所以應該對規則進行優化。
2.對於返回狀態為ESTABLISHED都應該放行
3.嚴格檢查進入的狀態為NEW的鏈接
4.所有狀態為INVALID都應該拒絕
規則優化的一些原則:以下原則有等級
1.將有更加嚴格要求的規則放在最前面
2.將一些頻繁需要檢查的規則合併,但同時最好也要修改一下PROT即協議類型(如對INPUT鏈ESTABLISHED狀態應該全部放行)
3.同一些協議的普通的 沒有嚴格要求的協議應該合併
-j target
RETURN:返回調用鏈
例如我自定義了一個鏈 iptables -t filter -N clean_in
在寫好這個鏈的一些規則後,如 iptables -A clean_in -d 192.168.48.128 -p tcp --tcp-flags ALL ALL -j DROP
對自定義的鏈進行返回 iptables -A clean_in -d 192.168.48.128 -j RETURN
主鏈對自定義的鏈進行調用 iptables -A INPUT -d 192.168.48.128 -j clean_in
如何放行工作與被動模式的ftp服務(因為FTP被動模式下的數據傳輸埠是隨機的,除非自己特殊指定)
1、確保iptables載入ftp協議支持的模塊,ip_nat_ftp,ip_conntrack_ftp
編輯/etc/syconfig/iftables-config文件,定義如下參數:
IPTABLES_MIDULES="ip_nat_ftp ip_conntrack_ftp"
2。放行請求報文的RELATED和ESTABLISHED狀態,放行響應報文的ESTABLISHED狀態
iptables的nat
-m state:追蹤連接狀態
模板:記憶體中會維持一個空間
NEW
ESTABLISHED
RELATED
INVALID
在前段的伺服器中儘量不要開啟追蹤連接
iptables子命令
規則:-A,-I,-D,-R
鏈:-N,-X,-F,-Z,-E,-P -S
通:預設 DROP
堵:預設ACCEPT
顯示:-L -S
-L
-n -v -x --line-numbers
規則定義:iptables -t table -A|-I|-R chain 匹配條件 -j target
匹配條件
通用匹配:-s -d -i -o -p
擴展匹配
隱含擴展
-p tcp
--sport --dport --tcp-flags
--syn
-p udp
--sport --dport
-p icmp
--icmp-type
echo-request 8
echo-reply 0
顯示擴展:
-m state
--statr
-m multiport
--sprots --dports --ports
-m iprange
--src-range --dst-range
-m string
-algo {bm|kmp} --string --hex-string
-m connlimit
! --connlimit-above
-m limit
--limit n(/second|/minute|/hour|/day), --limit-burst
-m time
--datestart --datestop
--timestart -- timestop
--weekdays
-j
ACCEPT,DROP,REJECT,LOG,REDIRECT,SNAT,DNST,MASQUERADE,MARK,RETURN,自定義
四表:raw mangle nat filte
五鏈:PREROUTING INPUT FOEWARD OUTPUT POSTOUTING
iptables-save iptables-restore
主機防火牆:INPUT OUTPUT
網路防火牆:FORWARD
路由:
地址屬於內核,地址當前屬於主機的都給予響應
路由:對Linux主機而言,設定/proc/sys/net/ipv4/ip_forward的值為1,即為開啟路由
iptables -A FORWARD -s 172.16.0.0/16 -d 192.168.20.0/24 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -s 192.168.20.0/24 -d 172.16.0.0/16 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT
iptables -A FORWARD -d 192.168.20.12 -p tcp -m multiport 22,80 -m --state NEW -j ACCEPT
路由表的生成
靜態:手動添加
動態:基於路由協議學習,RIP2 OSPF
NAT:網路地址轉換
A:10
B:172.16-172.31
iptables -A FORWARD -s 172.16.0.0/16 -d 192.168.20.0/24 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -s 192.168.20.0/24 -d 172.16.0.0/16 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT
iptables -A FORWARD -d 192.168.20.12 -p tcp -m multiport 22,80 -m --state NEW -j ACCEPT
C:192.168.0-192.168.255
NAT: 要註意NAT技術和路由的區別 。NAT技術是用於內網和外網的訪問的,而路由主要實現的是地址轉向
過載技術
Basic NAT:靜態NAT
NAPT:動態NAT,網路地址埠轉換
源地址轉換:SNAT 用於內網主機訪問互聯網
目標地址轉換:DNAT
讓互聯網上主機訪問本地內網上的某伺服器上的服務
iptables基於SNAT和DNAT這兩個目標實現地址轉換技術
-j SNAT --to-source SIP
規則添加:POSTROUTING鏈
iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -j SNAT --to-souer 192.168.48.128
-j MASQUERAADE 動態獲取 適用於主機的IP是動態分配的。缺點是性能降低
-j DNAT --to-destination DIP{:PORT}
支持埠映射
iptables -t nat -A PREROUTING -d 172.16.100.7 -p tcp --dport 80 -j DNAT --to-destination 192.168.48.128
這邊強調一下埠,埠意義是指向的某種服務。那麼比如一個用戶想要去訪問本地內網上的某伺服器上的http服務。這邊假設用戶主機為A 作為路由以及NAT地址轉換的主機為B 提供服務的主機為C。 我們應該訪問主機B的IP地址加上不應該為80埠號的地址,因為若為80埠,那麼意思將會是訪問B主機的http服務,然後將IP轉換時變為 C主機的IP號加80埠號。因此在B主機上應該將提供http服務的80埠和提供轉向的埠22022做好區分
具體例子
iptables -t nat -A PREROUTING -d 192.168.48.128 -dport 22022 -j DNAT --to-destination 192.168.48.129:22
所以:FORWARD僅僅是做一個對地址路由過濾的作用,而NAT是對地址進行轉換的作用 對網路進行過濾的話應該在FORWARD上就進行了
基於net表
PREROUTING
POSTROTING
OUTPUT
Proxy(代理):
rsync
rsync:remote sync
cp scp(rsync不具備加密) rsync對文件夾之間會逐一比較是否有不同,若有不同或缺失則替換新文件。沒有不同的文件則不理會。所以比較快速
rsync命令的工作模式
第一種:shell模式,也稱作本地模式
第二種:遠程shell模式,此時可以利用ssh協議承載其數據傳輸過程
第三種:列表模式,其工作方式與ls相似,僅列出源的內容:-nv
第四種:伺服器模式,此時,rsync可以工作在守護進程,能夠接收客戶端的數據請求;在使用時,可以在客戶端使用rsync命令把文件發送到守護進程,也可以像伺服器請求獲取文件
rsync有許多選項:
-n:測試,在不確定命令是否能按照意願執行時,務必要實現測試
-v:詳細輸出模式,--verbose
-q:--quiet,靜默模式
-c:--checksum,開啟校驗功能,強行對文件傳輸進行校驗
-r:--recursive,遞歸複製
-a: --archives.歸檔,保留文件的原有屬性
-p:--perms 保留文件的許可權
-t: --times 保留文件的時間戳
-l:--links 保留文件的符號鏈接
-g:--group保留文件的屬組
-o:--owner 保留文件的屬主
-D:--devices 保留設備文件
-e ssh:表示使用ssh協議作為繼承
-z:對文件壓縮後傳輸
--progress:顯示進度
註意:rsync命令使用中,如果源參數的末尾有斜線,只會複製指定目錄的內容,而不複製目錄本身,沒有斜線,則會複製目錄本身。包括目錄
rsync -r /mydata/data /bachups/ 會把目錄data直接同步至/bakups目錄中
rsync -r /mydata/data/ /backups/:會把目錄data/中的內容至/backups目錄中
例子基於ssh協議將本地目錄同步到目標主機: rsync -e ssh -r /etc [email protected]:/tmp/
同時也可以將目標主機的同步到本地rsync -e ssh -r [email protected]:/etc /tmp/
本地cp
rsync 源目錄 目標地址
查看幫助 man rsyncd.conf
配置rsync以daemon的方式運行
1.設定rsync伺服器端:
1)安裝超級守護進程 xinetd
yum -y install xinetd
2)為rsync提供配置文件 具體的配置還得看官方文檔
配置文件為/etc/rsync.conf
定義一個全局配置和多個rsync共用配置
#Global Settings
uid = nobody 以哪個用戶去運行進程
gid = nobody
use chroot = no(是否禁錮用戶家目錄)
max connections = 10(最大連接數)
strict modes = yes(是否完全檢查)
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
#Directory to be synced
[synced_name]
path = /path/to/some_dir
ignore errors = yes(是否忽略錯誤)
read only = no(只讀)
write only = no(只寫)
hosts allow = white_list_ip/net 白名單
hosts deny = black_list_ip/net 黑名單
說明:
1.預設規則為允許訪問,二者都不出現時
2.只出現hosts allow:定義白名單;但沒有被匹配到的由預設規則處理,即為允許
3,只出現hosts deny:定義黑名單;出現在名單中的都被拒絕
4二者同時出現,先檢查hosts allow,如果匹配就allow,否則,檢查hosts deny 如果匹配則拒絕,如二者均無匹配,則使用預設的,即允許
list = false 是否允許列出名單
uid = root(以哪個用戶去操作文件)
gid = root
auth users = username (允許的用戶)
secrets file = /etc/rsync.passwd 用戶密碼的存放位置
3)配置密碼文件/etc/rsync.passwd
username:password
文件許可權要設置為600
4)配置服務能夠啟動
chkconfig rsync on
service xinetd start
監聽與873/tcp
2.在客戶端做測試
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
rsync --password-file=/etc/rsyncd.passwd install.log [email protected]::mydata 將本地文件發送到服務端
rsync [email protected]::mydata/* /etc 但是將服務端文件同步到本機需要將服務端目錄加個*
如果客戶端本地提供了密碼文件那麼就不需要去輸密碼,而沒有提供的話則每次都需要輸相應的密碼。
如果需要做周期性操作,定義crontab
nfs基於rpc
samba基於cifs(smb)
DRBD:
ftp:File Transfer protocol 文件傳輸協議
兩個連接:
tcp:命令連接
tcp:數據連接 在被動模式下數據傳輸埠是隨機的除非自己指定
主動模式:伺服器端通過20埠主動連接客戶端,
被動模式:客戶端使用自己與伺服器端建立連接。
預設情況下FTP協議使用TCP埠中的 20和21這兩個埠其中20用於傳輸數據,21用於傳輸控制信息。但是,是否使用20作為傳輸數據的埠與FTP使用的傳輸模式有關,如果採用主動模式,那麼數據傳輸埠就是20;如果採用被動模式,則具體最終使用哪個埠要伺服器端和客戶端協商決定。
防火牆上連接追蹤
數據要流式化
文本:文件流
二進位
c/s
Server:
wu-ftpd(華盛頓大學的fdtp)
proftpd
pureftp
vsftpd Very Secure ftpd
iis
ServU
Client:
GUI
windows
flashfxp
cuteftp
filezilla(開源)
linux
gftp
CLI
ftp
lftp
wget
lftpget
用戶認證:
系統用戶
虛擬用戶
hash file
mysql
匿名用戶
數據傳輸安全
sftp:ssh提供的基於ssh協議的ftp
ftps:基於ssl的ftp
相應碼:
1XX:信息碼
2XX:成功狀態碼
3XX: 進一步提示補全信息的狀態碼
4XX:客戶端錯誤,臨時錯誤
5XX: 伺服器端錯誤,永久性錯誤
安裝vsftpd
/etc/pam.d/vsftpd:認證文件
pam:Plugable Authentication Module 插件式認證模塊
nsswith:名稱解析框架
模塊化:/lib64/linbnss*,/usr/lib64/libnss*
配置文件:/etc/nsswitch.com
pam:認證框架
模塊化:/lib64/security/pam*.so
配置文件:/etc/pam.conf和/etc/pam.d/*
服務腳本:/etc/rc.d/init.d/vsftpd
配置文件:/etc/vsftp/vsftpd.conf
主程式文件:/usr/sbn/vsftpd
數據文件:/var/ftp
空閑頂格寫:
等號前後沒有空格
anonymous或ftp
對於ftp訪問ftp伺服器時應該對其chroot
禁錮用戶與其家目錄中
chroot_local_user={yes|no} 禁錮用戶,預設為no
需要禁錮開啟為yes,安全
chroot_list_enable={yes|no}
chroot_list_file=/etc/vsftp/chroot
不禁錮全部用戶,將禁錮的用戶保存在/etc/vsftp/chroot
每行一個用戶
兩項不能同時使用
local_enable={yes|no}是否需要本地用戶登錄
匿名用戶的配置
anonymous_enable=YES,啟動虛擬用戶登錄
anon_upload_enable=YES 允許虛擬用戶有寫許可權
anon_other_write_enable=YES 允許虛擬用戶有刪除許可權
anon_mkdir_write_enable=YES 允許虛擬用戶創建文件夾許可權
註意:啟用寫入功能時,ftp用戶對相應的本地文件系統也有相應的寫入許可權;
生效的許可權取決於文件系統許可權和服務許可權的交集
實現用戶的歡迎信息login banners
ftpd_banner=
banner_file=banner文件
切換目錄式的歡迎信息
dirmessage_enable=YES
在目錄中創建.messages
vsftp控制登陸系統用戶的機制
/etc/vsftpd/ftpusers中的用戶不允許使用ftp伺服器,這是在/etc/pam.d/vsftpd中定義的
user_list配置文件有兩種用法
黑名單: 裡面的無法登陸,不寫在裡面的可以登陸
userlist_enable=YES
uselist_deny=YES
白名單:裡面的可以登陸,不寫在裡面的無法登陸
userlist_enable=YES
uselist_deny=NO
連接限制
max_clients:最大併發連接數
max_per_ip:每IP可同時發起併發請求
傳輸速率:
anon_max_rete: 匿名用戶的傳輸速率,單位為“位元組/秒”
local_max_rate:本地用戶傳輸速率,單位為“位元組/秒”
上傳文件的umask:
anno_umask:匿名用戶上傳文件的umask;
local_umask:
修改匿名用戶上傳文件的屬主和屬主
chown_uploads=YES
chown_username=用戶名
實現虛擬用戶:使用虛擬用戶的原因是因為使用系統用戶不安全,增刪重要文件之類的。
所有的虛擬用戶會映射成一個系統用戶,訪問時的文件目錄是為此系統用戶的家目錄
虛擬用戶
hash編碼的文件:
奇數行為用戶名,偶數行為密碼
關係型資料庫:
pam-mysql(第三方模塊)實現認證
虛擬用戶的許可權
user_config_dir=文件夾
在文件夾中創建虛擬用戶同名的的文件
在虛擬用戶的文件中寫入許可權
總結:
ftp:命令和數據
ftp數據傳輸:文本和二進位
數據連接的工作模式:主動和被動
/etc/vsftpd
匿名用戶的許可權
本地用戶的訪問許可權
本地用戶禁錮於家目錄
本地用戶黑白名單
歡迎信息
上傳的umask
上傳文件的速率
上傳文件的屬主
最大併發連接數
虛擬用戶
日誌
NFS:network file system
V1
V2
V3
V4
為nfs提供監聽的
2049/tcp
2049/udp
NIS:Nerwork Infomction Service
NIS+
不完全相容
Kerberos
LDAP
RPC:portmapper
監聽
111/tcp
111/udp
各基於RPC提供的進程,在啟動時要向rpc註冊監聽在某埠上,rpc會從各未使用的埠中挑選一個埠給此進程監聽,即半隨機
NFS:
安裝配置:
nfs-utils
三個關鍵進程
moutnd 掛載守護進程,負責客戶端來源認證進程
nfsd:文件讀寫
idmapd:id映射進程
/etc/exports,建議直接導出一個分區(即給NFS文件系統一個單獨的分區會更好)
文件系統 客戶端1(文件系統導出屬性) 客戶端2(文件系統導出屬性)
文件系統
客戶端:
IP:172.16.100.7
Hostname: *.magedu.com
IP networks: 長短格式都可以
文件系統導出屬性:
rw:讀寫
async:非同步
sync:同步
root_squash:壓縮root用戶,基於imapd,將root通過網路訪問時轉換為nfsnobody用戶
no_root_squash:不壓縮用戶
all_squash:壓縮所有用戶
anonuid,anongid:指定
showmount
-a 全部 在nfs伺服器端顯示所有的掛載會話
-d 文件 在伺服器端執行,顯示那個導出的文件系統被那些客戶端掛載過
-e 共用,在客戶端執行,探查某主機所導出的nfs文件系統,使用格式為showmount -e Server_IP
exportfs導出nfs文件(可以不用重啟服務,避免瞭如果重啟服務正在傳輸一些文件的丟失)
-a:操作所有文件系統
-ra:重新導出所有文件系統
-ua:取消導出的所有文件系統
-v:顯示詳細信息
如果客戶端要啟用開機自動掛載NFS,掛載的設備為伺服器端IP:/nfs文件系統名 ,但是如果伺服器端需要導出NFS文件系統,那麼就得再掛載選項裡加入defaults,_netdev
保證其不會一直請求掛載。
nfs的輔助進程mountd等監聽在固定埠上,可以通過在編輯/etc/sysconfig/nfs等參數來實現
samba:
smb:Service Message Block smbd tcp:445
NetBIOS:本地名稱解析 nmbd udp:137 138 tcp:139
winbindd:window的綁定進程
註意:samba伺服器的啟動時 nmb 名稱解析,和smb協議 都應該啟動
AD(LDAP)
Active Directory
DC
UNC: \\Server\Shared
所謂的samba是因為WINDOS間只支持smb協議之間進行進程調用,而LINUX間只支持RPC下的NFS所以為了兩者能夠通信,所以在LINUX上有人開發了SAMBA支持兩者之間的進程調用。
samba的用戶:
1.系統用戶
2,密碼是獨立的,非為/etc/shadow中的密碼
使用smbpasswd -a 用戶名 設置訪問smb的密碼
密碼文件被加密後存在在一個特殊路徑下,ls -a 也無法查看、
預設訪問的是用戶的家目錄。 那麼如何配置一個公共的共用目錄提供訪問。
smbclient:
檢查伺服器上的共用:
sambclient -L Server -U username
以互動式模式連入伺服器的某共用
&