第十二周作業(yè)

1、搭建vsftpd,并實(shí)現(xiàn)虛擬用戶

root用戶登錄

#?yum? install? vsftpd -y

安裝完后可以使用以下命令來(lái)啟停vsftpd服務(wù)

#?service? vsftpd? start

# service vsftpd? stop

# service vsftpd? restart

它的配置文件目錄為/etc/vsftpd/,該目錄下有主配置文件vsftpd.conf,接下就以實(shí)現(xiàn)虛擬用戶功能來(lái)配置一下vsftpd

虛擬用戶就是系統(tǒng)當(dāng)中不存在的實(shí)體用戶,它只能訪問(wèn)和使用ftp資源,但不允許訪問(wèn)系統(tǒng)的其他資源。虛擬用戶的認(rèn)證使用口令庫(kù)文件

(1)編寫(xiě)虛擬用戶的賬戶和密碼數(shù)據(jù)庫(kù)文件

編寫(xiě)一文本文件,奇數(shù)行為賬戶,偶數(shù)行為密碼。

# vi? /etc/vsftpd/vusers.list

用戶名1

密碼1

用戶名2

密碼2

……

安裝db4工具來(lái)把文本文件轉(zhuǎn)換成二進(jìn)制數(shù)據(jù)庫(kù)文件

#?yum install? ?db4-utils? ?-y

#? db_load? -T? -t? hash? ?-f? ?vusers.list? ? vusers.db

#? ?chmod 600? /etc/vsftpd/vusers.*

(2)創(chuàng)建ftp根目錄和虛擬用戶映射的系統(tǒng)用戶

#?mkdir? /var/ftproot

#? useradd -d /var/ftproot? -s? /sbin/nologin? ?virtual

#? chmod? ?755? ? /var/ftproot

(3)創(chuàng)建支持虛擬用戶的PAM認(rèn)證文件

#? vi? ?/etc/pam.d/vsftpd

auth? required? ?pam_userdb.so db=/etc/vsftpd/vusers

account? required??pam_userdb.so db=/etc/vsftpd/vusers

這里指向數(shù)據(jù)庫(kù)文件名時(shí),不要加后綴

(4)修改主配置文件

#? vi? ?/etc/vsftpd/vsftpd.conf

anonymous_enable=NO? ?#禁用匿名用戶

local_enable=YES? ? #啟用本地用戶

write_enable=YES? ? #本地用戶可以可寫(xiě)

anon_umask=022? ? ? #匿名用戶創(chuàng)建文件的掩碼權(quán)限

chroot_local_user=YES? ? #禁錮本地用戶不能超出其家目錄

guest_enable=YES? ? ?#?啟用guest用戶

guest_username=virtual? ? #虛擬用戶映射的系統(tǒng)用戶名

pam_service_name=vsftpd? ?#虛擬用戶的pam文件名,不需要路徑

(5)創(chuàng)建虛擬用戶配置文件

#? mkdir? ?/etc/vsftpd/vusers_dir? ? 創(chuàng)建虛擬用戶配置文件目錄

在主配置文件中開(kāi)啟虛擬用戶,并指定虛擬用戶配置文件目錄

#? vi? ?/etc/vsftpd/vsftpd.conf

virtual_use_local_privs=YES

user_config_dir=/etc/vsftpd/vusers_dir

在虛擬用戶配置文件目錄中為個(gè)別用戶創(chuàng)建獨(dú)立的配置文件

# vi /etc/vsftpd/vusers_dir/user1

anon_upload_enable=YES

anon_mkdir_enable=YES

(6)重啟vsftpd來(lái)重新加載

#? service? vsftpd restart

(7)測(cè)試過(guò)程

發(fā)現(xiàn)報(bào)錯(cuò)

226 transfer done but failed to open directory

需要把selinux關(guān)掉。

#? vi /etc/selinux/config

SELINUX=disabled

重啟# reboot

