CENTOS7 NGINX YUM安装 CERTBOT

安装CERTBOT
yum install yum-utils
yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optional
yum install certbot-nginx

获取网站证书
certbot certonly --webroot -w /www/phpker.com -d phpker.com -d www.phpker.com

NGINX配置
listen 443;
ssl on;
ssl_certificate /etc/letsencrypt/live/phpker.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/phpker.com/privkey.pem;

更新证书(加入cron计划)
certbot renew

CENTOS 7.X使用YUM安装LNMP运行环境

一、NGINX
准备
yum install epel-release
安装
yum install nginx
启动
systemctl start nginx
systemctl enable nginx

防火墙设置
firewall-cmd --permanent --zone=public --add-service=http
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload

二、MARIADB
安装
yum install mariadb mariadb-server
启动
systemctl start mariadb
systemctl enable mariadb

安全设置
mysql_secure_installation

三、MYSQL8(坑多,不建议安装)

准备
rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
安装
yum install mysql-community-server
密码
grep 'temporary password' /var/log/mysqld.log
启动
systemctl start mysqld
systemctl enable mysqld

四、PHP7.2
准备
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm
rpm -Uvh remi-release-7.rpm epel-release-latest-7.noarch.rpm
yum install yum-utils
yum-config-manager --enable remi-php72

安装
yum install php-fpm php-common
yum install php-opcache php-pecl-apcu php-cli php-pear php-pdo php-mysqlnd php-pecl-redis php-pecl-memcache php-pecl-memcached php-gd php-mbstring php-mcrypt php-tidy php-xml

启动
systemctl start php-fpm
systemctl enable php-fpm

使用openssl生成双向加密证书

要生成证书的目录下建立几个文件和文件夹,有
./demoCA/
./demoCA/newcerts/
./demoCA/private/
./demoCA/index.txt (空文件,生成证书时会将数据记录写入)
./demoCA/serial (在serial文件中写入第一个序列号“01”,在生成证书时会以此递增)
概念:首先要有一个根证书,然后用根证书来签发用户证书。
用户进行证书申请:一般先生成一个私钥,然后用私钥生成证书请求(证书请求里应含有公钥信息),再利用证书服务器的根证书来签发证书。
特别说明:
(1)自签名证书(一般用于顶级证书、根证书): 证书的名称和认证机构的名称相同.
(2)根证书:根证书是CA认证中心给自己颁发的证书,是信任链的起始点。安装根证书意味着对这个CA认证中心的信任
数字证书则是由证书认证机构(CA)对证书申请者真实身份验证之后,用CA的根证书对申请人的一些基本信息以及申请人的公钥进行签名(相当于加盖发证书机构的公章)后形成的一个数字文件。数字证书包含证书中所标识的实体的公钥(就是说你的证书里有你的公钥),由于证书将公钥与特定的个人匹配,并且该证书的真实性由颁发机构保证(就是说可以让大家相信你的证书是真的),因此,数字证书为如何找到用户的公钥并知道它是否有效这一问题提供了解决方案。
openssl中有如下后缀名的文件
.key格式:私有的密钥
.csr格式:证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写
.crt格式:证书文件,certificate的缩写
.crl格式:证书吊销列表,Certificate Revocation List的缩写
.pem格式:用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式

常用证书协议
x509v3: IETF的证书标准
x.500:目录的标准
SCEP: 简单证书申请协议,用http来进行申请,数据有PKCS#7封装,数据其实格式也是PKCS#10的
PKCS#7: 是封装数据的标准,可以放置证书和一些请求信息
PKCS#10: 用于离线证书申请的证书申请的数据格式,注意数据包是使用PKCS#7封装这个数据
PKCS#12: 用于一个单一文件中交换公共和私有对象,就是公钥,私钥和证书,这些信息进行打包,加密放在存储目录中,CISCO放在NVRAM中,用户可以导出,以防证书服务器挂掉可以进行相应恢复。思科是.p12,微软是.pfx

