(第十三周作業(yè))
1糜值、搭建vsftpd,并實現(xiàn)虛擬用戶
root用戶登錄
#?yum? install? vsftpd -y
安裝完后可以使用以下命令來啟停vsftpd服務
#?service? vsftpd? start
# service vsftpd? stop
# service vsftpd? restart
它的配置文件目錄為/etc/vsftpd/,該目錄下有主配置文件vsftpd.conf,接下就以實現(xiàn)虛擬用戶功能來配置一下vsftpd
虛擬用戶就是系統(tǒng)當中不存在的實體用戶,它只能訪問和使用ftp資源,但不允許訪問系統(tǒng)的其他資源锹漱。虛擬用戶的認證使用口令庫文件
(1)編寫虛擬用戶的賬戶和密碼數(shù)據(jù)庫文件
編寫一文本文件,奇數(shù)行為賬戶慕嚷,偶數(shù)行為密碼哥牍。
? ? # vi? /etc/vsftpd/vusers.list
用戶名1
密碼1
用戶名2
密碼2
……
安裝db4工具來把文本文件轉(zhuǎ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認證文件
#? 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)建文件的掩碼權限
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)建獨立的配置文件
# 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關掉。
#? 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四表五鏈及詳細介紹iptables命令使用方法损俭。
Linux系統(tǒng)上的防火墻是由iptables/netfilter組成蛙奖,其中iptables是規(guī)則的制定工具,工作在用戶空間杆兵,它制定的規(guī)則送到內(nèi)核空間雁仲,netfilter在內(nèi)核協(xié)議框架中定義了5個位置通過鉤子函數(shù)對進出的數(shù)據(jù)包進行過濾。
iptables四表為filter ,? nat ,mangle ,? raw 琐脏。默認表是flter攒砖,表的處理優(yōu)先級為:raw ,mangle,nat,filter。
filter:一般的過濾功能;
nat:?用于nat功能(地址轉(zhuǎn)換日裙、映射吹艇、端口映射等)
mangle:用于對特定數(shù)據(jù)包的修改(使用情況少)
raw:? 一般是為了不再讓iptables做數(shù)據(jù)包的鏈接跟蹤處理,從而提高性能昂拂。
五個鏈分別是:
INPUT:?通過路由表判斷后目的地是本機受神,然后進入本機內(nèi)部資源
OUTPUT:?由本機產(chǎn)生的數(shù)據(jù)向外部轉(zhuǎn)發(fā)
FORWARD:通過路由表判斷后目的地不是本機,然后通過路由轉(zhuǎn)發(fā)到其他地方
PREROUTING:流入的數(shù)據(jù)包進入路由表之前
POSTROUTING:傳出的數(shù)據(jù)包到達網(wǎ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:? 默認為filter? ,可以是filter ,nat? ,mangle, raw
COMMAND有以下幾種:
? ? (1)查看:-L? ?list列出指定鏈上所有的規(guī)則格侯,有以下幾條子選項
? ? ? ? -n? :? ?numberic?以數(shù)字格式顯示地址與端口號路克,例如任意地址不加-n顯示為anywhere?加-n顯示為0.0.0.0/0
? ? ? ? -v? :? ? verbose顯示詳細信息 , -vv? -vvv顯示的信息更為詳細
? ? ? ? -x:? ? ?顯示計數(shù)器結果的精確值樟结,不加的話顯示四舍五入的值,但是更有可讀性
? ? ? ? --line-numbers:? ?顯示規(guī)則的序號
? ? (2)鏈管理:
? ? ? ? -N: new,定義一臺新的自定義規(guī)則鏈
? ? ? ? -X:delete? 刪除一條自定義規(guī)則鏈(僅能刪除自定義的?引用計數(shù)為0的? 空的?鏈)
? ? ? ? -E:? 重命名自定義鏈(僅能重命名引用計數(shù)為0的自定義鏈)
? ? ? ? -P:policy? 設置默認策略精算,對于filter表中的鏈來說,以三種策略:ACCEPT? /? ?DROP? /? ?REJECT
? ? (3)規(guī)則管理
? ? ? ? -A:?append? 在最后一條規(guī)則之后碎连,追加規(guī)則
? ? ? ? -I:? ?insert? ?插入規(guī)則灰羽,要指定位置,不指定位置則在第一條前插入規(guī)則
? ? ? ? -D:? delete? 刪除規(guī)則鱼辙,指定規(guī)則序號或規(guī)則本身來進行刪除
? ? ? ? -R:? replace? 替換規(guī)則廉嚼,替換指定鏈上的指定規(guī)則
? ? ? ? -F:? flush? ?清空指定鏈上的規(guī)則
? ? ? ? -Z:? zero? ?計數(shù)器置零,每條規(guī)則對匹配的報文個數(shù)和報文的大小之和進行統(tǒng)計倒戏。
CHAIN?就是鏈怠噪,參考之前的鏈與表的關系
匹配條件:
? ? 基本匹配條件:無需加載任何模塊,由iptables/netfilter來提供
? ? [!]? -s:? ?檢查報文中的源IP地址是否符合對應IP或網(wǎng)絡地址范圍 ,前加“杜跷!"表示條件取反(下同)
? ? ? ? ? ? 如:0.0.0.0/0表示所有地址傍念,其他地址網(wǎng)段可以用CIDR方式書寫
? ? [!]? -d:? ?檢查報文中的目標IP地址是否符合對應IP或網(wǎng)絡地址范圍
? ? [!]? -p:? 網(wǎng)絡協(xié)議,常見的有tcp? /? udp? ?/icmp? ?
? ? [!] -i? ?:數(shù)據(jù)報文流入的接口(即哪張網(wǎng)卡)葛闷,只能應用于?INPUT? ?PREROUTING? ,? ?FORWARD? 鏈
? ? [!]? -o? :數(shù)據(jù)報文流出的接口(即哪張網(wǎng)卡)憋槐,只能應用于OUTPUT? ? POSTROUTING? ?FORWARD鏈
? ? 擴展匹配條件:
? ? ? ? 隱式擴展:使用-p指定了協(xié)議后,隱式包含了一些擴展選項
? ? ? ? ? ? tcp協(xié)議:
? ? ? ? ? ? ? ? [!]? --source-port? 或? --sport? port[:port]? ?匹配報文的源端口淑趾,可以是端口范圍兩個port之間用“:”隔開
? ? ? ? ? ? ? ? [!]? --destination-port? 或? --dport? port[:port]? ?匹配報文的目標端口阳仔,可以是端口范圍
? ? ? ? ? ? ? ? [!]? --tcp-flags? 檢查的標志位列表? 必須為1的標志位列表? ?用于匹配報文的標志位,如果標志位出現(xiàn)在第一列表中扣泊,而沒有出現(xiàn)在第二列表中近范,則必須為0。第二列表是第一列表的子集延蟹。
? ? ? ? ? ? ? ? [!]? --syn? ?用于匹配第一次握手评矩,相當于"--tcp-flags? SYN,ACK,FIN,RST? SYN"
? ? ? ? ? ? udp協(xié)議:
? ??????????????[!]? --source-port? 或? --sport? port[:port]? ?匹配報文的源端口,可以是端口范圍兩個port之間用“:”隔開
? ? ? ? ? ? ? ? [!]? --destination-port? 或? --dport? port[:port]? ?匹配報文的目標端口等孵,可以是端口范圍
? ? ? ? ? ? icmp協(xié)議:
? ? ? ? ? ? ? ? [!]? --icmp-type? {type[/code]| typename}
? ? ? ? ? ? ? ? ? ? ? ? echo-request? :? ?8
? ? ? ? ? ? ? ? ? ? ? ? echo-replay? ? :? ?0
? ? ? ? 顯式擴展:使用-m來指明要調(diào)用的擴展模塊, -m? 模塊名? 模塊對應選項稚照,常用的模塊名舉例如下:
? ? ? ? ? ? multiport:
? ? ? ? ? ? ? ? 以離散方式來指定端口號列表
? ? ? ? ? ? ? ??[!]? --source-port? 或? --sport? port,port,port ....指定多個源端口
? ??????????????[!]? --destination-port? 或? --dport? ?port,port,port ..指定多個目標端口
? ? ? ? ? ? iprange:指定IP地址范圍?
? ? ? ? ? ? ? ? [!}? --src-range? ?fromIP[-toIP]? 來源IP范圍
? ??????????????[!}? --dst-range? ?fromIP[-toIP]? 目標IP范圍
? ? ? ? ? ? time:? 指定日期時間范圍
? ? ? ? ? ? ? ? --timestart? hh:mm[:ss]? ? 開始時間
? ? ? ? ? ? ? ? --timestop? ?hh:mm[:ss]? ? 結束時間
? ? ? ? ? ? ? ? [!]? --weekdays day,day.....?周幾
? ? ? ? ? ? ? ? [!]? --monthdays? ?day,day,....?每月內(nèi)的幾日
? ? ? ? ? ? ? ? --datestart? ?YYYY[-MM[-DD[Thh[:mm[:ss]]]]]? ? 開始日期和時間
? ???????????????--datestop? ?YYYY[-MM[-DD[Thh[:mm[:ss]]]]]? ? ?結束日期和時間
? ? ? ? ? ? ? ? --kerneltz? ?使用內(nèi)核配置的時區(qū),而不是默認的UTC
? ? ? ? ? ? string:?匹配報文中的字符串
? ? ? ? ? ? ? ? --algo {bm|kmp}? ? 必選項? ?指定匹配字符串的算法
? ? ? ? ? ? ? ? [!]? --string? 模式字符串
? ??????????????[!]? --hex-string? 16進制編碼的模式字符串
? ? ? ? ? ? ? ? --from? offset? ?指定開始檢查的位置
? ? ? ? ? ? ? ? --to? ?offset? ? ? 指定結束檢查的位置
? ? ? ? ? ? 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ā)訪問量大的主機不要開啟
? ? ? ? ? ? ? ? 追蹤到的連接:/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:相關聯(lián)連接,附屬于某個已存在連接的新請求
? ? ? ? ? ? ? ? ? ? UNTRACKED:未追蹤的連接
-j?targetname? ? 跳轉(zhuǎn)的目標或處理動作:
? ? 基本處理動作:
? ? ?????ACCEPT:接受
? ? ????DROP:? 丟棄
? ? 擴展處理動作:? ??
????????REJECT:拒絕
? ? ? ? ? ? --reject-with type?定義拒絕類型
? ? ? ? LOG? ?日志記錄咐熙,默認保存在/var/log/messages文件中弱恒,
? ? ? ? ? ? --log-level? ?日志級別
? ? ? ? ? ? --log-prefix? ?日志前綴
? ? ? ? ?RETURN
? ? ? ? ? ? 從自定義鏈返回原鏈繼續(xù)檢查規(guī)則
? ?自定義鏈名作為目標
? ? ? ? ? ?自定義鏈中的規(guī)則如果都不匹配時,再返回原鏈繼續(xù)檢查原鏈上的規(guī)則
其它命令
iptables-save? > filename? ?保存iptables內(nèi)容到某一文件中
iptables-restore <filename? ?從某文件中恢復iptables規(guī)則(無法恢復加載模塊的內(nèi)容)
? ? -n? 不清除原有規(guī)則
? ? -t? :僅檢查分析生成的規(guī)則集是否有語法錯誤
在centos6中
? ? 保存規(guī)則service iptables save? 會將保存到/etc/sysconfig/iptables文件中覆蓋保存
? ? 重載文件中的規(guī)則:service? iptables? restart
? ??????????????
? ??
? ??????
? ??????