發(fā)現(xiàn)報(bào)錯(cuò):500 OOPS: vsftpd: refusing to run with writable root inside chroot()

如果啟用chroot,必須保證ftp根目錄不可寫(xiě),這樣對(duì)于ftp根直接為網(wǎng)站根目錄的用戶不方便

#? chmod? a-x? /var/ftproot

然后如果需要在ftp根目錄下創(chuàng)建目錄或文件。請(qǐng)自行創(chuàng)建。

2、簡(jiǎn)述iptales四表五鏈及詳細(xì)介紹iptables命令使用方法。

Linux系統(tǒng)上的防火墻是由iptables/netfilter組成,其中iptables是規(guī)則的制定工具,工作在用戶空間,它制定的規(guī)則送到內(nèi)核空間,netfilter在內(nèi)核協(xié)議框架中定義了5個(gè)位置通過(guò)鉤子函數(shù)對(duì)進(jìn)出的數(shù)據(jù)包進(jìn)行過(guò)濾。

iptables四表為filter ,? nat ,mangle ,? raw 。默認(rèn)表是flter,表的處理優(yōu)先級(jí)為:raw ,mangle,nat,filter。

filter:一般的過(guò)濾功能;

nat:?用于nat功能(地址轉(zhuǎn)換、映射、端口映射等)

mangle:用于對(duì)特定數(shù)據(jù)包的修改(使用情況少)

raw:? 一般是為了不再讓iptables做數(shù)據(jù)包的鏈接跟蹤處理,從而提高性能。

五個(gè)鏈分別是:

INPUT:?通過(guò)路由表判斷后目的地是本機(jī),然后進(jìn)入本機(jī)內(nèi)部資源

OUTPUT:?由本機(jī)產(chǎn)生的數(shù)據(jù)向外部轉(zhuǎn)發(fā)

FORWARD:通過(guò)路由表判斷后目的地不是本機(jī),然后通過(guò)路由轉(zhuǎn)發(fā)到其他地方

PREROUTING:流入的數(shù)據(jù)包進(jìn)入路由表之前

POSTROUTING:傳出的數(shù)據(jù)包到達(dá)網(wǎng)卡出口前

四個(gè)表對(duì)應(yīng)的鏈分別為:

filter: INPUT? ,? ?OUTPUT? ,? ?FORWARD

nat:? ?PREROUTING? ,? POSTROUTING? ?FORWARD

mangle: INPUT? OUTPUT??PREROUTING? ,? POSTROUTING? ?FORWARD

raw:??PREROUTING ?OUTPUT

iptables的語(yǔ)法格式:

iptables? ?[-t? TABLE ]? COMMAND? ?CHAIN? ?[-m matchname [per-match-options]]? ?-j? ?targetname? [per-target-options]

-t? TABLE:? 默認(rèn)為filter? ,可以是filter ,nat? ,mangle, raw

COMMAND有以下幾種:

(1)查看:-L? ?list列出指定鏈上所有的規(guī)則,有以下幾條子選項(xiàng)

-n? :? ?numberic?以數(shù)字格式顯示地址與端口號(hào),例如任意地址不加-n顯示為anywhere?加-n顯示為0.0.0.0/0

-v? :? ? verbose顯示詳細(xì)信息 , -vv? -vvv顯示的信息更為詳細(xì)

-x:? ? ?顯示計(jì)數(shù)器結(jié)果的精確值,不加的話顯示四舍五入的值,但是更有可讀性

--line-numbers:? ?顯示規(guī)則的序號(hào)

(2)鏈管理:

-N: new,定義一臺(tái)新的自定義規(guī)則鏈

-X:delete? 刪除一條自定義規(guī)則鏈(僅能刪除自定義的?引用計(jì)數(shù)為0的? 空的?鏈)

-E:? 重命名自定義鏈(僅能重命名引用計(jì)數(shù)為0的自定義鏈)

