Linux就该这么学笔记

系统命令

常用系统工作命令

  1. systemctl 命令
旧命令 systemctl新命令 功能
service firewalld start systemctl start firewalld.service 启动服务
service firewalld restart systemctl restart firewalld.service 重启服务
service firewalld stop systemctl stop firewalld.service 停止服务
service firewalld reload systemctl reload firewalld.service 重新加载配置文件(不终止服务)
service firewalld status systemctl status firewalld.service 查看服务状态
chkconfig firewalld on systemctl enable firewalld.service 开机自动启动
chkconfig firewalld off systemctl disable firewalld.service 开机不自动启动
chkconfig firewalld systemctl is-enabled firewalld.service 查看特定服务是否为开机自动启动
chkconfig –list systemctl list-unit-files –type=service 查看各个级别下服务的启动与禁用情况
  1. 开关机命令

    • reboot 重启
    • poweroff 关机命令
  2. PS 命令

    • ps 命令用于查看系统中的进程状态,格式为 ps [参数]

    • -a 显示所有进程(包括其他用户的进程)

    • -u 用户以及其他详细信息
    • -x 显示没有控制终端的进程

    • R(运行):进程正在运行或在运行队列中等待。

    • S(中断):进程处于休眠中,当某个条件形成后或者接收到信号时,则脱离该
      状态。
    • D(不可中断):进程不响应系统异步信号,即便用 kill 命令也不能将其中断。
    • Z(僵死):进程已经终止,但进程描述符依然存在, 直到父进程调用 wait4()系统函数
      后将进程释放。
    • T(停止):进程收到停止信号后停止运行。
  1. pidof 命令

    • pidof 命令用于查询某个指定服务进程的 PID 值,格式为 pidof [参数] [服务名称]
  2. kill 命令

    • kill 命令用于终止某个指定 PID 的服务进程,格式为 kill [参数] [进程 PID]
  3. killall 命令

    • killall 命令用于终止某个指定名称的服务所对应的全部进程,格式为: killall [参数] [进程名称]

系统状态检测命令

  1. ifconfig 命令

    • ifconfig 命令用于获取网卡配置与网络状态等信息,格式为 ifconfig [网络设备] [参数]
    • 安装ifconfig yum -y install net-tools.x86_64
  2. uname 命令

    • 于查看系统内核与系统版本等信息,格式为“uname [-a]”。 一般会固定搭配上-a 参数来完整地查看当前系统的内核名称、主
      机名、内核发行版本等

    • 顺带一提,如果要查看当前系统版本的详细信息,则需要查看 redhat-release 文件,其命
      令以及相应的结果如下: cat /etc/redhat-release

  1. uptime 命令
    • uptime 用于查看系统的负载信息,格式为 uptime
    • 它可以显示当前系统时间、系统已运行时间、启用终端数量以及平均负载值等信息。平均负载值指的是系统在最近 1 分钟、5 分钟、15分钟内的压力情况;负载值越低越好,尽量不要长期超过 1,在生产环境中不要超过 5。
  1. free 命令

    • free 用于显示当前系统中内存的使用量信息,格式为 free [-h]
  2. who 命令

    • who 用于查看当前登入主机的用户终端信息,格式为 who [参数]
  3. last 命令

    • last 命令用于查看所有系统的登录记录,格式为 last [参数]
    • 使用last命令可以查看本机的登录记录。但是,由于这些信息都是以日志文件的形式保存在系统中,因此黑客可以很容易地对内容进行篡改。千万不要单纯以该命令的输出信息而判断系统有无被恶意入侵!
  4. history 命令

    • history 命令用于显示历史执行过的命令,格式为 history [-c]
  5. sosreport 命令

    • sosreport 命令用于收集系统配置及架构信息并输出诊断文档,格式为 sosreport

工作目录切换命令

  1. pwd 命令

    • pwd 命令用于显示用户当前所处的工作目录,格式为 pwd [选项]

    • ls 命令用于显示目录中的文件信息,格式为ls [选项] [文件]

    • ls -a查看全部文件(包括隐藏文件)
    • ls -l可以查看文件的属性、大小等详细信息
    • ls -d查看目录属性信息

文本文件编辑命令

  1. cat 命令

    • cat 命令用于查看纯文本文件(内容较少的),格式为c
  2. cd 命令快速切换到用户的家目录

    • cd 命令用于切换工作路径,格式为 cd [目录名称]
    • cd ~
    • cd -返回到上一次的目录
  3. ls 命令 at [选项] [文件]`

    • cat-n在查看文本内容时显示行号
  4. more 命令

    • more 命令用于查看纯文本文件(内容较多的),格式为more [选项]文件
  5. head 命令

    • head 命令用于查看纯文本文档的前 N 行,格式为head [选项] [文件]
    • head -n 20 查看文本中前 20 行的内容
  6. tail 命令

    • tail 命令用于查看纯文本文档的后 N 行或持续刷新内容,格式为tail [选项] [文件]
    • tail -n 20查看文本内容的最后 20 行
    • tail -f实时查看最新日志文件时
  7. tr 命令

    • tr 命令用于替换文本文件中的字符,格式为tr [原始字符] [目标字符]`
  8. wc 命令

    • wc 命令用于统计指定文本的行数、字数、字节数,格式为wc [参数] 文本
    • wc -l只显示行数
    • wc -w只显示单词数
    • wc -c只显示字节数
  9. stat 命令

    • stat 命令用于查看文件的具体存储信息和时间等信息,格式为stat 文件名称
  10. cut 命令

    • cut 命令用于按“列”提取文本字符,格式为 cut [参数] 文本
    • cut -d: -f1 /etc/passwd提取出 passwd 文件中的用户名信息,即提取以冒号(:)为间隔符号的第一列内容,使用-f参数来设置需要看的列数,还需要使用-d参数来设置间隔符号
  11. diff 命令

    • diff 命令用于比较多个文本文件的差异,格式为 diff [参数] 文件
    • --brief参数来确认两个文件是否不同,还可以使用-c参数来详细比较出多个文件的差异之处,这绝对是判断文件是否被篡改的有力神器。
    • -c参数的 diff 命令来描述文件内容具体的不同
  12. vim命令显示行号 vi ~/.vimrc 写入 set number

    • vi ~/.vimrc 中加入 set pastetoggle=<F9> 这一行,这样的话,在粘贴大量代码时候,先按键盘的 F9 键进入插入模式,然后粘贴代码,这样不会注释掉。
    • vim中文乱码解决方法 vim /etc/vimrc 在文件中添加
      set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
      set termencoding=utf-8
      set encoding=utf-8
      