再说步骤:
生成CA私钥–》生成CA证书请求–》自签名得到根证书(CA给自已颁发的证书)
生成私钥–》生成证书请求–》通过CA签名得到证书
—————————————————————————————-
1.生成X509格式的CA自签名证书
$openssl req -new -x509 -keyout ca.key -out ca.crt -days 3650
$openssl rsa -in ca.key -out ca.key.unsecure -days 3650 //生成一个不需要口令保护的私钥,不推荐,可以于去除密码
* 对已生成csr请求的证书进行自签名的无交互全自动命令:
$openssl -x509 -req -in csr/ca.csr -out newcerts/ca-cert.pem -signkey private/ca-key.pem -passin pass:999999 -days 3650

2.生成服务端的私钥(key文件)及csr 文件
$openssl genrsa -des3 -out server.key 2048
[无交互全自动:$openssl genrsa -des3 -passout pass:111111 -out server.key 2048]
$openssl req -new -key server.key -out server.csr
[无交互全自动:$openssl req -new -passin pass:111111 -key server.key -out server.csr -subj “/C=CN/ST=Guangdong/L=Shenzhen/O=atco company/OU=IT/CN=it.atco.com/emailAddress=atco@163.com”]

3.生成客户端的私钥(key文件)及csr文件
$openssl genrsa -des3 -out client.key 2048
[无交互全自动:$openssl genrsa -des3 -passout pass:111111 -out client.key 2048]
$openssl req -new -key client.key -out client.csr
[无交互全自动:$openssl req -new -passin pass:111111 -key client.key -out client.csr -subj “/C=CN/ST=Guangdong/L=Shenzhen/O=atco company/OU=IT/CN=it.atco.com/emailAddress=atco@163.com”]

4.用生成的CA的证书为刚才生成的server.csr,client.csr文件签名
$openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -days 3650
$openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -days 3650
[无交互全自动:$openssl ca -key 999999 -in client.csr -out client.crt -config conf\openssl.cnf -batch]
(说明:ca私钥及证书位置在conf\openssl.cnf中指定,设置好了可不带-config参数,-key为ca私钥密码,-in为待签名证书申请文件,-out为输出证书文件,-batch表示输出无需人工干预,注意一个证书不可被签名多次,因为index文件中有记录,在此生成的.crt也可换成其它如.pem格式证书)
*进行CA签名获取证书时,需要注意国家、省、单位需要与CA证书相同,否则会报:
The countryName field needed to be the same in the CA certificate (cn) and the request (sh)
*进行CA签名获取证书时,如果信息完全和已有证书信息相同会报错,即不能生成相同的证书,报错信息为:
failed to update database
TXT_DB error number 2
*在进行CA签名获取证书时,可对证书的有效起止时间作控制,默认有效期是一年,可用-days 3650这样的方式改为10年,如想更精确控制,可使用-startdate 和-enddate参数,如-startdate 120501000000Z -enddate 120601000000Z,日期格式为yyMMddHHmmssZ,分别表示年,月,日,时, 分,秒. 其中”Z”是遗留自初始的UTCTIME. 如果没有”Z”,就允许两种附加组”[+/-]hh ‘mm'”,其中”hh”和”mm”分别为与GMT的时差和分差. 如果有”Z”,则时间是以Zulu或GMT时间表示.注:如出现:unable to access the ./demoCA/newcerts directory
这时可找到配置文件,一般是openssl.cnf,修改配置文件项为你生成证书的路径
[ CA_default ]
dir = C:\\OpenSSL\\bin\\demoCA (原值是:./demoCA,注意路径用双斜杠)

5. 生成p12格式证书 (思科是.p12,微软是.pfx)
$openssl pkcs12 -export -inkey client.key -in client.crt -out client.pfx
$openssl pkcs12 -export -inkey server.key -in server.crt -out server.pfx
[无交互全自动:$openssl pkcs12 -export -clcerts -in client.pem -inkey client.key -passin pass:111111 -out client.p12 -passout pass:111111]
说明:-in 为欲转换为p12文件的证书文件,-inkey为与转换为p12文件的证书私钥文件,-passin 为私钥文件密码,-out为p12文件,-passout为p12文件打开密码

6.生成pem格式证书
有时需要用到pem格式的证书,可以用以下方式合并证书文件(crt)和私钥文件(key)来生成
$cat client.crt client.key> client.pem
$cat server.crt server.key > server.pem

