第十二週作業

1、 搭建vsftpd,並實現虛擬用戶

搭建虛擬用戶認證創建數據庫、授權用戶、創建賬號和密碼;
流程:
環境:vsftpd、mariadb-server、mariadb-devel、pam-devel

ftpsv~# yum groupinstall “development tools” “server paltform devement” -y
ftpsv~# tar –zxf pam_mysql-0.7RC1.tar.gz 
ftpsv~# ./configure --help
ftpsv~# ./configure --with-mysql=/usr --with-pam=/usr –with-pam-mods-dir=/usr/lib64/security/
ftpsv~# make &&make install
檢查ls /usr/lib64/security下是否有pam_mysql.so模塊
思路:
1.  虛擬賬號也需要創建一個系統賬號作爲映射使用
2.  對於mysql來說虛擬用戶都屬於來賓賬戶,因此需要在mysql配置中:1、啓用來賓的訪問權限,2、設置來賓用戶映射對應的系統賬戶名稱,3、指明pam文件將其作爲調用數據庫中用戶的映射文件

提供配置文件:/etc/pam.d/vsftpd.vusers
認證檢查:使用vsftpd、mageedu登錄到127.0.0.1的數據庫,找到user表中的name、password的字段來驗證FTP虛擬用戶信息,密碼使用的加密類型。
auth required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=mageedu host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2

account required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=mageedu host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 

ftpsv~# vim /etc/mysql/mysql.conf
    [mysql]
    skip_name_resolve=on
    innodb_file_per_table=on
    log_bin=mysql-bin   啓用二進制日誌
ftpsv~# systemctl restart mariadb.service
ftpsv~# mysql
    >grant all on vsftpd.* to vsftpd@”127.0.0.1”identfied by ‘vsftpd’;
    >flush privileges;
    >create database vsftp;
    >use vsftpd;
    >create table user(id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100) NOT NULL,password CHAR(48) NOT NULL,UNIQUE KEY(name));
    >insert into users(name,password) values (‘tom’,password(‘mageedu’)),(‘jerry’,password(‘jerry’));
    >exit
ftpsv~# mkdir /ftproot
ftpsv~# useradd –d /ftproot/vuser vuser
ftpsv~# chmod a-w /ftproot/vuser    #系統要求不允許虛擬用戶對家目錄有寫權限
ftpsv~# finger vuser
ftpsv~# mkdir /ftproot/vuser/pub
ftpsv~# vim /etc/pam.d/vsftpd.vusers
auth required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=mageedu host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2
account required /usr/lib64/security/pam_mysql.so user=vsftpd passwd=mageedu host=127.0.0.1 db=vsftpd table=users usercolumn=name passwdcolumn=password crypt=2 
ftpsv~# vim /etc/vsftpd/vsftpd.conf
    pam_service_name=vsftpd.vusers
    guest_enable=YES
    guest_username=vuser
ftpsv~# systemctl restart vsftp.service

設置用戶上傳:虛擬用戶的寫權限,通過匿名一樣的指令進行定義;還能實現不同的用戶有不同的權限;

ftpsv~# vim /etc/vsftpd/vsftpd.conf
user_config_dir=/etc/vsftpd/vusers_config/
ftpsv~# vim /etc/vsftpd/vusers_config/tom   #每個賬戶必須用自己獨立的配置文件
 anon_upload_enable=yes #使tom擁有上傳權限
anon_mkdir_wirte_enable=yes #擁有建立、刪除權限
ftpsv~# lftp 172.16.0.67 (tom)
    >cd upload
    >put issue
ftpsv~# lftp 172.16.0.67 (jeery)
    >cd upload
    >put fstab
    >mkdir test

2、 簡述iptales四表五鏈及詳細介紹iptables命令使用方法

