第八周LINUX学习笔记 - Go语言中文社区

第八周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: \ServerShared

所谓的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: \ServerShared

所谓的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

版权声明:本文来源博客园,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://www.cnblogs.com/gohrx/p/10748298.html
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2019-11-10 12:05:11
  • 阅读 ( 791 )
  • 分类:Linux

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