标准输入重定向(STDIN,文件描述符为0):默认从键盘输入,也可从其他文件或命令中输入。
标准输出重定向(STDOUT,文件描述符为1):默认输出到屏幕。
错误输出重定向(STDERR,文件描述符为2):默认输出到屏幕。
4个最常用的转义字符如下所示。
反斜杠(\):使反斜杠后面的一个变量变为单纯的字符。
单引号(' '):转义其中所有的变量为单纯的字符串。
双引号(" "):保留其中的变量属性,不进行转义处理。
反引号(` `):把其中的命令执行后返回结果。
在RHEL 8系统中,用户身份有下面这些。
管理员UID为0:系统的管理员用户。
系统用户UID为1~999:Linux系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会由独立的系统用户负责运行,进而有效控制被破坏范围。
普通用户UID从1000开始:是由管理员创建的用于日常工作的用户。
UID是不能冲突的,管理员创建的普通用户的UID默认是从1000开始的(即使前面有闲置的号码)
--stdin | 允许通过标准输入修改用户密码,如echo "NewPassWord" | passwd --stdin Username |
usermod命令
usermod命令用于修改用户的属性,英文全称为“user modify”,语法格式为“usermod [参数] 用户名”,用户的信息保存在/etc/passwd文件中,可以直接用文本编辑器来修改其中的用户参数项目
参数 作用 -c 填写用户账户的备注信息 -d -m 参数-m与参数-d连用,可重新指定用户的家目录并自动把旧的数据转移过去 -e 账户的到期时间,格式为YYYY-MM-DD -g 变更所属用户组 -G 变更扩展用户组 -L 锁定用户禁止其登录系统 -U 解锁用户,允许其登录系统 -s 变更默认终端 -u 修改用户的UID userdel命令
参数 作用 -f 强制删除用户 -r 同时删除用户及用户家目录 读写执行权限对于文件与目录可执行命令的区别
文件的特殊权限
1. SUID (u+s)
SUID是一种对二进制程序进行设置的特殊权限,能够让二进制程序的执行者临时拥有所有者的权限(仅对拥有执行权限的二进制程序有效)。例如,所有用户都可以执行passwd命令来修改自己的用户密码,而用户密码保存在/etc/shadow文件中。仔细查看这个文件就会发现它的默认权限是000,也就是说除了root管理员以外,所有用户都没有查看或编辑该文件的权限。但是,在使用passwd命令时如果加上SUID特殊权限位,就可让普通用户临时获得程序所有者的身份,把变更的密码信息写入到shadow文件中。
如果原先权限位上没有x执行权限,那么被赋予特殊权限后将变成大写的S
# ls -l /etc/shadow ----------. 1 root root 1312 Jul 21 05:08 /etc/shadow # ls -l /bin/passwd -rwsr-xr-x. 1 root root 34512 Aug 13 2018 /bin/passwd
2. SGID (g+)
SGID特殊权限有两种应用场景:当对二进制程序进行设置时,能够让执行者临时获取文件所属组的权限;当对目录进行设置时,则是让目录内新创建的文件自动继承该目录原有用户组的名称。
# cd /tmp # mkdir testdir # ls -ald testdir drwxr-xr-x. 2 root root 6 Oct 27 23:44 testdir # chmod -R 777 testdir # chmod -R g+s testdir # ls -ald testdir drwxrwsrwx. 2 root root 6 Oct 27 23:44 testdi
3. SBIT (o+t)
SBIT特殊权限位可确保用户只能删除自己的文件,而不能删除其他用户的文件。换句话说,当对某个目录设置了SBIT粘滞位权限后,那么该目录中的文件就只能被其所有者执行删除操作了。
/tmp目录上的SBIT权限默认已经存在,这体现为“其他用户”权限字段的权限变为rwt:
# ls -ald /tmp drwxrwxrwt. 17 root root 4096 Oct 28 00:29 /tmp
SUID、SGID与SBIT也有对应的数字表示法,分别为4、2、1。也就是说777还不是最大权限,最大权限应该是7777
SUID、SGID、SBIT特殊权限的设置参数
参数 作用 u+s 设置SUID权限 u-s 取消SUID权限 g+s 设置SGID权限 g-s 取消SGID权限 o+t 设置SBIT权限 o-t 取消SBIT权限 chmod命令
chmod命令用于设置文件的一般权限及特殊权限,英文全称为“change mode”,语法格式为“chmod [参数] 文件名”。
# chmod 760 abcd.txt
chown命令
用于设置文件的所有者和所有组,英文全称为change own,语法格式为“chown所有者:所有组 文件名”。
文件的隐藏属性
隐藏权限,即被隐藏起来的权限,默认情况下不能直接被用户发觉。
1. chattr命令
chattr命令用于设置文件的隐藏权限,英文全称为change attributes,语法格式为“chattr [参数] 文件名称”。
chattr命令中的参数及其作用
参数 作用 i 无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建或删除文件 a 仅允许补充(追加)内容,无法覆盖/删除内容(Append Only) S 文件内容在变更后立即同步到硬盘(sync) s 彻底从硬盘中删除,不可恢复(用0填充原文件所在硬盘区域) A 不再修改这个文件或目录的最后访问时间(atime) b 不再修改文件或目录的存取时间 D 检查压缩文件中的错误 d 使用dump命令备份时忽略本文件/目录 c 默认将文件或目录进行压缩 u 当删除该文件后依然保留其在硬盘中的数据,方便日后恢复 t 让文件系统支持尾部合并(tail-merging) x 可以直接访问压缩文件中的内容 # echo "for Test" > test.txt # chattr +a test.txt # rm test.txt rm: remove regular file ‘test.txt’? y rm: cannot remove ‘test.txt’: Operation not permitted
2. lsattr命令
lsattr命令用于查看文件的隐藏权限,英文全称为“list attributes”,语法格式为“lsattr [参数] 文件名称”。
一旦使用lsattr命令后,文件上被赋予的隐藏权限马上就会原形毕露:
# lsattr text.txt -----a---------- text.txt
文件访问控制列表 ACL
基于普通文件或目录设置ACL其实就是针对指定的用户或用户组设置文件或目录的操作权限,更加精准地派发权限。另外,如果针对某个目录设置了ACL,则目录中的文件会继承 其ACL权限;若针对文件设置了ACL,则文件不再继承其所在目录的ACL权限。
1. setfacl命令
setfacl命令用于管理文件的ACL权限规则,英文全称为“set files ACL”,语法格式为“setfacl [参数] 文件名称”。
setfacl命令中的参数以及作用
参数 作用 -m 修改权限 -M 从文件中读取权限 -x 删除某个权限 -b 删除全部权限 -R 递归子目录 例如,我们原本是无法进入/root目录中的,现在为普通用户单独设置一下权限:
# setfacl -Rm u:用户名:rwx /root 随后再切换到这位普通用户的身份下,现在能正常进入了: # su - 用户名 $ cd /root $ ls anaconda-ks.cfg Documents initial-setup-ks.cfg Pictures Templates Desktop Downloads Music Public Videos $ exit
文件权限的最后一个点(.)变成了加号(+),这就意味着该文件已经设置了ACL
# ls -ld /root dr-xrwx---+ 14 root root 4096 May 4 2020 /root
2. getfacl命令
getfacl命令用于查看文件的ACL权限规则,英文全称为“get files ACL”,
语法格式为“getfacl [参数] 文件名称”。
# getfacl /root ggetfacl: Removing leading '/' from absolute path names # file: root # owner: root # group: root user::r-x user:用户名:rwx group::r-x mask::rwx other::---
ACL权限还可以针对某个用户组进行设置。例如,允许某个组的用户都可以读写/etc/fstab文件:
# setfacl -m g:组名:rw /etc/fstab # getfacl /etc/fstab getfacl: Removing leading '/' from absolute path names # file: etc/fstab # owner: root # group: root user::rw- group::r-- group:组名:rw- mask::rw- other::r--
要清空所有ACL权限,请用-b参数;要删除某一条指定的权限,就用-x参数:
# setfacl -x g:组名 /etc/fstab # getfacl /etc/fstab getfacl: Removing leading '/' from absolute path names # file: etc/fstab # owner: root # group: root user::rw- group::r-- mask::r-- other::r--
备份/home目录上的ACL权限时,可使用-R递归参数,这样不仅能够把目录本身的权限进行备份,还能将里面的文件权限也自动备份。
# getfacl -R home > backup.acl
ACL权限的恢复,使用的是 --restore 参数。
# setfacl --restore backup.acl
物理设备的命名规则
常见的硬件设备及其文件名称
硬件设备 文件名称 IDE设备 /dev/hd[a-d] SCSI/SATA/U盘 /dev/sd[a-z] virtio设备 /dev/vd[a-z] 软驱 /dev/fd[0-1] 打印机 /dev/lp[0-15] 光驱 /dev/cdrom 鼠标 /dev/mouse 磁带机 /dev/st0或/dev/ht0 主分区或扩展分区的编号从1开始,到4结束;
逻辑分区从编号5开始。
磁盘容量配额
root管理员就需要使用磁盘容量配额服务来限制某位用户或某个用户组针对特定文件夹可以使用的最大硬盘空间或最大文件个数,一旦达到这个最大值就不再允许继续使用。可以使用quota技术进行磁盘容量配额管理,从而限制用户的硬盘可用容量或所能创建的最大文件个数。quota技术还有软限制和硬限制的功能。
软限制:当达到软限制时会提示用户,但仍允许用户在限定的额度内继续使用。
硬限制:当达到硬限制时会提示用户,且强制终止用户的操作。
RHEL 8系统中已经安装了quota磁盘容量配额服务程序包,但存储设备却默认没有开启对quota技术的支持,此时需要手动编辑/etc/fstab文件并重启一次系统,让系统中的启动目录(/boot)能够支持quota磁盘配额技术。
# vim /etc/fstab /dev/mapper/rhel-root / xfs defaults 1 1 UUID=812b1f7c-8b5b-43da-8c06-b9999e0fe48b /boot xfs defaults,uquota 1 2 [root@linuxprobe ~]# reboot
# xfs_quota -x -c 'limit bsoft=3m bhard=6m isoft=3 ihard=6 tom' /boot # xfs_quota -x -c report /boot User quota on /boot (/dev/sda1) Blocks User ID Used Soft Hard Warn/Grace ---------- -------------------------------------------------- root 114964 0 0 00 [--------] tom 0 3072 6144 00 [--------]
edquota命令用于管理系统的磁盘配额,英文全称为“edit quota”,语法格式为“edquota [参数] 用户名”。
edquota命令会调用Vi或Vim编辑器来让root管理员修改要限制的具体细节,记得用wq保存退出。下面把用户tom的硬盘使用量的硬限额从5MB提升到8MB:
# edquota -u tom Disk quotas for user tom (uid 1001): Filesystem blocks soft hard inodes soft hard /dev/sda1 4096 3072 8192 1 3 8
VDO虚拟数据优化
RHEL/CentOS 8系统中默认已经启用了VDO技术。
新添加进来的物理设备就是使用vdo命令来管理的,其中name参数代表新的设备卷的名称;device参数代表由哪块磁盘进行制作;vdoLogicalSize参数代表制作后的设备大小。依据红帽公司推荐的原则,20GB硬盘将翻成200GB的逻辑存储,使用status参数查看新建卷的概述信息
# vdo create --name=storage --device=/dev/sdc --vdoLogicalSize=200G # vdo status --name=storage
打开/etc/fstab文件,把对应的字段填写完整。建议再加上_netdev参数,表示等系统及网络都启动后再挂载VDO设备卷,以保证万无一失。
UUID=cd4e9f12-e16a-415c-ae76-8de069076713 /storage xfs defaults,_netdev 0 0
软硬方式链接
ln命令中可用的参数以及作用
参数 作用 -s 创建“符号链接”(如果不带-s参数,则默认创建硬链接) -f 强制创建文件或目录的链接 -i 覆盖前先询问 -v 显示创建链接的过程 # ln -s old.txt new.txt
RAID磁盘冗余阵列
RAID 0、1、5、10方案技术对比
RAID级别 最少硬盘 可用容量 读写性能 安全性 特点 0 2 n n 低 追求最大容量和速度,任何一块盘损坏,数据全部异常。 1 2 n/2 n 高 追求最大安全性,只要阵列组中有一块硬盘可用,数据不受影响。 5 3 n-1 n-1 中 在控制成本的前提下,追求硬盘的最大容量、速度及安全性,允许有一块硬盘异常,数据不受影响。 10 4 n/2 n/2 高 综合RAID1和RAID0的优点,追求硬盘的速度和安全性,允许有一半硬盘异常(不可同组),数据不受影响 1. RAID 0
2. RAID 1
3. RAID 5
4. RAID 10
由于RAID 10是由RAID 1和RAID 0组成的,因此正确的叫法是“RAID一零”,而不是“RAID十”。
部署磁盘阵列
mdadm命令的常用参数和作用
参数 作用 -a 检测设备名称 -n 指定设备数量 -l 指定RAID级别 -C 创建 -v 显示过程 -f 模拟设备损坏 -r 移除设备 -Q 查看摘要信息 -D 查看详细信息 -S 停止RAID磁盘阵列 以部署4块硬盘做raid10为例
-C参数代表创建一个RAID阵列卡;-v参数显示创建的过程,同时在后面追加一个设备名称/dev/md0,这样/dev/md0就是创建后的RAID磁盘阵列的名称;-n 4参数代表使用4块硬盘来部署这个RAID磁盘阵列;而-l 10参数则代表RAID 10方案;最后再加上4块硬盘设备的名称就搞定了
# mdadm -Cv /dev/md0 -n 4 -l 10 /dev/sdb /dev/sdc /dev/sdd /dev/sde #部署raid10命令 # mdadm -D /dev/md0 #可以用-D参数进行查看创建过程 # mkfs.ext4 /dev/md0 #制作好的RAID磁盘阵列格式化为Ext4格式 # mkdir /RAID #以下为挂载操作 # mount /dev/md0 /RAID # echo "/dev/md0 /RAID ext4 defaults 0 0" >> /etc/fstab # mount -a
ubuntu系统挂载完后,重启前还需要命令 update-initramfs -u才能生效,否则重启后会无法进入桌面,进入emergency mode
磁盘阵列+备份盘
-x参数,添加热备盘,后续使用格式化挂载操作
# mdadm -Cv /dev/md0 -n 3 -l 5 -x 1 /dev/sdb /dev/sdc /dev/sdd /dev/sde # mdadm -D /dev/md0
删除磁盘阵列
# umount /RAID # mdadm /dev/md0 -f /dev/sdc #停用磁盘 # mdadm /dev/md0 -f /dev/sdd # mdadm /dev/md0 -f /dev/sde # mdadm /dev/md0 -f /dev/sdf # mdadm /dev/md0 -r /dev/sdb #移除磁盘 # mdadm /dev/md0 -r /dev/sdd # mdadm /dev/md0 -r /dev/sde # mdadm /dev/md0 -r /dev/sdf # mdadm --stop /dev/md0 #继续停用整个RAID磁盘阵列 # ls /dev/md0 ls: cannot access '/dev/md0': No such file or directory
在有一些老版本的服务器中,在使用--stop 参数后依然会保留设备文件。这很明显是没有处理干净,这时再执行一下“mdadm --remove /dev/md0”命令即可。
如果着急,也可以用“mdadm /dev/md0 -f /dev/sdb -r /dev/sdb”这一条命令搞定。但是,在早期版本的服务器中,这条命令中的-f和-r不能一起使用,因此保守起见,还是一步步地操作吧。
LVM逻辑卷管理器 (Logical Volume Manager,LVM)
LVM允许用户对硬盘资源进行动态调整。
LVM技术是在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。这样一来,用户不必关心物理硬盘设备的底层架构和布局,就可以实现对硬盘分区的动态调整。
物理卷处于LVM中的最底层,可以将其理解为物理硬盘、硬盘分区或者RAID磁盘阵列。卷组建立在物理卷之上,一个卷组能够包含多个物理卷,而且在卷组创建之后也可以继续向其中添加新的物理卷。逻辑卷是用卷组中空闲的资源建立的,并且逻辑卷在建立后可以动态地扩展或缩小空间。这就是LVM的核心理念。
部署逻辑卷
常用的LVM部署命令
功能/命令 物理卷管理 卷组管理 逻辑卷管理 扫描 pvscan vgscan lvscan 建立 pvcreate vgcreate lvcreate 显示 pvdisplay vgdisplay lvdisplay 删除 pvremove vgremove lvremove 扩展 vgextend lvextend 缩小 vgreduce lvreduce 以 2 块硬盘为例
ubuntu下使用请先安装,apt install lvm2
第1步:让新添加的两块硬盘设备支持LVM技术。
# pvcreate /dev/sdb /dev/sdc
第2步:把两块硬盘设备加入到storage卷组中,然后查看卷组的状态。
# vgcreate vg1 /dev/sdb /dev/sdc #vg1为vg名称,可任意 # vgdisplay #查看vg卷组信息
第3步:再切割出一个约为150MB的逻辑卷设备。
# lvcreate -n vo -L 150M vg1 #-n参数设置逻辑卷名称,可任意 -L参数逻辑卷大小
第4步:把生成好的逻辑卷进行格式化,然后挂载使用。
# mkfs.ext4 /dev/vg1/lv1 #格式化完成使用挂载操作
扩容逻辑卷
# umount /lv1 #卸载逻辑卷设备,这里为挂载点为/lv1
第1步:把上一个实验中的逻辑卷vo扩展至290MB。
# lvextend -L 290M /dev/vg1/lv1
第2步:检查硬盘的完整性,确认目录结构、内容和文件内容没有丢失。一般情况下没有报错,均为正常情况。 e2fsck ,file system check。
# e2fsck -f /dev/vg1/lv1
第3步:重置设备在系统中的容量。刚刚是对LV(逻辑卷)设备进行了扩容操作,但系统内核还没有同步到这部分新修改的信息,需要手动进行同步。
# resize2fs /dev/vg1/lv1 resize2fs 1.44.3 (10-July-2018) Resizing the filesystem on /dev/vg1/lv1 to 299008 (1k) blocks. The filesystem on /dev/vg1/lv1 is now 299008 (1k) blocks long.
第4步:重新挂载硬盘设备并查看挂载状态。
# mount -a
缩小逻辑卷
# umount /lv1
第1步:检查文件系统的完整性。
# e2fsck -f /dev/vg1/lv1
第2步:通知系统内核将逻辑卷vo的容量减小到120MB。
# resize2fs /dev/vg1/lv1 120M
第3步:将LV逻辑卷的容量修改为120M。
# lvreduce -L 120M /dev/vg1/lv1
第4步:重新挂载文件系统并查看系统状态。
# mount -a
逻辑卷快照
LVM还具备有“快照卷”功能,该功能类似于虚拟机软件的还原时间点功能。
例如,对某一个逻辑卷设备做一次快照,如果日后发现数据被改错了,就可以利用之前做好的快照卷进行覆盖还原。LVM的快照卷功能有两个特点:
快照卷的容量必须等同于逻辑卷的容量;
快照卷仅一次有效,一旦执行还原操作后则会被立即自动删除。
在正式操作前,先看看VG(卷组)中的容量是否够用:
# vgdisplay
第1步:使使用-s参数生成一个快照卷,使用-L参数指定切割的大小,需要与要做快照的设备容量保持一致。另外,还需要在命令后面写上是针对哪个逻辑卷执行的快照操作,稍后数据也会还原到这个相应的设备上。
# lvcreate -L 120M -s -n SNAP /dev/vg1/lv1 #-n参数设置快照名称snap可任意
第2步:在逻辑卷所挂载的目录中创建一个100MB的垃圾文件,然后再查看快照卷的状态。可以发现存储空间的占用量上升了。
# dd if=/dev/zero of=/lv1/files count=1 bs=100M
第3步:为了校验快照卷的效果,需要对逻辑卷进行快照还原操作。在此之前记得先卸载掉逻辑卷设备与目录的挂载。
lvconvert命令用于管理逻辑卷的快照,语法格式为“lvconvert [参数]快照卷名称”。
使用lvconvert命令能自动回复逻辑卷的快照,在早期的RHEL/CentOS 5版本中要写全格式:“--mergesnapshot”,而从RHEL 6到RHEL 8,已经允许用户只输入--merge参数进行操作了,系统会自动分辨设备的类型。
# umount /lv1 # lvconvert --merge /dev/vg1/SNAP Merging of volume vg1/SNAP started. vg1/lv1: Merged: 36.41% vg1/lv1: Merged: 100.00%
第4步:快照卷会被自动删除掉,并且刚刚在逻辑卷设备被执行快照操作后再创建出来的100MB的垃圾文件也被清除了。
# mount -a
删除逻辑卷
当生产环境中想要重新部署LVM或者不再需要使用LVM时,则需要执行LVM的删除操作。为此,需要提前备份好重要的数据信息,然后依次删除逻辑卷、卷组、物理卷设备,这个顺序不可颠倒。
第1步:取消逻辑卷与目录的挂载关联,删除配置文件中永久生效的设备参数。
# umount /linuxprobe # vim /etc/fstab #手动删除lvm的挂载信息
第2步:删除逻辑卷设备,需要输入y来确认操作。
# lvremove /dev/vg1/lv1
第3步:删除卷组,此处只写卷组名称即可,不需要设备的绝对路径。
# vgremove vg1
第4步:删除物理卷设备。
# pvremove /dev/sdb /dev/sdc Labels on physical volume "/dev/sdb" successfully wiped. Labels on physical volume "/dev/sdc" successfully wiped.
在上述操作执行完毕之后,再执行lvdisplay、vgdisplay、pvdisplay命令来查看LVM的信息时就不会再看到相关信息了
iptables与firewalld防火墙
1.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 匹配来源端口号 实验1:查看已有的防火墙规则链 iptables -L
# iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT udp -- anywhere anywhere udp dpt:domain ACCEPT tcp -- anywhere anywhere tcp dpt:domain ACCEPT udp -- anywhere anywhere udp dpt:bootps ACCEPT tcp -- anywhere anywhere tcp dpt:bootps Chain FORWARD (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere 192.168.122.0/24 ctstate RELATED,ESTABLISHED ACCEPT all -- 192.168.122.0/24 anywhere ACCEPT all -- anywhere anywhere REJECT all -- anywhere anywhere reject-with icmp-port-unreachable REJECT all -- anywhere anywhere reject-with icmp-port-unreachable Chain OUTPUT (policy ACCEPT) target prot opt source destination ACCEPT udp -- anywhere anywhere udp dpt:bootpc
实验2:清空已有的防火墙规则链
#iptables -F
实验3:把INPUT规则链的默认策略设置为拒绝。
# iptables -P INPUT DROP
实验4:向INPUT链中添加允许ICMP流量进入的策略规则。-j:对匹配的流量或策略实行哪个动作
# iptables -I INPUT -p icmp -j ACCEPT
实验5:删除INPUT规则链中刚刚加入的那条策略(允许ICMP流量),并把默认策略设置为允许。
# iptables -D INPUT 1 # iptables -P INPUT ACCEPT # iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination Chain FORWARD (policy ACCEPT) target prot opt source destination Chain OUTPUT (policy ACCEPT) target prot opt source destination
实验6:将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 # iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination ACCEPT tcp -- 192.168.10.0/24 anywhere tcp dpt:ssh REJECT tcp -- anywhere anywhere tcp dpt:ssh reject-with icmp-port-unreachable
实验7:向INPUT规则链中添加拒绝所有人访问本机12345端口的策略规则。
#iptables -I INPUT -p tcp --dport 22 -j REJECT
实验8:向INPUT规则链中添加拒绝192.168.10.5主机访问本机80端口(Web服务)的策略规则。
# iptables -I INPUT -p tcp -s 192.168.10.5 --dport 80 -j REJECT # iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination REJECT tcp -- 192.168.10.5 anywhere tcp dpt:http reject-with icmp-port-unreachable
实验9:向INPUT规则链中添加拒绝所有主机访问本机1000~1024端口的策略规则。
# iptables -A INPUT -p tcp --dport 1000:1024 -j REJECT # iptables -A INPUT -p udp --dport 1000:1024 -j REJECT # iptables -L Chain INPUT (policy ACCEPT) target prot opt source destination REJECT tcp -- 192.168.10.5 anywhere tcp dpt:http reject-with icmp-port-unreachable REJECT udp -- anywhere anywhere udp dpt:italk reject-with icmp-port-unreachable REJECT tcp -- anywhere anywhere tcp dpt:italk reject-with icmp-port-unreachable ACCEPT tcp -- 192.168.10.0/24 anywhere tcp dpt:ssh REJECT tcp -- anywhere anywhere tcp dpt:ssh reject-with icmp-port-unreachable REJECT tcp -- anywhere anywhere tcp dpts:cadlock2:1024 reject-with icmp-port-unreachable REJECT udp -- anywhere anywhere udp dpts:cadlock2:1024 reject-with icmp-port-unreachable
Tips:使用iptables命令配置的防火墙规则默认会在系统下一次重启时失效,如果想让配置的防火墙策略永久生效,还要执行保存命令:
# iptables-save # Generated by xtables-save v1.8.2 on Wed Jan 20 16:56:27 2022 ......省略部分信息.....
2.Firewalld (Dynamic Firewall Manager of Linux systems)
两种模式:
Runtime:当前立即生效,重启后失效。
Permanent:当前不生效,重启后生效。 不重启立即生效:firewall-cmd --reload
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 关闭应急状况模式 1.查看firewalld服务当前所使用的区域。
# firewall-cmd --get-default-zone public
2.查询指定网卡在firewalld服务中绑定的区域。
# firewall-cmd --get-zone-of-interface=ens160 public
3.把网卡默认区域修改为external,并在系统重启后生效。
# firewall-cmd --permanent --zone=external --change-interface=ens160 The interface is under control of NetworkManager, setting zone to 'external'. success
4.把firewalld服务的默认区域设置为public。
< --set-default-zone 为永久设置 无需加 --penmanent 参数>
# firewall-cmd --set-default-zone=public
5.启动和关闭firewalld防火墙服务的应急状况模式。
--panic-on参数会立即切断一切网络连接,而使用--panic-off则会恢复网络连接。切记,紧急模式会切断一切网络连接,因此在远程管理服务器时,在按下回车键前一定要三思。
# firewall-cmd --panic-on # firewall-cmd --panic-off
6.查询SSH和HTTPS协议的流量是否允许放行。
# firewall-cmd --zone=public --query-service=ssh yes # firewall-cmd --zone=public --query-service=https no
7.把HTTPS协议的流量设置为永久允许放行,并立即生效。
# firewall-cmd --permanent --zone=public --add-service=https # firewall-cmd --reload
8.把HTTP协议的流量设置为永久拒绝,并立即生效。
# firewall-cmd --permanent --zone=public --remove-service=http # firewall-cmd --reload
9.把访问8080和8081端口的流量策略设置为允许,但仅限当前生效。
# firewall-cmd --zone=public --add-port=8080-8081/tcp # firewall-cmd --reload # firewall-cmd --zone=public --list-ports
10.把原本访问本机888端口的流量转发到22端口,要且求当前和长期均有效。
firewall-cmd命令实现端口转发的格式
firewall-cmd --permanent --zone=<区域> --add-forward-port=port=<源端口号>:proto=<协议>:toport=<目标端口号>:toaddr=<目标IP地址>
# firewall-cmd --permanent --zone=public --add-forward-port=port=888:proto=tcp:toport=22:toaddr=192.168.1.100 # firewall-cmd --reload
11.富规则的设置
在firewalld服务中配置一条富规则,使其拒绝192.168.10.0/24网段的所有用户访问本机的ssh服务(22端口):
# firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" source address="192.168.10.0/24" service name="ssh" reject" success # firewall-cmd --reload success