![](https://s1.51cto.com/images/blog/201907/14/d8c0558a8c9cf1a8d1f96d054987f367.png?= x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk= )

五鏈:mangle表有5條鏈:

```PREROUTING鏈:數據進入防火牆後,路由判斷之前改變數據包。
POSTROUTING鏈:在數據包確定目的地址之後,改變數據包
INPUT鏈:在數據包進入本機之後,應用程序接受數據之前改變數據包
OUTPUT鏈:在數據包被確定目的之前改變數據包
FORWARD鏈:第一次路由判斷之後,最後一次路由判斷之前改變數據包

iptable工作流程:

1、目的地址是本地,則發送到INPUT,讓INPUT決定是否接收下來送到用戶空間,流程爲①--->②;
2、若滿足PREROUTING的nat表上的轉發規則,則發送給FORWARD,然後再經過POSTROUTING發送出去,流程爲:①--->③--->④--->⑥
3、主機發送數據包時,流程則是⑤--->⑥

命令選項:
表:-t:指定使用哪個表raw, mangle, nat, [filter]
鏈:-N:自定義鏈名,-X:刪除鏈,-E:重命名自定義,-P:設置默認策略,-F:清空,-Z:歸零
規則:-A:追加,-I:插入,-D:刪除,-R:替換, -F:清空, -Z:歸零
查看:-L:-n、-v、-x、--line-numbers

COMMAND:
鏈管理:
-N:new, 自定義一條新的規則鏈;
-X: delete,刪除自定義的規則鏈;
-P:Policy,設置默認策略;對filter表中的鏈而言,其默認策略有:
ACCEPT:接受
DROP:丟棄
REJECT:拒絕
-E:重命名自定義鏈;引用計數不爲0的自定義鏈不能夠被重命名,也不能被刪除;

規則管理:

-A:append,追加後規則是存在尾部;
-I:insert, 插入,要指明位置,省略時表示第一條;
-D:delete,刪除;
(1) 指明規則序號;
(2) 指明規則本身;
-R:replace,替換指定鏈上的指定規則;
-F:flush,清空指定的規則鏈;
-Z:zero,置零;
iptables的每條規則都有兩個計數器:
(1) 匹配到的報文的個數;
(2) 匹配到的所有報文的大小之和;

查看:

-L:list, 列出指定鏈上的所有規則;
-n:numberic,以數字格式顯示地址和端口號;
-v:verbose,詳細信息;
-vv, -vvv
-x:exactly,顯示計數器結果的精確值;
--line-numbers:顯示規則的序號;

iptables(擴展)
1、multiport擴展
以離散方式定義多端口匹配;最多指定15個端口;

[!] --source-ports,--sports port[,port|,port:port]...:指定多個源端口;
[!] --destination-ports,--dports port[,port|,port:port]...:指定多個目標端口;
[!] --ports port[,port|,port:port]...:指明多個端口;
例如:~]# iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.67 -p tcp -m multiport --dports 22,80 -j ACCEPT

2、iprange擴展
指明連續的(但一般不腦整個網絡)ip地址範圍;

[!] --src-range from[-to]:源IP地址;
[!] --dst-range from[-to]:目標IP地址;

例如:~]# iptables -A INPUT -d 172.16.100.67 -p tcp --dport 80 -m iprange --src-range 172.16.100.5-172.16.100.10 -j DROP

3、string擴展
對報文中的應用層數據做字符串模式匹配檢測;

--algo {bm|kmp}:字符串匹配檢測算法;
bm:Boyer-Moore
kmp:Knuth-Pratt-Morris
[!] --string pattern:要檢測的字符串模式;
[!] --hex-string pattern:要檢測的字符串模式,16進制格式;

~]# iptables -A OUTPUT -s 172.16.100.67 -d 172.16.0.0/16 -p tcp --sport 80 -m string --algo bm --string "gay" -j REJECT

4、time擴展
根據將報文到達的時間與指定的時間範圍進行匹配;

--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]

--timestart hh:mm[:ss]
--timestop hh:mm[:ss]

[!] --monthdays day[,day...]
[!] --weekdays day[,day...]

--kerneltz:使用內核上的時區,而非默認的UTC;

~]# iptables -A INPUT -s 172.16.0.0/16 -d 172.16.100.67 -p tcp --dport 80 -m time --timestart 14:30 --timestop 18:30 --weekdays Sat,Sun --kerneltz -j DROP
例如:iptables –R INPUT 3 –d 172.16.0.67 –p tcp –dport 23 –m iprange –src-range 172.16.0.60-172.16.0.70 –m time –timestart 10:00:00 –timestop 16:00:00 –weekdays 1,2,3,4,5 –kerneltz -ACCEPT
5、connlimit擴展
根據每客戶端IP做併發連接數數量匹配;

--connlimit-upto n:連接的數量小於等於n時匹配;
--connlimit-above n:連接的數量大於n時匹配;

~]# iptables -A INPUT -d 172.16.100.67 -p tcp --dport 21 -m connlimit --connlimit-above 2 -j REJECT

6、limit擴展
基於收發報文的速率做匹配;
令牌桶過濾器;
--limit rate[/second|/minute|/hour|/day]
--limit-burst number

~]# iptables -I INPUT -d 172.16.100.67 -p icmp --icmp-type 8 -m limit --limit 3/minute --limit-burst 5 -j ACCEPT
~]# iptables -I INPUT 2 -p icmp -j REJECT

7、state擴展_connteack
在內存中,存儲歷史來訪所有協議的訪問記錄,因此在訪問併發大的服務器中,不建議開啓,根據”連接追蹤機制“去檢查連接的狀態;
流程:conntrack機制,1.對INPUT包的ESTABLISHED類型放行,2.對OUTPUT的包進行NEW放行,3.拒絕對INPUT和OUTPUT所有類型的包進行REJECT,注意規則次序!!會將出站時放行,數據包返回時,對進站的數據包在內存檢測,對建立過NEW狀態的連接追蹤信息的入站進行放行。

conntrack機制:追蹤本機上的請求和響應之間的關係;狀態有如下幾種:
NEW:新發出請求;連接追蹤模板中不存在此連接的相關信息條目,因此,將其識別爲第一次發出的請求;
ESTABLISHED:NEW狀態之後,連接追蹤模板中爲其建立的條目失效之前期間內所進行的通信狀態;
RELATED:相關聯的連接;如ftp協議中的數據連接與命令連接之間的關係;
INVALID:無效的連接;
UNTRACKED:未進行追蹤的連接;
[!] --state state

### iptables案例

~]#iptables -A INPUT -d 172.16.100.67 -p tcp -m multiport --dports 22,80 -m state --state NEW,ESTABLISHED -j ACCEPT
~]#iptables -A OUTPUT -s 172.16.100.67 -p tcp -m multiport --sports 22,80 -m state --state ESTABLISHED -j ACCEPT

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章