第八周LINUX学习笔记
vsftpd丶NFS丶SAMBA
nfs基于rpc
samba基于cifs(smb)
DRBD:
ftp:File Transfer protocol 文件传输协议
两个连接:
tcp:命令连接
tcp:数据连接 在被动模式下数据传输端口是随机的除非自己指定
主动模式:服务器端通过20端口主动连接客户端,
被动模式:客户端使用自己与服务器端建立连接。
默认情况下FTP协议使用TCP端口中的 20和21这两个端口其中20用于传输数据,21用于传输控制信息。但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。
防火墙上连接追踪
数据要流式化
文本:文件流
二进制
c/s
Server:
wu-ftpd(华盛顿大学的fdtp)
proftpd
pureftp
vsftpd Very Secure ftpd
iis
ServU
Client:
GUI
windows
flashfxp
cuteftp
filezilla(开源)
linux
gftp
CLI
ftp
lftp
wget
lftpget
用户认证:
系统用户
虚拟用户
hash file
mysql
匿名用户
数据传输安全
sftp:ssh提供的基于ssh协议的ftp
ftps:基于ssl的ftp
相应码:
1XX:信息码
2XX:成功状态码
3XX: 进一步提示补全信息的状态码
4XX:客户端错误,临时错误
5XX: 服务器端错误,永久性错误
安装vsftpd
/etc/pam.d/vsftpd:认证文件
pam:Plugable Authentication Module 插件式认证模块
nsswith:名称解析框架
模块化:/lib64/linbnss*,/usr/lib64/libnss*
配置文件:/etc/nsswitch.com
pam:认证框架
模块化:/lib64/security/pam*.so
配置文件:/etc/pam.conf和/etc/pam.d/*
服务脚本:/etc/rc.d/init.d/vsftpd
配置文件:/etc/vsftp/vsftpd.conf
主程序文件:/usr/sbn/vsftpd
数据文件:/var/ftp
空闲顶格写:
等号前后没有空格
anonymous或ftp
对于ftp访问ftp服务器时应该对其chroot
禁锢用户与其家目录中
chroot_local_user={yes|no} 禁锢用户,默认为no
需要禁锢开启为yes,安全
chroot_list_enable={yes|no}
chroot_list_file=/etc/vsftp/chroot
不禁锢全部用户,将禁锢的用户保存在/etc/vsftp/chroot
每行一个用户
两项不能同时使用
local_enable={yes|no}是否需要本地用户登录
匿名用户的配置
anonymous_enable=YES,启动虚拟用户登录
anon_upload_enable=YES 允许虚拟用户有写权限
anon_other_write_enable=YES 允许虚拟用户有删除权限
anon_mkdir_write_enable=YES 允许虚拟用户创建文件夹权限
注意:启用写入功能时,ftp用户对相应的本地文件系统也有相应的写入权限;
生效的权限取决于文件系统权限和服务权限的交集
实现用户的欢迎信息login banners
ftpd_banner=
banner_file=banner文件
切换目录式的欢迎信息
dirmessage_enable=YES
在目录中创建.messages
vsftp控制登陆系统用户的机制
/etc/vsftpd/ftpusers中的用户不允许使用ftp服务器,这是在/etc/pam.d/vsftpd中定义的
user_list配置文件有两种用法
黑名单: 里面的无法登陆,不写在里面的可以登陆
userlist_enable=YES
uselist_deny=YES
白名单:里面的可以登陆,不写在里面的无法登陆
userlist_enable=YES
uselist_deny=NO
连接限制
max_clients:最大并发连接数
max_per_ip:每IP可同时发起并发请求
传输速率:
anon_max_rete: 匿名用户的传输速率,单位为“字节/秒”
local_max_rate:本地用户传输速率,单位为“字节/秒”
上传文件的umask:
anno_umask:匿名用户上传文件的umask;
local_umask:
修改匿名用户上传文件的属主和属主
chown_uploads=YES
chown_username=用户名
实现虚拟用户:使用虚拟用户的原因是因为使用系统用户不安全,增删重要文件之类的。
所有的虚拟用户会映射成一个系统用户,访问时的文件目录是为此系统用户的家目录
虚拟用户
hash编码的文件:
奇数行为用户名,偶数行为密码
关系型数据库:
pam-mysql(第三方模块)实现认证
虚拟用户的权限
user_config_dir=文件夹
在文件夹中创建虚拟用户同名的的文件
在虚拟用户的文件中写入权限
总结:
ftp:命令和数据
ftp数据传输:文本和二进制
数据连接的工作模式:主动和被动
/etc/vsftpd
匿名用户的权限
本地用户的访问权限
本地用户禁锢于家目录
本地用户黑白名单
欢迎信息
上传的umask
上传文件的速率
上传文件的属主
最大并发连接数
虚拟用户
日志
NFS:network file system
V1
V2
V3
V4
为nfs提供监听的
2049/tcp
2049/udp
NIS:Nerwork Infomction Service
NIS+
不完全兼容
Kerberos
LDAP
RPC:portmapper
监听
111/tcp
111/udp
各基于RPC提供的进程,在启动时要向rpc注册监听在某端口上,rpc会从各未使用的端口中挑选一个端口给此进程监听,即半随机
NFS:
安装配置:
nfs-utils
三个关键进程
moutnd 挂载守护进程,负责客户端来源认证进程
nfsd:文件读写
idmapd:id映射进程
/etc/exports,建议直接导出一个分区(即给NFS文件系统一个单独的分区会更好)
文件系统 客户端1(文件系统导出属性) 客户端2(文件系统导出属性)
文件系统
客户端:
IP:172.16.100.7
Hostname: *.magedu.com
IP networks: 长短格式都可以
文件系统导出属性:
rw:读写
async:异步
sync:同步
root_squash:压缩root用户,基于imapd,将root通过网络访问时转换为nfsnobody用户
no_root_squash:不压缩用户
all_squash:压缩所有用户
anonuid,anongid:指定
showmount
-a 全部 在nfs服务器端显示所有的挂载会话
-d 文件 在服务器端执行,显示那个导出的文件系统被那些客户端挂载过
-e 共享,在客户端执行,探查某主机所导出的nfs文件系统,使用格式为showmount -e Server_IP
exportfs导出nfs文件(可以不用重启服务,避免了如果重启服务正在传输一些文件的丢失)
-a:操作所有文件系统
-ra:重新导出所有文件系统
-ua:取消导出的所有文件系统
-v:显示详细信息
如果客户端要启用开机自动挂载NFS,挂载的设备为服务器端IP:/nfs文件系统名 ,但是如果服务器端需要导出NFS文件系统,那么就得再挂载选项里加入defaults,_netdev
保证其不会一直请求挂载。
nfs的辅助进程mountd等监听在固定端口上,可以通过在编辑/etc/sysconfig/nfs等参数来实现
samba:
smb:Service Message Block smbd tcp:445
NetBIOS:本地名称解析 nmbd udp:137 138 tcp:139
winbindd:window的绑定进程
注意:samba服务器的启动时 nmb 名称解析,和smb协议 都应该启动
AD(LDAP)
Active Directory
DC
UNC: \\Server\Shared
所谓的samba是因为WINDOS间只支持smb协议之间进行进程调用,而LINUX间只支持RPC下的NFS所以为了两者能够通信,所以在LINUX上有人开发了SAMBA支持两者之间的进程调用。
samba的用户:
1.系统用户
2,密码是独立的,非为/etc/shadow中的密码
使用smbpasswd -a 用户名 设置访问smb的密码
密码文件被加密后存在在一个特殊路径下,ls -a 也无法查看、
默认访问的是用户的家目录。 那么如何配置一个公共的共享目录提供访问。
smbclient:
检查服务器上的共享:
sambclient -L Server -U username
以交互式模式连入服务器的某共享
smbclient //Server/Shared -U username
vim /etc/smb.comf
新建一个共享文件
[shared name] 共享名
comment= 鼠标悬停在文件夹上线显示的机械能系
path 共享文件夹路径
read only =
writeable =
browaeable =
public =
guset ok = 是否允许来宾账号访问。
write list = 可写用户列表
用户名:hadoop
用户组:@groupname,+groupname
测试配置文件语法错误,并显示最终生效的配置
testparm
挂载cifs文件系统
mount -t cifs //IP/Shared /path/to/mount_point -o username=smbuser
iptables
iptables:基于软件的形式实现的一种防火墙的软件程序
Firewall:工作在主机或网络边缘,对进出的报文按事先定义的规则进行检查,并且由匹配到的规则进行处理的一组硬件或软件,甚至可能是两者的组合
主机防火墙:工作于主机边缘,只能对一台主机起到保护作用
网络防火墙:工作于网络边缘,对多台主机起到保护作用
一般来讲网络防火墙对多台主机起保护作用,那么符合不同主机的不同功能的报文都会放行,而当到达某个主机的时候 就应该用主机防火墙来进一步隔离。因此 很多时候都是主机防火墙和网络防火墙配合工作的。
网络层:网络防火墙
应用层:网关
IDS:入侵检测
HIDS:OSSEC 主机型入侵检测
NIDS:snort 网络型入侵检测
Filesystem:tireware 文件系统级别的入侵检测
IPS:入侵防御系统+Firewall 与防火墙联动
honeypot:蜜罐 做诱补工作
系统评估安全工具:
Nessus,nmap
BTlinux
rootkit
乌云平台
iptables/netfilter:基于网络层的防火墙,连接追踪(状态检测)
ipfw ipchains iptables
iptables:防火墙规则编写工具
netfiter:网络过滤器,是一个框架
hook_function
PRERROUTING 路由前 主要做目标地址转换
INPUT
OUTPUT
FORWARD
POSTROUTING 路由后 主要做源地址转换
这里稍微解释一下:一个报文进来 发现目标地址并不是本机,那么通过路由 指向FORWARD
这时候不应该做转换。因为还没有指向哪个地址 例如有多块网卡的情况下。所以说FORWARD是用来判断指向哪块网卡的,当到达POSTROUTING时才进行源地址转换,将源地址转换为网关的地址,转发到目标地址的主机上去。然后当响应报文进来的时候,目标地址肯定是本机,但是实际上是要将报文响应给用户的。 于是PRERROUTING就发挥作用了,将目标地址进行转换,转换为用户机。
filter:过滤:做报文筛选 私有地址发送的报文 是不会被送回来的,就像游览网站时,发送过去的报文是不会被返回的。除非做代理和地址转换。
NAT:Network Address Transltion 将报文中的源地址和目标地址 转换为另外的地址
DNAT
SNAT
mangle:对报文进行修改,不实现过滤也不实现地址转换,只对报文中的一些信息进行修改,然后重新封装。因此在任何位置都能有这个功能
raw:
FORWARD:
filter
mangle
INPUT
filter
mangle
OUT
filter
mangle
nat
PREROUTING
mangle
nat
POSTOUTING
mangle
nat
将控制强的放在前面,应用访问频繁的也要放在前面
四表:
fileter,net,mangle,raw
五链
PREROUTING(路由前) INPUT FOREARD OUTPUT POSTROUTING(路由后)
表和链的对应关系
filer:INPUT,FORWARD.OUTPUT
nat:PREROUTING OUTPUT POSTROUTING
magle:PREROUTING FORWARD POSTROUTING INPUT OUTPUT
规则:检查条件,处理机制,如果规则太多了,可能又将规则串为一条自定义的链,并在检查时将报文送给自定义的链检查后再送回原先的链继续检查
通:白名单,默认为堵,只对能识别的进行放行
堵:黑名单,默认为通,只对能识别的进行阻截
检查条件:
IP:SIP,DIP
TCP:SPORT,DPORT,FLags
UDP:SPORT,DPORT
ICMP:ICMP-TYPE
扩展机制:
time string state(connection-tracking)连接追踪
处理机制:
DROP(丢弃),
REJECT(拒绝,并返回)
ACCEPT(允许)
SNAT
DNAT
RETURN(返回)
REDIRECT(端口转发)
LOG(只记录日志)
mangle:做防火墙标记
自己在网上找的关于TCP连接时3次握手和断开时四次握手的必要性https://www.cnblogs.com/qiaoconglovelife/p/5733056.html(连接时的一些数值(+ -号可能没标明)
如何写规则
-t 表 -L 列出 -n 以数值方式显示
iptables [-t table] -N chain
创建一条自定义的空规则链
iptables [-t table] -X chain
产出一条自定义的空规则链
iptables [-t table] -E old-chin-name new-chain-name
为链修改名
iptables [-t table] -P chain—name target
为链指定默认策略,修改默认的属性
iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]
注意当省略"-t表名"时,默认表示操作filter表
-F 清空链中的规则 可以指定哪个链,或者哪个链中的哪些规则
规则由编号,在链中自上而下,从1开始
-L list 列出表中的所有规则
-n:数字格式显示ip和port
-v:显示信息,
pkts:packets,被本规则所有匹配到的报文的个数
baytes:被本规则所匹配到的所有报文的大小子和,单位是字节,会执行单位换算
target:目标,即处理机制
port:协议一般为(TCP|UDP|ICMP)
opt:可选项
in:数据包的流入端口
out:数据包的流出接口
scource:源地址
destination:目标地址
-vv:
-vvv:更加详细
-x:exactly:精确值,不执行单位换
--line-nambers:显示各规则的行号
-Z:zero,清零:
把规则的计数器清零
-P 设置指定链的默认策略
iptables -P INPUT DROP
iptables [-t table] {-A|-D} chain rule-specification
-A:append,附加一条规则
rule-specification
匹配条件 -j 处理机制
匹配条件:
通用匹配
-s 匹配原地址,可以IP,也可以网络地址:可以使用!操作符取反,!172.168.0.0/16 相当于 --src,或 --source
-d 匹配目标地址,可以IP,也可以网络地址:可以使用!操作符取反,!172.168.0.0/16
-p 匹配协议,通常只能使用{TCP|UDP|ICMP}三者之一
-i 数据报文流入的接口,通常只用于INPUT,FORWARD和PREROUTING
-o 数据报文流出的接口,通常只用OUTPUT,FORWARD和POSTROUTING
保存规则:
service iptables save
规则会被保存至/etc/sysconfig/iptables文件中:
默认,start时也会读取次文件中的内容篇日志规则
iptables-save > /path/to/some_rulefile 保存iptables至别的位置
iptables-restore < /path/to/some_rulefile 从自定义的位置读取并使之生效
规则命令:
-A:添加
-D:删除
iptables [-t table] -D chain rulenum(规则所在行数)
当一条被删除,后续的条目会被补上
插入规则
iptables [-t table] -I chain [rulenum] rule-specification
不带规则行数 默认为第一行
替换规则(覆盖指定规则)
iptables [-t table] -R chain rulenum rule-specification
显示指定链上的规则添加命令
iptables [-t table] -S [chain [rulenum]]
扩展匹配
隐含扩展:使用-p {tcp|udp|icmp}指定某特定协议后,自动能够对协议进行的扩展
-p tcp
--dport m[-n],匹配的目标端口,可以是连续的多个端口
--sport:m[-n],匹配的源端口,可以是连续的多个端口
--tcp-flags
URG PSH PST SYN ACK FIN
例如后面加上 rst,syn,ack,fin syn
那么这个意思就是 必须syn为1 其他的必须为0 另外还能写成ALL,NONE
-p udp
--dport m[-n],匹配的目标端口,可以是连续的多个端口
--sport:m[-n],匹配的源端口,可以是连续的多个端口
-p icmp
--icmp-type 8是ping请求 0是ping响应
例子:放行ping其他主机
iptables -A INPUT -d 192.168.48.128 -p icmp --icmp-type 0 -j ACCEPT
iptables -A OUTPUT -s 192.168.48.128 -icmp --icmp-type 8 -j ACCEPT
显式扩展:必须要明确指定的扩展模块
-m 扩展模块名称 --专用选项1 --专用选项2
multiport:多端口匹配,一次指定多个离散端口
--source-ports --sports ports{port1 port2}
--destination-ports, --dports
例子iptables -A INPUT -d 192.168.48.128 -p tcp -m multiport --dports 21,80 -A ACCEPT
iprange:ip地址服务
[!] --src-range from [-to]
[!] --dst-range from [-to]
例子:
iptables -A INPUT -d 192.168.48.128 -p tcp --dport 23 -m --src-range from 192.168.48.129-192.168.48.130 -j ACCEPT
iptables -A OUTPUT -s 192.168.48.128 -p tcp --dport 23 -m iprange --dst-range from 192.168.48.129-192.168.48.130 -j ACCEPT
time 指定时间范围
--datestart YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--datestop YYYY[-MM[-DD[Thh[:mm[:ss]]]]]
--timestart hh:mm[:ss]
--timestart hh:mm[:ss]
[!] --weekdays day[,day....]
例子iptables -A INPUT -d 192.168.48.128 -p tcp -dport 80 -m time --weekdays 1,2,3,4,5 --timestart 8:00 --timestop 21:00 -j ACCEPT
string 字符串匹配
--alog {bm|kmp} :字符匹配查找时使用的算法 必要选项
--string “STRING” :要查找的字符串 必要选项
--hex-string "HEX-STRING" 要查找的字符,先编码成16进制格式
例子iptables -I OUTPUT -s 192.168.48.128 -p tcp -sport 80 -m string --alog bm --string "hello" -j DROP
例如对游览器访问限制含有字符串“hello"不能通行
另外很重要的一点是 这里选择了插入的方式,并且没有选定插入的行数。说明插入的是第一行。因为这里相比于其他阻截方式更为严格,即含有字符的限制。所以说如果你有对HTTP请求的一些普通限制,
connlimit:每IP对指定服务的最大并发连接数
[!] --connlimit-above
limit:报文速率控制
--limit number[/second|/minute|/hour|/day]
--limit-burst # number 峰值
hping3:安装此包,做测试
state:状态追踪
ip_conntrack,nf_conntrack 通过这些模块实现对整个连接的追踪。内部有个表记录各个连接的各种信息。
!注意:内部用来存储记录的空间是有限的,例如只能存储1000个记录连接,那么下一个连接进来的时候就不会被记录进来。这并不是没有记录信息那么简单,这造成了整个服务器的拒绝连接请求。所以要将这部分内存空间加大。
netfilter:会话
这其中有个自己进行控制的连接状态记时器,只要新连接进来成为NEW,在连接状态计时器倒计时为0前,一直处于ESTABLISHED状态,这种可以使用与任何协议(与TCP三次握手的ESTABLISHED有区别)
--state
NEW 新的连接
ESTABLISHED 连接中
RELATED 即一些连接之间是有依赖关系的(特别适用于被动模式下的FTP服务)
INVALID 无效连接
状态匹配的简单介绍:例如我们对HTTP的INPUT的链做了限制,但是OUTPUT链是无法做限制的。因为我们HTTP的回复是面向全体的。于是 一些木马程序攻破了INPUT链,通过控制了新的程序端口并从OUTPUT出去并控制了主机。所以这时候基于状态追踪就能很好的防护,INPUT链 只能够接受NEW和ESTABLISHED 这两种状态的连接。而OUTPUT链只接受ESTABLISHED 状态的连接 。这样就起到了很好的防护作用
调整连接追踪功能所能容纳的最大连接数
cat /proc/sys/net/nf_conntrack_max
定义了连接追踪的最大值,因此,建议按需调大此值
cat /proc/net/nf_conntrack
记录了当前追踪的所有连接
cat /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established
超时时间 这个超时时间比较难定义 定义少了在用户访问时间挺长时就会给你自动断开,定义长了,有大量用户访问的网站将出现一些用户无法访问的迹象
因此state 是一把双刃剑,他能够对安全起更好的作用,但是对一些大流量的网站来说需要谨慎开启
法则:
1.对于进入状态为ESTABLISHED都应该放行 ,即将状态为ESTABLISHED的规则放置在input规则链中的第一个,只要是ESTABLISHED的连接都可以直接放行,而后续规则则严格检查NEW状态的。但是后续的一些更严格的规则比如速率控制的规则将无法生效。所以应该对规则进行优化。
2.对于返回状态为ESTABLISHED都应该放行
3.严格检查进入的状态为NEW的链接
4.所有状态为INVALID都应该拒绝
规则优化的一些原则:以下原则有等级
1.将有更加严格要求的规则放在最前面
2.将一些频繁需要检查的规则合并,但同时最好也要修改一下PROT即协议类型(如对INPUT链ESTABLISHED状态应该全部放行)
3.同一些协议的普通的 没有严格要求的协议应该合并
-j target
RETURN:返回调用链
例如我自定义了一个链 iptables -t filter -N clean_in
在写好这个链的一些规则后,如 iptables -A clean_in -d 192.168.48.128 -p tcp --tcp-flags ALL ALL -j DROP
对自定义的链进行返回 iptables -A clean_in -d 192.168.48.128 -j RETURN
主链对自定义的链进行调用 iptables -A INPUT -d 192.168.48.128 -j clean_in
如何放行工作与被动模式的ftp服务(因为FTP被动模式下的数据传输端口是随机的,除非自己特殊指定)
1、确保iptables加载ftp协议支持的模块,ip_nat_ftp,ip_conntrack_ftp
编辑/etc/syconfig/iftables-config文件,定义如下参数:
IPTABLES_MIDULES="ip_nat_ftp ip_conntrack_ftp"
2。放行请求报文的RELATED和ESTABLISHED状态,放行响应报文的ESTABLISHED状态
iptables的nat
-m state:追踪连接状态
模板:内存中会维持一个空间
NEW
ESTABLISHED
RELATED
INVALID
在前段的服务器中尽量不要开启追踪连接
iptables子命令
规则:-A,-I,-D,-R
链:-N,-X,-F,-Z,-E,-P -S
通:默认 DROP
堵:默认ACCEPT
显示:-L -S
-L
-n -v -x --line-numbers
规则定义:iptables -t table -A|-I|-R chain 匹配条件 -j target
匹配条件
通用匹配:-s -d -i -o -p
扩展匹配
隐含扩展
-p tcp
--sport --dport --tcp-flags
--syn
-p udp
--sport --dport
-p icmp
--icmp-type
echo-request 8
echo-reply 0
显示扩展:
-m state
--statr
-m multiport
--sprots --dports --ports
-m iprange
--src-range --dst-range
-m string
-algo {bm|kmp} --string --hex-string
-m connlimit
! --connlimit-above
-m limit
--limit n(/second|/minute|/hour|/day), --limit-burst
-m time
--datestart --datestop
--timestart -- timestop
--weekdays
-j
ACCEPT,DROP,REJECT,LOG,REDIRECT,SNAT,DNST,MASQUERADE,MARK,RETURN,自定义
四表:raw mangle nat filte
五链:PREROUTING INPUT FOEWARD OUTPUT POSTOUTING
iptables-save iptables-restore
主机防火墙:INPUT OUTPUT
网络防火墙:FORWARD
路由:
地址属于内核,地址当前属于主机的都给予响应
路由:对Linux主机而言,设定/proc/sys/net/ipv4/ip_forward的值为1,即为开启路由
iptables -A FORWARD -s 172.16.0.0/16 -d 192.168.20.0/24 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -s 192.168.20.0/24 -d 172.16.0.0/16 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT
iptables -A FORWARD -d 192.168.20.12 -p tcp -m multiport 22,80 -m --state NEW -j ACCEPT
路由表的生成
静态:手动添加
动态:基于路由协议学习,RIP2 OSPF
NAT:网络地址转换
A:10
B:172.16-172.31
iptables -A FORWARD -s 172.16.0.0/16 -d 192.168.20.0/24 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -s 192.168.20.0/24 -d 172.16.0.0/16 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT
iptables -A FORWARD -d 192.168.20.12 -p tcp -m multiport 22,80 -m --state NEW -j ACCEPT
C:192.168.0-192.168.255
NAT: 要注意NAT技术和路由的区别 。NAT技术是用于内网和外网的访问的,而路由主要实现的是地址转向
过载技术
Basic NAT:静态NAT
NAPT:动态NAT,网络地址端口转换
源地址转换:SNAT 用于内网主机访问互联网
目标地址转换:DNAT
让互联网上主机访问本地内网上的某服务器上的服务
iptables基于SNAT和DNAT这两个目标实现地址转换技术
-j SNAT --to-source SIP
规则添加:POSTROUTING链
iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -j SNAT --to-souer 192.168.48.128
-j MASQUERAADE 动态获取 适用于主机的IP是动态分配的。缺点是性能降低
-j DNAT --to-destination DIP{:PORT}
支持端口映射
iptables -t nat -A PREROUTING -d 172.16.100.7 -p tcp --dport 80 -j DNAT --to-destination 192.168.48.128
这边强调一下端口,端口意义是指向的某种服务。那么比如一个用户想要去访问本地内网上的某服务器上的http服务。这边假设用户主机为A 作为路由以及NAT地址转换的主机为B 提供服务的主机为C。 我们应该访问主机B的IP地址加上不应该为80端口号的地址,因为若为80端口,那么意思将会是访问B主机的http服务,然后将IP转换时变为 C主机的IP号加80端口号。因此在B主机上应该将提供http服务的80端口和提供转向的端口22022做好区分
具体例子
iptables -t nat -A PREROUTING -d 192.168.48.128 -dport 22022 -j DNAT --to-destination 192.168.48.129:22
所以:FORWARD仅仅是做一个对地址路由过滤的作用,而NAT是对地址进行转换的作用 对网络进行过滤的话应该在FORWARD上就进行了
基于net表
PREROUTING
POSTROTING
OUTPUT
Proxy(代理):
rsync
rsync:remote sync
cp scp(rsync不具备加密) rsync对文件夹之间会逐一比较是否有不同,若有不同或缺失则替换新文件。没有不同的文件则不理会。所以比较快速
rsync命令的工作模式
第一种:shell模式,也称作本地模式
第二种:远程shell模式,此时可以利用ssh协议承载其数据传输过程
第三种:列表模式,其工作方式与ls相似,仅列出源的内容:-nv
第四种:服务器模式,此时,rsync可以工作在守护进程,能够接收客户端的数据请求;在使用时,可以在客户端使用rsync命令把文件发送到守护进程,也可以像服务器请求获取文件
rsync有许多选项:
-n:测试,在不确定命令是否能按照意愿执行时,务必要实现测试
-v:详细输出模式,--verbose
-q:--quiet,静默模式
-c:--checksum,开启校验功能,强行对文件传输进行校验
-r:--recursive,递归复制
-a: --archives.归档,保留文件的原有属性
-p:--perms 保留文件的权限
-t: --times 保留文件的时间戳
-l:--links 保留文件的符号链接
-g:--group保留文件的属组
-o:--owner 保留文件的属主
-D:--devices 保留设备文件
-e ssh:表示使用ssh协议作为继承
-z:对文件压缩后传输
--progress:显示进度
注意:rsync命令使用中,如果源参数的末尾有斜线,只会复制指定目录的内容,而不复制目录本身,没有斜线,则会复制目录本身。包括目录
rsync -r /mydata/data /bachups/ 会把目录data直接同步至/bakups目录中
rsync -r /mydata/data/ /backups/:会把目录data/中的内容至/backups目录中
例子基于ssh协议将本地目录同步到目标主机: rsync -e ssh -r /etc root@192.168.48.129:/tmp/
同时也可以将目标主机的同步到本地rsync -e ssh -r root@192.168.48.129:/etc /tmp/
本地cp
rsync 源目录 目标地址
查看帮助 man rsyncd.conf
配置rsync以daemon的方式运行
1.设定rsync服务器端:
1)安装超级守护进程 xinetd
yum -y install xinetd
2)为rsync提供配置文件 具体的配置还得看官方文档
配置文件为/etc/rsync.conf
定义一个全局配置和多个rsync共享配置
#Global Settings
uid = nobody 以哪个用户去运行进程
gid = nobody
use chroot = no(是否禁锢用户家目录)
max connections = 10(最大连接数)
strict modes = yes(是否完全检查)
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
#Directory to be synced
[synced_name]
path = /path/to/some_dir
ignore errors = yes(是否忽略错误)
read only = no(只读)
write only = no(只写)
hosts allow = white_list_ip/net 白名单
hosts deny = black_list_ip/net 黑名单
说明:
1.默认规则为允许访问,二者都不出现时
2.只出现hosts allow:定义白名单;但没有被匹配到的由默认规则处理,即为允许
3,只出现hosts deny:定义黑名单;出现在名单中的都被拒绝
4二者同时出现,先检查hosts allow,如果匹配就allow,否则,检查hosts deny 如果匹配则拒绝,如二者均无匹配,则使用默认的,即允许
list = false 是否允许列出名单
uid = root(以哪个用户去操作文件)
gid = root
auth users = username (允许的用户)
secrets file = /etc/rsync.passwd 用户密码的存放位置
3)配置密码文件/etc/rsync.passwd
username:password
文件权限要设置为600
4)配置服务能够启动
chkconfig rsync on
service xinetd start
监听与873/tcp
2.在客户端做测试
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST
rsync --password-file=/etc/rsyncd.passwd install.log myuser@172.16.100.7::mydata 将本地文件发送到服务端
rsync myuser@172.16.100.7::mydata/* /etc 但是将服务端文件同步到本机需要将服务端目录加个*
如果客户端本地提供了密码文件那么就不需要去输密码,而没有提供的话则每次都需要输相应的密码。
如果需要做周期性操作,定义crontab
nfs基于rpc
samba基于cifs(smb)
DRBD:
ftp:File Transfer protocol 文件传输协议
两个连接:
tcp:命令连接
tcp:数据连接 在被动模式下数据传输端口是随机的除非自己指定
主动模式:服务器端通过20端口主动连接客户端,
被动模式:客户端使用自己与服务器端建立连接。
默认情况下FTP协议使用TCP端口中的 20和21这两个端口其中20用于传输数据,21用于传输控制信息。但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。
防火墙上连接追踪
数据要流式化
文本:文件流
二进制
c/s
Server:
wu-ftpd(华盛顿大学的fdtp)
proftpd
pureftp
vsftpd Very Secure ftpd
iis
ServU
Client:
GUI
windows
flashfxp
cuteftp
filezilla(开源)
linux
gftp
CLI
ftp
lftp
wget
lftpget
用户认证:
系统用户
虚拟用户
hash file
mysql
匿名用户
数据传输安全
sftp:ssh提供的基于ssh协议的ftp
ftps:基于ssl的ftp
相应码:
1XX:信息码
2XX:成功状态码
3XX: 进一步提示补全信息的状态码
4XX:客户端错误,临时错误
5XX: 服务器端错误,永久性错误
安装vsftpd
/etc/pam.d/vsftpd:认证文件
pam:Plugable Authentication Module 插件式认证模块
nsswith:名称解析框架
模块化:/lib64/linbnss*,/usr/lib64/libnss*
配置文件:/etc/nsswitch.com
pam:认证框架
模块化:/lib64/security/pam*.so
配置文件:/etc/pam.conf和/etc/pam.d/*
服务脚本:/etc/rc.d/init.d/vsftpd
配置文件:/etc/vsftp/vsftpd.conf
主程序文件:/usr/sbn/vsftpd
数据文件:/var/ftp
空闲顶格写:
等号前后没有空格
anonymous或ftp
对于ftp访问ftp服务器时应该对其chroot
禁锢用户与其家目录中
chroot_local_user={yes|no} 禁锢用户,默认为no
需要禁锢开启为yes,安全
chroot_list_enable={yes|no}
chroot_list_file=/etc/vsftp/chroot
不禁锢全部用户,将禁锢的用户保存在/etc/vsftp/chroot
每行一个用户
两项不能同时使用
local_enable={yes|no}是否需要本地用户登录
匿名用户的配置
anonymous_enable=YES,启动虚拟用户登录
anon_upload_enable=YES 允许虚拟用户有写权限
anon_other_write_enable=YES 允许虚拟用户有删除权限
anon_mkdir_write_enable=YES 允许虚拟用户创建文件夹权限
注意:启用写入功能时,ftp用户对相应的本地文件系统也有相应的写入权限;
生效的权限取决于文件系统权限和服务权限的交集
实现用户的欢迎信息login banners
ftpd_banner=
banner_file=banner文件
切换目录式的欢迎信息
dirmessage_enable=YES
在目录中创建.messages
vsftp控制登陆系统用户的机制
/etc/vsftpd/ftpusers中的用户不允许使用ftp服务器,这是在/etc/pam.d/vsftpd中定义的
user_list配置文件有两种用法
黑名单: 里面的无法登陆,不写在里面的可以登陆
userlist_enable=YES
uselist_deny=YES
白名单:里面的可以登陆,不写在里面的无法登陆
userlist_enable=YES
uselist_deny=NO
连接限制
max_clients:最大并发连接数
max_per_ip:每IP可同时发起并发请求
传输速率:
anon_max_rete: 匿名用户的传输速率,单位为“字节/秒”
local_max_rate:本地用户传输速率,单位为“字节/秒”
上传文件的umask:
anno_umask:匿名用户上传文件的umask;
local_umask:
修改匿名用户上传文件的属主和属主
chown_uploads=YES
chown_username=用户名
实现虚拟用户:使用虚拟用户的原因是因为使用系统用户不安全,增删重要文件之类的。
所有的虚拟用户会映射成一个系统用户,访问时的文件目录是为此系统用户的家目录
虚拟用户
hash编码的文件:
奇数行为用户名,偶数行为密码
关系型数据库:
pam-mysql(第三方模块)实现认证
虚拟用户的权限
user_config_dir=文件夹
在文件夹中创建虚拟用户同名的的文件
在虚拟用户的文件中写入权限
总结:
ftp:命令和数据
ftp数据传输:文本和二进制
数据连接的工作模式:主动和被动
/etc/vsftpd
匿名用户的权限
本地用户的访问权限
本地用户禁锢于家目录
本地用户黑白名单
欢迎信息
上传的umask
上传文件的速率
上传文件的属主
最大并发连接数
虚拟用户
日志
NFS:network file system
V1
V2
V3
V4
为nfs提供监听的
2049/tcp
2049/udp
NIS:Nerwork Infomction Service
NIS+
不完全兼容
Kerberos
LDAP
RPC:portmapper
监听
111/tcp
111/udp
各基于RPC提供的进程,在启动时要向rpc注册监听在某端口上,rpc会从各未使用的端口中挑选一个端口给此进程监听,即半随机
NFS:
安装配置:
nfs-utils
三个关键进程
moutnd 挂载守护进程,负责客户端来源认证进程
nfsd:文件读写
idmapd:id映射进程
/etc/exports,建议直接导出一个分区(即给NFS文件系统一个单独的分区会更好)
文件系统 客户端1(文件系统导出属性) 客户端2(文件系统导出属性)
文件系统
客户端:
IP:172.16.100.7
Hostname: *.magedu.com
IP networks: 长短格式都可以
文件系统导出属性:
rw:读写
async:异步
sync:同步
root_squash:压缩root用户,基于imapd,将root通过网络访问时转换为nfsnobody用户
no_root_squash:不压缩用户
all_squash:压缩所有用户
anonuid,anongid:指定
showmount
-a 全部 在nfs服务器端显示所有的挂载会话
-d 文件 在服务器端执行,显示那个导出的文件系统被那些客户端挂载过
-e 共享,在客户端执行,探查某主机所导出的nfs文件系统,使用格式为showmount -e Server_IP
exportfs导出nfs文件(可以不用重启服务,避免了如果重启服务正在传输一些文件的丢失)
-a:操作所有文件系统
-ra:重新导出所有文件系统
-ua:取消导出的所有文件系统
-v:显示详细信息
如果客户端要启用开机自动挂载NFS,挂载的设备为服务器端IP:/nfs文件系统名 ,但是如果服务器端需要导出NFS文件系统,那么就得再挂载选项里加入defaults,_netdev
保证其不会一直请求挂载。
nfs的辅助进程mountd等监听在固定端口上,可以通过在编辑/etc/sysconfig/nfs等参数来实现
samba:
smb:Service Message Block smbd tcp:445
NetBIOS:本地名称解析 nmbd udp:137 138 tcp:139
winbindd:window的绑定进程
注意:samba服务器的启动时 nmb 名称解析,和smb协议 都应该启动
AD(LDAP)
Active Directory
DC
UNC: \\Server\Shared
所谓的samba是因为WINDOS间只支持smb协议之间进行进程调用,而LINUX间只支持RPC下的NFS所以为了两者能够通信,所以在LINUX上有人开发了SAMBA支持两者之间的进程调用。
samba的用户:
1.系统用户
2,密码是独立的,非为/etc/shadow中的密码
使用smbpasswd -a 用户名 设置访问smb的密码
密码文件被加密后存在在一个特殊路径下,ls -a 也无法查看、
默认访问的是用户的家目录。 那么如何配置一个公共的共享目录提供访问。
smbclient:
检查服务器上的共享:
sambclient -L Server -U username
以交互式模式连入服务器的某共享
smbclient //Server/Shared -U username
vim /etc/smb.comf
新建一个共享文件
[shared name] 共享名
comment= 鼠标悬停在文件夹上线显示的机械能系
path 共享文件夹路径
read only =
writeable =
browaeable =
public =
guset ok = 是否允许来宾账号访问。
write list = 可写用户列表
用户名:hadoop
用户组:@groupname,+groupname
测试配置文件语法错误,并显示最终生效的配置
testparm
挂载cifs文件系统
mount -t cifs //IP/Shared /path/to/mount_point -o username=smbuser
第八周LINUX学习笔记的更多相关文章
- 第七周LINUX学习笔记
HTTP的基本操作 3月17资源子网和通信子网套接字:两类 socket:IP port IP:port Ip.port unix sock:基于文 ...
- 第六周LINUX学习笔记
DNS服务 DNS:Domain Name Service //协议 实现:BIND(Berkeley Internet Name Domain) 监听端口: UDP:5 ...
- 第三周LINUX学习笔记
周期性任务丶find 文件查找:find命令 locate :在数据库中查找,非实时查找,精确度不高,查找速度快,模糊查找 /tmp/passwad/a.textfind:实时查找:速度慢 ,精确 ...
- 第五周linux学习笔记
第五章 系统调用 5.1 与内核通信 系统调用在用户空间进程和硬件设备之间添加了一个中间层.该层主要作用有三个. 它为用户空间提供了一种硬件的抽象接口. 系统调用保 证了系统的毡定和安全. 在第 3 ...
- 第十一周LINUX 学习笔记
keepalived keepalived: 基于vrrp(虚拟冗余路由协议)的实现 virtual server: 对于IPVS vrrp_script: 调用外部脚本 ngin ...
- 第十周LINUX 学习笔记
LVS集群nat丶DR HA:高可用 平均无故障时间/(平均无故障时间+平均修复时间) 负载均衡 次序lb(负载)——>ha()LB tcp:lvs,haproxy 应用 ...
- 第九周LINUX 学习笔记
基于GTID的mysql主从简单复制 一.简单主从模式配置步骤1.配置主从节点的服务配置文件1.1.配置master节点:[mysqld]binlog-format=ROWlog-bin=master ...
- 第十二周LINUX学习笔记
zabbix zabbix-server: 监听的端口10051 zabbix-agent: 10050 Zabbix: Item, Key(键) ethercard.traffic[eth0] ac ...
- Linux 学习笔记
Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...
随机推荐
- PAT1118:Birds in Forest
1118. Birds in Forest (25) 时间限制 150 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Yue Some ...
- 【转及总结】Bootstrap 框架 栅格布局系统底层设计原理
如果你是初次接触Bootstrap,你一定会为它的栅格布局感到敬佩.事实上,这个布局系统提供了一套响应式的布局解决方案. 既然这么好用,那他是如何用CSS来实现的呢? 我特意去Bootstrap官方下 ...
- 微信小程序基于第三方websocket的服务器端部署
微信小程序后台请求越来越严格 1.request要求用https 2.websocket要求用wss 3.测试后发现websocket只能走433端口 作为.net开发,websocket又是使用的第 ...
- Linux时间子系统之一:认识timer_list和timer_stats和使用
内核版本:v3.4.xxx 一.前言 内核提供了方便查看当前系统TickDevice.活动的Timer列表以及Timer使用的统计信息. 内核分别用两个节点来表示TimerList和Timer统计信息 ...
- 使用Maven+Nexus+Jenkins+Svn+Tomcat+Sonar搭建持续集成环境
前言 但凡一个略有规模的项目都需要一个持续集成环境的支撑,为什么需要持续集成环境,我们来看一个例子.假如一个项目,由A.B两位程序员来协作开发,A负责前端模块,B负责后端模块,前端依赖后端.A和B都习 ...
- Spring Boot + Websocket + Thymeleaf + Lombok
https://github.com/guillermoherrero/websocket 验证错误消息文件名字:是默认名ValidationMessages.properties,编译后存放在cla ...
- Golang 嵌套map赋值办法
http://my.oschina.net/sol/blog/159060 m := map[string]map[string]string{} mm, ok := m["kkk" ...
- api_request.go
&& !strings.HasPrefix(endpoint, "https") { endpoint, err = httpsEndpoi ...
- Executor框架简介
Executor框架是在Java5中引入的,可以通过该框架来控制线程的启动,执行,关闭,简化并发编程.Executor框架把任务提交和执行解耦,要执行任务的人只需要把任务描述清楚提交即可,任务的执行提 ...
- BZOJ_3427_Poi2013 Bytecomputer_DP
BZOJ_3427_Poi2013 Bytecomputer_DP Description 给定一个{-1,0,1}组成的序列,你可以进行x[i]=x[i]+x[i-1]这样的操作,求最少操作次数使其 ...