-P:policy? 設(shè)置默認(rèn)策略,對(duì)于filter表中的鏈來(lái)說(shuō),以三種策略:ACCEPT? /? ?DROP? /? ?REJECT

(3)規(guī)則管理

-A:?append? 在最后一條規(guī)則之后,追加規(guī)則

-I:? ?insert? ?插入規(guī)則,要指定位置,不指定位置則在第一條前插入規(guī)則

-D:? delete? 刪除規(guī)則,指定規(guī)則序號(hào)或規(guī)則本身來(lái)進(jìn)行刪除

-R:? replace? 替換規(guī)則,替換指定鏈上的指定規(guī)則

-F:? flush? ?清空指定鏈上的規(guī)則

-Z:? zero? ?計(jì)數(shù)器置零,每條規(guī)則對(duì)匹配的報(bào)文個(gè)數(shù)和報(bào)文的大小之和進(jìn)行統(tǒng)計(jì)。

CHAIN?就是鏈,參考之前的鏈與表的關(guān)系

匹配條件:

基本匹配條件:無(wú)需加載任何模塊,由iptables/netfilter來(lái)提供

[!]? -s:? ?檢查報(bào)文中的源IP地址是否符合對(duì)應(yīng)IP或網(wǎng)絡(luò)地址范圍 ,前加“!"表示條件取反(下同)

如:0.0.0.0/0表示所有地址,其他地址網(wǎng)段可以用CIDR方式書(shū)寫(xiě)

[!]? -d:? ?檢查報(bào)文中的目標(biāo)IP地址是否符合對(duì)應(yīng)IP或網(wǎng)絡(luò)地址范圍

[!]? -p:? 網(wǎng)絡(luò)協(xié)議,常見(jiàn)的有tcp? /? udp? ?/icmp

[!] -i? ?:數(shù)據(jù)報(bào)文流入的接口(即哪張網(wǎng)卡),只能應(yīng)用于?INPUT? ?PREROUTING? ,? ?FORWARD? 鏈

[!]? -o? :數(shù)據(jù)報(bào)文流出的接口(即哪張網(wǎng)卡),只能應(yīng)用于OUTPUT? ? POSTROUTING? ?FORWARD鏈

擴(kuò)展匹配條件:

隱式擴(kuò)展:使用-p指定了協(xié)議后,隱式包含了一些擴(kuò)展選項(xiàng)

tcp協(xié)議:

[!]? --source-port? 或? --sport? port[:port]? ?匹配報(bào)文的源端口,可以是端口范圍兩個(gè)port之間用“:”隔開(kāi)

[!]? --destination-port? 或? --dport? port[:port]? ?匹配報(bào)文的目標(biāo)端口,可以是端口范圍

[!]? --tcp-flags? 檢查的標(biāo)志位列表? 必須為1的標(biāo)志位列表? ?用于匹配報(bào)文的標(biāo)志位,如果標(biāo)志位出現(xiàn)在第一列表中,而沒(méi)有出現(xiàn)在第二列表中,則必須為0。第二列表是第一列表的子集。

[!]? --syn? ?用于匹配第一次握手,相當(dāng)于"--tcp-flags? SYN,ACK,FIN,RST? SYN"

udp協(xié)議:

[!]? --source-port? 或? --sport? port[:port]? ?匹配報(bào)文的源端口,可以是端口范圍兩個(gè)port之間用“:”隔開(kāi)

[!]? --destination-port? 或? --dport? port[:port]? ?匹配報(bào)文的目標(biāo)端口,可以是端口范圍

icmp協(xié)議:

[!]? --icmp-type? {type[/code]| typename}

echo-request? :? ?8

echo-replay? ? :? ?0

顯式擴(kuò)展:使用-m來(lái)指明要調(diào)用的擴(kuò)展模塊, -m? 模塊名? 模塊對(duì)應(yīng)選項(xiàng),常用的模塊名舉例如下:

multiport:

以離散方式來(lái)指定端口號(hào)列表

[!]? --source-port? 或? --sport? port,port,port ....指定多個(gè)源端口

[!]? --destination-port? 或? --dport? ?port,port,port ..指定多個(gè)目標(biāo)端口

iprange:指定IP地址范圍

[!}? --src-range? ?fromIP[-toIP]? 來(lái)源IP范圍

[!}? --dst-range? ?fromIP[-toIP]? 目標(biāo)IP范圍

time:? 指定日期時(shí)間范圍

--timestart? hh:mm[:ss]? ? 開(kāi)始時(shí)間

--timestop? ?hh:mm[:ss]? ? 結(jié)束時(shí)間

[!]? --weekdays day,day.....?周幾

[!]? --monthdays? ?day,day,....?每月內(nèi)的幾日

--datestart? ?YYYY[-MM[-DD[Thh[:mm[:ss]]]]]? ? 開(kāi)始日期和時(shí)間

--datestop? ?YYYY[-MM[-DD[Thh[:mm[:ss]]]]]? ? ?結(jié)束日期和時(shí)間

--kerneltz? ?使用內(nèi)核配置的時(shí)區(qū),而不是默認(rèn)的UTC

string:?匹配報(bào)文中的字符串

--algo {bm|kmp}? ? 必選項(xiàng)? ?指定匹配字符串的算法

[!]? --string? 模式字符串

[!]? --hex-string? 16進(jìn)制編碼的模式字符串

--from? offset? ?指定開(kāi)始檢查的位置

--to? ?offset? ? ? 指定結(jié)束檢查的位置

connlimit :單IP的并發(fā)連接數(shù)限制

--connlimit-upto? n? 連接數(shù)小于等于n

--connlimit-above? n? ? 連接數(shù)大于等于n

limit? :使用令牌桶過(guò)濾器,指定令牌生成速率

--limit-burst? n? ?令牌桶的大小

--limit? n[/second|/minute|/hour|/day]? ?限制每秒多少個(gè)包(每分鐘/小時(shí)/天多少個(gè)包)

state:? 連接追蹤記錄,在并發(fā)訪問(wèn)量大的主機(jī)不要開(kāi)啟

追蹤到的連接:/proc/net/nf_conntrack

調(diào)整可記錄的連接數(shù)量最大值:/proc/sys/net/nf_conntrack_max

超時(shí)時(shí)長(zhǎng):/proc/sys/net/netfilter/* timeout *

[!]? --state? 狀態(tài)

這里的狀態(tài)可以為以下幾種:

NEW:新連接請(qǐng)求

ESTABLISHED:已建立的連接

INVALID:未識(shí)別的連接

RELATED:相關(guān)聯(lián)連接,附屬于某個(gè)已存在連接的新請(qǐng)求

UNTRACKED:未追蹤的連接

-j?targetname? ? 跳轉(zhuǎn)的目標(biāo)或處理動(dòng)作:

基本處理動(dòng)作:

ACCEPT:接受

DROP:? 丟棄

擴(kuò)展處理動(dòng)作:

REJECT:拒絕

--reject-with type?定義拒絕類型

LOG? ?日志記錄,默認(rèn)保存在/var/log/messages文件中,

--log-level? ?日志級(jí)別

--log-prefix? ?日志前綴

RETURN

從自定義鏈返回原鏈繼續(xù)檢查規(guī)則

自定義鏈名作為目標(biāo)

自定義鏈中的規(guī)則如果都不匹配時(shí),再返回原鏈繼續(xù)檢查原鏈上的規(guī)則

其它命令

iptables-save? > filename? ?保存iptables內(nèi)容到某一文件中

iptables-restore

-n? 不清除原有規(guī)則

-t? :僅檢查分析生成的規(guī)則集是否有語(yǔ)法錯(cuò)誤

?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

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