nat表应用


 A机器两块网卡ens33(192.168.133.130)、ens37(192.168.100.1),ens33可以上外网,ens37仅仅是内部网络,B机器只有ens37(192.168.100.100),和A机器ens37可以通信互联。

 需求1:可以让B机器连接外网

 查看路由转发:cat /proc/sys/net/ipv4/ip_forward 如果是0,我们需要打开它

 A机器上打开路由转发 echo "1">/proc/sys/net/ipv4/ip_forward

 增加一条规则A上执行 iptables -t nat -A POSTROUTING -s 192.168.100.0/24 -o ens33 -j MASQUERADE 

 B上设置网关为192.168.100.1 命令:route add default gw 192.168.100.1 查看网关:route -n

 需求2:C机器只能和A通信,让C机器可以直接连通B机器的22端口

 B机器设置一下DNS:vi /etc/resolv.conf    进去了写:nameserver 119.29.29.29 

 A上打开路由转发echo "1">/ proc/sys/net/ipv4/ip_forward

  A上执行iptables -t nat -A PREROUTING -d 192.168.133.130 -p tcp --dport 1122 -j DNAT --to 192.168.100.100:22

 A上执行iptables -t nat -A POSTROUTING -s 192.168.100.100 -j SNAT --to 192.168.133.130

 B上设置网关为192.168.100.1


iptables规则备份和恢复


 默认保存命令:service iptables save //会把规则保存到/etc/sysconfig/iptables

 指定保存命令:例如,把iptables规则备份到my.ipt文件中,命令:iptables-save > /tmp/my.ipt

 恢复刚才备份的规则命令:iptables-restore < /tmp/my.ipt

Linux防火墙-firewalld

打开firewalld方法:

 第一步,systemctl disable iptables

 第二步,systemctl stop iptables

 第三步,systemctl enable firewalld

 第四步,systemctl start firewalld

 

关闭firewalld开启netfilter方法

 第一步,不让他开机启动:systemctl disable firewalled

 第二步,再把服务停掉:systemctl stop firewalld

 第三步,然后开启netfilter防火墙,开启之前需要安装包:yum install -y iptables-services

 第四步,安装完它会产生iptables服务,查看一下:systemctl enable iptables

 第五步,开启iptables服务:systemctl start iptables


zone

 firewalld默认有9个zone,每个zone都好比一个规则级,自带一些规则,默认zone为  public

 查看所有的zone:firewall-cmd --get-zones

 查看默认zone: firewall-cmd --get-default-zone

 wKioL1l5ir7jKnLiAACVaFH9MTU148.png

9个zone介绍:

 wKiom1l5jAPDcLOhAAYPMYtVGJM132.png

zone的操作

 firewall-cmd --set-default-zone=work          //自己设定默认zone,例如work。

 firewall-cmd --get-zone-of-interface=ens33      //查指定网卡

 firewall-cmd --zone=public --add-interface=lo    //给指定网卡设置zone 

 firewall-cmd --zone=dmz --change-interface=lo    //针对网卡更改zone

 firewall-cmd --zone=dmz  --remove-interface=lo   //针对网卡删除zone 

 firewall-cmd --get-active-zones             //查看系统所有网卡所在的zone

service的操作

 service是firewall防火墙下的一个端口

 firewall-cmd --get-services  查看所有的servies

 firewall-cmd --list-services  //查看当前zone下有哪些service 

 firewall-cmd --zone=public --list-service //查看指定zone下有哪些service

增加指定服务:firewall-cmd --zone=public --add-service=http //把http增加到public  zone下面,但是这不是永久的配置文件里不会有。

删除指定服务:firewall-cmd --zone=public --remove-service=http

 ls /usr/lib/firewalld/zones/ //zone的配置文件模板

 ls /usr/lib/firewalld/services/ service的配置模板

要想永久生效就要保存到配置文件中,方法:

 firewall-cmd --zone=public --add-service=http --permanent //更改配置文件,之后  会在/etc/firewalld/zones目录下面生成配置文件

