2023年3月

cisco 9.X版本的ASA ipsec VPN配置
第1阶段(IKEv1)
在外部接口上启用IKEv1:
crypto ikev1 enable outside

crypto ikev1 policy 1 //定义IKEv1策略,优先级(10为优先级,数值越大,优先级越低)
authentication pre-share //定义认证方式
encryption aes //定义加密算法
hash sha //定义散列算法
group 2 //定义密钥交换协议
lifetime 86400

tunnel-group 137.78.10.1 type ipsec-l2l //设置隧道组,隧道组名称为对端IP,类型为站点到站点
tunnel-group 137.78.10.1 ipsec-attributes //进入ipsec属性设置
ikev1 pre-shared-key cisco //预共享密码为cisco

第2阶段(IPsec)
创建定义要加密和隧道化的流量的访问列表。
object network source_net //定义网络对象,名为source_net
subnet 172.16.10.0 255.255.255.0 //源子网
object network destination_net //定义网络对象,名为destination_net
subnet 172.16.30.0 255.255.255.0 //目标子网

access-list 100 extended permit ip object source_net object destination_net //访问列表,允许源IP与目标IP

配置转换集(TS),其中必须包含关键字 IKEv1.在远程端也必须创建相同的TS。
crypto ipsec ikev1 transform-set myset esp-aes esp-sha-hmac //创建IPSec变换集,名称为myset

在外部接口上应用加密映射:
crypto map outside_map 20 match address 100 //配置加密映射集
crypto map outside_map 20 set peer 137.78.10.1 //设置对端IP
crypto map outside_map 20 set ikev1 transform-set myset //绑定变换集
crypto map outside_map 20 set pfs //
crypto map outside_map interface outside //加密映射集应用到接口

可选的完全向前保密(PFS)设置,创建用于保护数据的新Diffie-Hellman密钥对(在第2阶段出现之前,两端都必须启用PFS)

NAT免除
确保VPN流量不受任何其他NAT规则的约束。 以下是所使用的NAT规则:
nat (inside,outside) 1 source static source_net source_net destination static
destination_net destination_net no-proxy-arp route-lookup

验证结果:
第 1 阶段
v8.4以上新版本
show crypto ikev1 sa

v8.3以下旧版本
show crypto isakmp sa

第 2 阶段
how crypto ipsec sa

故障排除
使用本部分提供的信息排除配置问题。

ASA版本8.4及更高版本
输入以下debug命令以确定隧道故障的位置:
debug crypto ikev1 127 (第 1 阶段)
debug crypto ipsec 127 (第 2 阶段)

ASA版本8.3及更低版本
输入以下debug命令以确定隧道故障的位置:
debug crypto isakmp 127 (第 1 阶段)
debug crypto ipsec 127 (第 2 阶段)

防火墙作为现代网络中的硬件安全设备,在隔离网络中有着非常重要的作用。
防火墙默认的三个区域包括:inside(内网),outside(外网)和dmz(隔离)区。
默认outside和dmz的级别为0,inside安全级别为100。
高安全级别到低安全级别的流量是放行的,但返回的数据会根据防火墙的规则来判定是否允许;低安全级别到高安全级别的流量是拒绝的。
高——>低 可放行
低——>高 不放行
同等级别 不转发也不响应。
cisco ASA v9.x系列防火墙 基于端口设置安全区域,再通过ACL对端口进行控制。

FW(config)#interface gigabitEthernet 1/1
FW(config-if)#ip address 192.168.1.1 255.255.255.0
FW(config-if)#no shutdown
FW(config-if)#nameif inside
FW(config-if)#security-level 0

FW(config)#interface gigabitEthernet 1/2
FW(config-if)#ip address 200.1.1.1 255.255.255.0
FW(config-if)#no shutdown
FW(config-if)#nameif outside

FW(config)#interface gigabitEthernet 1/3
FW(config-if)#ip address 172.16.1.1 255.255.255.0
FW(config-if)#no shutdown
FW(config-if)#nameif dmz

配置静态路由:
FW(config)#route outside 0.0.0.0 0.0.0.0 200.1.1.2

查看路由
FW(config)#show route

配置访问列表,允许从outside到inside区域的ping
FW(config)#access-list 101 extended permit icmp any any
FW(config)#access-group 101 in interface outside

