linux基础
部署linux系统
以下以contos系统为例
1、linux系列
- Debain 平台——代表Ubuntu(图形化界面/桌面,kail系统)
- Fedora平台——代表 RedHat、contos(服务器类)
2、linux运行级别
- 切换命令格式:init [级别]
- 级别:
- 0:关机
- 1:单用户模式
- 2:无网络的支持多用户模式
- 3:有网络的支持多用户模式
- 4:保留、未使用
- 5:有网络支持,且有图形化界面的多用户模式
- 6:重启
3、远程连接linux服务器
-
ssh:ssh协议(secure shell)由IETF的网络小组(Network working Group)所制定。ssh为建立在应用层基础上的安全协议。ssh是目前较可靠、专为远程登录会话和其他网络服务提供安全性的协议。
-
注:linux系统默认未安装ssh服务,需要我们使用代码手动安装
sudo yun install openssh #安装 sudo systemctl start sshd #启动服务
-
windows:非服务器系统一般无ssh服务(win10及以上自带),可下载第三方软件使用ssh服务。例如:Finalshell、gitbash、xshell
Linux基本使用
一、linux系统软件安装
1、软件管理命令分类
- Debian——ubantu操作系统:
- dakg 指令:安装离线包
- apt 指令:在线安装
- Fedora——RedHat、centos系统:
- rpm 指令:安转离线包
- yum 指令:在线安装
2、rpm
- rpm是“Red—Hat Pack Manager"的简写,为Red Hat专门开发的套件管理系统,方便软件安装、更新及移除。所有源自Red-Hat的”linux“发行版都可以使用rpm
- 详解: -qpi 确认软件作用 ,-qpl 确认软件安装路径
- rpm -ivh <.rpm file name> #安装.rpm后缀名的软件包,并显示安装详情。
- rpm -e #删除指定的软件
- rpm -qa #列出电脑上安装的所有软件包
3、yum
-
yum(全称为:Yellow dog updater,modified)是 一个 在Fedora和RedHat以及centos中的shell前端软件包管理器,能够从指定的服务器自动下载rpm包并安装,可以自动处理依赖关系,并且一次性安装所有的服务器自动下载rpm包并且安装,可以自动处理依赖关系,并且一次性安装所有依赖的软件包,无需频繁地一次次下载安装。
-
详解:
yum search <packagename> #搜索软件包,例:yum search python yum list installed #列出已近安装的软件包 yum remove #用来移除软件包 yum update <packagename> #更新软件包 yum check-update #检查更新 yum info (packagename) #列出指定软件包详情
4、yum与rpm区别
yum是基于rpm的,它的功能更加强大:
场景 | rpm | yum |
---|---|---|
离线的.rpm安装包 | 能安装,但不能自动下载并安装依赖 | 能安装,并且能够自动下载安装依赖 |
在线安装 | 不支持,只能离线安装本地包 | 支持在线下载安装 |
二、linux文件系统
1、概述
不同于windows系统有盘符的概念,linux只有一个盘符,是从“/"(根目录)开始的,只有它才是没有上级目录的。如果直接把整个应用系统看成一个树形结构,”/“表示相当于这个树形结构的根,我们可以将”/"称之为根目录。
2、linux目录结构
/ #系统根目录
/bin #包括了一些二进制文件,即可执行文件,我们在命令行里执行的指令。ls、rm等,都是二进制文件
/boot #系统启动时相关所需的文件
/dev #设备文件,其中许多都是在启动是或运行时生成的。
/etc #用来存放所有的系统管理所需的配置文件和子目录
/home #用户的主(家)目录,每一个用户都有自己的目录,所有的用户都存在home目录中
/lib #用来存放系统最基本的动态连接共享库,几乎所有的引用程序都需要用到这些共享库
/lost+found #这个目录一般情况下是空的,当系统非法关机后,这里会存放一些没来得及保存的文件
/media #linux自动识别的一些设备,比如U盘、光驱等,当识别后linux会把识别的设备挂载到这个目录下
/mnt #系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将光盘挂载到/mnt上,进入目录 #就可查看光盘内容了。
/pot #给额外安装软件所提供的目录。比如你安装一个oracle数据库就可以把它放在这个目录下
/proc #虚拟目录,它是系统内存的映射,可以通过直接访问这个目录来获取系统信息。
/root #超级用户目录(管理员家目录)
/run #是一个临时文件,存放系统启动以来的信息,当系统重启时,这个目录下的文件会被删除。
/sbin #超级用户使用的命令存放目录
/srv #存放一些服务启动之后需要提取得数据
/sys #映射内核设备
/tmp #存放临时文件
/usr #非常重要的目录,用来存放用户安装的应用程序和用户文件
/var #经常修改的数据,比如程序运行时的日志文件
注意:
以“.”开头的是隐藏文件。
“./”表示的是当前目录,“../”表示的是上级目录
“~”表示的当前用户的家目录
3、文件目录操作的常规指令
- 常用指令
pwn #查看当前工作目录
cd #切换工作目录。. 表示当前目录, ..表示上级目录,~当前用户家目录, /表示根目录
注意:使用cd命令时,不指定目标地址,会自动切换到家目录
凡是以“/”开头的目录都是绝对目录
凡是以“.”或“..”开头的目录都是相对目录
ls #查看指定目录的内容,不指定目录时查看当前工作目录
ls命令选项:
-a #用来显示所有的文件(夹)包括隐藏的。
-h #人性化格式显示,易于人读。如K/G/M
-l #用来显示文件夹的详细信息
alias #给命令起别名,不添加参数表示列出所有别名
例:
起别名:alias md=mkdir
删别名:unalias md
- linux下文件表示含义
示例:drwxrwxr-x 2 chris chris 4096 3月 10 14:48 ddd
第一个字母表示文件类型:
#d表示是一个文件夹,-表示它是一个普通文件,l表示一个链接(类似于快捷方式)
"rwxrwxr-x" #表示权限,九个字母,三个字母一组分别表示所有者,所属组名和其他权限
#r:读取,w:写入,x:执行权限,-:表示没有权限
'2' #如果是一个文件夹,表示这个文件夹里有几个子文件夹。
#如果是一个文件,表示文件硬连接的个数
'chris' #第一个表示所有者,第二个表示所有者所属的组
'4096' #w文件夹都显示4096,文件则显示其大小
'3月 10 14:28' #最后一次修改时间
'ddd' #文件(夹)名
注意:
ls -l 选项显示结果:类型及权限|连接数|用户|用户组|大小|月|日|年/时间|名称
文件类型:-l 显示结果中的第一部分的第一列
连接数:若是文件,表示这个文件有多少名字(硬连接,类似于快捷方式)。若是文件夹表示其子文件夹数
文件类型:
- #普通文件,包括纯文本(ASCLL)、二进制文件(binary)、数据格式的文件(data)、各种压缩文件
d #目录文件(文件夹)
l #链接文件,类似于windows中快捷方式
c #字符设备文件,即串行端口的接口设备,例:键盘
b #块设备文件。存数据供系统存取的接口设备,如硬盘
s #套接字文件。常用于网络数据连接,最常在/var/run目录中看到这类文件
p #管道文件。它主要目的是,解决多个程序同时存取一个文件所造成的错误
4、文件和目录的创建删除
touch #新建文件,可以是多个
rm #删除文件或目录(删除目录时要传递"-r"选项)
cp #拷贝文件或目录(拷贝目录要传递"-r"选项)
mv #移动文件或目录
mkdir #创建目录,可以是多个
rmdir #删除空目录
注意:
-r #删除或拷贝目录时添加,表示递归操作
-f #表强制操作,无提示信息
. #表示模糊匹配。如:"rm .py"表示删除所有.py文件
-p #创建目录若需要中间目录,可添此项。例:mkdir -p a/b/c
5、查看文件
cat #从上到下,显示文件全部内容
tac #从下到上,显示文件全部内容
head #查看开头指定行数的内容,不指定默认10行
tail #查看文件末尾指定行数内容,不指定默认10行
nl #功能与cat相同,但多显示行号
wc #统计显示内容:行数、单词数、字符数、文件名
more #一点一点查看内容
less #一点一点查看内容
注意:moer/less 使用说明
作用:显示一屏就停止,q退出查看,enter下翻一行,空格下翻一屏。
区别:more 查看完毕会自动退出,less不会。
less可以使用上下按钮上下翻看,more不可以
经常结合管道符使用:ls /etc |more
#补充,debain系统中一些命令:比如kail
diff #用于比较文件差异
file #查看文件类型
find #查找文件,常用于查找一般文件
locat #查找文件,常用于查找一般文件
which #在环境变量$PATH设置的目录中查找文件
whereis #用于查找特定文件,比如二进制文件、源码等
man #查看帮助
6、补充信息
-
电脑信息
- 硬盘信息:fdisk -l ===> linux中一切皆文件:/dev/sda 操作系统中第一块硬盘。(文件名)sd(硬盘类型)a(第一块)
- 内存大小:cat /pra/meminfo
- cpu型号:cat /proc/cpuinfo
- 关机:poweroff,重启:reboot
-
文件高亮
蓝色 #目录 墨色 #普通文件 浅蓝色 #符号链接(快捷方式) 黑底黄字 #设备文件 绿色 #可执行文件 红色 #压缩包 紫色 #图片、模块文件
三、vim编辑器
1、概述
-
vim是一个类于vi的著名的且功能强大、高度可定制的文本编辑器,在vi的基础上改进和增加了很多特性
-
安装:sudo yum install vim (在root权限下则无需sudo)
-
vim三种工作模式:命令模式、插入模式、底线命令模式。
插入模式—ESC—>命令模式 —ESC—> 底线命令模式
注意:!v:打开最后使用vim打开的文件。vim filename:打开/新建一个文件
2、vim三种工作模式
-
命令模式:按ESC键切换进入,打开文件初始模式
ZZ(shift+zz) #保存退出 光标定位: vim filename+n #打开文件定位到尾行 gg #定位到首行 G #定位到尾行 ngg #定位到第n行 ^/0 #定位到行首 $ #定位到行尾 k #光标上移 j #光标下移 h #光标左移 l #光标右移 ctrl+f #下翻一页 ctrl+b #上翻一页 ctrl+d #下翻半页 ctrl+u #上翻半页 内容处理 x #向右删除一个字符 nx #向右删除n个字符,n表示个数 X #向左删除一个字符 nX #向左删除n个字符 dd #删除光标所在行 ndd #删除光标开始的第n行 p #粘贴剪切板中的内容 yy #复制光标所在行 nyy #复制光标开始的n行 u #撤销 ctrl+r #反撤销
-
插入模式(输入模式)
i #在光标位置插入(进入插入模式) l #在第一个非空字符插入 a #在光标的下一个字符插入 A #在行尾插入 o #在光标所在行下面插入空行 O #在光标所在的行上面插入空行 s #删除光标所在字符,并进入插入模式 S #删除光标所在行,并进入插入模式
-
底线命令模式(编辑模式):在命令模式下按":"键进入编辑模式
:w #保存 :q #退出 :wq #保存并退出 :x #保存并退出 :w! #强制保存 :q! #强制退出,不保存修改 :e! #放弃修改,恢复到修改前状态 :w newfile #文件另存为 :set nu[mber] #显示行号 :set nonu[mber] #隐藏行号 :set tabstop=4 #设置一个tab缩进4个字符 :set nouse=a #启用鼠标的点击功能 [:]/内容 #查找指定内容,n下翻,N上翻 [:]?内容 #查找指定内容,N下翻,n上翻 :%s/原内容/新内容[g] #(默认只替换一处)所有行内容替换,g表示全局 :m,ns/原内容/新内容[g]#m到n行内容替换,g表示全局 :n #将光标定位到第几行,n表示行号 注意:若非正常关闭vim,可能会产生临时的交换文件,再次打开时会出现特定的界面,可以把根据提示进 行内容的恢复以及交换文件的删除,也可以手动将交换文件删除,下次就ok了,交换文件是隐藏的.
3、vim配置
-
vim配置文件:打开文件后的配置是临时的,关闭后就失效了。
-
配置方法一
直接修改 /etc/vim/vimrc 文件。(vim 安装后的默认配置对所有账户有效,不推荐)
-
配置方法二
在用户家目录创建一个文件.vimrc(一般自带这个文件)。将vim相关配置命令写入文件中。若文件未生效,需要重新加载一次。source ~/.vimrc
-
-
配置命令详解
set nocompatible #关闭vi兼容模式。 set laststatus=2 #显示状态栏(默认值为1,无法显示状态栏) set number #显示行号 set cursorline #突出显示当前行 set ruler #打开状态栏标尺 set shifwidth=4 #设定<< 和 >> 命令移动时的宽度为4 set softtabstop=4 #使得按退格键时可以一次删掉4个空格 set nobackup #覆盖文件时不备份 set autochdir #自动切换当前目录为当前文件所在的目录 filetype plugin indent on #开启插件 set backupcopy=yes #设置备份文件时的行为覆盖 set ignorecase smartcase #搜索时忽略大小写,但在有一个或以上大写字母时仍然保持 #对大小写的敏感 set nowrapscan #禁止在搜索到文件两端时重新搜索 set incsearch #输入搜索内容时就显示搜索结果 set hlsearch #搜索时高亮显示被找到的文本 set noerrorbells #关闭错误信息响铃 set novisualbell #关闭使用可视响铃代替呼叫 set t_vb= #置空错误铃声的终端代码 set showmath #插入括号时,短暂地跳转到匹配的对应括号 set matchtime=2 #短暂跳转到匹配括号的时间 set magic #设置魔术 set hidden #允许在有未保存的修改时切换到缓冲区,此时的修改有vim负责保存 set guioptions-=T #隐藏工具栏。 set guioptions-=m #隐藏菜单栏 set smartindent #开启新行时使用智能自动缩进 set backspace=indent、eol,start #不设定在插入状态无法用退格键和delete键来删除回车符 set cmdheight=1 #设定命令行的行数为1
四、文件压缩与解压
1、压缩文件类型及命令
-
zip/unzip,文件后缀名为.zip
压缩:zip 123.zip *.txt #将所有的txt文件压缩成123.zip文件
zip -r test.zip test #将test文件夹打包成test.zip
解压:unzip 123.zip
-
gzip/gunzip,文件后缀名为gz
压缩:gzip 1.txt #将1.txt压缩成1.txt.gz
gzip -r test #将test文件夹里的每一个文件都打包成.gz文件
解压:gunzip 1.txt.gz
gunzip -d test.gz
-
bzip2/buzip2,文件后缀名是.bz2
压缩:bzip 1.txt #将1.txt压缩成1.txt.bz2
解压:bunzip 1.txt.bz2
bzip -d 1.txt.bz2
bzip2 -dk 1.txt.bz2 #解压1.txt.bz2文件,并保留1.txt.bz2
注意:
无论是gzip,还是bzip2,都无法很方便的压缩和解压文件夹。
2、打包工具tar
-
tar:打包解包工具,后缀名是tar。可以理解为对目录、文件夹解压。
-
选项:
-c #创建新的打包文件 -x #解包 -t #不解包查看文件。注意:以上三个功能不能同时使用,因为功能冲突。 -v #显示详细信息 -f #指定操作文件 -z #调用gzip/gunzip进行解压操作,后缀名是.tar、.gz -j #调用gzip2/bunzip2进行压缩解压操作,后缀名.tar、.bz2
-
示例:
tar -cvf test.tar test #将test文件夹打包成test.tar文件,并显示打包信息。 tar -cvf 123.tar 1.txt 2.txt 3.txt #将1.txt、2.txt、3.txt文件打包到123.tar文件 tar -tf 123.tar #不解包查看123.tar文件里的内容 tar -zcvf/-jcvf 12.tar.gz/12.tar.bz2 1.txt 2.txt #将1.txt、2.txt 压缩包并打包成12.tar.gz/12.tar.bz2 tar -zxvf/-jxvf 12.tar.gz/12.tar.bz22 #解压并解包12.tar.gz/12.tar.bz2文件
-
注意:
tar只是用来打包和解包的工具,它本身是没有压缩和解压缩的功能。但是通过添加参数,可以调用gzip或者bzip2进行解压、压缩操作。
tar -z #使用gzip方式打包文件,后缀名为.tar.gz可简写为.tgz
tar -j #使用bzip方式打包并压缩文件,后缀名为.tar.bzip2,可简写.tbz2或.tbz
示例:tar -zcf <生成的目录压缩包.tar.gz> <需要打包的目录绝对路径>
linux账户安全
一、用户管理
1、相关命令
whoami #查看当前登录的用户名
useradd #新建目录
#-d:指定家目录,-m:创建家目录,-s:指定shell
userdel #删除用户,-r会删除用户家目录
passwd #设置指定用户的密码。没有指定用户,是修改当前用户的密码。
su - #切换用户,一定要加上“-”,否则只会切换家目录,但是环境没有切换,不指定用户是默 #认切换到root用户(记得给先给root用户设密码)
sudo #以指定用户(root)身份执行命令,放于命令前
visudo #专门用于编辑/etc/sudoers文件的命令,需要将指定用户添加进去才可以使用sudo
groupadd #新建用户组
groupdel #删除用户组
gpasswd #向指定组添加/删除指定的用户。gpasswd -a/-d user group
groups #查看指定用户组信息
chsh #修改指定用户的shell解析器,如:禁止test登录
#sudo chsh test -s /user/sbin/nologin
chown #修改文件所属用户[及用户组]:如:sudo chown test[:test] <文件名>
#递归操作时需要加上“-R”选项
chgrp #修改文件所属用户组。如:sudo chgrp test(用户组) <文件名时>
#补充,debain系统中一些命令:比如kail
who #显示系统中有那些使用者
w #显示登入用户信息
2、涉及文件
-
/etc/passwd:系统中的用户信息
用户信息格式:chirs:X:1000:1000:ubantun:/home/chris:/bin/bash
- chirs:注册名(logi_name),用于区分不同的用户
- x:口令,系统用口令来验证用户的合法性。现在的unix/linux系统中,口令不在直接保存在passwd文件中,通常将passwd文件中的口令字段使用一个“x"替代,架构/etc/passwd作为真正的口令文件,用于保存包括个人口令在内的数据。
- 1000:1000用户标识符(uid),是linux系统中唯一的用户标识,用于区分不同用户
- 1000:组织标识号(gid),具有相似属性的多个用户可以被分配到同一个组内,每个组都有自己的组名,且以自己的组表示号相区分。
- ubantu:用户名(user_name):包含有关用户的一些信息,如用户的真实姓名、办公室地址。在linnux系统中,mail和finger等程序利用这些信息来标识系统用户。
- /home/chirs:用户主目录/家目录(home_directory),该字段定义了个人用户的主目录,当用户登录后,他的shell将把该目录作为用户的工作目录。
- /bin/bash:命令解释程序(shell)
-
/etc/group:系统中用户信息
用户信息格式:sudo:X:27:chirs
-
/etc/shadow
- 账户名:账户名与/etc/passwd里的账户名一一对应关系。
- 密码:空表示密码为空,不需要输入密码即登录。星号代表账号被锁定,单引号表示未设置密码,双引号表示这个密码已经过期,$包裹1表明是用MD5加密的、包裹2表示用Blowfish加密的、包裹5表示使用sha-256加密、6表示sha-512加密。
- 修改日期:这个是表明上次修改密码的日期与1970.1.1相距的天数。
- 密码不可改的天数:假如这个数字是8,则8天内不可修改密码,若是0,则随时可以修改。
- 密码需要修改的期限:如果是99999则永远不用改,若是10000则距1970.1.1 10000天内可改密码。否则无效。
- 修改期限前N天发出警告。
- 密码过期的宽限:密码过期后,在过期宽限这几天是可以修改密码的,改后可继续使用。
- 账号失效日期:距1970.1.1相距天数
- 保留:被保留,暂时未被用上。
4、相关名词
- uid:用户唯一标识
- gid:用户组唯一标识组
5、示例
groupadd -g 1000 class1 #建立名为class1的组,组id为1000
useradd -u 600 -g 1000 -G 2000 tom usermod
#建立tom用户基本组为class1组,附加组为class2组,tom用户uid为600(前提:已建立id为2000的 class2组)
useradd -u 250 -m -s/bin/nologin tsetuser
#建例一个uid为250,用户名为testuser,无家目录。
passwd -L/-u 用户名
#为tom用户设置密码为123,并设定密码最长有效期为90天,将密码锁定,使其无法登录。
-s查看命令状态,-L锁定,-u解锁。
二、权限管理
1、概述
- 在Linux下,所有文件都涉及权限,分为三组:所有者、所属组、其他
- 权限:所有文件的权限可分为:可读(r)、可写(w)、可执行(x),“-”表示无权限。
- 原理:ls -L 的结果,三位一组,则好对应:所有者、所属组、其他
- 修改权限:chmod,格式:chmod [身份] [操作] [权限] 文件
2、相关选项
-
身份
u #所有者(user) g #所有组(group) o #其他(other) a #所有者(all)
-
操作
+ #添加 - #去掉 = #设置 示例:给其他用户添加写权限 sudo chmod o+w 文件名
3、权限值
-
r=4,w=2,x=1
-
默认权限:文件=664,文件夹=775
-
umask命令用来查看问价(夹)默认权限,默认值0002
-
本质:使用一组(3位)八进制的数据来表示权限,如:0755展开如下:
- 转换为二进制:0755 => 111 101 101
- 对应三组身份:所有者、所属者、其他
- 每一组的权限:都包括可读、可写、可执行
- 示例解析:所有者可读可写可执行;所属组可读可写可执行,其他可读可执行
- 简化操作:sudo chmod 0755 <文件名> ,若进行递归操作,添加“-r"操作。
-
umask
- 作用:用来限定新建文件的默认权限,权限与该值相反
- 命令:umask [value] ,查看或设置掩码。
- 分析:掩码:0002 ==> 000 000 010
- 最高权限
- 目录:777
- 文件夹:666
- 新建文件(夹)权限(默认)
- 新建目录(文件夹):111 111 101
- 新建文件:110 110 100
- 默认权限=最高权限-掩码
-
补充
-
粘滞位权限,符号:t 1
粘滞位针对目录赋权,目录中创建的文件只有创建者可删除。
-
sgid 权限,符号:s 2
针对目录建立的权限,在该目录中建立的文件所属 组继承父目录的属性。
-
suid权限,符号:s 4
针对可执行文件建立,谁运行该文件谁就具有该文件所属者的权限。注:若vim运用有较大风险。
-
注意:“1”、“2”、“3” 位于3位权限之前,例:1777
-
4、修改属性:chattr
不在允许添加新用户:锁定/etc/passwd、/etc/shadow => chattr+i <文件> ·····
#i为锁定、不再允许更改属性
改默认密码有效期:/etc/login.defs ==> pass_MAX_DAYS=······
linux环境搭建与shell编程
一、Nginx安装与配置
1、概述
Nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器;同时也是一个IMAP、POP3、SMTP代理服务器;Nginx可以作为一个HTTP服务器进行网站的发布处理,另外Nginx可以作为反向代理进行负载均衡的实现。
2、使用源码安装软件
-
基本步骤
配置:configure ----> 编译 :make -----> 安装:make install
-
执行命令
命令1;命令2 #执行命令1,执行命令2,无论命令1是否执行成功
命令1||命令2 #先执行命令1,命令1失败才会执行命令2
命令1&&命令2 #先执行命令1,命令1成功才会执行命令2
-
具体步骤
-
使用wget命令下载Nginx源码,下载地址:http://nginx.org/doenload/nginx1.16.0.tar.gz
-
解压软件压缩包:tar -zxvf nginx-1.16.0.tar.gz
-
编译前执行配置文件:./configure
示例:./configure --prefix=/usr/local/nginx #-prefix:用来配置Nginx服务器的安装目录(指定安装路径) #配置出错是因为缺少相关的依赖库或者编译器,生成一个marefile文件 #执行configure,未安装依赖会失效,安转好后,重新执行 #需要安装相关的依赖: #sudo yun install gcc-c++ pcre pcre-devel zilb zlib-devel openssl_devel #运行make&&mare install 命令来编译并安装软件
-
-
Nginx介绍
- 配置文件都在/usr/local/nginx目录下
- 进入到usr/local/nginx/sbin 安装目录,使用./nginx 命令来启动nginx
- html:默认站点目录
- 测试:浏览器输入公网ip,看到welcome to nginx 表成功。
3、使用yum在线安装
- 步骤
- sudo yum install nginx 安装
- sudo systemctl start nginx 启动服务
- ps -auxlgrep nginx
- 客户端就可以在浏览器里通过ip地址直接访问到服务器
- 配置文件的存放路径
- whereis nginx #查找和nginx相关的文件。
- 在/etc/nginx/nginx.config 文件里存放了nginx的配置信息。
- 在这个配置文件里,有两个配置很重要:
- listen 80 default_server #设置监听端口
- root /usr/share/nginx/html #静态页面的存放路径
二、python的安装
1、概述
centos自带python2版本,而我们日常开发使用最多的却是python3版本,使用centos的yum直接安装python3 会报错,因为python3不在centos的默认配置里,这种情况下,可以使用以下两种方法安装python3.
2、使用EPEL安装
EPEL即Extra Packags for Enterprise linux的简称,是企业级linux提供的一组高质量的额外的软件包。在这个额外的软件包里,我们能使用yum命令找到python3:
- 使用sudo yum install epel_release #命令安装epel拓展软件包
- 使用sudo yum install python3 #安装python3版本
3、使用源码安装
步骤:
- 使用wget命令下载Python3.7的源文件:wge https://www.python.org/ftp/python/3.7.5/python-3.7.5.tgz
- 使用tar命令解压下载后的压缩包:tar -zxvf python3.7.5.tgz
- 进入到解压的文件夹,运行 yum -y install zlib -devel ······· ·安装依赖
- 运行 sudo make & sudo make install 命令,安装python。
- 运行 ln -s /usr/local/bin/python3.7. /usr/bin/python3 命令,在/usr/bin 目录下建立python3.7的软连接。
- 运行python3命令可以打开python3.7(上一步类似于windows创建桌面快捷方式)
三、管理虚拟环境
1、概述
和其他大多数现代编程语言一样,python对包和模块的下载,存储以及管理有其自己的一套方法。python的包一般存在这几个地方,使用sys可以查看python包和模块的存放路径。
import sys [' ',
print(sys.path) ====> '/usr/lib/python3.6.zip',
·····
·····]
结果可以列出python里查找包或模块时的所有可用路径,其中’ '表示的是当前项目的目录,一般情况下,我们需要关注的是使用pip install 下载的第三方资源包。这个第三方资源包被存放在了’/usr/local/lib/python3.6/dist-Packages’目录下。但当我们同时开发多个工程时,不同的工程会将第三方的包存放在相同的路径下,这意味着,如果有两个工程依赖同一种包但需要的版本不同时,由于python无法根据版本来区分安装路径,所以这里就会发生版本冲突。
2、virtualenv
-
virtualenv是一个创建隔绝的python环境的工具。virtualenv创建一个包含所有必要的可执行文件的文件夹用来使用python工程所需的包
-
相关命令
sudo pip install virtualenv #安装virtualenv cd my_project #进入到工程的工作目录 virtuelenv test #创建虚拟环境,命名为test,此时会在my_project下多出一个test文件夹 source test /bin/activate #激活虚拟环境,此时,如果使用pip install安装的插件都会 #安装到当前环境 pip install flask #测试安装flask,flask会被安装到当前虚拟环境。
3、virtualenvwrapper
-
安装及配置
sudo pip install virtualenvwrapper 配置:在~/.bashrc 添加下列内容 ==> 开机自动执行 export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 export WORKON_HOME=~/.envs sourse /usr/local/bin/virtualenvwrapper.sh 手动执行:soure ~/.bashrc
-
相关命令
mkvirtualenv test #创建并切换到test虚拟环境 deactivate #离开test虚拟环境 rmvirtualenv test #删除test虚拟环境 workon demo #切换到demo虚拟环境
四、服务监听
类似于windows系统里的任务管理器。
1、netstat
-
用来监听网络连接状态
-
参数:
-a #显示所有socket,包括正在监听的 -n #以网络ip地址代替名称,显示网络连接情形。 -o #显示与网络计时器相关的信息 -t #显示TCP协议的连接情况 -u #显示UDP协议的连接情况 -p #显示连接相关的程序和PID
2、ps
- 作用:查看进程信息
- 命令:
- ps -ef
- ps -aux
- 证明:经常在查询进程时结合grep进程过滤
3、pstree
使用树形结构查看进程信息
4、kill
- 杀死进程:kill PID
- 强制杀死:kill -g PID
五、管道和重定向操作符
1、管道
-
管道的操作符是“|”,它只能处理经由前面一个指令传出的正确输出信息,然后传递给下一个命令,作为下一个命令的标准输入。例如:ps -eflmore
-
注意:
-
管道命令只能处理前一个命令的正确输出,不能处理错误输出。
-
管道命令的右边命令,必须要能够接收标准的输入流才行。
-
有些命令无法接收输入流,需要通过 xargs来将输入流转换为命令行参数:
例:find -name 2.txt | xargs -rf
-
2、重定向
-
标准输入(stdin)、标准输出(stdout)、标准错误(stderr)
-
在linux中,创建任意进程,系统会自动创建上面三个数据流,其实就是三个文件
-
三个文件的描述符分别是:0、1、2 ,其中0默认指向键盘,1和2默认指向终端窗口。
-
重定向就是改变原来默认的表现位置。
-
示例:
输出重定向: ls > 1.txt #会创建新文件,若文件存在会覆盖。 ls >> 1.txt #追加至文件末尾,不存在则创建。 错误重定向: ls /xxx 2 > 1.txt #将标准错误重定向到1.txt 同时重定向输出和错误: ls /xxx /home & > 1.txt #将标准输出和错误同时重定向到1.txt
六、shell编程
1、概述
通过shell中的各种命令,开发者和运维人员可以对服务器进行维护工作。但每次手动输入命令,工作效率太低,而且很容易出错,尤其是需要维护大量服务时。将命令写入文件,批量执行这种文件便是shell脚本。
shell脚本一般以.sh结尾,当然,也可以省略拓展名。
2、shell脚本首行
-
脚本文件第一行通过注释的方式指明执行脚本的程序。以#!开头,#开头的文本是注释。
-
常见方式有:
#!/bin/sh #!/bin/bash #!/usr/bin/env bash 示例:python脚本的第一句为:#!/usr/bin/env python
-
注意:linux中所有程序执行结束后都有状态码,零代表正常,正整数代表异常退出,通过echo$?查看(有的脚本需要写exit 0)
-
执行脚本的的命令:bash、source、./(可执行文件)
3、变量
-
定义
变量定义与其他脚本差距不大,需要注意的是赋值前后没有空格。例:a=123 #符号前后无空格
-
使用
使用变量时,变量名前加上$符。
echo $a #输出a值
-
shell全局变量
定义:export abc=987654321 注意:定义后,用soure执行执行脚本才生效。
-
系统环境变量
$PATH #可执行文件目录 $PWD #当前目录 $HOME #家目录 $USER #当前用户名 $UID #当前用户的uid
4、获取输入
例:
read -p "请输入一个数字:" num
echo "您输入的是:$num"
5、脚本引号
-
反引号:里面的内容会被解析成为脚本。
例:echo 'ls -a /home/chris' #打印 /home/chirs 目录下所有文件和文件夹。
-
双引号:它里面的大部分内容会被原样显示,但如果是有个变量,则会被接解析
例: name=zhangsan echo "大家好,我是$name" #大家好,我是zhangsan
-
单引号:它里面的内容会完全原样的输出,即使是变量,也不会被解析。
6、脚本里的$
-
${var}用来获取一个变量的值,var为变量名 。一般情况下大括号可以省略不写。
-
特殊变量:
$# #代表传入的参数的个数 $@ #代表传入参数的列表 $0 #代表脚本本身 $1 #代表传入的第一个参数,$2、$3、$4····以此类推 $* #以字符串的方式显示所有传入的参数 $$ #脚本运行的进程ID $? #显示最后命令的退出状况,表示没有错误
-
$(命令)用来执行括号里的脚本命令,相当于使用反引号。
-
$((expression))用来计算数字表达式,expression的值。
例:echo $((1+1)) #2
7、if语句
-
格式
if <命令1>;then #if语句检查判断依据是其后面所跟命令的状态码:0为true,其他值为False <命令2> elif <命令1>;then <命令2> else <命令1> fi
-
条件测试命令:[······]
-
shell 提供了一种专用做条件测试的语句[·········]
-
这一对方括号本质上是一种命令,里面的条件是其参数。所以 [ 的后面和 ] 的前面必须有空格否则会报错。
-
它可进行三种比较:数值、字符串、文件
if [ <比较命令> ];then <命令> fi
-
-
条件列表
-
数值比较
-eq #等于 -ge #大于等于 -gt #大于 -le #小于等于 -lt #小于 -ne #不等于
-
字符串比较
= #比较两字符串是否相同 != #检查是否不同 < #小于,a<b:a是否小于b > #大于 -n <字符串> #检查字符串长度是否非0 -z <字体> #检查字符串长度是否为0
-
文件比较
-d file #文件夹是否存在且是一个目录 -e file #文件是否存在 -f file #文件是否存在且是一个文件 -r file #文件是否存在且可读 -w file #文件是否存在并可写 -x file #文件是否存在并可执行 -s file #文件是否存在并非空 -o file #检查文件是否存在并且与当前用户相同 file1 -nt file2 #file1是否为file2新 file1 -ot file2 #file1是否为file2旧
-
8、case语句
语法:
case "$var" in
条件1)
命令1
;;
条件2)
命令2
;;
·····
esac
示例:
read -p "输入数字" num
case $num in
0)
echo 星期日
;;
·····
9、循环语句
shell中的循环结构有三种:for、while 和 until
-
for循环
语法: for <变量> in <序列> do <命令> done 示例: for i in 'seq 1 10' #1到10序列 do if[ $[ $i%2 ] ==0 ] then <命令> else <命令> fi done
-
C语言风格
语法:for 循环的C语言风格语法 for((i=0;i<10;i++)) do <命令> done
-
while循环
语法: while <条件> do <语句> #例如:let sum++ done
10、函数
-
函数:将一部分代码存储到一个变量中。函数调用时直接写函数名,无须括号
-
定义函数
语法: function <函数名>(){ #注意:function 不是必须,可省略 ···· ···· } 示例:设计一个函数A,运行时屏幕输出OK。 A(){··· ····· } #以大括号结束
-
使用
在终端或脚本中直接输入函数名即可,不需要小括号。
例: <函数名> 参数1 参数2 ······
11、数组
shell语言仅支持一维数组
-
定义:用括号表示,空格隔开。
<数组名>=(value1 ····· vluen) 可直接使用下标定义: <数组名>[0]=值1
-
修改:可直接使用下标修改。
<函数名>[0]=新值
-
获取数组里数据
${<数组名>[序号]}
-
获取数组所有数据及长度
获取数组所有数据(两种方法): ${<数组名>[*]} ${<数组名>[@]} 获取数组长度(两种方法): ${#<数组名>[*]} ${#<数组名>[@]}
-
循环
for i in ${<数组名>[*]}
网络配置与日志审计
一、网络配置
1、查看网络配置信息
ip addr #插看网络设备信息
#网卡:eth0/1 ,0表示第一块网卡,1表示第二块,以此类推。
service NetworkManager stop #关闭网络管理服务
chkconfig --level 345 NetworkManage off #在3、4、5级别下关闭
2、配置网络地址
ip addr add <ip地址> <子网掩码> dev eth0/1 #添加网络地址配置,del为删除配置
示例:
ip addr add 192.168.1.21/24 dev eth0/1 #简写,/24表示子网掩码(255.255.255.0)
启动网卡:
ip link set eth0/1 up
添加路由表/网关:
ip route add default via <网关> dev eth0/1
DNS配置:
在 /etc/resolv.conf #DNS解析文件
添加:nameserver <DNS服务器ip>
3、通过配置文件配置网络
当服务器重启后,配置仍生效。
-
配置文件位置:/etc/sysconfig/network-scripts/
-
网卡配置文件: ifcfg-eth0、ifcfg-eth1
-
相关命令:
启动:ifdown eth0/1 关闭:ifup eth0/1 配置文件相关配置: DEVLCE = eth0 #网卡设备名 TYPE = Ethernet #类型 ONBOOT = yes #是否允许network服务管理该文件 BOOTPROTO = static #静态获取ip,也可以设置为DHCP IPADDR =<ip地址> NETMASK = <子网掩码> GATEWAY = <网关> /etc/init.d/network restart #重启network服务,使配置生效。
4、linux路由
-
linux可以充当路由器,须先打开其路由器功能。
-
启动步骤
编辑 /etc/sysctl.conf 文件 改 net.ipv4.ip_forward=1 sysctl -p #启动路由器功能
二、日志管理与应急分析
1、日志文件
liunx系统所有日志文件存放在/var目录下
2、日志分类
- 系统日志:messages 文件
- 登录日志:secure 文件
- 程序日志
3、日志管理服务
-
配置文件:/etc/rsyslog.conf
-
日志触发事件级别(从最不重要到最重要)
man rsyslog.conf #查看帮助 日志触发事件: debug、info、notice、warning、warn、err、error······emerg、panic 触发示例: logger -p authpriv.emerg "==test==" [命令] [操作项] [服务名称].[级别] "触发内容"
4、日志服务器与异地备份
-
客户机配置(须备份的主机)
修改日志配置文件 /etc/rsyslog.config begin forwarding rule #修改转发规则 添加转发命令: *.*@@ <日志服务器ip>:[端口号] #*.* 代表 任意服务类型.任意级别 重启服务: service rsyslog restart
-
日志服务器配置
修改日志配置文件 /etc/rsyslog.conf MODULES #修改功能模块接收规则 添加接收规则命令: $ModLoad imtcp $InputTcpServerRum[514] #端口号默认为514 修改"begin forwarding rule" :fromhost_ip,isqual,"需备份主机ip" [日志存放路径] 重启服务: service rsyslog restart 检查端口: ss -antpl | grep 514
lamp安全配置
一、Apache
1、概述
- Apache是一个网络社区,旗下软件HTTP十分出名,人们常称之为Apache
- lamp平台:linux apache mysql php
2、搭建http服务
-
安装Apache并启动服务(httpd)
service httpd start
-
验证服务启动
ss -antpl | grep 80
-
http主页建立
- 文件位置:/var/www/html
- 建立html文件,作为主页(idex.html)
3、Apache主配置文件
-
位置: /etc/httpd/conf/httpd.conf
-
配置文件重要信息
ServerRoot "httpd软件安装路径" Listen 80 #开启端口号 DocumentRoot "默认主页存放位置" Options Indexes FollowSymLinks #共享目录功能。漏洞,删除Indexes共享服务即解决漏洞
二、访问控制设定
1、httpd 功能配置区
<Directory "/var/www/html">
··········各种设置··········
</Directory>
2、设置访问控制
默认设定:
#contrds who can get stuff from this server
Order allow,deny
Allow from all
修改:
例:仅允许192.168.1.2主机访问主页
Order allow,denny
Allow from 192.168.1.2 #白名单,改为192.168.1. 代表该网段。
Order deny,allow
Deny from 192.168.1.2 #黑名单(不允许访问)
3、禁止匿名访问
-
对页面加密,须使用户名和密码
-
建立访问用户及密码
htpasswd -c /etc/httpd/conf/httpuser tom #执行后输入密码 用户文件存放路径 用户名
-
访问验证配置
配置文件位置:/etc/httpd/conf/httpd.conf 配置命令: authtype basic #认证类型 authname "please input username and password" authuserfile /etc/httpd/conf/httpuser #建立的访问用户文件路径,用以验证 require valid-user #固定形式:仅有效用户可访问 建议:验证文件(用以访问的用户文件)所属者为Apache,且仅Apache可读
三、lamp平台搭建
前提:linux、Apache已搭建
1、安装mysql并配置
-
安转:
yum install mysql-server -y(y选项表示确定安装)
-
启动:
service mysqld start
-
设置数据库用户管理员和root用户密码
mysqladmin -u root -p password "密码" Enter password #弹出确定旧密码,无则回车
2、安装php并配置
-
安装:yum install PHP
-
安装插件:php-mysql、php-mbsring
-
配置php
-
配置文件位置:/etc/php.ini
-
开启短标记功能:
short_open_tag = off #改为on
-
编辑php文件:xxx.php
短标记格式: <? phpinfo(); #函数语句 ?>
-
lnmp安全配置
lnmp平台。n代表nginx,nginx是一个轻量级web软件。支持庞大的并发访问。
一、Nginx
1、nginx的安装配置
注意:编译前确保已存在开发环境软件包(依赖)
yum -y install pcre-devel zlib-devel #安装依赖
useradd -M -s /sbin/nologin nginx #创建运行用户和组
#编译安装:
tar zxf ginx-1.6.0.tar.gz
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx
make && make install
#启用
/usr/local/nginx/sbin/nginx #启动脚本,-t选项可检查配置文件错误
#停用
./nginx -s stop
2、主配置文件
nginx.conf 主配置文件:全局配置、1/0事件、HTTP配置
-
全局配置
#user nobody; #运行用户如果未指定 worker_processes 1; #工作进程数(根据cpu核心数设定) #error_log logs/error_log; #错误日志的文件配置 #pid logs/nginx.pid; #pid文件处理
-
1/0事件配置
events{ user epoll; #使用模型类型 worker_connections 4096; #每个进程处理4096连接 }
-
HTTP配置
http{ include mime.types; #文件拓展名与文件类型映射表 default_type application/octet-stream; #默认文件类型 sendfile on; #支持文件发送、下载 keepalive_timeout 65 #连接保持超时时间,单位s server{ listen 80; server_name www.test.com #网站名称 location/{ #定义安装目录为软件根目录 root html; #网页存放目录 index index.html index.htm #默认索引页 } error_page 500 502 503 504 /50x.html; #内部错误反抗页面 location=/50x.html{ #错误页面配置 root html; } } }
二、php安装与配置(详解)
1、安转php解析环境
源码安装,yum直接安装安转请查看lamp平台搭建——安装php并配置
#解包
tar xf php-5.3.28.tar
#安装依赖
yum istall -y libxml2-devel libjpeg-devel libpng-devel
#配置:
./configure --prefix=/usr/local/php5 --with-gd --with-zlib
--with-config-file-path=/usr/local/php5 --with-gd --with-mbstring
--enable-fpm --with-jpg-dir=/usr/lib
#编译:
make && make install
2、配置文件及命令路径优化
- 建立配置文件
yum remove phpmore php-cli
cp php.ini-development /usr/local/php5/php.ini
vim php.ini
开启短标记(php语句)功能:short_open_tag=on
#创建链接(类似桌面快捷方式)
ln -s /usr/local/php5/bin/*/uer/sbin/
ln -s ··············/sbin/*/usr/sbin/
-
php启动与配置
#启动: cd /usr/local/php5/etc/ cp php-fpm.conf.default ==改为==> php-fpm.conf #建立启动配置文件 php-fpm #查看启动状态: ss -anptl | grep 9000 #默认监听端口为9000
-
实现php解析
#修改nginx配置文件使其调用php-fpm进程 server{ ··········· location ~\.php$ { root /usr/local/nginx/html; #php网页根目录 fastcgi pass 127.0.0.1:9000; #php-fpm的监听地址 fastcgi index index.php; #php首页文件 include fastcgi.conf; #调用fastcgi配置文件 } }
三、Tomcat
Tomcat为apach下一款java web应用软件
1、Tomcat的部署
-
安装Tomcat
例: tar xf apache-tomcat-7.0.54.tar.gz mv apache-tomcat-7.0.54 /usr/local/tomcat7 #文件启命名
-
启动Tomcat
tomcat启动关闭脚本/tomcat/bin目录下 #启动 ./startup.sh #关闭 shutdown.sh 注意:tomcat前提是有java环境 命令:java -version #验证查看主机java环境 无环境则下载java解析器:JDK
-
验证启动状态
ss -anptl | grep 8080 #默认端口为8080
2、Tomcat目录介绍
目录位置:/usr/local/tomcat
-bin #存放启动和关闭Tomact的脚本
-config #存放Tomcat全局配置文件
-lib #存放Tomcat需要的库文件
-logs #日志文件
-work #jsp编译产生的class文件
-webapps #主页存放目录,/usr/local/tomcat7/webapps/ROOT 为默认主页存放位置
示例:首页文件:index.jsp
<%@page language="java" import="java.util*" PageEncoding="utf-8"%>
<html>
··········
</html>
四、负载均衡
1、N+T负载均衡架构
一台Tomcat站点可能出现故障等问题,不能单独应用于生产环境,需要一套可靠的web站点架构。利用nginx反向代理搭配多台Tomcat服务主机可以构成负载均衡的站点架构。
架构示意图:
======>tomcat
Nginx =====> 交换机 =
(调度作用) =======>tomcat #架构中服务器处于同于网段
其中,nginx具有支持大量并发访问并具有调度能力,本身不做web解析。分配请求给其他Tomcat服务器,调度分配服务器资源以均衡负载。
2、nginx反向代理
例:利用nginx反向代理两个Tomcat站点实现负载均衡。
#安装反向代理:
./configure --prefix=/usr/local/nginx --user=nginx
--group=nginx --with-file-aio --with-http_stub_status_module
--with-http_gzip_static_module --with-http_flv_module
--with-http_ssl_module
#命令解析
user,group #指定用户名和组
with-file-aio #启用文件修改
with-http_stub_status_module#启用状态统计
with-http_gzip_static_module#启用gzip静态解压
with-http_flv_module #启用flv模块
with-http_ssl_module #启用ssl模块
3、配置nginx
修改配置文件:nginx.conf
#http{·····}第一个大括号处加入:
upstream tomccat server{ #自定义调度服务名
server 172.16.0.100:8080 weight=1; #可供nginx调配的服务器主机
server 172.16.0.200:8080 weight=1; #注意:weight为权重值,表优先级
}
在http区域location{·····}加入
#配置反向代理
proxy pass http://tomcat server
防火墙技术与应用
一、iptables包过滤
1、iptables工具
- 用于控制数据包的处理,有4个功能表。
- raw表、mangle表,用于数据流量的跟踪和整形,使用较少。
- NAT表。网络地址转换。
- filter表。过滤,类似于windows防火墙,可编写规律对数据包过滤、处理。
2、filter表
-
在filter表中规则优先级自上而下降低,注意 -I、-A选项的使用。
-
filter表查看命令:
iptables -t filter -nvl #n代表数字显示ip,v代表详细信息,l列出。
-
chain(链)
- 每个表都有专门写规则的地方,即chain(链)
- filter表含三个链:
- INPUT #入站规则链
- FORWARD #转发规则链(当源地址及目标地址都不是本机地址)
- OUTPUT #出站规则
示例:
FORWARD:pkts bytes target port opt in out source destination
包 字节 处理方法 协议 网口进出
例Ping包:4 248 REJET(拒绝)all -- * * 原地址 目标地址
注意:
watch -n 1 iptables -t filter -nvl #每隔1s执行一遍“1”后面命令
3、配置入站规则
-
命令格式
iptables [-t表名] 选项 [链名] [条件] [-j 控制类型] 例:iptables [-t filter] -I [IPUT] [-P icmp] [-j REJECT]
-
注意事项
- 不指定表名时,默认指filter表。
- 不指定链名时,默认指表内的所有链。
- 除非设置链的默认策略,否则必须指定匹配条件。
- 选项、链名、控制类型使用大写字母,其余均小写。
4、数据包常见控制类型
- ACCEPT:允许通过
- DROP:直接丢弃,不给出任何回应
- REJET:拒绝通过,必要时会给出提示
- LOG:记录日志信息,然后付给下一条规则继续匹配
5、常见管理选项
-
添加新的规则
-A #在链的末尾追加一条规则 -I #在链的开关(或指定序号)插入一条规则。 例:#-p(小写p)指定协议 iptables -t filter -A INPUT -p tcp -j ACCEPT iptables -I INPUT -p udp -j ACCEPT iptables -I INPUT 2 -p icmp -j ACCEPT
-
查看规则
-l #列出所有的规则条目 -n #以数字形式显示地址、端口等信息 -v #以更详细的方式显示规则信息 -line-numbers #查看规则时,显示规则符号(序号)
-
删除、清空规则
-D #删除链内指定序号(或内容)的一条规则。 -F #清空所有的规则 例:iptables -D FORWARD 2 #2表示规则序号
-
设置默认策略
-P(大写) #为指定链设置默认规则 例:#注意:默认规则只能是DROP 或者 ACCEPT。 iptables -t filter -P FORWARD DROP iptables -P OUTPUT ACCEPT
6、规则的匹配条件
-
通用匹配
-
可直接使用,不依赖于其他条件或拓展
-
包括网络协议、IP地址、网络接口等条件
#常见的通用匹配 -p 协议名 #协议匹配 -s 源地址 -d 目标地址 #地址匹配 -i 入站网卡 -o 出站网卡(端口) #接口匹配
-
-
隐含匹配
-
要求以特定的协议匹配作为前提
-
包括端口、tcp标记、icmp类型等条件
#常见隐含匹配条件 --sport 源端口 --dport 目的端口 #端口匹配 --tcp-flags 检查范围 #TCP标记匹配 --icmp-type ICMP类型 #ICMP类型匹配 例: iptables -A INPUT -p icmp --icmp-type 8 -j DROP iptables -A INPUT -p tcp --dport 20;21 -j ACCEPT
-
-
显示匹配
-
要求以“-m拓展模块”的形式明确指出类型
-
包括多端口、MAC地址、ip范围、数据包状态等条件
#常见显示匹配条件 -m multiport --sport 源端口列表 -m multiport --dport 目的端口列表 #多端口匹配 -m iprange --src-range ip范围 #ip范围匹配 -m mac --mac-source MAC地址 #MAC地址匹配 -m state --state 连接状态 #状态匹配
-
7、规则的备份及还原
-
导出(备份)规则
- iptables-save工具
- 可结合重定向输出保存到指定文件 ==> iptables-save > /opt/iprules_all.txt
-
还原
导入:iptables-save < /opt/iprules_all.txt
service iptables save #设置为默认规则永久有效
二、网络地址转换(NAT表)
1、NAT表
注意:配置规则时应该注意filter表中的FORWAOD链
-
查看NAT表规则
iptables -t NAT -nvl
-
chain(链)
PREROUTING #路由前链 POSTROUTING #路由后链 OUTPUT #出站链 规则格式:pakts bytes target port opt in out soure destination
2、源地址转换SNAT
-
添加规则示例:命令与与filter表类似
示例: iptables -t nat -A POSTROUTING -p tcp -o eth1 -s 源地址 -j SNAT --to-source 网关地址 #网关地址为出私网ip地址
-
当网关地址会变化时:
iptables -t nat -A POSTROUTING -p tcp -o eth1 -s 源地址 -j MASQUUERADE
3、目标地址转换DNAT
添加规则示例:
iptables -t nat -I PREROUTING -i eth1 -d 网关地址 -p tcp --dport 网关转换端口 -j DNAT
--to-destination 目标地址及端口
图示:
数据包 ====> nat PREROUTING ===符合DNAT> filter FORWARD(转发)
|
不符合
|
v
filter INPUT