文件目录管理命令

  1. touch 命令

    • touch 命令用于创建空白文件或设置文件的时间,格式为 touch [选项] [文件]
    • touch -a仅修改“读取时间”
    • touch -m仅修改“修改时间”
    • touch -d同时修改 atime 与 mtime
  2. mkdir 命令

    • mkdir 命令用于创建空白的目录,格式为 mkdir [选项] 目录
    • 结合-p参数来递归创建出具有嵌套叠层关系的文件目录。
  3. cp 命令

    • cp 命令用于复制文件或目录,格式为 cp [选项] 源文件 目标文件复制操作具体分为 3 种情况:
      • 如果目标文件是目录,则会把源文件复制到该目录中;
      • 如果目标文件也是普通文件,则会询问是否要覆盖它;
      • 如果目标文件不存在,则执行正常的复制操作。
参数 作用
-p 保留原始文件的属性
-d 若对象为“链接文件”,则保留该“链接文件”的属性
-r 递归持续复制(用于目录)
-i 若目标文件存在则询问是否覆盖
-a 相当于-pdr(p、d、r 为上述参数)
  1. mv命令

    • mv命令用于剪切文件或将文件重命名,格式为 mv [选项] 源文件 [目标路径|目标文件名]
  2. rm命令

    • rm命令用于删除文件或目录,格式为 rm [选项] 文件
    • rm -f强制删除
    • rm -r删除目录
  3. dd命令

    • dd命令用于按照指定大小和个数的数据块来复制文件或转换文件,格式为 dd [参数]
    • dd if输入的文件名称
    • dd of输出的文件名称
    • dd bs设置每个“块”的大小
    • dd count设置要复制“块”的个数
    • 例如我们可以用dd命令从/dev/zero设备文件中取出一个大小为60MB的数据块,然后保存成名为60_file的文件。 dd if=/dev/zero of=60_file count=1 bs=60M
  4. file命令

    • file命令用于查看文件的类型,格式为 file 文件名

打包压缩与搜索命令

  1. tar命令
    • tar命令用于对文件进行打包压缩或解压,格式为 tar [选项] [文件]
参数 作用
-x 解开压缩文件
-t 查看压缩包内有哪些文件
-z 用Gzip压缩或解压
-j 用bzip2压缩或解压
-v 显示压缩或解压的过程
-f 目标文件名
-p 保留原始的权限与属性
-P 使用绝对路径来压缩
-C 指定解压到的目录

首先,-c参数用于创建压缩文件,-x参数用于解压文件,因此这两个参数不能同时使用。其次,-z参数指定使用Gzip格式来压缩或解压文件,-j参数指定使用bzip2格式来压缩或解压文件。用户使用时则是根据文件的后缀来决定应使用何种格式参数进行解压。在执行某些压缩或解压操作时,可能需要花费数个小时,如果屏幕一直没有输出,您一方面不好判断打包的进度情况,另一方面也会怀疑电脑死机了,因此非常推荐使用-v参数向用户不断显示压缩或解压的过程。-C参数用于指定要解压到哪个指定的目录。-f参数特别重要,它必须放到参数的最后一位,代表要压缩或解压的软件包名称。刘遄老师一般使用“tar -czvf 压缩包名称.tar.gz 要打包的目录”命令把指定的文件进行打包压缩;相应的解压命令为“tar -xzvf 压缩包名称.tar.gz”。

  1. grep命令
    • grep命令用于在文本中执行关键词搜索,并显示匹配的结果,格式为 grep [选项] [文件]
参数 作用
-b 将可执行文件(binary)当作文本文件(text)来搜索
-c 仅显示找到的行数
-i 忽略大小写
-n 显示行号
-v 反向选择——仅列出没有“关键词”的行

在Linux系统中,/etc/passwd文件是保存着所有的用户信息,而一旦用户的登录终端被设置成/sbin/nologin,则不再允许登录系统,因此可以使用grep命令来查找出当前系统中不允许登录系统的所有用户信息。

  1. find命令
    • find命令用于按照指定条件来查找文件,格式为 find [查找路径] 寻找条件 操作
参数 作用
-name 匹配名称
-perm 匹配权限(mode为完全匹配,-mode为包含即可)
-user 匹配所有者
-group 匹配所有组
-mtime -n +n 匹配修改内容的时间(-n指n天以内,+n指n天以前)
-atime -n +n 匹配访问文件的时间(-n指n天以内,+n指n天以前)
-ctime -n +n 匹配修改文件权限的时间(-n指n天以内,+n指n天以前)
-nouser 匹配无所有者的文件
-nogroup 匹配无所有组的文件
-newer f1 !f2 匹配比文件f1新但比f2旧的文件
–type b/d/c/p/l/f 匹配文件类型(后面的字幕字母依次表示块设备、目录、字符设备、管道、链接文件、文本文件)
-size 匹配文件的大小(+50KB为查找超过50KB的文件,而-50KB为查找小于50KB的文件)
-prune 忽略某个目录
-exec …… {}\; 后面可跟用于进一步处理搜索结果的命令(下文会有演示)

这里需要重点讲解一下-exec参数重要的作用。这个参数用于把find命令搜索到的结果交由紧随其后的命令作进一步处理,它十分类似于第3章将要讲解的管道符技术,并且由于find命令对参数的特殊要求,因此虽然exec是长格式形式,但依然只需要一个减号(-)

根据文件系统层次标准(Filesystem Hierarchy Standard)协议,Linux系统中的配置文件会保存到/etc目录中(详见第6章)。如果要想获取到该目录中所有以host开头的文件列表,可以执行命令 find /etc -name "host*" -print

用户身份与文件权限

用户身份与能力

管理员UID为0:系统的管理员用户。
系统用户UID为1~999:Linux系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏范围。
普通用户UID从1000开始:是由管理员创建的用于日常工作的用户。

  1. useradd命令
    • useradd命令用于创建新的用户,格式为 useradd [选项] 用户名
参数 作用
-d 指定用户的家目录(默认为/home/username)
-e 账户的到期时间,格式为YYYY-MM-DD.
-u 指定该用户的默认UID
-g 指定一个初始的用户基本组(必须已存在)
-G 指定一个或多个扩展用户组
-N 不创建与用户同名的基本用户组
-s 指定该用户的默认Shell解释器
  1. groupadd命令

    • groupadd命令用于创建用户组,格式为 groupadd [选项] 群组名
  2. usermod命令

    • usermod命令用于修改用户的属性,格式为 usermod [选项] 用户名
参数 作用
-c 填写用户账户的备注信息
-d -m 参数-m与参数-d连用,可重新指定用户的家目录并自动把旧的数据转移过去
-e 账户的到期时间,格式为YYYY-MM-DD
-g 变更所属用户组
-G 变更扩展用户组
-L 锁定用户禁止其登录系统
-U 解锁用户,允许其登录系统
-s 变更默认终端
-u 修改用户的UID
  1. passwd命令
    • passwd命令用于修改用户密码、过期时间、认证信息等,格式为 passwd [选项] [用户名]