配置网络对象
object network net-inside ---引用内网所有网段,此处可以单独写某个需要上网的网段
subnet 192.168.1.0 255.255.255.0

配置NAT,基于端口的地址转换,实现内网用户通过地址转换进行访问外网
nat (inside,outside) source dynamic net-inside interface

配置静态地址一对一转换:
object network WWW
host 172.16.1.2
nat (dmz,outside) static 200.1.1.2

配置使用端口一对一:
nat (dmz,outside) static

ASA 9.x NAT配置专题

思科路由器密码设置
1、开启特权密码保护(默认是明文密码)
router(config)#enable password cisco

如果执行下面这句,会将上面的明文密码转换为用思科私有的加密方式的可逆密文。
router(config)#service password-encryption
2、开启特权密匙保护,使用"scrypt hash"加密
router(config)#enable secret cisco

显示配置信息
router(config)#do show run | include enable
结果如下:
enable secret 9 $9$D1H4hEj5D/LBlf$aAE8V.JwU5/iTzSnyJ5wGmkppFPTeWpnfSHJYBiJfUg
说明:secret后出现9,则说明是"scrypt hash"加密
0 、5、7的意思是:0为不加密,5为使用MD5加密,7为使用cisco的私有算法加密(可逆加密),9为"scrypt hash"加密

3、配置控制端口的用户密码
router(config)#line console 0
进入控制线路配置模式。
router(config-line)#login
开启登陆密码保护
router(config-line)#password cisco
设置密码为cisco,区分大小写。
4、配置VTY(telnet)登陆访问密码:
router(config)#line vty 0 4
进入VTY配置模式。
router(config-line)#login
开启登陆密码保护
router(config-line)#password cisco
Cisco路由器密码设置为cisco,区分大小写。

命令大全
router>enable 进入特权模式
router#configure terminal 进入全局配置模式
router(config)#hostname R1 修改主机名
R1(config)#interface g0/1 进入接口
R1(config-if)#ip address 192.168.10.1 255.255.255.0 设置IP
R1(config-if)#no shutdown 开启端口
R1(config-if)#^z Ctrl+z,返回特权模式
R1#show ip interface brief 查看所有接口名称与IP地址
R1#write 保存running-config配置信息
R1#reload 重启路由器
R1#conf t
R1(config)#router ospf 1 进入OSPF路由配置模式
R1(config-router)#network 192.168.10.0 0.0.0.255 area 0 宣告网络192.168.10.0/24到区域0中
R1(config-router)#^z Ctrl+z,返回特权模式
R1#show ip route 查看路由表信息

使用AAA的policy,在策略里面定义密码格式要求,不过只支持本地用户使用password参数创建密码,不支持本地用户secret参数

启用aaa认证
aaa new-model

配置当用户登录设备时,使用AAA本地登录认证方式,认证调用默认列表default,认证方式为local。
aaa authentication login default local

创建一个aaa密码策略,策略名称为PassPolicy
aaa common-criteria policy PassPolicy
min-length 6 //最小密码长度
max-length 64 //最大密码长度
numeric-count 1 //包含至少一个数字
upper-case 1 //包含至少一个大写字母
lower-case 1 //包含至少一个小写字母
special-case 1 //包含至少一个特殊字符
char-changes 2 //修改新密码至少有两个字符变化

建立用户名与密码时应用指定密码策略
username user1 common-criteria-policy PassPolicy password 具体密码
将策略与用户进行绑定,然后再配置密码,密码策略才生效

链接1

MODULES

module(load="imuxsock" SysSock.Use="off") #imuxsock模块,支持本地系统日志的模块
module(load="imjournal" StateFile="imjournal.state") #imjournal模块,支持对系统日志的访问(此模块与上一模块默认启用
module(load="imfile" PollingInterval="1") #imfile模块,支持对文件进行操作
module(load="imklog") #imklog模块,支持内核日志的模块
module(load="immark") #immark模块,支持日志标记

提供远程rsyslog日志的udp协议的接收支持

module(load="imudp") #imudp模块,用于支持udp协议
input(type="imudp" port="514") #允许通过514端口接收使用udp协议的远程日志

