1、搭建vsftpd轨蛤,并實(shí)現(xiàn)虛擬用戶
root用戶登錄
#?yum? install? vsftpd -y
安裝完后可以使用以下命令來啟停vsftpd服務(wù)
#?service? vsftpd? start
# service vsftpd? stop
# service vsftpd? restart
它的配置文件目錄為/etc/vsftpd/,該目錄下有主配置文件vsftpd.conf抡诞,接下就以實(shí)現(xiàn)虛擬用戶功能來配置一下vsftpd
虛擬用戶就是系統(tǒng)當(dāng)中不存在的實(shí)體用戶捅伤,它只能訪問和使用ftp資源吏饿,但不允許訪問系統(tǒng)的其他資源愈腾。虛擬用戶的認(rèn)證使用口令庫文件
(1)編寫虛擬用戶的賬戶和密碼數(shù)據(jù)庫文件
編寫一文本文件炉爆,奇數(shù)行為賬戶堕虹,偶數(shù)行為密碼。
# vi? /etc/vsftpd/vusers.list
用戶名1
密碼1
用戶名2
密碼2
……
安裝db4工具來把文本文件轉(zhuǎn)換成二進(jìn)制數(shù)據(jù)庫文件
#?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ù)庫文件名時芬首,不要加后綴
(4)修改主配置文件
#? vi? ?/etc/vsftpd/vsftpd.conf
anonymous_enable=NO? ?#禁用匿名用戶
local_enable=YES? ? #啟用本地用戶
write_enable=YES? ? #本地用戶可以可寫
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)建虛擬用戶配置文件目錄
在主配置文件中開啟虛擬用戶,并指定虛擬用戶配置文件目錄
#? vi? ?/etc/vsftpd/vsftpd.conf
virtual_use_local_privs=YES
user_config_dir=/etc/vsftpd/vusers_dir
在虛擬用戶配置文件目錄中為個別用戶創(chuàng)建獨(dú)立的配置文件
# vi /etc/vsftpd/vusers_dir/user1
anon_upload_enable=YES
anon_mkdir_enable=YES
(6)重啟vsftpd來重新加載
#? service? vsftpd restart
(7)測試過程
發(fā)現(xiàn)報錯
226 transfer done but failed to open directory
需要把selinux關(guān)掉郁稍。
#? vi /etc/selinux/config
SELINUX=disabled
重啟# reboot
發(fā)現(xiàn)報錯:500 OOPS: vsftpd: refusing to run with writable root inside chroot()
如果啟用chroot,必須保證ftp根目錄不可寫,這樣對于ftp根直接為網(wǎng)站根目錄的用戶不方便
#? chmod? a-x? /var/ftproot
然后如果需要在ftp根目錄下創(chuàng)建目錄或文件螟炫。請自行創(chuàng)建。
2艺晴、簡述iptales四表五鏈及詳細(xì)介紹iptables命令使用方法昼钻。
Linux系統(tǒng)上的防火墻是由iptables/netfilter組成,其中iptables是規(guī)則的制定工具封寞,工作在用戶空間然评,它制定的規(guī)則送到內(nèi)核空間,netfilter在內(nèi)核協(xié)議框架中定義了5個位置通過鉤子函數(shù)對進(jìn)出的數(shù)據(jù)包進(jìn)行過濾狈究。
iptables四表為filter ,? nat ,mangle ,? raw 碗淌。默認(rèn)表是flter,表的處理優(yōu)先級為:raw ,mangle,nat,filter抖锥。
filter:一般的過濾功能;
nat:?用于nat功能(地址轉(zhuǎn)換亿眠、映射、端口映射等)
mangle:用于對特定數(shù)據(jù)包的修改(使用情況少)
raw:? 一般是為了不再讓iptables做數(shù)據(jù)包的鏈接跟蹤處理磅废,從而提高性能纳像。
五個鏈分別是:
INPUT:?通過路由表判斷后目的地是本機(jī),然后進(jìn)入本機(jī)內(nèi)部資源
OUTPUT:?由本機(jī)產(chǎn)生的數(shù)據(jù)向外部轉(zhuǎn)發(fā)
FORWARD:通過路由表判斷后目的地不是本機(jī)拯勉,然后通過路由轉(zhuǎn)發(fā)到其他地方
PREROUTING:流入的數(shù)據(jù)包進(jìn)入路由表之前
POSTROUTING:傳出的數(shù)據(jù)包到達(dá)網(wǎng)卡出口前
四個表對應(yīng)的鏈分別為:
filter: INPUT? ,? ?OUTPUT? ,? ?FORWARD
nat:? ?PREROUTING? ,? POSTROUTING? ?FORWARD
mangle: INPUT? OUTPUT??PREROUTING? ,? POSTROUTING? ?FORWARD
raw:??PREROUTING ?OUTPUT
iptables的語法格式:
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ù)字格式顯示地址與端口號,例如任意地址不加-n顯示為anywhere?加-n顯示為0.0.0.0/0
-v? :? ? verbose顯示詳細(xì)信息 , -vv? -vvv顯示的信息更為詳細(xì)
-x:? ? ?顯示計(jì)數(shù)器結(jié)果的精確值宫峦,不加的話顯示四舍五入的值岔帽,但是更有可讀性
--line-numbers:? ?顯示規(guī)則的序號
(2)鏈管理:
-N: new,定義一臺新的自定義規(guī)則鏈
-X:delete? 刪除一條自定義規(guī)則鏈(僅能刪除自定義的?引用計(jì)數(shù)為0的? 空的?鏈)
-E:? 重命名自定義鏈(僅能重命名引用計(jì)數(shù)為0的自定義鏈)
-P:policy? 設(shè)置默認(rèn)策略,對于filter表中的鏈來說导绷,以三種策略:ACCEPT? /? ?DROP? /? ?REJECT
(3)規(guī)則管理
-A:?append? 在最后一條規(guī)則之后犀勒,追加規(guī)則
-I:? ?insert? ?插入規(guī)則,要指定位置,不指定位置則在第一條前插入規(guī)則
-D:? delete? 刪除規(guī)則贾费,指定規(guī)則序號或規(guī)則本身來進(jìn)行刪除
-R:? replace? 替換規(guī)則枚碗,替換指定鏈上的指定規(guī)則
-F:? flush? ?清空指定鏈上的規(guī)則
-Z:? zero? ?計(jì)數(shù)器置零,每條規(guī)則對匹配的報文個數(shù)和報文的大小之和進(jìn)行統(tǒng)計(jì)铸本。
CHAIN?就是鏈肮雨,參考之前的鏈與表的關(guān)系
匹配條件:
基本匹配條件:無需加載任何模塊,由iptables/netfilter來提供
[!]? -s:? ?檢查報文中的源IP地址是否符合對應(yīng)IP或網(wǎng)絡(luò)地址范圍 ,前加“箱玷!"表示條件取反(下同)
如:0.0.0.0/0表示所有地址怨规,其他地址網(wǎng)段可以用CIDR方式書寫
[!]? -d:? ?檢查報文中的目標(biāo)IP地址是否符合對應(yīng)IP或網(wǎng)絡(luò)地址范圍
[!]? -p:? 網(wǎng)絡(luò)協(xié)議,常見的有tcp? /? udp? ?/icmp
[!] -i? ?:數(shù)據(jù)報文流入的接口(即哪張網(wǎng)卡)锡足,只能應(yīng)用于?INPUT? ?PREROUTING? ,? ?FORWARD? 鏈
[!]? -o? :數(shù)據(jù)報文流出的接口(即哪張網(wǎng)卡)波丰,只能應(yīng)用于OUTPUT? ? POSTROUTING? ?FORWARD鏈
擴(kuò)展匹配條件:
隱式擴(kuò)展:使用-p指定了協(xié)議后,隱式包含了一些擴(kuò)展選項(xiàng)
tcp協(xié)議:
[!]? --source-port? 或? --sport? port[:port]? ?匹配報文的源端口舶得,可以是端口范圍兩個port之間用“:”隔開
[!]? --destination-port? 或? --dport? port[:port]? ?匹配報文的目標(biāo)端口掰烟,可以是端口范圍
[!]? --tcp-flags? 檢查的標(biāo)志位列表? 必須為1的標(biāo)志位列表? ?用于匹配報文的標(biāo)志位,如果標(biāo)志位出現(xiàn)在第一列表中沐批,而沒有出現(xiàn)在第二列表中纫骑,則必須為0。第二列表是第一列表的子集九孩。
[!]? --syn? ?用于匹配第一次握手先馆,相當(dāng)于"--tcp-flags? SYN,ACK,FIN,RST? SYN"
udp協(xié)議:
[!]? --source-port? 或? --sport? port[:port]? ?匹配報文的源端口,可以是端口范圍兩個port之間用“:”隔開
[!]? --destination-port? 或? --dport? port[:port]? ?匹配報文的目標(biāo)端口躺彬,可以是端口范圍
icmp協(xié)議:
[!]? --icmp-type? {type[/code]| typename}
echo-request? :? ?8
echo-replay? ? :? ?0
顯式擴(kuò)展:使用-m來指明要調(diào)用的擴(kuò)展模塊, -m? 模塊名? 模塊對應(yīng)選項(xiàng)煤墙,常用的模塊名舉例如下:
multiport:
以離散方式來指定端口號列表
[!]? --source-port? 或? --sport? port,port,port ....指定多個源端口
[!]? --destination-port? 或? --dport? ?port,port,port ..指定多個目標(biāo)端口
iprange:指定IP地址范圍
[!}? --src-range? ?fromIP[-toIP]? 來源IP范圍
[!}? --dst-range? ?fromIP[-toIP]? 目標(biāo)IP范圍
time:? 指定日期時間范圍
--timestart? hh:mm[:ss]? ? 開始時間
--timestop? ?hh:mm[:ss]? ? 結(jié)束時間
[!]? --weekdays day,day.....?周幾
[!]? --monthdays? ?day,day,....?每月內(nèi)的幾日
--datestart? ?YYYY[-MM[-DD[Thh[:mm[:ss]]]]]? ? 開始日期和時間
--datestop? ?YYYY[-MM[-DD[Thh[:mm[:ss]]]]]? ? ?結(jié)束日期和時間
--kerneltz? ?使用內(nèi)核配置的時區(qū),而不是默認(rèn)的UTC
string:?匹配報文中的字符串
--algo {bm|kmp}? ? 必選項(xiàng)? ?指定匹配字符串的算法
[!]? --string? 模式字符串
[!]? --hex-string? 16進(jìn)制編碼的模式字符串
--from? offset? ?指定開始檢查的位置
--to? ?offset? ? ? 指定結(jié)束檢查的位置
connlimit :單IP的并發(fā)連接數(shù)限制
--connlimit-upto? n? 連接數(shù)小于等于n
--connlimit-above? n? ? 連接數(shù)大于等于n
limit? :使用令牌桶過濾器宪拥,指定令牌生成速率
--limit-burst? n? ?令牌桶的大小
--limit? n[/second|/minute|/hour|/day]? ?限制每秒多少個包(每分鐘/小時/天多少個包)
state:? 連接追蹤記錄仿野,在并發(fā)訪問量大的主機(jī)不要開啟
追蹤到的連接:/proc/net/nf_conntrack
調(diào)整可記錄的連接數(shù)量最大值:/proc/sys/net/nf_conntrack_max
超時時長:/proc/sys/net/netfilter/* timeout *
[!]? --state? 狀態(tài)
這里的狀態(tài)可以為以下幾種:
NEW:新連接請求
ESTABLISHED:已建立的連接
INVALID:未識別的連接
RELATED:相關(guān)聯(lián)連接,附屬于某個已存在連接的新請求
UNTRACKED:未追蹤的連接
-j?targetname? ? 跳轉(zhuǎn)的目標(biāo)或處理動作:
基本處理動作:
ACCEPT:接受
DROP:? 丟棄
擴(kuò)展處理動作:
REJECT:拒絕
--reject-with type?定義拒絕類型
LOG? ?日志記錄她君,默認(rèn)保存在/var/log/messages文件中脚作,
--log-level? ?日志級別
--log-prefix? ?日志前綴
RETURN
從自定義鏈返回原鏈繼續(xù)檢查規(guī)則
自定義鏈名作為目標(biāo)
自定義鏈中的規(guī)則如果都不匹配時,再返回原鏈繼續(xù)檢查原鏈上的規(guī)則
其它命令
iptables-save? > filename? ?保存iptables內(nèi)容到某一文件中
iptables-restore
-n? 不清除原有規(guī)則
-t? :僅檢查分析生成的規(guī)則集是否有語法錯誤