FTP:File Transfer Protocol,监听在21/tcp,是在应用层实现的。
FTP有两个信道:
第一个是命连接,一直处于连接。
第二个是数据连接,按需建立的。
FTP有两个工作模式:
一个是主动模式使用port在这个模式下端口是20/tcp。
一个是被动模块使用pasv,随机的端口
每个数据接口都是独立的,使用哪种工作模式是取决于客户端的,是有客户
端发起的
ftp的相关常见的软件:
客户端:ftp,lftp,
windows:flashfxp,cuteftp,filezila;
linux:gftp
服务器端:filezilla
linux;vsftpd,proftpd,pureftp,wuftpd;
windows:servu
vsftpd:
安全性检查规则非常严格;轻量级、高性能;支持虚拟用户
ftp用户类型:
匿名用户(ftp,家目录文件/var/ftp)
系统用户(各自家目录)
虚拟用户(映射为一个系统用户)
共享文件系统,权限
文件系统权限
共享权限,是交集
ftp的数据传输模式:
二进制模式
文本模式
将所有用户都禁锢在家目录下命令: chroot_local_user=YES
只禁锢某些用户:
chroot_list_enable=YES
chroot_list_file=/path/to/somefile
tcpdump是过滤条件
tcpdump的语法:
tcpdump [options] [Protocol] [Direction] [Host(s)] [Value]
[Logical Operations] [Other expression]
Protocol(协议):
Values(取值): ether, fddi, ip, arp, rarp, decnet, lat, sca,
moprc, mopdl, tcp and udp.
Direction(流向):
Values(取值): src, dst, src and dst, src or dst;默认是src or dst
Host(s)(主机):
Values(替代关键字): net, port, host, portrange.默认是host
Logical Operations:
Values(取值):and &&,or||,not!.
常用选项:
-i any : 指定监听的接口,如:eth0
-n:不反解主机名称
-nn:即不反解主机名称也不反解域名
-X:捕获到的报文即显示十六机制还有文本格式
-XX:还显示以太网首部
-c #:只抓#就停止了
如何让vsftpd支持虚拟用户:
1.建立虚拟FTP用户的帐号数据库文件
建立虚拟用户的账户名、密码列表
奇数行为帐号名
偶数行为上一行中帐号的密码
转化为Berkeley DB格式的数据文件
db_load 转换工具
需安装db4-utils软件包
[root@filesvr ~]# vim /etc/vsftpd/vusers.list
ni
2345
hao
3456
[root@filesvr ~]# cd /etc/vsftpd/
[root@filesvr vsftpd]# db_load -T -t hash -f vusers.list
vusers.db
[root@filesvr vsftpd]# file vusers.db
vusers.db: Berkeley DB (Hash, version 8, native byte-order)
[root@filesvr vsftpd]# chown 600 /etc/vsftpd/vusers.*
2.创建FTP根目录及虚拟用户映射的系统用户
[root@filesvr ~]# mkdir /var/ftproot
[root@filesvr ~]# useradd -d /var/ftproot virtual
[root@filesvr ~]# chmod 755 /var/ftproot/
3.建立支持虚拟用户的PAM认证文件
[root@filesvr ~]# vim /etc/pam.d/vsftpd.vu
#%PAM-1.0
auth required pam_userdb.so db=/etc/vsftpd/vusers
account required pam_userdb.so db=/etc/vsftpd/vusers
4.在vsftpd.conf文件中添加支持配置
[root@filesvr ~]# vim /etc/vsftpd/vsftpd.conf
anonymous_enable=NO
local_enable=YES
write_enable=YES
anon_umask=022
guest_enable=YES
guest_username=virtual
pam_service_name=vsftpd.vu
5.为个别虚拟用户建立独立的配置文件
在vsftpd.conf文件中添加用户配置目录支持
user_config_dir=/etc/vsftpd/vusers_dir
为用户fedora、gentoo建立独立的配置目录及文件
配置文件名与用户名同名
[root@filesvr ~]# mkdir /etc/vsftpd/vusers_dir/
[root@filesvr ~]# cd /etc/vsftpd/vusers_dir/
[root@filesvr vusers_dir]# touch fedora
[root@filesvr vusers_dir]# vim gentoo
anon_upload_enable=YES
anon_mkdir_write_enable=YES
6.重新加载vsftpd配置
service vsftpd reload
7.使用虚拟FTP账户访问测试
分别用fedora、gentoo用户登录FTP服务器进行下载、上传测试
fedora用户可以登录,并可以浏览、下载文件,但无法上传
gentoo用户可以登录,并可以浏览、下载文件,也可以上传
匿名用户或其他系统用户将不能登录
NFS SERVER监听在2049/tcp 2049/udp是固定的存在,NFS:基于内核工作的.
nfs-utils rpm包提供:两个脚本:/etc/rc.d/init.d->nfs和nfslock
/etc/exports:nfs文件系统共享定义配置文件
nfs启动三个服务器;nfsd,rpc.mountd,rpc.quotad
nfs所有的定义都是在/etc/exports中实现的.
例如;/data 172.16.0.0/24(访问属性) 10.0.0.0/8(访问属性)
客户端列表间用空白分隔
多个属性间用逗号分隔
某客户端和其属性之间不能有其他任意字符,而且直接跟上用小括号括起
来的属性列表
客户端列表的表达方法:
1、单个主机
IP或主机名
2、通配符
*,?
*.magedu.com
3、网络地址
掩码格式可使用完全格式;172.16.0.0/255.255.0.0
也可使用CIDR格式:172.16.0.0/16
属性:
ro
rw
sync
async
root_squash
all_aquash
no_root_squashs
管理导出:
ecportfs
-a:导出所有
-r:重新导出
-u:取消导出 -u CLIENT:DIRECTORY
-v:显示导出过程
-rva:重新导出所有
查看导出;
showmount + SERVER
-a:显示某服务导出的文件系统被任何客户挂载使用的情况列表
-e:显示某SERVER上导出的所有的文件系统
-d:显示当前服务器导出的所有文件系统中至少被某一个客户挂载
使用文件系统
数组:连接的内存空间,存储多个数据,统一命名的多个变量,这些变量
的内存空间通常是连续的
元素:使用数组下标 ${ARR}
引用数组中的元素个数:
${#array(*)}
${#array(@)}
引用数组中的每一个元素:
${array(*)}
${array(@)}
赋值方法1:AA[0]=jerry AA[2]=jerrys
赋值方法2:
AA=("jerry black" "tom obama" wendy natasha)
AA=([0]=jerry [1]=tom [2]=wendy [6]=natasha)
返回某元素中字符的个数:${#ARRAY[index]}
${#array}
arrayZ=( one two three four five five )
# 提取尾部的子串
echo ${arrayZ[@]:0} # one two three four five five
# 所有的元素.
echo ${arrayZ[@]:1} # two three four five five
# 在第一个元素 element[0]后面的所有元素.
echo ${arrayZ[@]:1:2} # two three
# 只提取在元素 element[0]后面的两个元素.
“$ *”是一个字符串,包含所有的位置参数,隔开了第一个字符的价值IFS
环境变量(内部字段分隔符),这是一个空间,默认选项卡,和换行符。另一方
面,“$ @”等于" $ 1 " " $ 2 "…" $ N,其中N是位置参数的数量。也就
是说,它等于N
单独的双引号字符串,用空格分开。
${ARRAY[*]} "a b c d e"
${ARRAY[@]} "a" "b" "c" "d" "e"
例如:
随机从同学们中选择1位回答问题。
#!/bin/bash
#
declare -a STU
declare -i number
STU=( Leichuanhu 'Gaofuchao' 'Zhaoyong' 'Yaobaowei' 'Liudongyang'
'Sunhaibo' 'Zhangxiangbo' 'Kongshiyi' 'Yangjing' Jinpengfei
Wangdan YX MFQ LZF GHW YHB )
#randomize;
#I=`rand()%16+1`
number=$RANDOM*16/32768
echo "${STU[$number]} $number"
写一个脚本:
打印九九乘法表。
#!/bin/bash
declare -i;
for (( i=1; i<10; i++ ));do
for (( j=1; j<=i; j++ )); do
let "temp=i * j"
echo -en "$j*$i=$temp\t"
done
echo ""
done
写一个脚本:
找出一组数据中的最大数。这组数据随机生成,并用数组保存。找出的过
程用函数实现。
#!bin/bash
#
declare -i MAX=0
read -p "The number of random numbers:" ROM
for I in 'seq 0 $[$ROM-1]'; do
ROMNUBER[$I]=$RANDOM
done
echo $ROMNUBER[@])
function FINDMAX() {
declare -a NUMBERS=($@)
for I in ${NUMBERS[@]};do
if [ $MAX -lt $I ];then
MAX=$I
fi
done
}
FINDMAX ${ROMUNBER[@]}
echo $MAX
FIREWALL:防火墙
工作在网络或主机的边缘,对进出的数据包根据定义的规则进行检查,
并做出相应处理的一套组件
数据包的检查规则:
匹配条件和处理办法
匹配条件:
帧首部、IP首部、TCP首部、应用层首部
TP:源IP,目标IP
TCP;源端口,目标端口,TCP标志位(URG;紧急,ACK,确
认号,PSH:推送,RST:重置,SYN:同步位,FIN:结束位;)
TCP有限状态机:CLOSED,LISTEN,SYN_SENT(送
出),SYN_RECV(接受),ESTABLISHED(已建立),FIN_WAIT1,
CLOSE_WAIT,FIN_WAT2,LAST_ACK确认回答),TIME_WAIT
(2MSL,2*120S),CLOSED;
软件:在主机上的内核中的TCP/IP协议栈上附加一套规则
规则需自己定义;
firewall防火墙的类型:
包过滤型防火墙:234层。根据数据包的属性进行检查(IP/TCP),安全
差,效率高
简单包过滤
带状态检测包过滤,连接状态,应该是网络层具备的基础
应用层网关防火墙:对特定的应用层协议做检查,更安全,效率低
firewall硬件防火墙:
netscreen,checkpoint
linux内核
TCP/IP:网络子系统(打开网络转
发:/proc/sys/net/ipv4/ip_forward)
netfilter:内核中,网络防火墙的框架,
源地址转换:SNAT
目标地址转换:DNAT
端口地址转换:PNAT
五个链:INPUT,OUTPUT,FORWARD,PREROUTING,POSTROUTING
防火墙的功能:
filter:过滤
nat:地址转换
mangle:拆开修改封装
raw
流向:
到本机:PREROUTING-->INPUT
转发: PREROUTING-->FORWARD-->POSTROUTING
本机发出:OUTPUT-->POSTROUTING
TABLE表;
raw的工作地方:PREROUTING,OUTPUT
mangle的工作地方:PREROUTING,OUTPUT,POSTROUTING,INPUT,FORWARD
NAT的工作地方:PREROUTING,OUTPUT,POSTROUTING
FILTER的工作地方:INPUT,FORWARD,OUTPUT
filter;
匹配条件:
netfilter,检查模块,有额外的扩展模块和核心模块
处理动作:
ACCEPT:放行;
DROP,REJECT:拒绝;DROP是悄悄丢弃,REJECT是声明
的丢弃,一般不用的;
REDIRECT 重定向
DNAT
SNAT
MASQUERADE 伪装
LOG日志
RETURN返回
自定义链
iptables是制定规则的命令,语法如下:
[-t TABLE] COMMAND CHAIN [CRETIRIA] -j ACTION
指定表名规则管理的机制后面是链匹配条件跳转到动作上。
-t:有四个等级
raw
mangle
nat
filter:默认
COMMAND;对链,或者对链中的规则进行管理操作
链中规则:
-A: 添加
-I#: 标示插入第几条
-R#: 替换
-D#:删除
-D CRETERIA链中的规则
链管理:
-N:新建一个自定义链
-X;删除一个自定义的空链
-E:重命名一条自定义链
-F:清空指定链,如果不指定链,则清空整个表中的所有链
-P:设定链的默认策略
-Z:置零,对规则生效,每条规则,包括默认策略都有两个计数器:一
个是被本规则匹配到的所有数据包的个数;另一个是被规则匹配到的所有
数据包的大小之和;
查看:
-L:查看
-v:详细查看
--line-numbers:显示规则的行号的
-x:显示精确值
-n:不要对地址和端口进行反解,显示数字地址
-j SNAT 跳转
--to-source
-j MASQUERADE地址伪装
iptables有两个脚本:
服务脚本:/etc/rc.d/init.d/iptables
脚本配置文件:/etc/sysconfig/iptables-config
因为iptables写的规则是立即生效但是重启后就无效了,所以规则的保存
位置:/etc/sysconfig/iptables
匹配条件:
通用匹配
-s:源地址
-d:目录地址
IP
NETWORK/MASK
!
-p:指定协议{icmp|tcp|udp}
-i:流入接口 IN_INTERFACE
-o:出去的接口 OUT_INTERFACE
扩展匹配
隐式扩展
-p tcp
--sport 源端口,可以指定连续的一片端口
--dport 目标端口
--tcp-fiags 标志位 SYN,ACK,RST SYN 为1的是空格之后的
那个位
--syn:是SYN,ACK,RST,FIN SYN的简写
-p udp
--sport 源端口
--dport 目标端口
-p icmp
--icmp-type
0:echo-reply 拼别人,回应报文是0
8:echo-request 别人拼,请求报文
显式扩展:
netfilter扩展模块引入的扩展,用于扩展匹配条件,通常需要
额外专用选项来定义,/lib/iptadles
-m state:用于实现链接的状态检测
--state
NEW,ESTABLISHED
RELATED,专门为FTP这样的协议准备的,跟另外的连接有关联的
-m multiport
--source-ports
--destination-po
/lib/iptables
-m limit:限制
--limit 速率 rate
--limit-burst 峰值 number
-m connlimit 限制ip请求的
[!] --connlimit-above n 多于n表示满足条件,表示应该不允许
-m iprange 限制IP的一段
--src-range ip-ip
--dst-range ip-ip
例如:-m iprange --src-range 172.16.100.1-172.16.100.100
-m mac
--mac-source address
匹配物理地址。必须是XX:XX:XX:XX:XX这样的格式。注意它只对来
自以太设备并进入PREROUTING、FORWORD和INPUT链的包有效。
-m string 指定字符
--algo {bm|kmp}
--string "PATTERN"
-m recent
--second 秒 这个选项必须结合使用,rcheck或--update
--set 设置 这将添加的源地址的包列表
--name 名字 指定要使用的命令列表。如果没有提供名
称然后将使用默认
--update 更新
--rcheck 检查源地址的数据包是目前在列表中。
-m time指定时间
--datestart 开始日期
--datestop 停止日期
--timestart 起始时间
--timestop 停止时间
--weekdays 工作日
-m layer7
--l7proto
-m log
为匹配的包开启内核记录。当在规则中设置了这一选项后,linux
内核会通过printk()打印一些关于全部匹配包的信息(诸如IP包头字段等)
--log-level level 记录级别(数字或参看 syslog.conf(5))。
--log-prefix prefix
在纪录信息前加上特定的前缀:最多14个字母长,用来和记录中其他信息
区别。
--log-tcp-sequence
记录TCP序列号。如果记录能被用户读取那么这将存在安全隐患。
--log-tcp-options 记录来自TCP包头部的选项。
--log-ip-options 记录来自IP包头部的选项
调用:例如iptables -A INPUT -d 172.16.100.1 -j clean_in
返回主链:iptables -A INPUT -d 172.16.100.1 -j RETURN
同一个主机上不能使用同网段的网卡
MASQUERADE:自动选择一个合适地址作为转换后的源地址
转载于:https://blog.51cto.com/6120261/1050008