参数 作用
-l 锁定用户,禁止其登录
-u 解除锁定,允许用户登录
-stdin 允许通过标准输入修改用户密码,如echo “NewPassWord” | passwd –stdin Username
-d 使该用户可用空密码登录系统
-e 强制用户在下次登录时修改密码
-S 显示用户的密码是否被锁定,以及密码所采用的加密算法名称
  1. userdel命令
    • userdel命令用于删除用户,格式为 userdel [选项] 用户名
参数 作用
-f 强制删除用户
-r 同时删除用户及用户家目录

文件权限与归属

-:普通文件。
d:目录文件。
l:链接文件。
b:块设备文件。
c:字符设备文件。
p:管道文件。

权限项 执行 执行 执行
字符表示 r w x r w x r w x
数字表示 4 2 1 4 2 1 4 2 1
权限分配 所有者 所有者 所有者 所属组 所属组 所属组 其他用户 其他用户 其他用户

文件的特殊权限

  • SUID是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限
  • SGID主要实现如下两种功能:让执行者临时拥有属组的权限(对拥有执行权限的二进制程序进行设置);在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)
    • SBIT特殊权限位可确保用户只能删除自己的文件,而不能删除其他用户的文件
  • chmod命令是一个非常实用的命令,能够用来设置文件或目录的权限,格式为 chmod [参数] 权限 文件或目录名称

文件的隐藏属性

  1. chattr命令
  • chattr命令用于设置文件的隐藏权限,格式为 chattr [参数] 文件
  • 如果想要把某个隐藏功能添加到文件上,则需要在命令后面追加“+参数”,如果想要把某个隐藏功能移出文件,则需要追加“-参数”
参数 作用
-i 无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件
-a 仅允许补充(追加)内容,无法覆盖/删除内容(Append Only)
-S 文件内容在变更后立即同步到硬盘(sync)
-s 彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域)
-A 不再修改这个文件或目录的最后访问时间(atime)
-b 不再修改文件或目录的存取时间
-D 检查压缩文件中的错误
-d 使用dump命令备份时忽略本文件/目录
-c 默认将文件或目录进行压缩
-u 当删除该文件后依然保留其在硬盘中的数据,方便日后恢复
-t 让文件系统支持尾部合并(tail-merging)
-x 可以直接访问压缩文件中的内容
  1. lsattr命令
    • lsattr命令用于显示文件的隐藏权限,格式为 lsattr [参数] 文件
    • 在Linux系统中,文件的隐藏权限必须使用lsattr命令来查看,平时使用的ls之类的命令则看不出端倪

一般权限、特殊权限、隐藏权限其实有一个共性—权限是针对某一类用户设置的。如果希望对某个指定的用户进行单独的权限控制,就需要用到文件的访问控制列表(ACL)了。通俗来讲,基于普通文件或目录设置ACL其实就是针对指定的用户或用户组设置文件或目录的操作权限。另外,如果针对某个目录设置了ACL,则目录中的文件会继承其ACL;若针对文件设置了ACL,则文件不再继承其所在目录的ACL。

  1. setfacl命令

    • setfacl命令用于管理文件的ACL规则,格式为 setfacl [参数] 文件名称 使用setfacl命令可以针对单一用户或用户组、单一文件或目录来进行读/写/执行权限的控制。
    • 针对目录文件需要使用-R递归参数;针对普通文件则使用-m参数;如果想要删除某个文件的ACL,则可以使用-b参数
  2. getfacl命令

    • getfacl命令用于显示文件上设置的ACL信息,格式为 getfacl 文件名称
  3. su命令

    • su命令可以解决切换用户身份的需求,使得当前用户在不退出登录的情况下,顺畅地切换到其他用户,比如从root管理员切换至普通用户
    • su命令与用户名之间有一个减号(-),这意味着完全切换到新的用户,即把环境变量信息也变更为新用户的相应信息,而不是保留原始的信息。强烈建议在切换用户身份时添加这个减号(-)
  4. sudo命令

    • sudo命令用于给普通用户提供额外的权限来完成原本root管理员才能完成的任务,格式为 sudo [参数] 命令名称
参数 作用
-h 列出帮助信息
-l 列出当前用户可执行的命令
-u 用户名或UID值 以指定的用户身份执行命令
-k 清空密码的有效时间,下次执行sudo时需要再次进行密码验证
-b 在后台执行指定的命令
-p 更改询问密码的提示语

总结来说,sudo命令具有如下功能:

限制用户执行指定的命令:
记录用户执行的每一条命令;
配置文件(/etc/sudoers)提供集中的用户管理、权限与主机等参数;
验证密码的后5分钟内(默认值)无须再让用户再次验证密码。

存储结构与磁盘划分

Linux系统中常见的目录名称以及相应内容

目录名称 应放置文件的内容
/boot 开机所需文件—内核、开机菜单以及所需配置文件等
/dev 以文件形式存放任何设备与接口
/etc 配置文件
/home 用户主目录
/bin 存放单用户模式下还可以操作的命令
/lib 开机时用到的函数库,以及/bin与/sbin下面的命令要调用的函数
/sbin 开机过程中需要的命令
/media 用于挂载设备文件的目录
/opt 放置第三方的软件
/root 系统管理员的家目录
/srv 一些网络服务的数据文件目录
/tmp 任何人均可使用的“共享”临时目录
/proc 虚拟文件系统,例如系统内核、进程、外部设备及网络状态等
/usr/local 用户自行安装的软件
/usr/sbin Linux系统开机时不会使用到的软件/命令/脚本
/usr/share 帮助与说明文件,也可放置共享文件
/var 主要存放经常变化的文件,如日志
/lost+found 当文件系统发生错误时,将一些丢失的文件片段存放在这里

Linux系统中常见的硬件设备的文件名称

硬件设备 文件名称
IDE设备 /dev/hd[a-d]
SCSI/SATA/U盘 /dev/sd[a-p]
软驱 /dev/fd[0-1]
打印机 /dev/lp[0-15]
光驱 /dev/cdrom
鼠标 /dev/mouse
磁带机 /dev/st0或/dev/ht0
  1. mount命令
    • 用于挂载文件系统,格式为 mount 文件系统 挂载目录
参数 作用
-a 挂载所有在/etc/fstab中定义的文件系统
-t 指定文件系统的类型
  1. fdisk命令
    • fdisk命令用于管理磁盘分区,格式为 fdisk [磁盘名称]
