标签归档:firewall

Linux CentOS 7 OpenVPN Server 安装配置

OpenVPN是一个开源应用程序,可以通过公共Internet创建一个专用网络。在我们开始之前,我们首先需要安装Enterprise Linux(EPEL)存储库的额外包。下面就是关于如何在CentOS 7上设置Client和OpenVPN服务器的教程。

1.安装EPEL套件库,顺道更新

# yum -y install epel-release && yum -y update

2.安装 OpenVPN

首先我们需要安装OpenVPN。我们还将安装Easy RSA来生成我们的SSL密钥对,这将保护我们的VPN连接。

# yum install -y openvpn easy-rsa

3.生成密钥及证书的前置条件

3.1.创建密钥与证书储存目录,并且准备好要产生密钥与证书的相关文件:

# mkdir -p /etc/openvpn/easy-rsa/keys
# cp -rf /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa
# cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf

3.2.修改凭证的默认资料,之后产生凭证时就会自动填写,不必再手动输入。

# vim /etc/openvpn/easy-rsa/vars

所有凭证资料的预设值分别是:国家、省份、城市、组织、电子邮件位址、单位。

...
 export KEY_COUNTRY="CN"
 export KEY_PROVINCE="GD"
 export KEY_CITY="ZHUHAI"
 export KEY_ORG="YUNXI"
 export KEY_EMAIL="YUNXI@it.cn"
 export KEY_OU="IT YUNXI."
 ...

上述参数的值可以自定义设置,对配置无影响。

4.Server 端密钥与证书生成

4.1.清除并删除 keys 目录下的所有 key

# cd /etc/openvpn/easy-rsa

以下步骤列出需要清理的目录:

# source ./vars
NOTE: If you run ./clean-all, I will be doing a rm -rf on /etc/openvpn/easy-rsa/keys
# ./clean-all

4.2.生成CA的密钥及凭证,设定值不需修改的话,可以直接按Enter使用vars档案里的预设值。

# ./build-ca

4.3.生成 OpenVPN Server 端的密钥及凭证,同样可以使用vars档案的预设值。

注意:一直回车,直至最后有两次交互,输入 y 确认。

# ./build-key-server renwoleserver

4.4.生成 Diffie Hellman 参数,这个步骤比较久,可能要跑大约 6 分钟左右。

# ./build-dh

4.5.将Server的密钥及凭证放到主目录里:

# cd /etc/openvpn/easy-rsa/keys
# cp dh2048.pem ca.crt renwoleserver.crt renwoleserver.key /etc/openvpn

5.生成 Client 端的密钥及凭证,文件名可以自定义,有两种方式,分别是:(一直回车即可)

5.1.生成不用输入密码的凭证:

# /etc/openvpn/easy-rsa/build-key renwoleusers

5.2.生成需要输入密码的凭证:

# /etc/openvpn/easy-rsa/build-key-pass renwoleusers

6.生成TLS-auth密钥(可选)

OpenVPN提供了TLS-auth功能,可以用来抵御Dos、UDP端口淹没攻击。出于安全考虑,你可以启用该功能;启用该功能,你需要执行以下命令:

# cd /etc/openvpn
# openvpn --genkey --secret ta.key

6.目前我们总共产生了这些金钥及凭证:

# ll keys/

total 84

01.pem
02.pem
renwoleserver.crt
renwoleserver.csr
renwoleserver.key
renwoleusers.crt
renwoleusers.csr
renwoleusers.key
ca.crt
ca.key
dh2048.pem
index.txt
index.txt.attr
index.txt.attr.old
index.txt.old
serial
serial.old

7.配置 OpenVPN server.conf

OpenVPN安装目录默认存在 server.conf 配置文件,我们拷贝一份并修改使用:

# cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn

我们进入 /etc/openvpn/ 目录编辑 server.conf  文件。

配置完成后的内容如下:

# egrep -v "^$|^#|^;" server.conf

local 10.10.204.62
port 1194
proto udp
dev tun
ca ca.crt
cert renwoleserver.crt
key renwoleserver.key # This file should be kept secret
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 223.5.5.5"
client-to-client
keepalive 10 120
tls-auth ta.key 0 # This file is secret
cipher AES-256-CBC
compress lz4-v2
push "compress lz4-v2"
user nobody
group nobody
persist-key
persist-tun
#新增日志路径
status /var/log/openvpn-status.log
log /var/log/openvpn.log
verb 3
explicit-exit-notify 1

8.启动IP转发功能

# echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
# sysctl -p

9.配置firewall转发规则

确保服务器可以转发数据包到服务器内外网,开启必要的通讯服务,并启用IP伪装(Masquerade)功能。

# firewall-cmd --permanent --add-service openvpn
# firewall-cmd --permanent --add-masquerade
# DEV=$(ip route get 223.5.5.5 | awk 'NR==1 {print $(NF-2)}' )
# firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o $DEV -j MASQUERADE
# firewall-cmd --reload
# firewall-cmd --list-all

