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