7.PFX文件转换为X509证书文件和RSA密钥文件
$openssl pkcs12 -in server.pfx -nodes -out server.pem
$openssl rsa -in server.pem -out server2.key
$openssl x509 -in server.pem -out server2.crt
8. 其他相关命令
$openssl rsa -noout -text -in ca.key //查看私钥

==============NGINX相关配置==============
listen 443 ssl;
ssl_password_file cert/server.pwd; #启动密码
ssl_certificate cert/server.crt;
ssl_certificate_key cert/server.key;
ssl_client_certificate cert/ca.crt;
ssl_verify_client on;
ssl_session_cache shared:SSL:30m;
ssl_session_timeout 30m;
#ssl_protocols SSLv3 TLSv1.2 TLSv1.1 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

Apache SSL启动输入密码解决方法

vi /etc/httpd/conf.d/ssl.conf
找到 SSLPassPhraseDialog builtin 注释并添加一行:
SSLPassPhraseDialog exec:/etc/httpd/conf.d/ssl_pass.sh

vi /etc/httpd/conf.d/ssl_pass.sh
#!/bin/sh
echo “密码”

增加运行权限
chmod u+x /etc/httpd/conf.d/ssl_pass.sh

然后重启
service httpd restart

CentOS6使用yum搭建VPN

第一步:检查
如果检查结果没有这些支持的话,是不能安装pptp的。执行指令:

#modprobe ppp-compress-18 && echo ok

这条执行执行后,显示“ok”则表明通过。不过接下来还需要做另一个检查,输入指令:

#cat /dev/net/tun

如果这条指令显示结果为下面的文本,则表明通过:
cat: /dev/net/tun: File descriptor in bad state
上述两条均通过,才能安装pptp。否则就只能考虑openvpn,或者请你的服务商来解决这个问题。
注意:如果你显示的不是这个文本,而是别的,可能显示的就不一样,这是版本问题,(如你安装的简体中文可能就会出现error之类的一句话。)

#rpm -q ppp //查询当前系统的ppp是否默认集成了,以及ppp的版本

第二步:安装
1.安装ppp和iptables
PPTPD要求Linux内核支持mppe,一般来说CentOS安装时已经包含了

#yum install perl ppp iptables //centos默认安装了iptables和ppp
#chkconfig iptables on
#service iptables start

2.安装pptpd

#rpm -Uvh http://poptop.sourceforge.net/yum/stable/rhel6/pptp-release-current.noarch.rpm
#yum install pptpd
#chkconfig pptpd on
#service pptpd start

以下命令检查PPP是否支持MPPE:

#strings '/usr/sbin/pppd' |grep -i mppe | wc --lines

如果以上命令输出为“0”则表示不支持;输出为“30”或更大的数字就表示支持,MPPE(Microsoft Point to Point Encryption,微软点对点加密)。

第三步:配置
开启路由转发

#vi /etc/sysctl.conf

修改
net.ipv4.ip_forward = 1
执行:

#sysctl -p //让修改的内核参数生效

配置

#vi /etc/ppp/options.pptpd

修改:
ms-dns 8.8.8.8
ms-dns 8.8.4.4

#vi /etc/pptpd.conf

修改 :
localip 10.8.8.1 为vpn管道的ip (VPN主机IP)
remoteip 10.8.8.2-245 为给客户端连接分配的ip地址范围

添加账号

#echo -e 'vpntest pptpd vpntestpassword *' >> /etc/ppp/chap-secrets

注:chap-secrets保存的信息客户端连接信息依次是:用户名,服务名,密码,允许的ip。服务名在options.pptpd的name定义,默认为pptpd

iptables 配置脚本:

#!/bin/bash
### Clear Old Rules
iptables -F
iptables -X
iptables -Z
iptables -t nat -F
iptables -t nat -X
iptables -t nat -Z
### * filter
# Default DROP
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
# INPUT Chain
iptables -A INPUT -p gre -j ACCEPT
iptables -A INPUT -i lo -p all -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp -m tcp --dport 1723 -j ACCEPT
iptables -A INPUT -p icmp -m icmp --icmp-type any -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
# OUTPUT Chain
iptables -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
# FORWARD Chain
iptables -A FORWARD -s 10.8.8.0/24 -o eth0 -j ACCEPT
iptables -A FORWARD -d 10.8.8.0/24 -i eth0 -j ACCEPT
### * nat
# POSTROUTING Chain
iptables -t nat -A POSTROUTING -s 10.8.8.0/24 -o eth0 -j MASQUERADE

