2023年3月

一、安装 Apache2
sudo apt update
sudo apt install apache2 openssl

安装之后,apache2服务器已经启动,并且会随系统自动启动;

Apache2 配置
Apache配置文件在/etc/apache2目录下。

主配置文件是apache2.conf,其中引用了其他配置文件。

a2query命令可以获取服务器当前的运行配置。

环境变量
envvars文件中配置了Apache用到的环境变量,这些环境变量也可以在配置文件中引用。

模块配置
所有模块配置在mods-available目录下,启用后会在mods-enabled目录下建立符号链接;
启用模块用a2enmod命令,禁用模块用a2dismod命令。

监听端口配置
ports.conf 文件中配置了Apache服务器监听的端口,包括HTTP端口和HTTPS端口
默认包括HTTP端口80,如果加载了SSL或TLS模块,还会监听443端口。
除了这里的配置,各虚拟主机配置里也会配置其对应的端口。

其他可选配置
其他可选配置在conf-available目录下,启用的配置会链接到conf-enabled中。
启用配置用a2enconf命令,禁用配置用a2disconf命令。

网站(虚拟主机)配置
网站配置包含了HTTP配置和HTTPS配置,根据需要选择。
所有网站配置都放在sites-available子目录中,而启用的网站则会链接到sites-enabled目录下。
要启动网站可以用a2ensite命令,禁用网站则用a2dissite命令。

网站配置
HTTP网站配置
默认配置中已经启用了一个http网站000-default,
其中配置了网站主目录DocumentRoot /var/www/html等信息,可参考 000-default.conf 在 sites-available 目录下配置其他网站,配置后通过 a2ensite 命令启动。

配置后可以通过 http://127.0.0.1 访问
注意使用的地址要与配置文件中的ServerName匹配

二、配置HTTPS网站
启用HTTPS必须要加载ssl模块

a2enmod ssl
systemctl restart apache2

启动SSL网站

a2ensite default-ssl
systemctl reload apache2

这里使用的是默认的SSL网站配置default-ssl,与HTTP的区别在于启用了SSL引擎SSLEngine on,并且配置了SSL需要的证书和密钥,以及其他SSL运行需要的参数。

默认的SSL配置中使用的是自签名的SSL证书,在使用浏览器打开网站时会收到安全警告,在真正使用时需要申请自己的密钥和证书。
编辑default-ssl.conf
sudo nano sites-enabled/default-ssl.conf
检查下面信息:
2023-03-13T01:30:46.png

三、实现从http到https自动跳转
下面是启用mod_rewrite模块的方法。
第一种方式:
sudo a2enmod rewrite

第二种方式:
sudo ln -s /etc/apache2/mods-available/rewrite.load /etc/apache2/mods-enabled/rewrite.load

不管使用哪种方法,都是在 /etc/apache2/mods-enabled/
这个目录下面建立了一个链接,只要重启服务器之后就可以生效。 当然要使rewrite生效,还需要修改额外的配置:
sudo vim /etc/apache2/sites-enabled/000-default.conf

<Directory /var/www/html>
    Options Indexes FollowSymLinks
    AllowOverride all
    Require all granted
</Directory>

在网站文件夹创建.htaccess文件
sudo nano /var/www/html/.htaccess
添加以下内容:

RewriteEngine on
#RewriteCond %{SERVER_PORT} !^443$
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{SERVER_NAME}/$1 [R]

解释:

%{SERVER_PORT} —— 访问端口
%{SERVER_NAME} —— 比如如果url是 http://localhost/tz.php,则是指 localhost
%{HTTPS} off ——检查是否是https,如果不是,则应用RewriteRule这条规则。
以上规则的意思是,如果访问的url的端口不是443,则应用RewriteRule这条规则。

openssl.cnf.txt自建 CA 中心并签发 CA 证书
SAN(Subject Alternative Name) 是 SSL 标准 x509 中定义的一个扩展。使用了 SAN 字段的 SSL 证书,能够扩展此证书支持的域名,使得一个证书能够支持多个不一样域名的解析。
现在新版本的浏览器都要求证书中必须包含“Subject Alternative Names”这一参数,否则认为不是有效证书。

Step 1. 设定 OpenSSL CA 配置文件
查找到openssl.cnf,并将到配置文件复制到自己的主目录。
find / -name openssl.cnf
cp /etc/pki/tls/openssl.cnf ~/openssl.cnf

(1) 找到[ req ] 段落,添加如下配置:

  req_extetions = v3_req

(2) 添加v3_req配置信息

