分类 Linux相关 下的文章

在pve中,修改母鸡ip地址,一般需要修改3个文件

# 联网ip
vi /etc/network/interfaces

# 提示ip
vi /etc/issue

# 本机解析
vi /etc/hosts

修改完上面3个地址的ip以后,reboot,重启PVE。

1.先启动一个nginx

docker container run -d -p 80:80 -p 443:443 --rm --name nginx nginx

--rm 停止后删除

-d 后台运行

-p 端口映射

--name 名称

2.拷贝配置文件

docker container cp nginx:/etc/nginx .
mv nginx conf

这样,就将docker中的/etc/nginx 文件夹。 copy到了当前目录下
之后,通过mv,将nginx文件夹改名为conf

这个时候,看配置文件中,就可以看到根目录/usr/share/nginx/html

3.接下来,就可以映射目录了

docker stop nginx                        # 前面--rm就保证了自动删除
docker container run -d -p 80:80 -p 443:443 \
--restart always \
-v $PWD/html:/usr/share/nginx/html \
-v $PWD/conf:/etc/nginx \
--name nginx \
nginx

备注:这里一般都需要映射2个目录:1是网站文件存储目录、2是nginx配置目录

4.后面就开始配置nginx的配置文件了

server {
    listen       80;
    server_name  localhost;

    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name localhost;

    #请填写证书文件的相对路径或绝对路径
    ssl_certificate /etc/nginx/certs/website.com_bundle.crt;

    #请填写私钥文件的相对路径或绝对路径
    ssl_certificate_key /etc/nginx/certs/website.com.key;
    ssl_session_timeout 5m;

    #请按照以下协议配置
    ssl_protocols TLSv1.2 TLSv1.3;

    #请按照以下套件配置,配置加密套件,写法遵循 openssl 标准。
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;

    location / {
                root    /usr/share/nginx/html;
                index    index.html index.htm;
    }

    error_page    404        /404.html;
}

因为不清楚,通过nginx部署出来的文件是否会被扫描,或者想从本地其他位置调取。

但是,在配置location时,碰到了root以及alias,简单记录一下,这2个的区别。

root例子:

server {
        location /image {
                root /tmp/folder/;
                autoindex on;
        }
}

在上面这个配置里,使用了root

root的意思是,会在后面带上URI,所以,上面访问https://xxx.com/image/a.png实际上,访问的是/tmp/folder/image/a.png

alias例子:

server {
        location /image {
                alias /tmp/folder;
        }
}

使用alias,后面不会带URI,所以,上面访问https://xxx.com/image/a.png实际上,访问的是/tmp/folder/a.png

总结:

root响应的路径:配置的(root)的路径 + 完整访问路径(location) + 静态文件

alias响应的路径:配置路径 + 静态文件

2者的区别,主要在于location的处理。

在网站上面开通了一台Linux机器以后,独立ipv4的附加,直接让小鸡面向全世界。这个时候,看着空荡荡的root命令行,需要做什么呢?

1.安全

重中之重的第一件事,就是安全了。要知道,拥有独立ip的机器,不可避免被众多扫描脚本扫来扫去。

apt update
apt upgrade
apt install vim wget curl git

# 新建用户
adduser $USER

# 给新用户 sudo权限
usermod -aG sudo $USER
# ps->!! sudo时 出现 unable to resolve host解决办法
# 修改 /etc/hosts,把主机名添加进去即可

# 在新用户目录下添加key,以后key登录
cd ~
mkdir .ssh
cd .ssh
touch authorized_keys
sudo chmod 600 authorized_keys
vi authorized_keys        # 打开的界面里,将自己的证书pub,插入进来

# 先测试,看能否key登录,后续再进行修改ssh登录端口
# 修改ssh登录端口、在打开的sshd_config中,逐行扫一遍,修改ssh端口、关闭root登录、关闭空密码、开放key登录
sudo vi /etc/ssh/sshd_config
# 重启ssh服务,sshd_config修改的会生效,下次连接的时候,要注意了
sudo systemctl restart sshd.service