需求:ftp服务自定义端口1121,需要在work zone下面放行ftp

 第一步,先把usr目录下的ftp.xml文件拷贝到etc下的service目录来:

 cp /usr/lib/firewalld/services/ftp.xml /etc/firewalld/services/

 第二步,编辑刚拷贝到service目录下ftp.xml的配置文件,把里边的21端口改成1121:

 vi /etc/firewalld/services/ftp.xml //把21改为1121

 第三步,把usr目录下的ftp.xml文件拷贝到etc下的zones目录下:

 cp /usr/lib/firewalld/zones/work.xml /etc/firewalld/zones/

 第四步,编辑etc下刚拷贝过来的work.xml文件增加以下内容: 

 vi /etc/firewalld/zones/work.xml  增加一行,<service name="ftp"/>

 最后一步,重新加载:firewall-cmd --reload

 查看一下:firewall-cmd --zone=work --list-services


Linux任务计划


crontab

 crondab在:cat /var/spool/cron/root目录下

 命令:crontab -u、-e、-l、-r

 -u :指定某个用户,不加-u选项则为当前用户;

 -e :制定计划任务;

 -l :列出计划任务;

 -r :删除计划任务。

格式:分 时 日 月 周 user command

 文件/var/spool/cron/username

命令:cat /etc/crontab 查看任务计划的配置文件

 wKioL1l69FWgjVAmAACYVA-WrsE429.png

 1.分钟范围0-59,2.小时范围0-23,3.日范围1-31,4.月范围1-12,5.周1-7(0或者7都表示周日),  6.用户(不写默认是root),7.执行的命令。

命令:crontab -e 进入到配置文件中,编辑配置文件,内容格式如下:

 wKiom1l6-dqT62QWAACInVFfFzA827.png

 * 表示所有(每分、每小时、每天、每周、每月)

 可用格式1-5表示一个范围1到5,比如月,那就是每个月的1到5号)

 可用格式1,2,3表示1或者2或者3,比如周,那就是每周的周一周二周三)

 可用格式*/2表示被2整除的数字,比如小时,那就是每隔2小时,比如月,就是2、4、6、..月

 要保证服务是启动状态:输入命令,systemctl start crond.service

如何检查是启动?

 命令:ps aux |grep cron 看看有没有这个进程

 或者用这个命令:systemctl status crond 如果下边显示绿色证明他启动了

如何停掉服务?

 用命令:systemctl stop crond

Linuxde的系统管理服务-chkconfig(CentOS6)

 Linux系统所有的预设服务可以查看 /etc/init.d/ 目录得到: ls /etc/init.d/

 命令:chkconfig --list 列出所有服务并显示每个级别是否开启

 wKioL1l7BhuS5DRfAADU1VipSSE891.png

 上图里的级别(0,1,2,3,4,5,6)就是 /etc/inittab 里面的那几个启动级别了:

 0、1、6运行级别被系统保留;一般的Linux系统实现中,都使用了2、3、4、5几个级别。

 0作为shutdown动作,1作为重启至单用户模式,2表示无NFS支持的多用户模式,3表示完全多用户模式 (也是最常用的级别),4保留给用户自定义,5表示图形登录方式,6为重启。

 命令:chkconfig network off 让这个服务关闭

 命令:chkconfig network on 让这个服务开启

 命令:chkconfig --level 3 network off 关闭指定某个服务的一个级别(例如network的3级别)

 命令:chkconfig --level 345 network off 关闭指定某个服务的几个级别

 命令:chkconfig --del network  删除自定义服务

 命令:chkconfig --add network  增加自定义服务


Linux系统服务管理-systemd(CentOS7)


 一个service属于一种类型的unit

 多个unit组成了一个target

 一个target里面包含了多个service

 命令:systemctl list-units --all --type=service 把service类型的服务列出来