保存规则并重启

#service iptables save
#service iptables restart

Linux Shell获取目录文件列表及文件名(sh)

#!/bin/bash
for fullpath in "$@"
do
    filename="${fullpath##*/}"                      # Strip longest match of */ from start
    dir="${fullpath:0:${#fullpath} - ${#filename}}" # Substring from 0 thru pos of filename
    base="${filename%.[^.]*}"                       # Strip shortest match of . plus at least one non-dot char from end
    ext="${filename:${#base} + 1}"                  # Substring from len of base thru end
    if [[ -z "$base" && -n "$ext" ]]; then          # If we have an extension and no base, it's really the base
        base=".$ext"
        ext=""
    fi

    echo -e "$fullpath:\n\tdir  = \"$dir\"\n\tbase = \"$base\"\n\text  = \"$ext\""
done

Ubuntu使用apt-get安装Nginx,MySql,PHP5

一、Nginx安装

安装key

# cd /tmp
# wget http://nginx.org/keys/nginx_signing.key
# sudo apt-key add nginx_signing.key
# rm -rf nginx_signing.key

修改/etc/apt/sources.list文件增加如下内容:

deb http://nginx.org/packages/mainline/ubuntu/ codename nginx
deb-src http://nginx.org/packages/mainline/ubuntu/ codename nginx

Ubuntu各版本对应Codename如下:

Version Codename
10.04 lucid
11.10 oneiric
12.04 precise
12.10 quantal
13.04 raring

使用apt-get安装并启动

# sudo apt-get update
# sudo apt-get install nginx
# sudo service nginx start

站点配置文件样本 :

server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.html index.php;

error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PHP_ADMIN_VALUE open_basedir=$document_root/;
include fastcgi_params;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
expires 30d;
}
location ~ .*\.(js|css)?$ {
expires 12h;
}
#access_log /var/log/nginx/log/host.access.log main;
}

默认安装目录: /etc/nginx/
默认SSL和虚拟主机配置目录: /etc/nginx/conf.d/
默认日志保存目录: /var/log/nginx/
默认网站文件目录: /usr/share/nginx/html
默认配置文件: /etc/nginx/nginx.conf
默认访问日志文件: /var/log/nginx/access.log
默认错误日志文件: /var/log/nginx/error.log

二、MYSQL安装

# sudo apt-get install mysql mysql-server
# sudo service mysqld start
# sudo mysqladmin -u root password 'your-password'

配置文件路径:/etc/my.cnf
数据库路径:/var/lib/mysql

三、PHP5安装

# sudo apt-get install php5-common php5-fpm php5-cli php5-mysql php5-mcrypt php5-gd php5-tidy php5-xmlrpc
# sudo chown www-data:www-data /etc/php5/fpm/php-fpm.conf
# sudo service php5-fpm start

配置文件路径:/etc/php5/fpm/php.ini
SESSION保存路径:/var/lib/php5

CentOS6.x使用YUM安装配置LNMP运行环境

一、Nginx
# cd /tmp
# wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
# rpm -ivh nginx-release-centos-6-0.el6.ngx.noarch.rpm
# yum install nginx

站点配置样本:
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.html index.php;

error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PHP_ADMIN_VALUE open_basedir=$document_root/;
include fastcgi_params;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ {
expires 30d;
}
location ~ .*\.(js|css)?$ {
expires 12h;
}
#access_log /var/log/nginx/log/host.access.log main;
}

默认安装目录: /etc/nginx/
默认SSL和虚拟主机配置目录: /etc/nginx/conf.d/
默认日志保存目录: /var/log/nginx/
默认网站文件目录: /usr/share/nginx/html
默认配置文件: /etc/nginx/nginx.conf
默认访问日志文件: /var/log/nginx/access.log
默认错误日志文件: /var/log/nginx/error.log