2.安装docker

在Linux中部署服务的时候,总会因为不同程序版本,导致失败,使用docker容器,一劳永逸!

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo usermod -aG docker $(whoami)

OK,安装docker,并且将当前用户添加到了docker用户组,这样就不需要每次sudo来执行docker了

3.增加swap缓存

可以先使用free -m 来查看,如果已经存在,也可以不用安装了。

cd /opt
sudo mkdir swap
cd swap
sudo dd if=/dev/zero of=swapfile bs=1024 count=1000000     #1G大小
sudo mkswap /opt/swap/swapfile     # 把文件转换为swap文件
sudo swapon /opt/swap/swapfile     #激活

# 若需要开机自动挂载,需要修改/etc/fstab文件,在最后添加(sudo vi /etc/fstab)
/opt/swap/swapfile swap swap defaults 0 0

# 最后配置Swappiness值---定义使用交换空间的频率,0-100,默认60
cat /proc/sys/vm/swappiness            # 查看当前swap使用频率

sudo vi /etc/sysctl.conf
# 在打开的文件的最后一行加上
vm.swappiness=40                                # 数字越小,用的机会越少

完成,下面再带一些有关swap的删除操作

# 删除交换空间文件
sudo swapoff -v /opt/swap/swapfile

# 从/etc/fstab中去掉增加的自动挂载
# 最后删除实际的交换文件
sudo rm /opt/swap/swapfile

4.开启bbr

国际网络总会因为这样或那样的问题,抽风。所以,开启bbr算法,来优化一下。

# 查看内核
uname -a
# BBR内核要求为4.9,ubuntu18.04直接4.15

# 1.修改系统变量
sudo echo "net.core.default_qdisc=fq" >> /etc/sysctl.conf
sudo echo "net.ipv4.tcp_congestion_control=bbr" >> /etc/sysctl.conf

# 2.保存生效
sysctl -p

# 3.查看内核是否已开启BBR
sysctl net.ipv4.tcp_available_congestion_control
显示如下:
net.ipv4.tcp_available_congestion_control = bbr cubic reno

# 4.查看BBR是否启动
lsmod | grep bbr

5.使用ufw防火墙

方便、但是差点意思,所以,后来,笔者改成了iptables原生。毕竟ufw也是控制iptables的一种。这里仅留作记录,证明曾经拥有这份知识!

# 安装
apt update && apt install ufw

# 查看状态
sudo ufw status

# 启用/禁用
sudo ufw enable
sudo ufw disable

# 查看规则
sudo ufw status numbered

# 添加规则
sudo ufw default deny     #默认进站全禁
sudo ufw allow ssh     # 添加22端口
sudo ufw allow http     # 添加80端口
sudo ufw allow 80/tcp  # 添加80端口 tcp协议
sudo ufw allow 33333/udp     # 添加33333端口 udp协议
sudo ufw allow 8888:9999     # 添加8888到9999之间的接口
sudo ufw deny 11111       # 禁止11111端口

# 删除规则
sudo ufw delete allow 2222/tcp
sudo ufw delete <序号>       # ufw status numbered 查回来的序号

# 禁ping
# 1.编辑配置文件
sudo vim /etc/ufw/before.rules

# 2.允许ping
-A ufw-before-input -p icmp --icmp-type echo-request -j ACCEPT

# 3.禁止ping
-A ufw-before-input -p icmp --icmp-type echo-request -j DROP

# 4.让配置生效
sudo ufw reload

# 禁止ip
sudo ufw insert 1 deny from 1.1.1.1/16 to any
# 因为ufw的匹配机制,所以,后面拦截ip的时候,需要使用insert 1,表示插入第一

# 封禁ip
sudo vi /etc/ufw/before.rules
# 在 # End required lines 后面添加
-A ufw-before-input -s 162.243.0.0/16 -j DROP
-A ufw-before-input -s 59.83.0.0/16 -j DROP
# 之后
sudo ufw reload

6.fail2ban使用

占个坑,还没研究过。

7.Debian系统中的一些补充设置