几个常用的服务相关的命令

 systemctl enable crond.service //让服务开机启动

 systemctl disable crond //不让开机启动

 systemctl status crond //查看状态

 systemctl stop crond //停止服务

 systemctl start crond //启动服务

 systemctl restart crond //重启服务

 systemctl is-enabled crond //检查服务是否开机启动

unit介绍

 ls /usr/lib/systemd/system //系统所有unit,分为以下类型

 service 系统服务 

 target 多个unit组成的组

 device 硬件设备

 mount 文件系统挂载点

 automount 自动挂载点

 path 文件或路径

 scope 不是由systemd启动的外部进程

 slice 进程组

 snapshot systemd快照

 socket 进程间通信套接字

 swap  swap文件

 timer 定时器

unit相关的命令

 systemctl list-units //列出正在运行的unit

 systemctl list-units --all //列出所有,包括失败的或者inactive的

 systemctl list-units --all --state=inactive //列出inactive的unit

 systemctl list-units --type=service//列出状态为active的service

 systemctl is-active crond.service //查看某个服务是否为active

target介绍

 一个target就是多个unit的组合,

 系统为了方便管理用target来管理unit。

 systemctl list-unit-files --type=target  列出系统里边所有的target。

 systemctl list-dependencies multi-user.target //查看指定target下面有哪些unit

 systemctl get-default //查看系统默认的target

 systemctl set-default multi-user.target 设置一个默认的target

 一个service属于一种类型的unit

 多个unit组成了一个target

 一个target里面包含了多个service

 命令:cat /usr/lib/systemd/system/sshd.service // cat一下service看最后[install]部分它会告  诉你这个service属于哪个target。


Linux文件同步估计-rsync

 

 命令:rsync -av /etc/passwd /tmp/1.txt 把etc/passwd文件拷贝到tmp下,并改名为1.txt

 命令:rsync -av /etc/passwd root@192.168.65.130:/tmp/1.txt 远程拷贝同步,假如我要拷贝到  对方root用户下,写它的IP,然后冒号,后边跟它的文件路径,输入密码。

 命令:rsync -av /tmp/1.txt 192.168.188.128:/tmp/2.txt 

rsync格式:

 rsync [OPTION] … SRC   DEST  本机的格式

 rsync [OPTION] … SRC   [user@]host:DEST 拷贝到远程服务器上的格式。

 rsync [OPTION] … [user@]host:SRC   DEST 反着拷贝,先写远程的机器或者目录,然后拷贝到本  地的目录下。

 rsync [OPTION] … SRC   [user@]host::DEST

 rsync [OPTION] … [user@]host::SRC   DEST

 OPTION:选项(-a、-v、..) SRC:原目录 DEST:目标目录或文件 user@:用户(可以省略,不写用户  他就是当前终端的用户,他默认是root)  host:IP地址

rsync常用选项

 -a 包含-rtplgoD

 -r 同步目录时要加上,类似cp时的-r选项

 -v 同步时显示一些信息,让我们知道同步的过程

 -l 保留软连接

 -L 加上该选项后,同步软链接时会把源文件给同步

 -p 保持文件的权限属性

 -o 保持文件的属主

 -g 保持文件的属组

 -D 保持设备文件信息

 -t 保持文件的时间属性

 --delete 删除DEST中SRC没有的文件,删除目标目录中,原目录里边没有的文件。要想一模一样必须  加这个选项,

 --exclude 过滤指定文件,如--exclude “logs”会把文件名包含logs的文件或者目录过滤掉,不同  步       例如:下图为过滤掉以.txt结尾的所有文件,不要这些文件。

 wKiom1l8ZcORcZ1LAAEQMbWf_xA315.png

 他不支持连写,但支持多些,例如还过滤以阿明开头的所有文件,不要他。

 wKiom1l8ZqvQr_vSAADIYy8WkXE930.png

 -P 显示同步过程,比如速率,比-v更加详细

 -u 加上该选项后,如果DEST中的文件比SRC新,则不同步,如果目标目录里的文件比原文件新,则不  同步

 -z 传输时压缩

