1 | NAT:Network Address Translation |
1 | NAT:Network Address Translation |
本文有参考《Linux网络安全技术与实现(第2版)》,更多内容,可直接参阅原书。
icmp:Internet Control Message Protocol
第一次
第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SENT状态,等待服务器确认;SYN:同步序列编号(Synchronize Sequence Numbers)。
第二次
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成三次握手。
(1)客户端A发送一个FIN,用来关闭客户A到服务器B的数据传送(报文段4)。
(2)服务器B收到这个FIN,它发回一个ACK,确认序号为收到的序号加1(报文段5)。和SYN一样,一个FIN将占用一个序号。
(3)服务器B关闭与客户端A的连接,发送一个FIN给客户端A(报文段6)。
(4)客户端A发回ACK报文确认,并将确认序号设置为收到序号加1(报文段7)
Framework:
默认规则:
开放:堵
关闭:通
规则:匹配标准
IP:SIP,DTP
TCP:SPORT,DPORT
UDP:SPORT,DPORT
ICMP:icmp-type
数据报文过滤:
Linux2.0
ipfw/firewall
Linux2.2
ipchain/firewall
Linux2.4
iptables/netfilter
iptables在用户空间写规则,对应的是内核空间的netfilter,所以生效的也是netfilter。
hook function:钩子函数
prerouting
input
output
forward
postrouting
—>filter机制的结构图<—-
数据包传入—>路由表—>FORWARD链—>数据包传出
|–>INPUT链–>本机进程–>路由表–>OUTPUT链–>数据包传出
INPUT/OUTPUT:数据包进入主机时,该数据包即由“数据包传入”所标识的位置进入,接着被送入路由表,然后根据路由表的内容决定数据包传输的路径,假设传给本机的进程,因此,该数据包将会
被送入INPUT链,此时若INPUT链内的规则不允许该数据包进入,那么则会抛弃掉,同理,OUTPUT规定本机是否允许数据的传出,由此可以看到:INPUT/OUTPUT链机制是为了保护本机进程而设计的。
同时,这应该代表的是相同的一个接口。
FORWARD:在网关式防火墙中,防火墙部署在网关位置,当数据包要由另一个接口送出时,就会被送入FORWARD链,由此时FORWARD链内的规则决定是否允许数据包的命运~
规则链:
PREROUTING
INPUT
OUTPUT
FORWARD
POSTROUTING
filter(过滤):filter是netfilter最重要的机制,其任务是执行数据包的过滤操作,也就是起到防火墙的作用。
INPUT
OUTPUT
FORWARD
nat(地址转换):通俗讲,其功能就是IP分享器。
PREROUTING
POSTROUTING
OUTPUT
mangle(拆开/修改/封装):是一个很特殊的机制,可以通过mangle机制来修改经过防火墙内数据包的内容。
PREROUTING
INPUT
FORWARD
OUTPUT
POSTROUTING
raw():负责加快数据包穿过防火墙机制的速度,由此提高防火墙的性能。
PREROUTING
OUTPUT
iptables:四个表五个链
能否使用自定义链?
可以使用自定义链,但只在被调用时才能发挥作用,而且如果没有自定义链中的任何规则匹配,还应该有返回机制。
用可以删除自定义的空链
默认链无法删除
每个规则都有两个内置的计数器:
一个用来被匹配的报文个数 (9K)
一个被匹配的报文的体积大小之和(9K)
规则:匹配标准,处理动作
iptables -t TABLE COMMAND CHAIN [NUM]- 操作方式 -j 处理办法
-t:filter nat mangle raw,默认是filter表
操作方式:
-L:将所在的表内容列出
-A:在指定的链中添加新规则
-F:将所选择的表内容清除掉
-P:设置某个链的默认策略
匹配标准:
通用匹配
-s/–src :源地址
-d/–dst :目标地址
-p :协议{tcp|udp|icmp}
-i INTERFACE :指定数据报文流入的接口
可用于定义标准的链:PREROUTING,INPUT,FORWARD
-o INTERFACE :指定数据报文流出的接口
可用于定义标准的链:OUTPUT,POSTROUTING,FORWARD
扩展匹配
隐含扩展:不用特别指明由哪个模块进行的扩展,因为此时使用-p{tcp|udp|icmp}
显式扩展:必须指明由哪个模块进行的扩展,在iptables中使用-m选项可完成此功能
-j TARGET:
ACCEPT
DROP
REJECT
iptables -t filter -A INPUT -s 172.16.0.0/16 -d 172.16.100.7 -j DROP
192.168.100.8(CA)
1 | #cd /etc/pki/CA |
浏览器会提示这个证书不可靠
把CA的证书安装到客户端的主机上即可,并且把名字改为cacert.crt….
#加密傳輸:
更多強烈建議閱讀官方文檔
高級別加密
##以FastCGI来编译php
1 | #./configure --prefix=/usr/local/php --with-config-file-path=/etc --with-openssl --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config |
1 | cp php.ini-production /etc/php.ini |
配置php-fpm, 为php-fpm提供sysv.init脚本,并将其添加到服务列表:
1 | cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm |
为php-fpm提供配置文件:
1 | cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf |
编辑php-fpm的配置文件:
1 | # vi /usr/local/php/etc/php-fpm.conf |
配置fpm的相关选项为你所需要的值,并启用pid文件:
pm.max_children = 50
pm.start_servers = 5
pm.min_space_servers = 2
pm.max_space_servers = 8
pid = /usr/lcoal/php/var/run/php-fpm.pid
接下来就可以启动php-fpm了:
1 | service php-fpm start |
php-fpm 监听端口为9000;
3、启用httpd的相关模块
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
1 | # vi /etc/httpd/httpd.conf |
AddType application/x-httpd-php .php
Addtype application/x-httpd-php-source .phps
还有DirectoryIndex index.html改为index.php
(或者DirectoryIndex index.html index.php)
(二)、
配置虚拟主机支持使用fcgi
在相应的虚拟主机中添加类似如下两行:
ProxyRequests Off
ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/PATH/TO/DOCUMENT.ROOT/$1
如:
ProxyPassMatch ^/(.*.php)$ fcgi://127.0.0.1:9000/www/meiyun.com/$1
ProxyRequests Off:关闭正向代理;
ProxyPassMatch:把以.php结尾的文件请求发送到php-fpm进程,php-fpm至少需要知道
运行的目录和URL,所以这里直接在fcgi://127.0.0.1:9000后指明了
这两个参数,其他的参数的传递已经被mod_proxy_fcgi.so进行了封装,不需要手动指定;
例如:
<VirtualHost *:80>
DocumentRoot “www/unravel.com”
ServerName www.unravel.com
ProxyRequests Off
ProxyPassMatch ^/(.*.php)$ fcgi:127.0.0.1:9000/www/unravel.com/$1
<Directory “www/unravel.com”>
Options none
AllowOverride none
Require all granted
如果以FastCGI方式安装xcache,在安装上后service php-fpm restart即可。
最后说明:
1 | cp phpMyAdmin-version-all-language pma |
修改其中的随机数,可保证安全性。
1 | #!/bin/bash |
重启http,如果在phpinfo中显示有xcache,则显示成功安装。。
pmfind.net是一个比较方便的下载软件的网站
php-mbstring 用来表示中文和多字节的;
1 | #./configure --prefix=/usr/local/php --with-config-file-path=/etc --with-openssl --with-mysql=/usr/local/mysql --with-mysqli=/usr/local/mysql/bin/mysql_config |
说明:
1、为了支持apache的worker或event这两个MPM,编译使用了–enable-maintainer-zts;
2、如果使用了PHP5.3以上的版本,为了链接Mysql数据库,可以指定mysqlid,这样在本机就不需要先安装Mysql或者Mysql开发包了,
mysqlnd从PHP5.3开始使用,可以编译时绑定到它(而不用和具体的Mysql客户端库形成依赖),但从PHP5.4开始它就是默认的了;
1 | #./configure --with-mysql=mysqlnd --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd |
根据官网要求,安装目录必须是:/usr/local/mysql
说明,在解压后有一个INSTALL-BINARY打开后有安装步骤;
1 | #tar xf mysql**** -C /usr/local |
thread_concurrency=8 进程并发量(CPU*2)
添加:
datadir = /mydata/data(这个必须添加)##############
我在这都弄好后,遇到一个问题,就是以localhost登陆时,发现/tmp/mysql.sock没有找到,
我在my.cnf里填写位置为/tmp/mysql.sock/结果还是不对,不过我重启了下,输入mysql,然后设置
localhost密码,就可以登陆了;
如果敲mysql (commond not found)
1 | vim /etc/profile.d/mysql.sh |
Mysql:配置文件格式,集中式配置文件,可以为多个程序提供配置;
/etc/my.cnf
配置文件会找这些:
/etc/my.cnf –> /etc/mysql/my.cnf –> $BASEDIR/my.cnf –> ~/.my.cnf
SHOW DATABASES:多了一个数据库performance_schema;系统状态收集库;
Mysql服务器维护了两类变量:
服务器变量:
定义Mysql服务器运行属性;
SHOW GLOBAL VARIABLES [LIKE ‘datadir’];
状态变量:
保存了Mysql服务器运行统计数据;
SHOW GLOBAL STATUS [LIKE ‘STRING’];
安装顺序:
httpd —>MYSQL—–>php—–>Xcache
httpd:
apr: Apache Portable Runtime
apr是一个可移植运行库,通俗的说是一个虚拟机,只要安装上对应不同操作系统的apr,就能够使用httpd;
在linux系统中,默认安装了apr,但是有可能会遇到apr版本过低,以至于不能够使用最新版本的httpd;
所以可以下载手动编译安装apr,以支持最新的httpd;
httpd编译几大部分 最详细::http://httpd.apache.org/docs/2.4/programs/configure.html
#optionalfeatures
#
—->DSO
# 通俗的讲就是提供了模块化的方式以便使用什么模块;
#(at this point, you can specify which features you want included in Apache by enabling and disabling modules.
#Apache comes with a wide range of modules included by default.
#They will be compiled as shared objects (DSOs) which can be loaded or unloaded at runtime.
http://httpd.apache.org/docs/2.4/install.html
http://shineforever.blog.51cto.com/1429204/301247
if MPMs are built as DSO modules:
例:
–enable-mpms-shared=all 这个使用所有
–enable-mpms-shared=’prefork worker’
–with-mpm=event
这个会默认使用event模块;编译好后 httpd -l 查看;
static:
就是直接静态编译进系统,不能增减;
–enable-modules 一般这个是–enable-modules=most 表明启动很多常用模块,下如同;
–enable-mods-shared 这个是以DSO编译启用 ; –enable-mods-shared=most
–enable-mods-static这个是以static编译加入;
2. Third-party modules
–with-module=module-type:module-file[, module-type:module-file
Note
If you want to build a DSO module instead of a statically linked use (apxs).configure searches automatically for an installed zlib library ,if your source configuration requires one (e.g., when mod_deflate is enabled).
You can set the directory path to the compression library instead.
3. specific packages
–with-apr=DIR|FILE
–with-apr-util=DIR|FILE
–with-ssl=DIR
–with-z=DIR
为了确保开发环境已经装好
yum grouplist ; 列出当前系统已经安装的软件包组、可安装的软件包组; (说明:yum list是可安装的软件包)
1 | #yum groupinstall "Development tools" 确保开发工具包安装; |
apr–>apr-util–>httpd
(在这说句,如果你是直接拷贝这些源码包,如果时间来自未来,所以用hwclock -s 更新到现在时间)
1 | ./configure --help | less 查看帮助信息 |
添加PidFile = “/var/run/httpd.pid”
(說明,我在实验时可以不添加这一行)
#########################################################################
添加虚拟主机可以在/etc/httpd/extra/下创建;
然后在/etc/httpd/httpd.conf中把VirtualHost给启用;
vim /etc/profile.d/httpd.sh
export PATH=$PATH:/usr/local/apache/bin
重新登录即可。
如果想把event改为prefork.
注释掉:
#LoadModule mpm_event_module modules/mod_mpm_event.so
添加:
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
重启:
应该用下面命令来查看当前系统使用的模块。。
httpd -M
httpd 2.4新特性:
–prefix=/usr/local/apache 安装路径
–sysconfdir=/etc/httpd24 配置文件路径
–enable-so 允许运行时加载DSO模块
–enable-ssl 如果不加载将无法使用使用https
–enable-cgi 允许使用cgi脚本
–enable-cgid允许线程执行cgi脚本
–enable-rewrite 支持URL重写机制
–with-zlib 支持网络通用压缩库
–with-pcre 支持pcre 用pcre来解决C语言中使用正则表达式的问题
–with-apr=/usr/local/apr 指定apr的安装路径
–with-apr-util=/usr/local/apr-util/ 指定apr-util的安装路径
–enable-modules=most 启用大多数常用的模块
–enable-mpms-shared=all 启用MPM所有支持的模式
–with-mpm=event 默认使用enevt模式
##优化
http://www.jincon.com/archives/243/
yum install php-mysql
php和mysql
php连接mysql并获取数据测试:
编辑主页:
1 |
|
wordpress : 个人博客系统
phpmyadmin php-mcrypt
放在网页目录下:
#mv phpmyadmin-version-language pma
www.unravel.com/pma
discuz:
GBK
upload目录:
mv upload/* /www/b.net
vim /etc/httpd/httpd.conf
把这行注释掉,如果乱码:
#AddDefaultCharset UTF-8
把权限改一下:
结构化查询语言SQL(STRUCTURED QUERY LANGUAGE)是最重要的关系数据库操作语言,
并且它的影响已经超出数据库领域,得到其他领域的重视和采用,
如人工智能领域的数据检索,第四代软件开发工具中嵌入SQL的语言等;
Oracle,PL/SQL
SQL SERVER
软件包管理器特有的格式
通用二进制格式
源程序
mysql用户
mysql组
1
2#yum install mysql-server
#service mysqld start
5. mysql客户端:
交互式模式
批处理模式
1 | server mysqld start 第一次,看上面的就是初始化; |
rpm安装的mysql的文件在:/var/lib/mysql/mysql/
1 | #rpm -ql mysql-server | less |
可以看到mysql。。
mysql:
-u USERNAME不指明的话默认是root
-p passwd不指明的话默认是空密码
-h MYSQL_SERVER不指明的话默认是本地地址
用户:USERNAME@HOST
mysql -uroot -p -h 192.168.0.107这样登不上去,认为这是通过远程主机登陆
mysql -uroot -p -h 127.0.0.1 这样可以登上去,这个实在本地主机登陆
因为mysql的用户名应该是USERNAME@HOST
在linux上同一台主机上使用socket进行连接
/var/lib/mysql/mysql.sock 使用这种方式连接要快的多;
不在同一个主机上,就要使用tcp协议进行连接;
在windows上使用共享memory进行连接;
mysql> SHOW DATABASES;
显示当前的数据库:
information_schema位于内存中;
mysql
test
如果在/var/lib/mysql/中创建一个文件,再用SHOW DATABASES看时,
就会多一个数据库;
设置客户端默认使用的一个数据库;
USE db-name;
例如:
USE mytext;
## 关系数据库对象
2. DDL(数据模式定义语言):
CREATE
ALTER
DROP
3. DML(数据操作语言):
INSERT
UPDATE
DELETE
4. DCL(数据控制语言):
GRANT
REVOKE
CREATE DATABASE db_name;
CREATE DATABASE IF NOT EXISTS db_name;
CREATE DATABASE mytest;
DROP TABLE,是从数据库中删除表。删除后,表结构不在存在,无法再对该表进行任何操作。
DROP DATABASE db-name;
—->DROP DATABASE mytest2;
3. 创建表
CREATE TABLE db_name(col1,col2,…);
USE mytest;设置客户端默认使用的数据库;
(如果不是这样操作,就要CREATE TABLE mytext.students() ) Gender性别
CREATE TABLE students(Name CHAR(20)NOT NULL,Age TINYINT UNSIGNED,Gender CHAR(1) NOT NULL);
如果出现错误,第一检查语法是否有问题,第二:我在创建mytest这个数据库的时候,是用root,默认的用户和用户组不属于mysql,
所以应该把用户和用户组改为mysql; chown mysql:mysql /mytest;
+ 查看库中的表:
SHOW TABLES FROM DB_NAME;
—-> SHOW students;
+ 查看表的结构:
DESC TABLE tb_name;
DESC students;
help ALTER TABLE 可获取关于table的帮助;
+ 修改表:
ALTER TABLE tb_name;ALTER TABLE students;向右增加一列;
ALTER TABLE students ADD course VARCHAR(100);增加一行course的;
MODIFY; 修改内容;
CHANGE; ALTER TABLE students CHANGE course COURSE VARCHAR(100)AFTER Name 改变名称;
ADD;
DROP;
1 | INSERT INTO tb_name(col1,col2,...) VALUES|('STRING,NUM,....'); |
2. 创建用户
1 | CREATE USER 'USERNAME'@'HOST' IDENTIFIED BY 'PASSWORD'; |
1 | DROP USER 'USERNAME'@'HOST'; |
SELECT * FROM tech WHERE Gender=’Female’;
SELECT * FROM tech WHERE Age>20;
UPDATE tech SET Course=’Kuihua Baodian’WHERE Name=’Zhu Ziliu’;
DELETE FROM tech WHERE Age <=19;
GRANT ALL PRIVILEGES ON testdb.* to testuser@’%’;
1 | mysql>USE mysql; |
root localhost *08E080RERFJA030030JFAFJ3IFADFA343424;
为用户设定密码:
1 | 1. mysql>SET PASSWORD FOR 'root'@'localhost'=PASSWORD('new-password'); |
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true