提供远程rsyslog日志的tcp协议的接收支持

module(load="imtcp") #imtcp模块,用于支持tcp协议
input(type="imtcp" port="514") #允许通过514端口接收使用tcp协议的远程日志

GLOBAL DIRECTIVES

global(workDirectory="/var/lib/rsyslog") #工作目录
module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat") #定义日志格式默认模板(可以自行设定,参看template部分)
include(file="/etc/rsyslog.d/*.conf" mode="optional") #需要引入的自定义配置文件的路径

RULES

内核消息,默认不启用

kern.* /dev/console

记录所有日志类型的,信息等级大于等于info级别的信息到messages文件(mail邮件信息,authpriv验证信息和corn时间和任务信息除外)

*.info;mail.none;authpriv.none;cron.none /var/log/messages

authpriv验证相关的所有信息存放在/var/log/secure

authpriv.* /var/log/secure

邮件的所有信息存在/var/log/maillog;这里有一个“-”符号表示是使用异步的方式记录

mail.* -/var/log/maillog

任务计划有关的信息存放在/var/log/cron

cron.* /var/log/cron

记录所有的≥emerg级别信息,发送给每个登录到系统的日志

.emerg :omusrmsg:

记录uucp,news.crit等

uucp,news.crit /var/log/spooler

本地服务器的启动的所有日志

local7.* /var/log/boot.log

生成模板

$template SpiceTmpl,"%msg:2:$%\n"
$template CatalinaDynaFile,"/var/log/rsyslog/%fromhost-ip%/catalina_%$YEAR%-%$MONTH%-%$DAY%.log"

匹配规则,文章后面将分享其他配置类型

:fromhost-ip,contains,"3.21.75.99" ?CatalinaDynaFile;SpiceTmpl

Ubuntu 配置为旁路由实现透明代理(Clash)
下面几乎所有操作都需要sudo

开启IP转发
vim /etc/sysctl.conf
去掉net.ipv4.ip_forward=1 这一行的注释,然后执行下面命令启用当前配置

sysctl -p
配置iptables
iptables -t nat -N clash
iptables -t nat -N clash_dns

这个是fake-ip对应的dns地址,一般不用动

iptables -t nat -A PREROUTING -p tcp --dport 53 -d 198.19.0.0/24 -j clash_dns
iptables -t nat -A PREROUTING -p udp --dport 53 -d 198.19.0.0/24 -j clash_dns
iptables -t nat -A PREROUTING -p tcp -j clash

让当前机器成为一个网关服务器

iptables -t filter -A FORWARD -j ACCEPT
iptables -t nat -A POSTROUTING -s 192.168.0.0/16 -j MASQUERADE

这里需要注意的是,下面两行最后的 192.168.2.101 是当前旁路由的 IP 地址,请根据你自己的实际情况修改

目的DNS端口是后面clash配置里面的5354

iptables -t nat -A clash_dns -p udp --dport 53 -d 198.19.0.0/24 -j DNAT --to-destination 192.168.2.101:5354
iptables -t nat -A clash_dns -p tcp --dport 53 -d 198.19.0.0/24 -j DNAT --to-destination 192.168.2.101:5354

绕过一些内网地址,(RETURN 表示退出当前Chain,返回到上一级的Chain继续匹配)

iptables -t nat -A clash -d 0.0.0.0/8 -j RETURN
iptables -t nat -A clash -d 10.0.0.0/8 -j RETURN
iptables -t nat -A clash -d 127.0.0.0/8 -j RETURN
iptables -t nat -A clash -d 169.254.0.0/16 -j RETURN
iptables -t nat -A clash -d 172.16.0.0/12 -j RETURN
iptables -t nat -A clash -d 192.168.0.0/16 -j RETURN
iptables -t nat -A clash -d 224.0.0.0/4 -j RETURN
iptables -t nat -A clash -d 240.0.0.0/4 -j RETURN

注意, 这边的7892对应后续clash配置里的redir-port

iptables -t nat -A clash -p tcp -j REDIRECT --to-ports 7892
执行以上命令之后iptables就配置好了,但是重启机器上面的配置又会失效,这时需要安装iptables-persistent来实现iptables配置的持久化。