参数 作用
m 查看全部可用的参数
n 添加新的分区
d 删除某个分区信息
l 列出所有可用的分区类型
t 改变某个分区的类型
p 查看分区表信息
w 保存并退出
q 不保存直接退出
  1. mkfs命令

    • Linux系统中用于格式化操作的命令
    • 例如要格式第二块磁盘1分区为XFS的文件系统,则命令应为 mkfs.xfs /dev/sdb1
  2. mkdir命令

    • mkdir /newFS 创建一个用于挂载设备的挂载点目录
  3. mount命令

    • mount命令将存储设备与挂载点进行关联 mount /dev/sdb1 /newFS/
  4. df命令

    • df -h 命令来查看挂载状态和硬盘使用量信息
  5. du命令

    • 其格式为 du [选项] [文件]
    • 使用 du -sh /* 命令来查看在Linux系统根目录下所有一级目录分别占用的空间大小

RAID与LVM磁盘阵列

  1. mdadm命令用于管理Linux系统中的软件RAID硬盘阵列,格式为 mdadm [模式] <RAID设备名称> [选项] [成员设备名称]
参数 作用
-a 检测设备名称
-n 指定设备数量
-l 指定RAID级别
-C 创建
-v 显示过程
-f 模拟设备损坏
-r 移除设备
-Q 查看摘要信息
-D 查看详细信息
-S 停止RAID磁盘阵列

Iptables与Firewalld防火墙

iptables

iptables中常用的参数以及作用

参数 作用
-P 设置默认策略
-F 清空规则链
-L 查看规则链
-A 在规则链的末尾加入新规则
-I num 在规则链的头部加入新规则
-D num 删除某一条规则
-s 匹配来源地址IP/MASK,加叹号“!”表示除这个IP外
-d 匹配目标地址
-i 网卡名称 匹配从这块网卡流入的数据
-o 网卡名称 匹配从这块网卡流出的数据
-p 匹配协议,如TCP、UDP、ICMP
–dport num 匹配目标端口号
–sport num 匹配来源端口号
#先检查是否安装了iptables
service iptables status
#安装iptables
yum install -y iptables
#升级iptables
yum update iptables 
#安装iptables-services
yum install iptables-services

#停止firewalld服务
systemctl stop firewalld
#禁用firewalld服务
systemctl mask firewalld

将INPUT规则链设置为只允许指定网段的主机访问本机的22端口,拒绝来自其他所有主机的流量:

iptables -I INPUT -s 192.168.10.0/24 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -j REJECT

向INPUT规则链中添加拒绝所有人访问本机12345端口的策略规则:

iptables -I INPUT -p tcp --dport 12345 -j REJECT
iptables -I INPUT -p udp --dport 12345 -j REJECT

向INPUT规则链中添加拒绝192.168.10.5主机访问本机80端口(Web服务)的策略规则:

 iptables -I INPUT -p tcp -s 192.168.10.5 --dport 80 -j REJECT

向INPUT规则链中添加拒绝所有主机访问本机1000~1024端口的策略规则:

iptables -A INPUT -p tcp --dport 1000:1024 -j REJECT
iptables -A INPUT -p udp --dport 1000:1024 -j REJECT

查看iptables现有规则 iptables -L -n 清空所有默认规则 iptables -F

请特别注意,使用iptables命令配置的防火墙规则默认会在系统下一次重启时失效,如果想让配置的防火墙策略永久生效,还要执行保存命令 service iptables save

Firewalld

相较于传统的防火墙管理配置工具,firewalld支持动态更新技术并加入了区域(zone)的概念。简单来说,区域就是firewalld预先准备了几套防火墙策略集合(策略模板),用户可以根据生产场景的不同而选择合适的策略集合,从而实现防火墙策略之间的快速切换。

firewalld中常用的区域名称及策略规则

区域 默认规则策略
trusted 允许所有的数据包
home 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、mdns、ipp-client、amba-client与dhcpv6-client服务相关,则允许流量
internal 等同于home区域
work 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、ipp-client与dhcpv6-client服务相关,则允许流量
public 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh、dhcpv6-client服务相关,则允许流量
external 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量
dmz 拒绝流入的流量,除非与流出的流量相关;而如果流量与ssh服务相关,则允许流量
block 拒绝流入的流量,除非与流出的流量相关
drop 拒绝流入的流量,除非与流出的流量相关

firewall-cmd命令中使用的参数以及作用

参数 作用
–get-default-zone 查询默认的区域名称
–set-default-zone=<区域名称> 设置默认的区域,使其永久生效
–get-zones 显示可用的区域
–get-services 显示预先定义的服务
–get-active-zones 显示当前正在使用的区域与网卡名称
–add-source= 将源自此IP或子网的流量导向指定的区域
–remove-source= 不再将源自此IP或子网的流量导向某个指定区域
–add-interface=<网卡名称> 将源自该网卡的所有流量都导向某个指定区域
–change-interface=<网卡名称> 将某个网卡与区域进行关联
–list-all 显示当前区域的网卡配置参数、资源、端口以及服务等信息
–list-all-zones 显示所有区域的网卡配置参数、资源、端口以及服务等信息
–add-service=<服务名> 设置默认区域允许该服务的流量
–add-port=<端口号/协议> 设置默认区域允许该端口的流量
–remove-service=<服务名> 设置默认区域不再允许该服务的流量
–remove-port=<端口号/协议> 设置默认区域不再允许该端口的流量
–reload 让“永久生效”的配置规则立即生效,并覆盖当前的配置规则
–panic-on 开启应急状况模式
–panic-off 关闭应急状况模式

与Linux系统中其他的防火墙策略配置工具一样,使用firewalld配置的防火墙策略默认为运行时(Runtime)模式,又称为当前生效模式,而且随着系统的重启会失效。如果想让配置策略一直存在,就需要使用永久(Permanent)模式了,方法就是在用firewall-cmd命令正常设置防火墙策略时添加–permanent参数,这样配置的防火墙策略就可以永久生效了。但是,永久生效模式有一个“不近人情”的特点,就是使用它设置的策略只有在系统重启之后才能自动生效。如果想让配置的策略立即生效,需要手动执行firewall-cmd –reload命令。

Apache服务部署

Apache

表1 Linux系统中的配置文件
服务目录 /etc/httpd
主配置文件 /etc/httpd/conf/httpd.conf
网站数据目录 /var/www/html
访问日志 /var/log/httpd/access_log
错误日志 /var/log/httpd/error_log

表2 配置httpd服务程序时最常用的参数以及用途描述
ServerRoot 服务目录
ServerAdmin 管理员邮箱
User 运行服务的用户
Group 运行服务的用户组
ServerName 网站服务器的域名
DocumentRoot 网站数据目录
Listen 监听的IP地址与端口号
DirectoryIndex 默认的索引页页面
ErrorLog 错误日志文件
CustomLog 访问日志文件
Timeout 网页超时时间,默认为300秒

SELinux

SELinux服务有三种配置模式:

enforcing:强制启用安全策略模式,将拦截服务的不合法请求。
permissive:遇到服务越权访问时,只发出警告而不强制拦截。
disabled:对于越权的行为不警告也不拦截。

  1. 使用getenforce命令获得当前SELinux服务的运行模式:

  2. 可以用setenforce [0|1]命令修改SELinux当前的运行模式(0为禁用,1为启用)。注意,这种修改只是临时的,在系统重启后就会失效:

  3. semanage命令

    • 安装semanage 先执行 yum provides semanage 然后执行 yum -y install policycoreutils-python.x86_64
    • semanage命令用于管理SELinux的策略,格式为 semanage [选项] [文件]
    • -l参数用于查询;-a参数用于添加;-m参数用于修改;-d参数用于删除。
    • 可以向新的网站数据目录中新添加一条SELinux安全上下文,让这个目录以及里面的所有文件能够被httpd服务程序所访问到:
      semanage fcontext -a -t httpd_sys_content_t /home/wwwroot
      semanage fcontext -a -t httpd_sys_content_t /home/wwwroot/*
      

      注意,执行上述设置之后,还无法立即访问网站,还需要使用restorecon命令将设置好的SELinux安全上下文立即生效。在使用restorecon命令时,可以加上-Rv参数对指定的目录进行递归操作,以及显示SELinux安全上下文的修改过程。

  4. setsebool命令

    • setsebool 命令来修改SELinux策略中各条规则的布尔值了。大家一定要记得在setsebool 命令后面加上-P 参数,让修改后的SELinux策略规则永久生效且立即生效。
  5. htpasswd命令

    • htpasswd命令生成密码数据库。-c参数表示第一次生成;

Apache认证访问,利用htpasswd命令 htpasswd -c /etc/httpd/passwd username 其中生成认证密码文件的路径为 /etc/httpd/passwd 用户名称为 username 密码在敲入命令后输入,默认网页路径为 /var/www/html/ 通过 echo "我的apache站点" > /var/www/html/index.html 来把apache默认网页替换掉,此时继续在 /var/www/html/下新建一个 .htaccess 文件,写入如下内容后,保存重启apache服务 service httpd restart 刷新网页即可

authuserfile "/etc/httpd/passwd"
#指定访问认证的文件的存放路径
authname "请输入你的用户密码"
#给出认证框的提示信息
authtype basic
require user username
#用户进行账户密码登录时需要验证的用户名称

虚拟网站主机功能

  1. 基于IP地址

先创建用于保存不同网站数据的三个目录

mkdir -p /var/www/html/10
mkdir -p /var/www/html/11
mkdir -p /var/www/html/12

然后在三个文件夹生成index.html文件分别写入内容,命令如下

echo "我是网站IP:192.168.2.10" > /var/www/html/10/index.html
echo "我是网站IP:192.168.2.11" > /var/www/html/10/index.html
echo "我是网站IP:192.168.2.12" > /var/www/html/10/index.html

vim /etc/httpd/conf/httpd.conf 添加如下信息

<VirtualHost 192.168.2.10>
DocumentRoot /var/www/html/10"
ServerName "www.10.com"
<Directory "/var/www/html/10">
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

<VirtualHost 192.168.2.11>
DocumentRoot "/var/www/html/11"
ServerName "www.11.com"
<Directory "/var/www/html/11">
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

<VirtualHost 192.168.2.12>
DocumentRoot "/var/www/html/12"
ServerName "www.12.com"
<Directory "/var/www/html/12">
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

需要注意的是,这里有多个IP,用虚拟机的话,必须用桥接模式链接,然后用 nmtui命令添加修改网卡的IP,网关和DNS,三者与物理机IP网段相同,我上面配置了三个IP

这个时候你重启 systemctl restart httpd 会发现失败,所以还需设置SELinux命令如下

semanage fcontext -a -t httpd_sys_content_t /var/www/html/
semanage fcontext -a -t httpd_sys_content_t /var/www/html/10
semanage fcontext -a -t httpd_sys_content_t /var/www/html/10/*
semanage fcontext -a -t httpd_sys_content_t /var/www/html/11
semanage fcontext -a -t httpd_sys_content_t /var/www/html/11/*
semanage fcontext -a -t httpd_sys_content_t /var/www/html/12
semanage fcontext -a -t httpd_sys_content_t /var/www/html/12/*
restorecon -Rv /var/www
#用restorecon命令让新配置的SELinux安全上下文立即生效
  1. 基于主机域名

    • vim /etc/hosts编辑Hosts域名对应的IP
    • 直接修改为上面的域名对应到IP也是可以访问的,我在命令行模式下,没去求证
    • 如果新建网站目录,步骤跟上面类似,不再重复
  2. 基于端口号

    • 开始创建网站数据目录跟上面一样
    • 不同的是,修改 httpd.conf 文件的监听端口信息
Listen 80
#80端口是默认的
Listen 10001
Listen 10002
#上面两个是新添加的

#跟基于IP差不多,这里IP后面跟随端口号
<VirtualHost 192.168.2.11:10001>
DocumentRoot /var/www/html/11"
ServerName "www.11.com"
<Directory "/var/www/html/11">
AllowOverride None
Require all granted
</Directory>
</VirtualHost>

<VirtualHost 192.168.2.12:10002>
DocumentRoot "/var/www/html/12"
ServerName "www.12.com"
<Directory "/var/www/html/12">
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
  • 如果跟上面基于IP的一样,那就不用再一次设置 SELinux安全上下文 了,如果不一样,还要执行一次 semanagerestorecon
  1. Apache访问控制

通过Allow指令允许某个主机访问服务器上的网站资源,通过Deny指令实现禁止访问。在允许或禁止访问网站资源时,还会用到Order指令,这个指令用来定义Allow或Deny指令起作用的顺序,其匹配原则是按照顺序进行匹配,若匹配成功则执行后面的默认指令。比如“Order Allow, Deny”表示先将源主机与允许规则进行匹配,若匹配成功则允许访问请求,反之则拒绝访问请求。

  • 禁止特定 IP 访问
Order Allow,Deny
Allow from all
Deny from 183.45.7.5   #表示禁止 183.45.7.5 访问,其他 IP 可以正常访问。
  • 禁止部分 IP 访问
Order Allow,Deny
Allow from all
Deny from IP1 IP2 IP3   #表示禁止 IP1 IP2 IP3 访问,,其他 IP 可以正常访问
  • 禁止 IP 地址段访问
Order Allow,Deny
Allow from all
Deny from 192.168.1.   #表示禁止IP地址段 192.168.1.0/24,也就是禁止 192.168.1.1 - 192.168.1.254 的 IP 访问

注意事项:
Order 关键字可以决定 Allow 和 Deny 起作用的顺序,简单的说就是谁排在最后,谁就有最终的决定权。Allow 表示允许,Deny 表示拒绝。
Order Deny,Allow 意思是先检查是否有 Deny 规则,不论有没有 Deny 规则都会继续检查是否有 Allow 规则,如果有 Allow,Allow 规则的内容可以覆盖掉 Deny 规则。

  • 终禁止所有 IP 对网站的访问
Order Allow,Deny            #先检查 Allow,由 Deny 拥有决定权
Allow from 183.45.7.5    #允许 183.45.7.5 访问网站
Deny from all             #禁止所有 IP 对网站的访问
  • 以下代码最终只允许 IP1 访问,其他 IP 全部禁止
Order Deny,Allow          #先检查 Deny,由 Allow 拥有决定权
Deny from all             #Deny 规则要求禁止所有 IP 的访问
Allow from IP1            #Allow 规则只允许 IP1 访问

配置网卡

  1. nmtui命令来配置网络
    • 安装命令 yum install NetworkManager-tui

Vsftpd服务

  • 安装Vsftpd yum -y install vsftpd
  • 安装FTP yum -y install ftp

匿名访问模式

  • 编辑配置文件 vim /etc/vsftpd/vsftpd.conf
参数 作用
anonymous_enable=YES 允许匿名访问模式
anon_umask=022 匿名用户上传文件的umask值
anon_upload_enable=YES 允许匿名用户上传文件
anon_mkdir_write_enable=YES 允许匿名用户创建目录
anon_other_write_enable=YES 允许匿名用户修改目录名称或删除目录
  • 重启服务 systemctl restart vsftpd 和添加到开机启动 systemctl enable vsftpd
  • ftp 192.168.2.10 登入FTP,如遇 500 OOPS: failed to open xferlog log filerm -f /var/log/xferlog or mv 即可解决
  • 使用getsebool命令查看与FTP相关的SELinux域策略都有哪些 getsebool -a | grep ftp
  • 修改该策略规则,并且在设置时使用-P参数让修改过的策略永久生效,确保在服务器重启后依然能够顺利写入文件 setsebool -P ftpd_full_access=on

本地用户模式

参数 作用
anonymous_enable=NO 禁止匿名访问模式
local_enable=YES 允许本地用户模式
write_enable=YES 设置可写权限
local_umask=022 本地用户模式创建文件的umask值
userlist_deny=YES 启用“禁止用户名单”,名单文件为ftpusers和user_list
userlist_enable=YES 开启用户作用名单文件功能
  • 编辑配置文件 vim /etc/vsftpd/vsftpd.confanonymous_enable=NO 这样修改
  • cat /etc/vsftpd/user_list 查看禁止用户名单,可以自行编辑此名单,也可以在vim /etc/vsftpd/vsftpd.conf``中禁用userlist_deny=NO`
  • 需要注意的是,如果我用root登入ftp,密码即是root用户的密码,如果本地没有这个用户,登入依旧失败

虚拟用户模式

  • 创建用于进行FTP认证的用户数据库文件,其中奇数行为账户名,偶数行为密码。例如,我们分别创建出sogasoga和yoxiyoxi两个用户,密码均为hahahoho
  • cd /etc/vsftpd/
  • vim vuser.list 写入如下信息
    sogasoga
    hahahoho
    yoxiyoxi
    hahahoho
    
  • 但是,明文信息既不安全,也不符合让vsftpd服务程序直接加载的格式,因此需要使用db_load命令用哈希(hash)算法将原始的明文信息文件转换成数据库文件,并且降低数据库文件的权限(避免其他人看到数据库文件的内容),然后再把原始的明文信息文件删除。
    [root@centos01 vsftpd]# db_load -T -t hash -f vuser.list vuser.db
    [root@centos01 vsftpd]#  file vuser.db
    vuser.db: Berkeley DB (Hash, version 9, native byte-order)
    [root@centos01 vsftpd]# chmod 600 vuser.db
    [root@centos01 vsftpd]# rm -f vuser.list
    
  • 创建vsftpd服务程序用于存储文件的根目录以及虚拟用户映射的系统本地用户。FTP服务用于存储文件的根目录指的是,当虚拟用户登录后所访问的默认位置。
    useradd -d /var/ftproot -s /sbin/nologin virtual
    ls -ld /var/ftproot/
    chmod -Rf 755 /var/ftproot/
    
  • 建立用于支持虚拟用户的PAM文件。新建一个用于虚拟用户认证的PAM文件vsftpd.vu,其中PAM文件内的“db=”参数为使用db_load命令生成的账户密码数据库文件的路径,但不用写数据库文件的后缀vim /etc/pam.d/vsftpd.vu 写入如下信息

    auth       required     pam_userdb.so db=/etc/vsftpd/vuser
    account    required     pam_userdb.so db=/etc/vsftpd/vuser
    
  • 利用PAM文件进行认证时使用的参数以及作用

参数 作用
anonymous_enable=NO 禁止匿名开放模式
local_enable=YES 允许本地用户模式
guest_enable=YES 开启虚拟用户模式
guest_username=virtual 指定虚拟用户账户
pam_service_name=vsftpd.vu 指定PAM文件
allow_writeable_chroot=YES 允许对禁锢的FTP根目录执行写入操作,而且不拒绝用户的登录请求
  • vim /etc/vsftpd/vsftpd.conf

    anonymous_enable=NO
    local_enable=YES
    guest_enable=YES
    guest_username=virtual
    allow_writeable_chroot=YES
    pam_service_name=vsftpd.vu
    
  • 为虚拟用户设置不同的权限。虽然账户sogasoga和yoxiyoxi都是用于vsftpd服务程序认证的虚拟账户,但是我们依然想对这两人进行区别对待。比如,允许sogasoga上传、创建、修改、查看、删除文件,只允许yoxiyoxi查看文件。这可以通过vsftpd服务程序来实现。只需新建一个目录,在里面分别创建两个以sogasoga和yoxiyoxi命名的文件,其中在名为sogasoga的文件中写入允许的相关权限(使用匿名用户的参数):

    mkdir /etc/vsftpd/vusers_dir/
    cd /etc/vsftpd/vusers_dir/
    touch yoxiyoxi
    vim sogasoga
    anon_upload_enable=YES
    anon_mkdir_write_enable=YES
    anon_other_write_enable=YES
    
  • 然后再次修改vsftpd主配置文件,通过添加user_config_dir参数来定义这两个虚拟用户不同权限的配置文件所存放的路径 vim /etc/vsftpd/vsftpd.conf 写入这条内容 user_config_dir=/etc/vsftpd/vusers_dir

  • 为了让修改后的参数立即生效,需要重启vsftpd服务程序 systemctl restart vsftpd 并将该服务添加到开机启动项中 systemctl enable vsftpd

  • 过滤 getsebool -a | grep ftp设置SELinux域允许策略 setsebool -P ftpd_full_access=on

Samba和NFS

Samba

  1. 配置共享资源

    • 用于设置Samba服务程序的参数以及作用
参数 作用
[database] 共享名称为database
comment = Do not arbitrarily modify the database file 警告用户不要随意修改数据库
path = /home/database 共享目录为/home/database
public = no 关闭“所有人可见”
writable = yes 允许写入操作
  • pdbedit命令用于管理SMB服务程序的账户信息数据库,格式为 pdbedit [选项] 账户
参数 作用
-a 用户名 建立Samba用户
-x 用户名 删除Samba用户
-L 列出用户列表
-Lv 列出用户详细信息的列表
  • pdbedit -a -u root 建立Samba用户,必须是系统已存在的用户,也可以下自行添加系统用户

security = user
share:来访主机无需验证口令;比较方便,但安全性很差
user:需验证来访主机提供的口令后才可以访问;提升了安全性
server:使用独立的远程主机验证来访主机提供的口令(集中管理账户)
domain:使用域控制器进行身份验证

  • vim /etc/samba/smb.conf

    [database]
    comment = Do not arbitrarily modify the database file
    path = /home/database
    public = no
    writable = yes
    
  • 在创建时,不仅要考虑到文件读写权限的问题,而且由于/home目录是系统中普通用户的家目录,因此还需要考虑应用于该目录的SELinux安全上下文所带来的限制。

    [root@centos01 vusers_dir]# mkdir /home/database
    [root@centos01 vusers_dir]# chown -Rf root:root /home/database
    [root@centos01 vusers_dir]# semanage fcontext -a -t samba_share_t /home/database
    [root@centos01 vusers_dir]# restorecon -Rv /home/database
    restorecon reset /home/database context unconfined_u:object_r:home_root_t:s0->unconfined_u:object_r:samba_share_t:s0
    [root@centos01 vusers_dir]#setsebool -P samba_enable_home_dirs on
    
  • 情况防火墙策略 iptables -F 保存 service iptables save

NFS网络文件系统

  • NFS(网络文件系统)服务可以将远程Linux系统上的文件共享资源挂载到本地主机的目录上,如果恰巧需要共享文件的主机都是Linux系统,非常推荐大家在客户端部署NFS服务来共享文件。
  • 安装nfs yum -y install nfs-utils 只安装 nfs-utils 即可,rpcbind 属于它的依赖,也会安装上。
  • 启动 NFS 服务和设置 NFS 服务开机启动
    systemctl start nfs
    systemctl start rpcbind
    systemctl enable rpcbind
    systemctl enable nfs
    
  • 防火墙需要打开 rpc-bind 和 nfs 的服务
    firewall-cmd --zone=public --permanent --add-service=rpc-bind
    firewall-cmd --zone=public --permanent --add-service=mountd
    firewall-cmd --zone=public --permanent --add-service=nfs
    firewall-cmd --reload
    
  • 或者清空NFS服务器上面iptables防火墙的默认策略 iptables -F service iptables save
  • 服务启动之后,在服务端配置一个共享目录
    mkdir /data
    chmod 755 /data
    
  • 根据这个目录,相应配置导出目录 vi /etc/exports

  • 添加如下配置后,
    /data/ 192.168.2.0/24(rw,sync,no_root_squash,no_all_squash)

    • data共享目录位置。
    • 192.168.0.0/24 客户端 IP 范围,* 代表所有,即没有限制。
    • rw 权限设置,可读可写
    • sync 同步共享目录
    • no_root_squash 可以使用 root 授权
    • no_all_squash 可以使用普通用户授权
  • 重启NFS服务 systemctl restart nfs

  • 可以检查一下本地的共享目录 showmount -e localhost

  • 客户端连接 NFS

    • 先查服务端的共享目录 showmount -e 192.168.2.10
    • 在客户端创建目录 mkdir /data
    • 挂载 mount -t nfs 192.168.2.10:/data /data
    • 挂载之后,可以使用 mount 命令查看一下
  • 客户端自动挂载 vi /etc/fstab

  • 在结尾添加类似配置 192.168.2.10:/data /data nfs defaults 0 0
  • 然后重启以 systemctl daemon-reload

Bind域名解析

  1. 安装Bind服务程序 yum -y install bind-chroot
    • 主配置文件 /etc/named.conf 只有58行,而且在去除注释信息和空行之后,实际有效的参数仅有30行左右,这些参数用来定义bind服务程序的运行。
    • 区域配置文件 /etc/named.rfc1912.zones 用来保存域名和IP地址对应关系的所在位置。类似于图书的目录,对应着每个域和相应IP地址所在的具体位置,当需要查看或修改时,可根据这个位置找到相关文件。
    • 数据配置文件目录 /var/named 该目录用来保存域名和IP地址真实对应关系的数据配置文件。
    • 在Linux系统中, bind 服务程序的名称为 named 首先需要在/etc目录中找到该服务程序的主配置文件,然后把 listen-on port 53 { 127.0.0.1; }; 修改为 listen-on port 53 { any; }; 另把 allow-query { localhost; }; 修改为 allow-query { any; }; 分别表示服务器上的所有IP地址均可提供DNS域名解析服务,以及允许所有人对本服务器发送DNS查询请求。这两个地方一定要修改准确。

      暂时不继续深入下去,故此笔记到此为止

DHCP

  1. 安装 yum -y install dhcp

  2. dhcpd服务程序配置文件中使用的常见参数以及作用

参数 作用
ddns-update-style 类型 定义DNS服务动态更新的类型,类型包括:none(不支持动态更新)、interim(互动更新模式)与ad-hoc(特殊更新模式)
allow/ignore client-updates 允许/忽略客户端更新DNS记录
default-lease-time 21600 默认超时时间
max-lease-time 43200 最大超时时间
option domain-name-servers 8.8.8.8 定义DNS服务器地址
option domain-name “domain.org” 定义DNS域名
range 定义用于分配的IP地址池
option subnet-mask 定义客户端的子网掩码
option routers 定义客户端的网关地址
broadcast-address 广播地址 定义客户端的广播地址
ntp-server IP地址 定义客户端的网络时间服务器(NTP)
nis-servers IP地址 定义客户端的NIS域服务器的地址
hardware 硬件类型 MAC地址 指定网卡接口的类型与MAC地址
server-name 主机名 向DHCP客户端通知DHCP服务器的主机名
fixed-address IP地址 将某个固定的IP地址分配给指定主机
time-offset 偏移差 指定客户端与格林尼治时间的偏移差
  1. 编辑配置 vim /etc/dhcp/dhcpd.conf

    ddns-update-style none;
    #设置DNS服务不自动进行动态更新
    ignore client-updates;
    #忽略客户端更新DNS记录
    subnet 192.168.2.0 netmask 255.255.255.0 {
    #作用域为192.168.2.0/24网段
    range 192.168.2.50 192.168.2.150;
    #IP地址池为192.168.2.50-150(约100个IP地址)
    option subnet-mask 255.255.255.0;
    #定义客户端默认的子网掩码
    option routers 192.168.2.1;
    #定义客户端的网关地址
    option domain-name "linuxprobe.com";
    #定义默认的搜索域
    option domain-name-servers 192.168.2.1;
    #定义客户端的DNS地址
    default-lease-time 21600;
    #定义默认租约时间(单位:秒)
    max-lease-time 43200;
    #定义最大预约时间(单位:秒)
    }
    #结束符
    
  2. 添加到开机启动 systemctl enable dhcpd 和启动 systemctl start dhcpd 配置不正确会导致dhcp服务无法启动

  3. 查看分配的IP cat /var/lib/dhcpd/dhcpd.leases

  4. 客户机重启网络可 dhclient -r 释放IP然后通过 dhclient 获取IP

需要说明的是,我上面的IP地址跟我路由器和物理机是同网段的,我的路由器开启了DHCP功能,为了确保实验结果,最好关闭路由器DHCP或者改成不同网段的

Squid部署代理缓存服务

标准正向代理

说明:Squid缓存服务器与真实物理机在同网段内IP为192.168.2.10;客户机亦是同网段内,都是桥接模式

  1. 安装 yum -y install squid

  2. 重启 systemctl restart squid 添加到开机服务 systemctl enable squid

  3. 把3128端口到防火墙 firewall-cmd --zone=public --add-port=3128/tcp --permanent其中参数 --permanent 永久生效,没有此参数重启后失效,还要重新载入一次防火墙 firewall-cmd --reload

    • 查看 firewall-cmd --zone= public --query-port=3128/tcp
    • 删除 firewall-cmd --zone= public --remove-port=3128/tcp --permanent
  4. 客户端如果是Windows系统,那么可以在 IE浏览器-工具-Internet选项-连接-局域网(LAN)设置-代理服务器中填写好Sqiud的服务器IP和Sqiud的端口即可

  5. 编辑配置文件 vim /etc/squid/squid.conf

常用的Squid服务程序配置参数以及作用

参数 作用
http_port 3128 监听的端口号
cache_mem 64M 内存缓冲区的大小
cache_dir ufs /var/spool/squid 2000 16 256 硬盘缓冲区的大小
cache_effective_user squid 设置缓存的有效用户
cache_effective_group squid 设置缓存的有效用户组
dns_nameservers IP地址 一般不设置,而是用服务器默认的DNS地址
cache_access_log /var/log/squid/access.log 访问日志文件的保存路径
cache_log /var/log/squid/cache.log 缓存日志文件的保存路径
visible_hostname linuxprobe.com 设置Squid服务器的名称
  • 如果修改了默认端口3128,比如修改为12345,则还需要对SELinux进行设置
  • 命令 semanage port -a -t squid_port_t -p tcp 12345
  • 查看 semanage port -l | grep squid_port_t

ACL访问控制

  1. 只允许IP地址为192.168.2.15的客户端使用服务器上的Squid服务程序提供的代理服务,禁止其余所有的主机代理请求
    • 在配置文件中大约25行位置添加如下代码后,记得重启squid服务 systemctl restart squid
      #acl CONNECT method CONNECT 在此条代码后插入如下代码
      acl client src 192.168.2.15
      #Recommended minimum Access Permission configuration:在此条代码后插入如下代码
      http_access allow client
      http_access deny all
      
      成功拒绝了非指定的IP squid_proxoy_1.jpg
  1. 禁止所有客户端访问网址中包含linux关键词的网站,记得重启squid服务 systemctl restart squid经过自己测试,只要网址url包含linux都不能访问

    #acl CONNECT method CONNECT 在此条代码后插入如下代码
    acl deny_keyword url_regex -i linux
    #Recommended minimum Access Permission configuration:在此条代码后插入如下代码
    http_access deny deny_keyword
    
  2. 禁止所有客户端访问某个特定的网站,记得重启squid服务 systemctl restart squid

    #acl CONNECT method CONNECT 在此条代码后插入如下代码
    acl deny_url url_regex baidu.com
    #Recommended minimum Access Permission configuration:在此条代码后插入如下代码
    http_access deny deny_url
    
  3. 禁止员工在企业网内部下载带有某些后缀的文件,记得重启squid服务 systemctl restart squid

    #acl CONNECT method CONNECT 在此条代码后插入如下代码
    acl badfile urlpath_regex -i \.mp3$ \.rar$
    #Recommended minimum Access Permission configuration:在此条代码后插入如下代码
    http_access deny badfile
    

透明正向代理

  1. 编辑配置 vim /etc/squid/squid.conf

    http_port 3128 transparent
    #在原有的基础上添加transparent
    cache_dir ufs /var/spool/squid 100 16 256
    #大概在62行处,去掉注释#
    
  2. 通过iptables命令实现数据转发功能

    iptables -F
    iptables -t nat -A POSTROUTING -p udp --dport 53 -o eno33554968 -j MASQUERADE
    #通过iptables命令实现DNS地址解析服务53端口的数据转发功能
    echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
    #允许Squid服务器转发IPv4数据包
    sysctl -p 
    #让转发参数立即生效
    iptables -t nat -A PREROUTING  -p tcp -m tcp --dport 80 -j REDIRECT --to-ports 3128
    iptables -t nat -A PREROUTING  -p tcp -m tcp --dport 443 -j REDIRECT --to-ports 3128
    iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o eno33554968 -j SNAT --to 192.168.2.10
    #192.168.2.10是Squid服务主机的IP地址
    service iptables save
    
  3. 保存主配置文件并退出后再使用 squid -k parse 命令检查主配置文件是否有错误,以及使用 squid -z 命令对 Squid服务程序 的透明代理技术进行初始化。

  4. 客户机的网关设置为squid服务器的IP,比如我这里设置为192.168.2.10

需要注意的是,此方法只能代理http网站,https并不使用此方法

iSCSI服务

  1. 安装 yum -y install targetd targetcli

    • 启动 systemctl start targetd
    • 添加到开机启动 systemctl enable targetd
  2. 配置 targetcli 在执行targetcli命令后就能看到交互式的配置界面了。在该界面中可以使用很多Linux命令,比如利用 ls 查看目录参数的结构,使用 cd 切换到不同的目录中。


  转载请注明: 唐瑞平 Linux就该这么学笔记

 本篇
Linux就该这么学笔记 Linux就该这么学笔记
系统命令常用系统工作命令 systemctl 命令 旧命令 systemctl新命令 功能 service firewalld start systemctl start firewalld.service 启动服务 s
2018-12-28
下一篇 
腾讯云CentOS笔记 腾讯云CentOS笔记
纯手动代码编译折腾失败,直接上宝塔面板管理安装 #Centos安装脚本 yum install -y wget && wget -O install.sh http://download.bt.cn/install/in
2018-12-05
  目录