二、MYSQL
# yum install mysql mysql-server
# chkconfig mysqld on
# service mysqld start
# mysqladmin -u root password 'your-password'

配置文件路径:/etc/my.cnf
数据库路径:/var/lib/mysql

三、PHP
# yum install php-common php-fpm php-cli php-pdo php-mysql php-mcrypt php-mbstring php-gd php-tidy php-xml php-xmlrpc php-pear php-pecl-memcache php-eaccelerator
# chown nginx:nginx /etc/php-fpm.conf
# mkdir /var/lib/php/session
# chown -R nginx:nginx /var/lib/php/session
# chkconfig php-fpm on
# service php-fpm start

配置文件路径:/etc/php.ini
扩展模块路径:/usr/lib64/php/modules

CentOS 6.x与RHEL 6.x使用yum安装Nginx

1、设置yum源
CentOS 6.x
# cd /tmp
# wget http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
# rpm -ivh nginx-release-centos-6-0.el6.ngx.noarch.rpm

RHEL 6.x
# cd /tmp
# wget http://nginx.org/packages/rhel/6/noarch/RPMS/nginx-release-rhel-6-0.el6.ngx.noarch.rpm
# rpm -ivh nginx-release-rhel-6-0.el6.ngx.noarch.rpm

2、安装Nginx
# yum install nginx

3、Nginx相关设置
# chkconfig nginx on
# service nginx start
# service nginx stop
# service nginx restart
# service nginx status
# service nginx reload

4、Nginx配置文件
默认安装目录: /etc/nginx/
默认SSL和虚拟主机配置目录: /etc/nginx/conf.d/
默认日志保存目录: /var/log/nginx/
默认网站文件目录: /usr/share/nginx/html
默认配置文件: /etc/nginx/nginx.conf
默认访问日志文件: /var/log/nginx/access.log
默认错误日志文件: /var/log/nginx/error.log

修改Nginx配置文件:
# vi /etc/nginx/nginx.conf
设置线程数,通常CPU多少核就填多少,例如2核:
worker_processes 2;
开设gzip支持:
gzip on;

修改站点配置文件:
# vi /etc/nginx/conf.d/default.conf
设置IP和监听端口,例如服务器IP是192.168.1.100:
listen 192.168.1.100:80;
绑定域名:
server_name www.chnlanker.com;

重启Nginx服务
# service nginx start

5、最后检查Nginx是否正常工作
# netstat -tulpn | grep :80
# ps aux | grep nginx

Linux隐藏MAC被动防御ARP欺骗

wget http://downloads.sourceforge.net/project/ebtables/arptables/arptables-v0.0.3/arptables-v0.0.3-4.tar.gz
tar zxvf arptables-v0.0.3-4.tar.gz
cd arptables-v0.0.3-4
make
make install
arp -a
arptables -F
arptables -A INPUT --source-mac ! 网关的MAC地址 -j DROP
arptables -A INPUT -s ! 网关的IP地址 -j DROP
arptables -I INPUT --source-mac 同网段其它服务器MAC地址 ACCEPT
service arptables save

Linux下安装PHP Tidy扩展

一、进入PHP安装目录下的TIDY扩展目录,如:
cd /setup/php-5.2.17/ext/tidy

二、执行phpize生成编译文件,如:
/usr/local/php/bin/phpize

三、编译并生成扩展,如:
./configure –with-php-config=/usr/local/php/bin/php-config –enable-tidy
make
make install

若编译过程中提示错误 configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers ,先执行如下命令后再重新返回第三步操作:
wget http://sourceforge.net/projects/re2c/files/re2c/0.13.5/re2c-0.13.5.tar.gz/download
tar -zxvf re2c-0.13.5.tar.gz
cd re2c-0.13.5
./configure && make && make install

若编译过程中提示错误 configure: error: Cannot find libtidy ,先执行如下命令后再重新返回第三步操作:
yum install libtidy-devel
yum install libtidy

四、修改PHP.INI配置
vi /usr/local/php/etc/php.ini
插入扩展配置:extension = “tidy.so”

五、重启WEB服务器,完成