[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

(3) 添加alt_names配置信息

[ alt_names ]
DNS.1 = www.dgq.com 

注:这里填入的即为Subject Alternative Names的域名名称

(4)涉及CA自签名

# 找到 v3_ca 节点
[ v3_ca ]
# x509命令的扩展
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer
basicConstraints = critical,CA:true
# 表示可选属性的扩展, 这一行就是我们加上的, 表示定义了一组可选项
subjectAltName = @alt_names

Step 2. 搭建 CA 中心
所谓 CA 中心,本质是一个文件夹,包括以下文件夹与文件:
文件夹:demoCA/certs,demoCA/newcerts,demoCA/private
文件: index.txt, serial

cd ~
mkdir -p demoCA/{certs,newcerts,private}
touch demoCA/index.txt
echo 01 > demoCA/serial

newcerts dir:存放 CA 签署(颁发)过的数字证书
private dir:存放 CA 的私钥
serial file:存放证书序列号,可自定义第一张证书的序号(e.g. 01),之后每新建一张证书,序列号会自动加 1。
index.txt file:存放证书信息

Step 3. 生成 CA 证书的 RSA 私钥

openssl genrsa -passout pass:123456 -des3 -out ~/demoCA/private/cakey.pem 2048

Step 4. 生成 CA 的根证书(公钥)

openssl req -x509 -passin pass:123456 -new -nodes -key ~/demoCA/private/cakey.pem -days 3650 -subj "/C=CN/ST=GD/L=GZ/O=GDEC/CN=GDEC_CA" -out ~/demoCA/cacert.pem \
-extensions SAN \
-config <(cat ~/openssl.cnf \
    <(printf "[SAN]\nsubjectAltName=DNS:ca.gdec.cn")) 

Step 5. 查看 CA 证书的内容

openssl x509 -in ~/demoCA/cacert.pem -text -noout

Step 6.使用 openssl 签署带有 SAN 扩展的证书请求

openssl req -new -sha256 \
    -keyout server.key \
    -subj "/C=CN/ST=GD/L=GZ/O=GDEC/OU=test/CN=www.test.com" \
    -reqexts SAN \
    -config <(cat ~/openssl.cnf \
        <(printf "[SAN]\nsubjectAltName=DNS:www.test.com")) \
    -out server.csr

查看请求文件
openssl req -in server.csr -text

Step 7. CA签署证书请求,生成带SAN扩展的证书

openssl ca  -out server.crt -config ~/openssl.cnf  -in server.csr \
    -extensions SAN \
-config <(cat ~/openssl.cnf \
    <(printf "[SAN]\nsubjectAltName=DNS:www.ustack.in,DNS:www.test.ustack.com")) \

查看生成的证书:
openssl x509 -text -noout -in server.crt

转为pfx证书文件,给windows或IIS使用
openssl pkcs12 -export -inkey server.key -in server.crt -out server.pfx

cisco 路由器配置SSH登录

配置适当的访问策略只允许Windows10(192.168.1.100)可以登录。

ip domain name abc.com //设置本机域名
crypto key generate rsa modulus 2048 //创建rsa 密钥对,2048bit,密钥对名称为主机名.本机域名
username admin password 123456 //创建本地用户与密码
ip ssh rsa keypair-name R2.abc.com //指定ssh 密钥对名称,此时会启动ssh server
ip ssh version 2 //设置版本号

access-list 10 permit 192.168.1.100 0.0.0.0 //创建ACL

line vty 0 4
access-class 10 in
transport input ssh

客户端路由器登录:
ssh -l username ssh-host

在指定的时间内收到过多失败的连接尝试后进入静默期(quiet period),而不再接受新的连接。
login block-for 120 attempts 3 within 60 如果在60s内密码验证错了3次登陆将被限制120s
login delay 3 若密码输入错误,则停顿3秒后才可以进行下一次输入
login on-failure log 产生错误登录日志
login on-success log 产生正确登录日志

让处于静默模式的路由器依照ACL允许登录尝试。如果没有配置该命令,在静默期内所有的登录尝试都会被拒绝。
login quiet-mode access-class {acl-name | acl-number}

cisco官方ASA 站点到站点IPsec VPN配置

ASA v9.14防火墙配置命令:

int g0/0
  ip add 202.100.1.254 255.255.255.0
  nameif outside
  no shut
int g0/1
  ip add 172.16.10.254 255.255.255.0
  nameif inside
  no shut
  exit

crypto ikev1 enable outside

crypto ikev1 policy 10
 authentication pre-share
 encryption aes
 hash sha
 group 2
 lifetime 86400
 exit

tunnel-group 137.78.10.1 type ipsec-l2l
tunnel-group 137.78.10.1 ipsec-attributes
 ikev1 pre-shared-key cisco
 exit

object network 172.16.10.0_24 
 subnet 172.16.10.0 255.255.255.0 
 exit
object network 172.16.30.0_24 
 subnet 172.16.30.0 255.255.255.0
 exit

access-list 100 extended permit ip object 172.16.10.0_24 object 172.16.30.0_24

crypto ipsec ikev1 transform-set myset esp-aes esp-sha-hmac

crypto map mymap 20 match address 100
crypto map mymap 20 set peer 137.78.10.1
crypto map mymap 20 set ikev1 transform-set myset
crypto map mymap 20 set pfs group2
crypto map mymap interface outside

route outside 0 0 202.100.1.1

fixup protocol icmp

 NAT豁免决定哪些流量不进行NAT转换,no-proxy-arp表示关闭ARP代理功能。
nat (inside,outside)  source static 172.16.10.0_24 172.16.10.0_24 destination static
 172.16.30.0_24 172.16.30.0_24 no-proxy-arp route-lookup

正常NAT配置
nat (inside,outside) source dynamic 172.16.10.0_24 interface 

注意:必须先NAT免流,再执行正常NAT配置


路由器配置命令:
int g0/0
  ip add 172.16.30.254 255.255.255.0
  no shut
int g0/1 
  ip add 137.78.10.1 255.255.255.0
  no shut
  exit

ip route 0.0.0.0 0.0.0.0 137.78.10.2 


crypto isakmp policy 1
  encryption aes
  group 2
  hash sha
  authentication pre-share
  exit

crypto isakmp key cisco address   202.100.1.254

crypto ipsec transform-set myset esp-aes esp-sha-hmac
 exit

access-list 100 permit ip 172.16.30.0 0.0.0.255 172.16.10.0 0.0.0.255
 
crypto map mymap 1 ipsec-isakmp
  set peer   202.100.1.254
  match address 100
  set transform-set myset
  set pfs group2
  exit

int g0/1
 crypto map mymap
 exit

同时实现NAT功能,注意将需要通过VPN的数据排除。
access-list 110 deny ip 172.16.30.0 0.0.0.255 172.16.10.0 0.0.0.255
access-list 110 permit ip 172.16.30.0 0.0.0.255 any
ip nat inside source list 110 interface g0/1 overload

总结排错思路:

阶段1的SA没有建立:
show crypto isakmp sa
接口是否应用了安全策略
是否有匹配的数据流触发
是否为对方配置了共享密钥,以及共享密钥是否一致

阶段2的SA没有建立:
show crypto ipsec sa
ACL是否匹配
安全提议是否一致
设置的隧道对端地址是否匹配
应用的接口是否正确

两个阶段的SA都成功建立,但不能通信:
  一般都是由于ACL的配置不当引起的,检查ACL的配置是否符合要求

Cisco路由器IPsec配置
以下为路由器A的配置,路由器B只需对相应配置作更改即可

1:配置IKE

router(config)# crypto isakmp enable #启用IKE(默认是启动的)
router(config)# crypto isakmp policy 1 #建立IKE策略,优先级为1
router(config-isakmp)# authentication pre-share #使用预共享的密码进行身份验证
router(config-isakmp)# encryption aes #使用aes加密方式
router(config-isakmp)# group 2 #指定密钥位数,group 2安全性更高,但更耗cpu
router(config-isakmp)# hash sha #指定hash算法为MD5(其他方式:sha,rsa)

router(config-isakmp)# lifetime 86400 #指定SA有效期时间。默认86400秒,两端要一致以上配置可通过show crypto isakmp policy显示。VPN两端路由器的上述配置要完全一样。

2:配置Keys

router(config)# crypto isakmp key cisco address 202.100.1.254
--(设置要使用的预共享密钥和指定vpn另一端路由器的IP地址)

3:配置IPSEC
router(config)# crypto ipsec transform-set myset esp-aes esp-sha-hmac

配置IPSec交换集

abc这个名字可以随便取,两端的名字也可不一样,但其他参数要一致。
router(config)# crypto ipsec security-association lifetime 86400

ipsec安全关联存活期,也可不配置,在下面的map里指定即可

router(config)# access-list 110 permit tcp 172.16.30.0 0.0.0.255 172.16.10.0 0.0.0.255

4.配置IPSEC加密映射
router(config)# crypto map mymap 100 ipsec-isakmp 创建加密图
router(config-crypto-map)# match address 110 用ACL来定义加密的通信
router(config-crypto-map)# set peer 202.100.1.254 标识对方路由器IP地址
router(config-crypto-map)# set transform-set myset 指定加密图使用的IPSEC交换集
router(config-crypto-map)# set security-association lifetime seconds 86400
router(config-crypto-map)# set pfs group2

5.应用加密图到接口
router(config)# interface G0/1
router(config-if)# crypto map mymap

查看

show crypto isakmp sa

配置inside
interface GigabitEthernet0/1
ip nat inside
ip nat enable

配置outside
interface GigabitEthernet0/2
ip nat outside
ip nat enable

定义序号为10的Acl列表(要转换的内网网段,使用反掩码,permit为允许)
access-list 10 permit 172.16.30.0 0.0.0.255

全局下定义NAT(将列表10转换为0/2接口的地址,也就是wan接口)
ip nat inside source list 10 interface GigabitEthernet0/2 overload

最后write,保存配置。