public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: dhcpv6-client openvpn ssh
ports:
protocols:
masquerade: yes
forward-ports:
sourceports:
icmp-blocks:
rich rules:

10.启动 OpenVPN

重启网络与OpenVPN服务,并且让OpenVPN开机后自动启动:

# systemctl restart network
# systemctl restart openvpn@server
# systemctl enable openvpn@server

11.执行以下命令我们会看到一个新增的OpenVPN 专用网络:tun0

# ip a
...
tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNOWN qlen 100
link/none
inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
valid_lft forever preferred_lft forever

12.Windows PC 客户端的配置

12.1.下载 openvpn 客户端并安装:Windows系统下安装,按照默认安装完成即可。

12.2.将Server端生成的Client密钥与证书下载到本地并放在 C:\Program Files\OpenVPN\config 目录下。

需要下载的文件列表:

/etc/openvpn/easy-rsa/keys/renwoleusers.crt
/etc/openvpn/easy-rsa/keys/renwoleusers.key
/etc/openvpn/easy-rsa/keys/ca.crt
/etc/openvpn/ta.key

12.3.将 C:\Program Files\OpenVPN\sample-config 下 client.ovpn 文件拷贝到 C:\Program Files\OpenVPN\config 目录。

client.ovpn 文件配置完成后的内容如下:

client
dev tun
;proto tcp
proto udp
remote 10.10.204.62 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt
cert renwoleusers.crt
key renwoleusers.key
remote-cert-tls server
tls-auth ta.key 1
cipher AES-256-CBC
verb 3

此时点击桌面上的 “OpenVPN GUI” 图标,如果不出意外即可连接成功,若连接报错,请查看分析 C:\Users\yunxi\OpenVPN\log\client.log 日志文件。

linux Centos7默认firewalld防火墙使用命令

Centos7默认的firewalld防火墙说实话真不好用,不如使用iptables。但一物的存在是有它的道理,比如在高级功能方面iptables就要次于firewalld防火墙,所以建议大家还是要追随主流,现在开源产品相对过去的版本更新很快,所以要跟得上脚步,特别是对于运维人员来讲。下面是我平时在生产环境当中维护机器常用到的,大家可以参考下。

基本操作;

 # systemctl start firewalld //启动
 # systemctl status firewalld //状态
 # systemctl disable firewalld //禁用
 # systemctl stop firewalld //停止

systemctl在centos7中必不可缺少的管理工具,它具备service和chkconfig的所有功能;

 # systemctl start firewalld.service //启动某个服务
 # systemctl stop firewalld.service //关闭某个服务
 # systemctl restart firewalld.service //重启某个服务
 # systemctl status firewalld.service //显示某个服务的状态
 # systemctl enable firewalld.service //开机时随机自启动
 # systemctl disable firewalld.service //禁止开机启动
 # systemctl is-enabled firewalld.service //查看是否开机启动
 # systemctl list-unit-files|grep enabled //查看已经启动的服列表
 # systemctl --failed //查看启动失败的服务列表

基本配置firewalld-cmd;

 # firewall-cmd --version //查看防火墙版本
 # firewall-cmd --help //查看命令操作帮助
 # firewall-cmd --state //显示当前状态
 # firewall-cmd --zone=public --list-ports //查看所有打开运行的端口
 # firewall-cmd --reload //不重启立即加载
 # firewall-cmd --list-all-zones | more //查看区域信息情况
 # firewall-cmd --get-zone-of-interface=eth0 //查看指定接口所属区域
 # firewall-cmd --panic-on //拒绝所有包
 # firewall-cmd --panic-off //取消拒绝状态
 # firewall-cmd --query-panic //查看是否拒绝

举个例子,如何打开一个端口,例如3306;

 # firewall-cmd --zone=public --add-port=3306/tcp --permanent //添加3306端口(--permanent)永久生效,没有此参数重启后失效
 # firewall-cmd --reload //不重启立即加载
 # firewall-cmd --zone= public --query-port=3306/tcp //查看加入3306端口状态
 # firewall-cmd --zone= public --remove-port=3306/tcp --permanent //删除刚刚加入的防火墙规则3306
 # firewall-cmd --permanent --remove-icmp-block=echo-request //删除禁ping
 # firewall-cmd --permanent --add-icmp-block=echo-request //开启禁ping
 # firewall-cmd --get-service //查看已被允许的信息

具体的规则管理,可以使用 firewall-cmd,具体的使用方法可以

 # firewall-cmd --help

firewall-cmd高级功能可以到官方资料库了解更多信息。

//fedoraproject.org/wiki/FirewallD/zh-cn
//access.redhat.com/documentation/zh-CN/Red_Hat_Enterprise_Linux/7/html/Security_Guide/sec-Using_Firewalls.html

//www.ibm.com/developerworks/cn/linux/1507_caojh/

注意:以上操作方法以及命令并不适用于Centos7以下版本,除你在其他linux发行版单独安装firewall的。