在debian系统中,普通用户,无法输出类似ifconfig之类的命令

在用户的~/.profile文件里增加下面的配置

\# set PATH /usr/sbin
if [ -d "/usr/sbin" ] ; then
  PATH="/usr/sbin:$PATH"
fi

这样,每次ssh上来的时候,就能够自动加载了

在有的debian或ubuntu系统中,apt install 有时候无法补全相关命令

sudo apt install bash-completion

\# 之后在~/.bashrc文件中,添加—已有则不需要添加下面内容

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
 if [ -f /usr/share/bash-completion/bash_completion ]; then
  . /usr/share/bash-completion/bash_completion
 elif [ -f /etc/bash_completion ]; then
  . /etc/bash_completion
 fi
fi

有时候为了测试目标网站指定端口是否存在tcp服务,使用tcping工具

Debian/Ubuntu下安装方法:

# tcping会依赖tcptraceroute
sudo apt install tcptraceroute
# 下载
sudo wget http://www.vdberg.org/~richard/tcpping -O /usr/bin/tcping
# 增加执行权限
sudo chmod +x /usr/bin/tcping

除了tcping意外,还可以使用ncat(又叫nc)。不过nc,就等到额外的写了。

1.ssh端口转发--本地转发

ssh -L 127.0.0.1:10000:192.168.10.10:20000 -N -f username@192.168.10.2

参数说明:

​ -L 创建本地端口转发

​ -f 提示 ssh在后台运行

​ -N 提示 ssh 不要登录远程服务器

上面就是,将本地的10000端口通过192.168.10.2 转发到192.168.10.10的20000端口上

接下来,访问本地的10000端口,实际上就是访问的远程主机的20000端口了

2.ssh端口转发--远程转发

ssh -R 8080:127.0.0.1:3000 -N -f username@192.168.10.2

参数说明:

​ -R 创建远程端口转发

这个时候,当有人访问192.168.10.2的时候,就会通过转发,实际上访问的是你本机的3000端口了

Ps: 设置远程端口转发遇到问题时,需要看ssh服务器配置中的 GatewayPorts 设置为 yes.

3.ssh端口转发--动态转发

ssh -D 3000 username@192.168.10.2 -N

参数说明:

​ -D 创建动态转发,也就是隧道

这个时候,访问本地的3000端口,实际上,就是通过192.168.10.2 进行访问的

这种转发采用了SOCKS5,需要把HTTP请求转发成SOCKS5协议

举个栗子:

curl -x socks5://localhost:3000 http://www.example.com

请求被代理了,实际上访问example.com使用的是192.168.10.2

最后的PS:ssh端口转发,可以设置多级隧道的。A->B->C这样,把多台隧道连起来。

以下内容来自GPT,如果侵权,请联系管理员删除。

在Linux中,你可以使用wget命令进行文件下载,并且可以通过一些参数来实现断点续传。具体的参数是-c或--continue,它告诉wget从上次下载中断的地方继续下载。

下面是使用wget进行断点续传的示例命令:

wget -c <URL>

请将替换为你要下载文件的URL。当下载中断时,你可以再次运行相同的命令,wget会检测到已下载的部分,并从中断的地方继续下载。

注意:断点续传功能要求服务器支持Range头部,这样wget才能向服务器发送请求以获取文件的部分内容。不是所有的服务器都支持断点续传,如果服务器不支持,wget将无法进行断点续传。

备注:环境Debian/Ubuntu

编译安装

# 编译前的准备
sudo apt install g++ cmake curl wget gcc gdb

# 下载并开始编译
wget https://boostorg.jfrog.io/artifactory/main/release/1.81.0/source/boost_1_81_0.tar.gz
tar -zxvf boost_1_81_0.tar.gz
cd boost_1_81_0/
./bootstrap.sh --with-libraries=all --with-toolset=gcc
./b2 toolset=gcc

# 查看有什么错误信息
./b2 -q 

# 安装到指定位置
./b2 install --prefix=/opt/boost1.81

安装后的测试

​ 占位,留到后面添加