欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

第八周LINUX学习笔记

程序员文章站 2022-06-02 17:44:29
vsftpd丶NFS丶SAMBA nfs基于rpcsamba基于cifs(smb) DRBD:ftp:File Transfer protocol 文件传输协议 两个连接: tcp:命令连接 tcp:数据连接 在被动模式下数据传输端口是随机的除非自己指定 主动模式:服务器端通过20端口主动连接客户端 ......

                                   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