zoukankan      html  css  js  c++  java
  • 安装Jumpserver

     全程按照官方安装文档流程完成本次安装:

    官方文档地址:http://docs.jumpserver.org/zh/docs/step_by_step.html

    一、系统环境

    Centos7 x64
    setenforce 0  # 可以设置配置文件永久关闭:/etc/selinux/config
    systemctl stop iptables.service
    systemctl stop firewalld.service
    
    # 修改字符集,否则可能报 input/output error的问题,因为日志里打印了中文
    localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8
    export LC_ALL=zh_CN.UTF-8
    echo 'LANG="zh_CN.UTF-8"' > /etc/locale.conf
    
    #更换源地址
    mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.163.com/.help/CentOS7-Base-163.repo
    yum clean all
    yum makecache

    二、准备 Python3 和 Python 虚拟环境

    1、安装依赖包
    yum -y install wget sqlite-devel xz gcc automake zlib-devel openssl-devel epel-release git
    
    2、编译安装
    cd /usr/local/src/
    wget https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tar.xz
    tar xf Python-3.6.6.tar.xz && cd Python-3.6.6
    ./configure && make && make install
    # 这里必须执行编译安装,否则在安装 Python 库依赖时会有麻烦..
    
    3、建立Python虚拟环境
    #因为 CentOS 6/7 自带的是 Python2,而 Yum 等工具依赖原来的 Python,为了不扰乱原来的环境我们来使用 Python 虚拟环境
    [root@jumpserver Python-3.6.6]# cd /opt/
    [root@jumpserver opt]# pwd
    /opt
    [root@jumpserver opt]# python3 -m venv py3
    [root@jumpserver opt]# source /opt/py3/bin/activate
    (py3) [root@jumpserver opt]# 
    
    4、 自动载入 Python 虚拟环境配置
    #此项仅为懒癌晚期的人员使用,防止运行 Jumpserver 时忘记载入 Python 虚拟环境导致程序无法运行。使用autoenv
    cd /opt
    git clone git://github.com/kennethreitz/autoenv.git
    echo 'source /opt/autoenv/activate.sh' >> ~/.bashrc
    source ~/.bashrc

    三、安装Jumpserver

    1、下载或Clone项目
    项目提交较多 git clone 时较大,你可以选择去 Github 项目页面直接下载zip包
    cd /opt/
    git clone https://github.com/jumpserver/jumpserver.git && cd jumpserver && git checkout master
    echo "source /opt/py3/bin/activate" > /opt/jumpserver/.env  # 进入 jumpserver目录时将自动载入 python 虚拟环境
    
    # 首次进入 jumpserver 文件夹会有提示,按 y 即可
    Are you sure you want to allow this? (y/N) y
    
    2、安装依赖 RPM 包
    cd /opt/jumpserver/requirements
    yum -y install $(cat rpm_requirements.txt)  # 如果没有任何报错请继续
    
    3、安装 Python 库依赖
    pip install -r requirements.txt  # 不要指定-i参数,因为镜像上可能没有最新的包,如果没有任何报错请继续
    注释:Pip 加速设置请参考 <https://segmentfault.com/a/1190000011875306>
    
    4、安装 Redis, Jumpserver 使用 Redis 做 cache 和 celery broke
    yum -y install redis
    systemctl start redis
    systemctl enable redis
    5、安装 MySQL 本教程使用 Mysql 作为数据库,如果不使用 Mysql 可以跳过相关 Mysql 安装和配置 # centos7下安装的是mariadb yum -y install mariadb mariadb-devel mariadb-server systemctl enable mariadb systemctl start mariadb 6、创建数据库 Jumpserver 并授权 $ mysql create database jumpserver default charset 'utf8'; grant all on jumpserver.* to 'jumpserver'@'127.0.0.1' identified by 'somepassword'; flush privileges; 7、修改 Jumpserver 配置文件 cd /opt/jumpserver cp config_example.py config.py vi config.py
    #注意: 不要直接复制本文档的内容;配置文件是 Python 格式,不要用 TAB,而要用空格

    """
        jumpserver.config
        ~~~~~~~~~~~~~~~~~
    
        Jumpserver project setting file
    
        :copyright: (c) 2014-2017 by Jumpserver Team
        :license: GPL v2, see LICENSE for more details.
    """
    import os
    
    BASE_DIR = os.path.dirname(os.path.abspath(__file__))
    
    class Config:
        # Use it to encrypt or decrypt data
    
        # Jumpserver 使用 SECRET_KEY 进行加密,请务必修改以下设置
        # SECRET_KEY = os.environ.get('SECRET_KEY') or '2vym+ky!997d5kkcc64mnz06y1mmui3lut#(^wd=%s_qj$1%x'
        SECRET_KEY = '请随意输入随机字符串(推荐字符大于等于 50位)'
    
        # Django security setting, if your disable debug model, you should setting that
        ALLOWED_HOSTS = ['*']
    
        # DEBUG 模式 True为开启 False为关闭,默认开启,生产环境推荐关闭
        # 注意:如果设置了DEBUG = False,访问8080端口页面会显示不正常,需要搭建 nginx 代理才可以正常访问了
        DEBUG = False
    
        # 日志级别,默认为DEBUG,可调整为INFO, WARNING, ERROR, CRITICAL,默认INFO
        LOG_LEVEL = 'ERROR'
        LOG_DIR = os.path.join(BASE_DIR, 'logs')
    
        # 使用的数据库配置,支持sqlite3, mysql, postgres等,默认使用sqlite3
        # See https://docs.djangoproject.com/en/1.10/ref/settings/#databases
    
        # 默认使用SQLite,如果使用其他数据库请注释下面两行
        # DB_ENGINE = 'sqlite3'
        # DB_NAME = os.path.join(BASE_DIR, 'data', 'db.sqlite3')
    
        # # 如果需要使用mysql或postgres,请取消下面的注释并输入正确的信息,本例使用mysql做演示
        DB_ENGINE = 'mysql'
        DB_HOST = '127.0.0.1'
        DB_PORT = 3306
        DB_USER = 'jumpserver'
        DB_PASSWORD = 'somepassword'
        DB_NAME = 'jumpserver'
    
        # Django 监听的ip和端口,生产环境推荐把0.0.0.0修改成127.0.0.1,这里的意思是允许x.x.x.x访问,127.0.0.1表示仅允许自身访问
        # ./manage.py runserver 127.0.0.1:8080
        HTTP_BIND_HOST = '127.0.0.1'
        HTTP_LISTEN_PORT = 8080
    
        # Redis 相关设置
        REDIS_HOST = '127.0.0.1'
        REDIS_PORT = 6379
        REDIS_PASSWORD = ''
    
        def __init__(self):
            pass
    
        def __getattr__(self, item):
            return None
    
    class DevelopmentConfig(Config):
        pass
    
    class TestConfig(Config):
        pass
    
    class ProductionConfig(Config):
        pass
    
    # Default using Config settings, you can write if/else for different env
    config = DevelopmentConfig()


    继续如下操作

    1、生成数据库表结构和初始化数据
    cd /opt/jumpserver/utils
    bash make_migrations.sh
    
    2、运行 Jumpserver
    cd /opt/jumpserver
    ./jms start all  # 后台运行使用 -d 参数./jms start all -d
    
    #新版本更新了运行脚本,使用方式./jms start|stop|status|restart all  后台运行请添加 -d 参数
    运行不报错,请浏览器访问 http://http://10.10.10.60:8080 默认账号: admin 密码: admin 页面显示不正常先不用处理,跟着教程继续操作就行,后面搭建 nginx 代理就可以正常访问了!

    三、安装 SSH Server 和 WebSocket Server: Coco

    1、下载或 Clone 项目
    cd /opt
    source /opt/py3/bin/activate
    git clone https://github.com/jumpserver/coco.git && cd coco && git checkout master
    echo "source /opt/py3/bin/activate" > /opt/coco/.env  # 进入 coco 目录时将自动载入 python 虚拟环境
    
    2、安装依赖
    cd /opt/coco/requirements
    yum -y  install $(cat rpm_requirements.txt)
    pip install -r requirements.txt -i https://pypi.org/simple
    
    3、修改配置文件并运行
    cd /opt/coco
    cp conf_example.py conf.py  # 如果 coco 与 jumpserver 分开部署,请手动修改 conf.py
    vi conf.py
    # 注意对齐,不要直接复制本文档的内容
    #!/usr/bin/env python3
    # -*- coding: utf-8 -*-
    #
    
    import os
    
    BASE_DIR = os.path.dirname(__file__)
    
    
    class Config:
        """
        Coco config file, coco also load config from server update setting below
        """
        # 项目名称, 会用来向Jumpserver注册, 识别而已, 不能重复
        # NAME = "localhost"
        NAME = "coco"
    
        # Jumpserver项目的url, api请求注册会使用, 如果Jumpserver没有运行在127.0.0.1:8080,请修改此处
        # CORE_HOST = os.environ.get("CORE_HOST") or 'http://127.0.0.1:8080'
        CORE_HOST = 'http://127.0.0.1:8080'
    
        # 启动时绑定的ip, 默认 0.0.0.0
        # BIND_HOST = '0.0.0.0'
    
        # 监听的SSH端口号, 默认2222
        # SSHD_PORT = 2222
    
        # 监听的HTTP/WS端口号,默认5000
        # HTTPD_PORT = 5000
    
        # 项目使用的ACCESS KEY, 默认会注册,并保存到 ACCESS_KEY_STORE中,
        # 如果有需求, 可以写到配置文件中, 格式 access_key_id:access_key_secret
        # ACCESS_KEY = None
    
        # ACCESS KEY 保存的地址, 默认注册后会保存到该文件中
        # ACCESS_KEY_STORE = os.path.join(BASE_DIR, 'keys', '.access_key')
    
        # 加密密钥
        # SECRET_KEY = None
    
        # 设置日志级别 ['DEBUG', 'INFO', 'WARN', 'ERROR', 'FATAL', 'CRITICAL']
        # LOG_LEVEL = 'INFO'
    
        # 日志存放的目录
        # LOG_DIR = os.path.join(BASE_DIR, 'logs')
    
        # Session录像存放目录
        # SESSION_DIR = os.path.join(BASE_DIR, 'sessions')
    
        # 资产显示排序方式, ['ip', 'hostname']
        # ASSET_LIST_SORT_BY = 'ip'
    
        # 登录是否支持密码认证
        # PASSWORD_AUTH = True
    
        # 登录是否支持秘钥认证
        # PUBLIC_KEY_AUTH = True
    
        # 和Jumpserver 保持心跳时间间隔
        # HEARTBEAT_INTERVAL = 5
    
        # Admin的名字,出问题会提示给用户
        # ADMINS = ''
        COMMAND_STORAGE = {
            "TYPE": "server"
        }
        REPLAY_STORAGE = {
            "TYPE": "server"
        }
    
    
    config = Config()
    启动coco服务
    $ ./cocod start  # 后台运行使用 -d 参数./cocod start -d
    
    # 新版本更新了运行脚本,使用方式./cocod start|stop|status|restart  后台运行请添加 -d 参数
    启动成功后去Jumpserver 会话管理-终端管理(http://10.10.10.60:8080/terminal/terminal/)接受coco的注册,如果页面不正常可以等部署完成后再处理
    
    

    四. 安装 Web Terminal 前端: Luna

    Luna 已改为纯前端,需要 Nginx 来运行访问
    访问(https://github.com/jumpserver/luna/releases)下载对应版本的 release 包,直接解压,不需要编译
    
    4.1 解压 Luna
    cd /opt
    wget https://github.com/jumpserver/luna/releases/download/1.3.2/luna.tar.gz
    tar xvf luna.tar.gz
    chown -R root:root luna
    
    
    
    
    

    五. 安装 Windows 支持组件(如果不需要管理 windows 资产,可以直接跳过这一步)

    因为手动安装 guacamole 组件比较复杂,这里提供打包好的 docker 使用, 启动 guacamole
    5.1 Docker安装 (仅针对CentOS7,CentOS6安装Docker相对比较复杂)(国内不一定能使用)
    yum remove docker-latest-logrotate  docker-logrotate  docker-selinux dockdocker-engine
    yum install -y yum-utils   device-mapper-persistent-data   lvm2
    
    # 添加docker官方源
    yum-config-manager --add-repo  https://download.docker.com/linux/centos/docker-ce.repo
    yum makecache fast
    yum install docker-ce -y
    
    # 国内部分用户可能无法连接docker官网提供的源,这里提供阿里云的镜像节点供测试使用(可以先使用这个)
    yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    rpm --import http://mirrors.aliyun.com/docker-ce/linux/centos/gpg
    yum makecache fast
    yum -y install docker-ce
    
    systemctl start docker
    systemctl status docker
    systemctl enable docker
    
    
    
    5.2 启动 Guacamole
    这里所需要注意的是 guacamole 暴露出来的端口是 8081,若与主机上其他端口冲突请自定义
    
    修改下面 docker run 里的 JUMPSERVER_SERVER 参数,填上 Jumpserver 的 url 地址, 启动成功后去 Jumpserver 会话管理-终端管理(http://10.10.10.60:8080/terminal/terminal/)接受[Gua]开头的一个注册,如果页面显示不正常可以等部署完成后再处理
    
    #docker run --name jms_guacamole -d 
      -p 8081:8081 -v /opt/guacamole/key:/config/guacamole/key 
      -e JUMPSERVER_KEY_DIR=/config/guacamole/key 
      -e JUMPSERVER_SERVER=http://10.10.10.60:8080 
      registry.jumpserver.org/public/guacamole:latest


    六. 配置 Nginx 整合各组件

    6.1 安装 Nginx 根据喜好选择安装方式和版本
    yum -y install nginx
    
    6.2 准备配置文件 修改 /etc/nginx/nginx.conf
    vim /etc/nginx/nginx.conf
    ... ...
    # 把默认server配置块改成这样
    server {
        listen 80;  # 代理端口,以后将通过此端口进行访问,不再通过8080端口
    
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    
        location /luna/ {
            try_files $uri / /index.html;
            alias /opt/luna/;
        }
    
        location /media/ {
            add_header Content-Encoding gzip;
            root /opt/jumpserver/data/;
        }
    
        location /static/ {
            root /opt/jumpserver/data/;
        }
    
        location /socket.io/ {
            proxy_pass       http://localhost:5000/socket.io/;  # 如果coco安装在别的服务器,请填写它的ip
            proxy_buffering off;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
        }
    
        location /guacamole/ {
            proxy_pass       http://localhost:8081/;  # 如果guacamole安装在别的服务器,请填写它的ip
            proxy_buffering off;
            proxy_http_version 1.1;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $http_connection;
            access_log off;
            client_max_body_size 100m;  # Windows 文件上传大小限制
        }
    
        location / {
            proxy_pass http://localhost:8080;  # 如果jumpserver安装在别的服务器,请填写它的ip
        }
    }
    
    ... ...
    
    6.3 运行 Nginx
    nginx -t   # 确保配置没有问题, 有问题请先解决
    
    # CentOS 7
    systemctl start nginx
    systemctl enable nginx
     

    6.4 开始使用 Jumpserver

    检查应用是否已经正常运行
    
    $ cd /opt/jumpserver
    $ ./jms status  # 确定jumpserver已经运行,如果没有运行请重新启动jumpserver
    
    $ cd /opt/coco
    $ ./cocod status  # 确定jumpserver已经运行,如果没有运行请重新启动coco
    
    # 如果安装了 Guacamole
    $ docker ps  # 检查容器是否已经正常运行,如果没有运行请重新启动Guacamole
    服务全部启动后,访问 http://10.10.10.60,访问nginx代理的端口,不要再通过8080端口访问
    
    默认账号: admin 密码: admin
    如果部署过程中没有接受应用的注册,需要到Jumpserver 会话管理-终端管理 接受 Coco Guacamole 等应用的注册。


    6.5、** 测试连接**
    如果登录客户端是 macOS 或 Linux ,登录语法如下
    $ ssh -p2222 admin@192.168.244.144
    $ sftp -P2222 admin@192.168.244.144
    密码: admin
    
    如果登录客户端是 Windows ,Xshell Terminal 登录语法如下
    $ ssh admin@192.168.244.144 2222
    $ sftp admin@192.168.244.144 2222
    密码: admin
    如果能登陆代表部署成功
    
    # sftp默认上传的位置在资产的 /tmp 目录下
    # windows拖拽上传的位置在资产的 Guacamole RDP上的 G 目录下

    6.5、服务器重启后需要的恢复操作

    如果有一天服务器因其他原因重启了,恢复Jumpserver需做如下操作:

    1、检查selinux:
    [root@jumpserver ~]# getenforce 
    Enforcing
    [root@jumpserver ~]# setenforce 0
    注释:可以执行修改/etc/selinux/config文件,永久禁用;
    
    2、查看防火墙是否开放80端口
    3、查看mysql、redis、nginx、docker是否正常运行
    systemctl start docker
    docker ps
    
    4、启动其他进程
    [root@jumpserver ~]# source /opt/py3/bin/activate
    (py3) [root@jumpserver ~]# cd /opt/jumpserver
    (py3) [root@jumpserver jumpserver]# ./jms start all -d
    
    (py3) [root@jumpserver jumpserver]# cd /opt/coco
    (py3) [root@jumpserver coco]# ./cocod start -d

    (py3) [root@jumpserver coco]# docker restart jms_guacamole
    # 如果接受注册后显示不在线,重启gua就好了

     

    6.6、jumpserver常见问题汇总

    官方文档: http://docs.jumpserver.org/zh/docs/faq.html

    GItHub:https://github.com/jumpserver/jumpserver/wiki/v0.3.2-%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98-FAQ

    这时就可以在浏览器内输入:http://10.10.10.60  打开Jumpserver了

    七、Jumpserver的基本使用

    前提条件:

      一台安装好 Jumpserver 系统的可用主机(堡垒机)

      一台或多台可用的 Linux、Windows资产设备(被管理的资产)

     7.1、系统设置

      1.1 基本设置

      # 修改 URL 的 localhost 为你的实际 url 地址,否则邮件收到的地址将为 localhost,修改完 url 地址后需要重启 jumpserver 服务(重启才能生效,后续会解决这个问题)

      

      1.2、邮箱设置

      

    注释:

    如果是163的邮箱,当传入发送邮箱正确的用户名和密码时,总是收到到:550 User has no permission这样的错误,其实我们用Java发送邮件时相当于自定义客户端根据用户名和密码进行登录,
    然后使用SMTP服务发送邮件。但新注册的163邮件默认是不开启客户端授权验证的(对自定的邮箱大师客户端默认开启),因此登录总是会被拒绝,验证没有权限。解决办法是进入163邮箱,进入邮箱中心——客户端授权密码,选择开启即可;
    有的用户由于开启了授权码,如果输入邮箱登录密码的话会报535 Error:authentication failed

      3.3、系统设置项内的其他设置(略)

    7.2、创建用户

      1.1、创建用户组

      jumpserver的普通用户是用于登录web管理页面以及命令行登录该堡垒机的用户,首先创建一个用户组

      

      1.2、创建用户组

      7.3、资产管理

      1.1、资产列表类

      1.2、管理用户类

    管理用户是资产上的 root,或拥有 NOPASSWD: ALL sudo 权限的用户,Jumpserver 使用该用户来推送系统用户、获取资产硬件信息等
    
    # 如果使用ssh私钥管理资产,需要先在资产上设置,这里举个例子供参考(本例登录资产使用root为例)
    (1). 在资产上生成 root 账户的公钥和私钥
      # ssh-keygen -t rsa  # 默认会输入公钥和私钥文件到 ~/.ssh 目录
    
    (2). 将公钥输出到文件 authorized_keys 文件,并修改权限
      # cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
      # chmod 400 ~/.ssh/authorized_keys
    
    (3). 打开RSA验证相关设置
      $ vim /etc/ssh/sshd_config
    
          RSAAuthentication yes
          PubkeyAuthentication yes
          AuthorizedKeysFile      .ssh/authorized_keys
    
    (4). 重启 ssh 服务
      # service sshd restart
    
    (5). 上传 ~/.ssh 目录下的 id_rsa 私钥到 jumpserver 的管理用户中保存即可!     

    # 这样就可以使用 ssh私钥 进行管理服务器
    # 名称可以按资产树来命名。用户名root。密码和 SSH 私钥必填一个

      1.3、系统用户类

    个人理解:管理用户只是用来初次设置系统时使用:在资产系统中创建一个指定的、权限有限制的Jump用户;获取系统信息。系统用户是:需要存在资产系统中的普通用户

    附录:(等同于Linux系统中的sudo授权

    # 系统用户是 Jumpserver 跳转登录资产时使用的用户,可以理解为登录资产用户
    # 系统用户的 Sudo 栏设定用户的 sudo 权限
    
    # 这里简单举几个例子
    Sudo /bin/su  # 当前系统用户可以免sudo密码执行sudo su命令
    
    Sudo /usr/bin/git,/usr/bin/php,/bin/cat,/bin/more,/bin/less,/usr/bin/tail
    # 当前系统用户可以免sudo密码执行git php cat more less tail
    
    Sudo !/usr/bin/yum  # 禁止执行 yum 权限
    
    # 此处的权限应该根据使用用户的需求汇总后定制,原则上给予最小权限即可
    # 下图为不允许用户执行一些危险的操作,允许其他的所有权限

     

      1.4、网域列表  

    如果有多个的互相隔离的网络,设置资产属于的网域,使用网域网关跳转登录

      1.5、标签管理

        就是给资产打个标签(起好主机名比打标签强

      

    7.4、权限管理

     

    7.4.1 授权后进行测试

    注释:如果不想使用密匙,也可以使用密码

    7.5会话管理

      1.1、在线会话

        记录当前连接资产的会话用户;

      1.2、历史会话

       

    注释:会话完成后,需要关闭对应的会话窗口,否则就会出现ID:2的现象;

      1.3、命令记录

        记录会话中输入的命令

                 

      1.4、web终端

        

      1.5、终端管理

         

    7.6、作业中心

       1.1、任务列表

    7.7、日志审计

      1.1、FTP审计

     8.1防火墙设置(iptables)

    (py3) [root@jumpserver opt]# cat /etc/sysconfig/iptables
    #nat表是创建映射的时候添加的,不用修改
    *nat :PREROUTING ACCEPT [5130:306500] :INPUT ACCEPT [4914:295268] :OUTPUT ACCEPT [28601:1717434] :POSTROUTING ACCEPT [28601:1717434] :DOCKER - [0:0] -A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER -A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE -A POSTROUTING -s 172.17.0.2/32 -d 172.17.0.2/32 -p tcp -m tcp --dport 8080 -j MASQUERADE -A DOCKER -i docker0 -j RETURN -A DOCKER ! -i docker0 -p tcp -m tcp --dport 8081 -j DNAT --to-destination 172.17.0.2:8080 COMMIT
    #下边的需要自己设置
    *filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [1977:170592] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -s 10.100.0.0/24 -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT #只有特定IP可以访问80端口-A INPUT -s 172.17.0.2/32 -p tcp -m state --state NEW --dport 8080 -j ACCEPT #这个是必须要设置的!!!! -A INPUT -p tcp -m tcp --dport 10052 -j ACCEPT #这个是可以使用ssh登录jumpserver的主机 -A INPUT -j REJECT --reject-with icmp-host-prohibited -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT
    
    
    
  • 相关阅读:
    75. Sort Colors
    101. Symmetric Tree
    121. Best Time to Buy and Sell Stock
    136. Single Number
    104. Maximum Depth of Binary Tree
    70. Climbing Stairs
    64. Minimum Path Sum
    62. Unique Paths
    css知识点3
    css知识点2
  • 原文地址:https://www.cnblogs.com/huangyanqi/p/9291105.html
Copyright © 2011-2022 走看看