iptables(一)链、表的简介和表的基本操作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iptables(一)链、表的简介和表的基本操作相关的知识,希望对你有一定的参考价值。
参考技术A PREROUTING链——对数据包作路由选择前应用此链中的规则(所有的数据包进来的时侯都先由这个链处理)
INPUT链——进来的数据包应用此规则链中的策略
OUTPUT链——外出的数据包应用此规则链中的策略
FORWARD链——转发数据包时应用此规则链中的策略
POSTROUTING链——对数据包作路由选择后应用此链中的规则(所有的数据包出来的时侯都先由这个链处理)
filter表——用于存放所有与防火墙相关操作的默认表。通常用于过滤数据包。
nat表——用于网络地址转换
mangle表——用于处理数据包
raw表——用于配置数据包,raw 中的数据包不会被系统跟踪。
PREROUTING: raw -> mangle -> nat
INPUT: mangle -> filter
FORWARD: mangle -> filter
OUTPUT: raw -> mangle -> nat -> filter
POSTROUTING: mangle -> nat
raw 表:PREROUTING,OUTPUT
mangle表:PREROUTING,INPUT,FORWARD,OUTPUT,POSTROUTING
nat 表:PREROUTING,OUTPUT,POSTROUTING
filter 表:INPUT,FORWARD,OUTPUT
ACCEPT: 允许数据包通过
DROP:直接丢弃数据包,不给任何回应信息
REJECT:拒绝数据包通过,需要时会给数据发送端一个相应信息
SNAT:原地址转换,解决内网用户用同一个公网地址上网的问题
MASQUERADE:是 SNAT 的一种特殊形式,适用于动态的、临时会变的 ip 上
DNAT:目标地址转换
REDIRECT:在本机做端口映射
LOG:在/var/log/messages 文件中记录日志信息。然后将数据包传递给下一条规则。也就是只记录不做任何操作。
示例:
比如,我想要将主动连接22号端口的报文的相关信息都记录到日志中,并且把这类记录命名为"want-in-from-port-22",则可以使用如下命令
如果公网IP是动态获取的,不是固定的,则可以使用MASQUERADE进行动态的SNAT操作。
查看表中规则 iptables -t table_name -L [chain_name]
示例:
上面示例可以看到有哪些链是支持过滤的
在不指定表时默认查询 filter 表 iptables -L [chain_name] (注意大小写)
示例:
示例:
这个时候在192.168.55.132这个主机上 ping 测试机是不通的。此时在表的首部在添加一个允许的操作
这个时候在192.168.55.132这个主机上 ping 测试机发现可以 ping 通
所以规则的顺序很重要
示例:
示例:
关于链默认规则说明
不能省略 -s 如果省略效果如下
source 变为0.0.0.0/0 表示所有网段都被 ACCEPT
示例
默认情况下添加的规则都是临时的,当重启 iptables 或者重启系统时规则将丢失
示例:
MySQL数据库和表的基本操作
文章目录
一、数据库的基础知识
背景知识
MySQL是一个客户端服务器结构的程序
主动发送数据的这一方,客户端(client)
被动接受数据的这一方,服务器(server)
客户端给服务器发送的数据叫做: 请求(request)
服务器给客户端发送的数据叫做: 响应(response)
客户端和服务器之间是通过网络进行通信的
服务器是存储数据的主体(数据是存储在主机的硬盘上的)
服务器当中存放多个数据库,每个数据库当中又可以存放多张表,每张表中又存储各自的数据
数据库能够正常使用的前提条件是客户端与服务器是建立连接的
数据库的基本操作
1.显示所有数据库
show databases;
这里databases后面是加s的,因为是所有数据库
2.创建数据库
create database [if not exists] DB_name [charset charset_name] [ collate collate_name]
这里中括号所包含的都是可加可不加的,自己按具体情况选择。
这里我们看到Query OK,证明我们成功创建了一个名为test的数据库。
当我们再次创建test数据库时,系统报了一个错误(database exists),证明这个数据库已经存在。这时候我们就可以加一个判断( if not exists)
这里我们我们再次创建这个重复的数据库,发现系统并没有报错,而是告诉了一个警告。我们可以去看一下这个警告信息
这里我们可以发现报的是(database exists)的警告。这里大家就要注意了,错误和警告不是一个重量级的,在适当的时候我们可以加上(if not exists)来避免这些错误的出现。
CHARACTER SET: 指定数据库采用的字符集
字符集指的是某个范围字符的编码规则
1.比如utf8字符集对于所有中文汉字采用3个字节来表示(编码),所以我们称utf8为一种字符集。
这里的范围就是指所有的中文汉字
编码规则就是指 都采用3个字节来表示一个汉字
2.比如ASCII字符集对于所有英文字母采用1个字节来表示(编码),所以我们称ASCII为一种字符集。
这里的范围就是指所有的英文字母
编码规则就是指 都采用1个字节来表示一个字母
Mysql中的utf8是伪utf8,当有些不满足时,可以替换为更全面的utf8bm4
COLLATE通常是和数据编码(CHARSET)相关的,一般来说每种CHARSET都有多种它所支持的COLLATE,并且每种CHARSET都指定一种COLLATE为默认值。例如Latin1编码的默认COLLATE为latin1_swedish_ci,GBK编码的默认COLLATE为gbk_chinese_ci,utf8mb4编码的默认值为utf8mb4_general_ci。
3.使用数据库
当我们要对一个数据库进行操作时,那么这时我们得使用这个数据库。
use DB_name;
4.删除数据库
删除数据库是一件十分危险的事情,大家在进行删库的时候一定要慎重再慎重
drop database DB_name;
但是如果删的库,服务器中不存在,那么就会报错误
这时我们可以在数据库名前面加一判断
drop database [if exists] test;
这时我们可以发现,即使该数据库服务器中不存在,只是报了一个警告
二、数据类型
我们在学习MySQL数据类型时,会发现有些数据类型设计的并不好,和java有一些区别,这是因为MySQL这里语言比较久远了,那时还没有Java这样语言,那个时候能够设计出来这样已经很厉害啦。
字符串类型
数据类型 | 大小 | 说明 | 对应java类型 |
---|---|---|---|
varchar(size) | 0 - 65535 字节 | 可变长度字符串 | String |
text | 0 - 65535 字节 | 长文本数据 | String |
mediumtext | 0 -16777215 字节 | 中等长度文本数据 | String |
blod | 0 - 65535 字节 | 二进制长文本数据 | byte[ ] |
varchar(size):最常用的字符串的类型,带一个参数参数,这里表示存储的最大限度,varchar(50)表示这列最多存50个字符,至于这个size设置为多少,根据实际需求来制定,并不是size订多少就直接分配多少,而是动态分配,但是最大不会超过size。
text,mediumtext:适用于比较长的字符串,比较存储一篇长文等,应用较少
bold:主要是用来存储二进制的数据。
数值类型
数据类型 | 大小 | 说明 | 对应java类型 |
---|---|---|---|
bit(M) | M指定位数,默认为1 | 二进制数 | 常用boolean对应bit |
tinyint | 1字节 | byte | |
smallint | 2字节 | short | |
int | 4字节 | Integer | |
bigint | 8字节 | Long | |
float(M,D) | 4字节 | 单精度,M为长度,D为小数位数,会丢失精度 | Float |
double(M,D) | 8字节 | 双精度,M为长度,D为小数位数,会丢失精度 | Double |
decimal(M,D) | M/D最大值+2 | 双精度,M为长度,D为小数位数,精确数值 | BigDecimal |
numeric(M,D) | M/D最大值+2 | 双精度,M为长度,D为小数位数,精确数值 | BigDecimal |
数值类型可以指定为无符号(unsigned),不去取负数。
尽量不使用unsigned,对于int类型可能存放不下的数据,int unsigned同样可能存放不下,与其如此,还不如设计时,将int类型提升为bigint类型。
float,double:并不适合用来需要精确存储的数据,因为IEEE 754标准,数据在内存中的存储就决定了无法精确表示数据。
decimal: 可以精确的表示浮点数,因为它牺牲了空间和运算速度,换来的是更精确的表示方法。
最常用的数值类型: int,double,decimal
日期类型
数据类型 | 大小 | 说明 | 对应java类型 |
---|---|---|---|
datetime | 8字节 | 范围从1000-9999年,不会进行检索及转换 | java.util.Date、java.sql.Timestamp |
timestamp | 4字节 | 范围从1970 - 2038年,自动检索当前时区并转换 | java.util.Date、java.sql.Timestamp |
在表中插入时的类型为: ‘xxxx-xx-xx xx:xx:xx’
timestamp: 这个类型有点危险,将在2038年耗尽
三、表的基本操作
在进行任何数据库的表时,都需要先使用该数据库
use DB_name;
创建表
create table table_name(
filed1 type [comment xx,
filed2 type [comment xx,
filed3 type [comment xx
);
comment为可增加解释字段
在这里我们以创建一个学生表为例:
create table student(
id int comment '学号',
name varchar(50),
age int
);
查看表结构
desc table_name;
desc的全拼为describle.
这里我们可以查看表的结构。
查看所有表
可以查看当前数据库下的所有表
show tables;
因为当前数据库我们只创建了一个student的表。
删除表
删除表结构和删除数据库操作都是非常危险的使用的时候都要小心再小心
drop table table_name;
以上是关于iptables(一)链、表的简介和表的基本操作的主要内容,如果未能解决你的问题,请参考以下文章