rsync通过ssh方式同步

 格式:rsync -av test1/ 192.168.133.132:/tmp/test2/

 命令:rsync -av -e "ssh -p 22" test1/ 192.168.133.132:/tmp/test2/ -p指定对方的端口,例如  22端口

rsync 通过服务的方式同步

 第一步,要编辑配置文件/etc/rsyncd.conf  //下面是rsyncd.conf的样例,把他写进去:

port=873

log file=/var/log/rsync.log

pid file=/var/run/rsyncd.pid

address=192.168.133.130

[test]

path=/root/rsync

use chroot=true

max connections=4

read only=no

list=true

uid=root

gid=root

auth users=test                        这里是密码实验时可以关掉前边加上#号

secrets file=/etc/rsyncd.passwd

hosts allow=192.168.133.132 1.1.1.1 2.2.2.2  192.168.133.0/24  这些IP根据你需要的改!!

 第二步,启动服务rsync --daemon  启动完用命令检测一下是否启动了:ps aux |grep rsync

 用命令:netstat -lntp 查看一下他监听的端口是不是873

 最后一步:用这个命令传输,格式:rsync -av test1/ 192.168.133.130::module/dir/

rsyncd.conf配置文件详解 

 port:指定在哪个端口启动rsyncd服务,默认是873端口。可以更改。

 log file:指定日志文件。

 pid file:指定pid文件,这个文件的作用涉及服务的启动、停止等进程管理操作。

 address:指定启动rsyncd服务的IP。假如你的机器有多个IP,就可以指定由其中一个启动rsyncd服  务,如果不指定该参数,默认是在全部IP上启动。也可以指定多个IP

 []:指定模块名,里面内容自定义。

 path:指定数据存放的路径。

 use chroot true|false:表示在传输文件前首先chroot到path参数所指定的目录下。这样做的原因是  实现额外的安全防护,但缺点是需要以roots权限,并且不能备份指向外部的符号连接所指向的目录文  件。默认情况下chroot值为true,如果你的数据当中有软连接文件,阿铭建议你设置成false。

Linux同步工具-

 max connections:指定最大的连接数,默认是0,即没有限制。

 read only ture|false:如果为true,则不能上传到该模块指定的路径下。

 list:表示当用户查询该服务器上的可用模块时,该模块是否被列出,设定为true则列出,false则隐  藏。

 uid/gid:指定传输文件时以哪个用户/组的身份传输。

 auth users:指定传输时要使用的用户名。

 secrets file:指定密码文件,该参数连同上面的参数如果不指定,则不使用密码验证。注意该密码  文件的权限一定要是600。格式:用户名:密码

 hosts allow:表示被允许连接该模块的主机,可以是IP或者网段,如果是多个,中间用空格隔开。 

 当设置了auth users和secrets file后,客户端连服务端也需要用用户名密码了,若想在命令行中带  上密码,可以设定一个密码文件

 rsync -avL test@192.168.133.130::test/test1/  /tmp/test8/ --password-file=/etc/pass 

 其中/etc/pass内容就是一个密码,权限要改为600


Linux系统日志


Linux系统总日志:/var/log/messages 可以用less查看一下

命令:/etc/logrotate.conf 日志切割配置文件

参考https://my.oschina.net/u/2000675/blog/908189

dmesg命令

/var/log/dmesg 日志,查看正确的登陆历史。

last命令,调用的文件/var/log/wtmp

lastb命令查看登录失败的用户,对应的文件时/var/log/btmp

/var/log/secure


screen工具


一个虚拟终端,为了不让一个任务意外中断

nohup command &

screen是一个虚拟终端

安装:yum install -y screen

screen直接回车就进入了虚拟终端

ctral a组合键再按d退出虚拟终端,但不是结束

列出来命令:screen -ls 查看虚拟终端列表

screen -r id 进入指定的终端

命令:screen -S aming 定义一个自定义名字

screen -r aming