手动保存配置 iptables-save > /etc/iptables/rules.v4
手动从文件加载配置 iptables-restore /etc/iptables/rules.v4
安装Clash
wget https://github.com/Dreamacro/clash/releases/download/v1.3.0/clash-linux-amd64-v1.3.0.gz

解压并且把二进制文件放到 /usr/bin ,并且加上可执行权限

gzip -d clash-linux-amd64-v1.3.0.gz
sudo mv clash-linux-amd64-v1.3.0 /usr/bin/clash
sudo chmod +x /usr/bin/clash
创建clash配置

创建文件夹

mkdir -p ~/.config/clash
cd ~/.config/clash
vim config.yaml
输入下面基本配置

一般情况只需要往Proxy后面加节点就可以

port: 7890
socks-port: 7891
redir-port: 7892
allow-lan: true
mode: Rule
log-level: info
dns:
enable: true
ipv6: false
# 其中 53, 5353端口经常是被占用的
listen: 0.0.0.0:5354
enhanced-mode: fake-ip
fake-ip-range: 198.18.0.1/16
nameserver:

- '192.168.2.1'

下面部分则是代理的设置跟规则的设置,这里忽略不写。

Proxy:

...

如果需要校验配置文件是否合规,可以运行clash -t, 成功的话程序会输出”successful”字样。

配置clash服务
vim /etc/systemd/system/clash.service
添加内容

[Unit]
Description=clash daemon

[Service]
Type=simple
User=YOUR USER NAME
ExecStart=/usr/bin/clash -d /home/{{YOUR_USER_NAME}}/.config/clash/
Restart=on-failure

[Install]
WantedBy=multi-user.target
systemctl start clash.service
systemctl enable clash.service
设置客户端默认网关
在路由器上设置默认网关为旁路由的IP
修改自己电脑的网络配置,设置静态IP,默认网关为旁路由的IP
DNS设置为198.19.0.1(上面已经配置了假IP的转发)
255.255.255.0
常见问题

  1. 运行clash的机器上不了网
    刚配置好之后,旁路由的网关还是采用默认的网关,例如路由器的IP为192.168.2.1,旁路由的IP为192.168.2.101,原本默认的网关是192.168.2.1,后来在路由器的管理界面把默认网关改为192.168.2.101(即旁路由IP),设置完不会马上同步到所有设备,过一会儿旁路由更新了,从主路由器里获取到网关为192.168.2.101,由于这个IP是自己,导致发送网络请求的时候发给了自己,一直死循环了。

ssh远程过去旁路由,ip route看看当前的路由配置

default via 192.168.2.101 dev eth0 src 192.168.2.101 metric 202
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1 linkdown
192.168.2.0/24 dev eth0 proto kernel scope link src 192.168.2.101 metric 202
查看当前设备IP

ip address
得到IP信息:

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000

link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
   valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
   valid_lft forever preferred_lft forever

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

link/ether b8:27:eb:41:4b:8c brd ff:ff:ff:ff:ff:ff
inet 192.168.2.101/24 brd 192.168.2.255 scope global eth0
   valid_lft forever preferred_lft forever
inet6 fe80::50e0:43d3:b9f4:c7d6/64 scope link
   valid_lft forever preferred_lft forever

3: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000

link/ether b8:27:eb:14:1e:d9 brd ff:ff:ff:ff:ff:ff

4: ip_vti0@NONE: mtu 1480 qdisc noop state DOWN group default qlen 1000

link/ipip 0.0.0.0 brd 0.0.0.0

5: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default

link/ether 02:42:52:a5:42:48 brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
   valid_lft forever preferred_lft forever

由此可见,旁路由的网关为192.168.2.101,其实是自己。这时只要修改一下旁路由的网关就好了,也是用ip route命令

ip route add default via 192.168.2.1

  1. 通过 ip route 设置网关过一会儿失效
    不同的设置不同系统都有各自的持久化保存的方法,这里简单列举几个

1) 树莓派 raspberrypi os

echo 'ip route add default via 192.168.2.1' > /etc/dhcpcd.exit-hook
2) Ubntu 20.04 Server

修改 /etc/netplan/ 里面的yaml配置,

eth0:

dhcp4: true
dhcp4-overrides:
    use-routes: false
gateway4: 192.168.2.1