• letsencrypt renewal-hooks SSL 보안인증 자동갱신

    letsencrypt renewal-hooks SSL 보안인증 자동갱신

    Let’s Encrypt renewal Hooks

    크론잡을 이용하여 아래 명령어를 입력하면 Let’s Encrypt SSL 보안 인증이 자동으로 갱신됩니다.

    하지만 보통 80 포트를 사용하고 있기에 apache 서버 80포트를 사용하고 있다면 중지를 먼저 해야합니다.

    스크립트를 이용하여 미리 아파치를 종료하고 켜고 반복할수 있겠지만…

    만료일이 도달하지 않을 경우 필요 이상으로 httpd 를 재실행 할 수 있습니다.

    crontab -e
    12 1,12 * * * root certbot renew --no-self-upgrade

    이를 방지 하기 위해서 Let’s Encrypt 3개월 무료 갱신 후크를 이용한 apache 중지, 실행, 재실행을 할 수 있습니다.

    스크립트 안에는 딱히 명령어가 많지는 않고 https 를 start, stop 명령만 넣었습니다.

    후킹에는 총 3개의 폴더로 구성되어 있습니다.

    deploy 배포후에 동작하는 shell script (재시작을 보통 넣지만 저는 start 를 입력했습니다)

    systemctl start httpd.service

    post 인증명령어 동장 후 무조건 진행하는 shell script

    systemctl start httpd.service

    pre 인증 전 미리 동작하는 shell script

    systemctl stop httpd.service

    하나하나 직접 만들어도 되지만 Let’s Encrypt 폴더가 /etc/letsencrypt 로 시작한다면 아래 명령어로 일괄 다운받아 설치 할 수 있습니다. 제가 서버 추가할때마다 아래 명령어를 그대로 복사해서 붙여넣고 있습니다.

    # 만약 다른 스크립트가 있다면 아래 명령어를 절대 실행해선 안됩니다. 모두 삭제됩니다.
    
    cd /etc/letsencrypt
    rm -rf /etc/letsencrypt/renewal-hooks/
    wget https://vlog.tion.co.kr/app/renewal-hooks.tar
    tar xvf renewal-hooks.tar
    rm -rf renewal-hooks.tar
    
    ll
    
    cd /etc/letsencrypt/renewal-hooks/
    du -ha
    

    파일이 정상적으로 다운받고 압축이 잘 풀렸는지 확인까지 한눈에 파악되니 쉽게 자동 인증서 갱신이 될듯합니다.

  • [ 해결 ] VMWARE VM-Tools 설치 안될때 윈도우7 SP1 보안업데이트 SHA-2 보안알고리즘 패치하세요

    [ 해결 ] VMWARE VM-Tools 설치 안될때 윈도우7 SP1 보안업데이트 SHA-2 보안알고리즘 패치하세요

    윈도우7 SP1 에서 vmware vm-tools 설치가 안되는 경우 있습니다.

    이때에는 보안업데이트를 제대로 하지 않아서입니다.

    보안업데이트 SHA-2 보안알고리 패치를 해야합니다.

    파일은 32비트 64비트 모두 다운받아놓았습니다.

    다른 윈도우에서는 접속을 하더라도 다운로드 받을 수 없어 파일을 리눅스맨 블로그에 올려놓았습니다.

    https://catalog.update.microsoft.com/Search.aspx?q=KB4474419

    보안 설치 후 윈도우 다시 시작하기 하면 아래처럼 업데이트를 받습니다.

    다시 VMWARE Tools 를 설치하면 정상적으로 에러 없이 설치가 진행됩니다.

    매번 VMware Tools 를 설치하면 설치 도중에 빨간색 경고창이 뜨면서 에러만 발생하고 설치가 안되었습니다.

    처음에는 윈도우7 SP1 설치가 안되어서 안되더니 SP1 업데이트 이 후에도 설치가 안되어서 이것저것 알아보다가

    보안업데이트 SHA-2 보안알고리 문제를 파악하고 패치 이후 모든것들이 잘 되기 시작했습니다.

    만약 이 패치가 진행되지 않게된다면 아래 내용들을 사용할 수 없게됩니다.

    닷넷 프레임워크 4.7버전 이상의 버전

    VMWARE Tools 설치 불가능

    익스플로러 브라우저 11버전 이상 설치 불가능

    패치 잘하세요~

  • ESXi 관리자 root 접속 차단 해킹막는방법

    ESXi 관리자 root 접속 차단 해킹막는방법

    사용자 이름이나 암호가 잘못되어 로그인을 완료할 수 없습니다.

    예전에 이와 관련하여 글을 작성한적 있습니다.

    ESXi 접속 시도가 많아 아래처럼 나오면서 관리자가 접속 못하는 일이 벌어집니다.

    예전에 이부분의 글을 작성하면서 사설 IP가 답이라고 생각했었죠.

    그런데 사설IP를 달기위해서는 랜카드2개와 공유기가 필요합니다.

    외부에서 VMWARE에서 네트워크 연결을 바로 할 수 없다는 점에서 상당히 불편하더군요.

    이를 보안하기 위해 글을 다시 작성하고 있는중입니다.

    ESXi ROOT 접속 차단

    ESXi root 접속을 막아버리고 모든 로그인 접속 시도를 수용하는 방식을 택하였습니다.

    root로 지속적으로 접속 실패시 root계정을 Lock 시켜버립니다.

    그리고 위에서 보셨던 [ 사용자 이름이나 암호가 잘못되어 로그인을 완료할 수 없습니다. ] 이 멘트와 함께 로그인 자체가 막혀버리게 됩니다.

    당장 접속이 되도록 풀어야하니 VM 게스트 PC를 모두 종료하고 재부팅을 한번 하시던지…

    root 접속이 안될때 timeout 시간을 0으로 바꾸고 [ Restart Management Agents ] 눌러주세요.

    (※ DCUI 모드에서 F2번 눌러 [ Troubleshooting Options ] 항목)

    원천적으로 ROOT 계정의 권한을 없애버릴경우 가장 이상적인 방법같습니다.

    ESXi root 관리자 사용안함

    1. [ 관리 -> 보안 및 사용자 -> 사용자 ] 이동해주세요.

    사용자 root 하나가 나와있다면 정상입니다.

    이곳에 이제 사용자 추가를 할겁니다.

    2. 사용자를 추가합니다.

    설명항목은 필수가 아니며 어떠한 계정인지 알기 쉽도록 적는 설명란입니다.

    새로운 ESXi 아이디가 추가 되었다면 권한을 줘야합니다.

    지금은 아무런 권한이 없어서 할 수 있는게 없습니다.

    3. 관리자 권한을 부여합니다.

    [ 호스트 -> 작업 -> 사용 권한 ] 항목을 들어가서 [ 사용자 추가 ] 항목을 클릭합니다.

    방금 생성한 계정을 선택합니다.

    관리자 항목을 선택합니다.

    Root 모든 항목을 체크합니다. (관리자 선택하면 자동으로 모두 체크됩니다)

    사용자 추가 버튼을 눌러주세요.

    추가 된 아이디가 관리자 권한을 획득한것을 확인하였습니다.

    4. 로그아웃 하고 새로 만든 계정으로 로그인합니다.

    이 과정은 root 계정을 역할을 없애서 로그인 접속할 수 없게 만들기 위함입니다.

    로그인이 정상적으로 되었는것을 확인하였습니다.

    다시 [ 호스트 -> 작업 -> 사용 권한 관리 ] 항목을 들어갑니다.

    [ 관리자 ] 항목을 [ 권한 없음 ] 항목응로 변경 합니다.

    정상적으로 바뀌었습니다.

    이제 로그아웃하여 root 로그인을 시도해봅니다.

    이 작업을 수행할 수 있는 사용 권한이 거부되었습니다.

    라고 나왔다면 정상적으로 되었습니다.

  • 워드프레스 필수 스니펫

    워드프레스 필수 스니펫

    code-snipptes 플러그인에서 필수로 만들어야 하는 항목들이 있습니다.

    처음 워드프레스를 만들면 head 영역에 워드프레스 검색이 되도록 javascript 입력해야하는경우도 있고

    또 테마의 라이선스 항목을 스타일로 없애기 위해 jQuery 프레임워크를 호출하여 사용하기도 합니다.

    이러한 필수 스니펫 항목을 일괄 import 할 수 있도록 json 파일로 만들어놓았습니다.

    파일을 다운받아서 code-snippets 플러그인에 import 하여 필요한 항목을 enabled 시켜서 사용하면 됩니다.

    워드프레스 설치 할때 플러그인도 새로 까셔야 하죠?

    필수 플러그인 바로 빠르게 설치 할 수 있도록 명령어로 구성해놓았습니다..

    필터에 업로드 Mimes 타입을 json 파일도 등록하였습니다.

    json 파일을 인터넷 다 검색해보면 text 로 타입을 잡아놨던데…. 잘못된 정보라서 정정해서 사용되도록 해놓았습니다.

    따로 글 올려놓을테니 보시고 도움되시기 바랍니다.

    잘 사용하세요.

  • 워드프레스 필수 플러그인

    워드프레스 필수 플러그인

    다른 플러그인의 설치 유무는 크게 중요하지 않습니다.

    하지만 위의 8개의 플러그인은 상당히 중요합니다.

    필수 항목이면서 매번 워드프레스를 설치할때마다 반복해야 하는 작업이라서 자동화를 위해 글을 작성합니다.

    일단 위의 플러그인을 일괄 압축하여 리눅스맨 워드프레스 블로그에 올려놓았습니다.

    사용방법은 아래 명령어를 그대로 wp-content 폴더에서 실행하면 됩니다.

    이때 기존 플러그인 폴더가 삭제되므로 이미 사용중인 워드프레스에서는 절대 실행하면 안됩니다.

    다시 말씀드리지만 처음에 워드프레스를 설치 할 때 설치 해야할 필수 항목입니다.

    #시작은 wp-content 폴더에서 명령어를 입력해주세요
    
    cd wp-content
    rm -rf plugins
    wget https://vlog.tion.co.kr/app/plugins.tar
    tar xvf plugins.tar
    rm -rf plugins.tar
    chown apache.apache plugins/ -R
    
    ll
    
    

    플러그인 설치를 위해 대략 5분정도 시간이 걸립니다. 이 시간을 줄이기 위함입니다.

    플러그인은 웹검색엔진 SEO 최적화에 집중되어져 있습니다.

    Yoast SEO 환경설정은 아래 내용을 그대로 import 넣으시기 바랍니다.

    ; These are settings for the Yoast SEO plugin by Yoast.com
    
    [wpseo]
    tracking = 
    license_server_version = 
    ms_defaults_set = 
    ignore_search_engines_discouraged_notice = 
    indexing_first_time = 
    indexing_started = 
    indexing_reason = ""
    indexables_indexing_completed = 
    version = "17.3"
    previous_version = "14.5"
    disableadvanced_meta = 1
    enable_headless_rest_endpoints = 1
    ryte_indexability = 1
    baiduverify = ""
    googleverify = ""
    msverify = ""
    yandexverify = ""
    site_type = "blog"
    has_multiple_authors = ""
    environment_type = "production"
    content_analysis_active = 1
    keyword_analysis_active = 1
    enable_admin_bar_menu = 1
    enable_cornerstone_content = 1
    enable_xml_sitemap = 1
    enable_text_link_counter = 1
    show_onboarding_notice = 
    first_activated_on = "1535634814"
    myyoast-oauth = 
    semrush_integration_active = 
    semrush_country_code = "us"
    permalink_structure = ""
    home_url = ""
    dynamic_permalinks = 
    category_base_url = ""
    tag_base_url = ""
    enable_enhanced_slack_sharing = 
    zapier_integration_active = 
    zapier_api_key = ""
    enable_metabox_insights = 
    enable_link_suggestions = 
    algolia_integration_active = 
    
    [wpseo_titles]
    forcerewritetitle = 
    separator = "sc-dash"
    title-home-wpseo = "%%sitename%%"
    title-author-wpseo = "%%name%%, Author at %%sitename%%"
    title-archive-wpseo = "%%date%% %%page%% %%sep%% %%sitename%%"
    title-search-wpseo = "%%searchphrase%% %%page%% %%sep%% %%sitename%%"
    title-404-wpseo = "%%sitename%% %%tag_description%% %%tag%%"
    social-title-author-wpseo = "%%name%%"
    social-title-archive-wpseo = "%%date%%"
    social-description-author-wpseo = ""
    social-description-archive-wpseo = ""
    social-image-url-author-wpseo = ""
    social-image-url-archive-wpseo = ""
    social-image-id-author-wpseo = 0
    social-image-id-archive-wpseo = 0
    metadesc-home-wpseo = "%%sitedesc%%"
    metadesc-author-wpseo = "%%sitename%% %%tag_description%% %%tag%%"
    metadesc-archive-wpseo = "%%sitename%% %%tag_description%% %%tag%%"
    rssbefore = ""
    rssafter = ""
    noindex-author-wpseo = 
    noindex-author-noposts-wpseo = 
    noindex-archive-wpseo = 
    disable-author = 
    disable-date = 
    disable-post_format = 
    disable-attachment = 1
    breadcrumbs-404crumb = ""
    breadcrumbs-display-blog-page = 
    breadcrumbs-boldlast = 
    breadcrumbs-archiveprefix = ""
    breadcrumbs-enable = 
    breadcrumbs-home = ""
    breadcrumbs-prefix = ""
    breadcrumbs-searchprefix = ""
    breadcrumbs-sep = ""
    website_name = ""
    person_name = ""
    person_logo = ""
    person_logo_id = 0
    alternate_website_name = ""
    company_logo = ""
    company_logo_id = 0
    company_logo_meta = 
    person_logo_meta = 
    company_name = ""
    company_or_person = "company"
    company_or_person_user_id = 1
    stripcategorybase = 
    open_graph_frontpage_title = "%%sitename%%"
    open_graph_frontpage_desc = ""
    open_graph_frontpage_image = ""
    open_graph_frontpage_image_id = 0
    title-post = "%%title%%"
    metadesc-post = "%%title%% %%tag%%"
    noindex-post = 
    display-metabox-pt-post = 1
    post_types-post-maintax = 0
    schema-page-type-post = "WebPage"
    schema-article-type-post = "Article"
    social-title-post = "%%title%%"
    social-description-post = ""
    social-image-url-post = ""
    social-image-id-post = 0
    title-page = "%%title%%"
    metadesc-page = "%%title%% %%tag%%"
    noindex-page = 
    display-metabox-pt-page = 1
    post_types-page-maintax = 0
    schema-page-type-page = "WebPage"
    schema-article-type-page = "None"
    social-title-page = "%%title%%"
    social-description-page = ""
    social-image-url-page = ""
    social-image-id-page = 0
    title-attachment = "%%title%% %%page%% %%sep%% %%sitename%%"
    metadesc-attachment = ""
    noindex-attachment = 
    display-metabox-pt-attachment = 1
    post_types-attachment-maintax = 0
    schema-page-type-attachment = "WebPage"
    schema-article-type-attachment = "None"
    title-tax-category = "%%term_title%% %%sep%% %%sitename%%"
    metadesc-tax-category = "%%term_title%% %%tag%%"
    display-metabox-tax-category = 1
    noindex-tax-category = 
    social-title-tax-category = "%%term_title%% Archives"
    social-description-tax-category = ""
    social-image-url-tax-category = ""
    social-image-id-tax-category = 0
    title-tax-post_tag = "%%term_title%%"
    metadesc-tax-post_tag = "%%term_title%% %%tag%%"
    display-metabox-tax-post_tag = 1
    noindex-tax-post_tag = 
    social-title-tax-post_tag = "%%term_title%% Archives"
    social-description-tax-post_tag = ""
    social-image-url-tax-post_tag = ""
    social-image-id-tax-post_tag = 0
    title-tax-post_format = "%%term_title%% %%sep%% %%sitename%%"
    metadesc-tax-post_format = "%%term_title%% %%tag%% %%page%%"
    display-metabox-tax-post_format = 
    noindex-tax-post_format = 
    social-title-tax-post_format = "%%term_title%% Archives"
    social-description-tax-post_format = ""
    social-image-url-tax-post_format = ""
    social-image-id-tax-post_format = 0
    taxonomy-category-ptparent = 
    taxonomy-post_tag-ptparent = 
    taxonomy-post_format-ptparent = 
    
    [wpseo_social]
    facebook_site = ""
    instagram_url = ""
    linkedin_url = ""
    myspace_url = ""
    og_default_image = ""
    og_default_image_id = ""
    og_frontpage_title = ""
    og_frontpage_desc = ""
    og_frontpage_image = ""
    og_frontpage_image_id = ""
    opengraph = 1
    pinterest_url = ""
    pinterestverify = ""
    twitter = 1
    twitter_site = ""
    twitter_card_type = "summary_large_image"
    youtube_url = ""
    wikipedia_url = ""

    워드프레스 필수 스니펫을 정리했습니다.

    아래 글 보시고 바로 import 해서 적용해보세요.

    잘 사용하세요.

  • 티온 서버모니터링 사용방법

    티온 서버모니터링 사용방법

    티온 웹서버모니터링

    티온 서버모니터링 사용방법

    서버를 다수 운영하다보니 각 서버마다 부하, 상태를 확인하기 어렵더군요.

    그래서 관련 웹서버 모니터링 서비스를 찾아보았지만 제 맘에 드는게 없어서 직접 만들었습니다.

    우선 파이썬3 버전이 설치가 되어져있어야 합니다.

    파이썬3 설치에 관련해서는 아래 링크를 참고해주세요.

    파이썬3 버전이 설치되었다면 아래 명령어를 그대로 복사 붙여넣기 하면됩니다.

    mkdir /root/_TION
    cd /root/_TION
    wget https://vlog.tion.co.kr/python/tionServerMonitoring.tar
    tar xvf tionServerMonitoring.tar
    rm -rf tionServerMonitoring.tar
    echo "python3 /root/_TION/tionServerMonitoring/memcheck_httpd_restart.py" > /tionServerMonitoring.sh
    chmod 701 /tionServerMonitoring.sh
    
    
    (crontab -l 2>/dev/null; echo "*/1 * * * * /tionServerMonitoring.sh") | crontab
    
    /tionServerMonitoring.sh
    
    ls -a
    

    위의 명령어를 그대로 서버에 SSH 프로그램을 이용하여 복사붙여넣기를 하면 python/tionServerMonitoring.tar 파일을 다운받고 그 파일을 압축풀어서 python3 명령어로 실행을 하게됩니다.

    python3: command not found

    파이썬3를 설치했음에도 불구하고 위처럼 나타나면 심볼릭을 잡아주시기 바랍니다.

    ln -s /usr/bin/python3.8 /usr/bin/python3

    이제 python3 명령어로 잘 실행이 되는군요.

    이제 다시 [ /tionServerMonitoring.sh ] 쉘스크립트를 실행해보겠습니다.

    위에서 이미 설치를 하였기에 다시 또 설치할 필요는 없습니다.

    괜히 crontab 항목에 1분마다 서버체크하는 항목만 더 추가되니 2번이상 설치하신분들은 꼭 crontab -e 항목을 확인하셔서 중복된 체킹을 제거해주세요.

    [root@amzn2 _TION]# /tionServerMonitoring.sh
    Traceback (most recent call last):
    File “/root/_TION/tionServerMonitoring/memcheck_httpd_restart.py”, line 1, in
    import psutil
    ModuleNotFoundError: No module named ‘psutil’

    이번에는 psutil 이라는 모듈이 없다고 나올겁니다.

    pip 명령어를 이용하여 psutil, stdin모듈을 설치해주세요

    pip install psutil stdin

    만약 pip 명령어가 없다고 나올 경우

    -bash: pip: command not found

    pip를 설치해야합니다.

    아래 링크에서 pip install 설치를 우선 확인하고 설치해주세요. (이 글 본문에도 링크 아랫쪽에 넣어두긴했습니다)

    1. 파이썬 get-pip.py 파일을 다운받습니다.

    아래 명령어를 입력하여 리눅스 서버에 get-pip.py 파일을 저장합니다.

    curl https://vlog.tion.co.kr/python/get-pip.py -o get-pip.py

    2. get-pip.py 파일을 이용하여 인스톨을 시작합니다.

    python3 get-pip.py

    이제 다시 pip install psutil string 이라고 해주세요

    이제 모든 모듈을 다 설치했습니다.

    이제 다시 [ /tionServerMonitoring.sh ] 쉘스크립트를 실행해보겠습니다.

    [root@amzn2 _TION]# /tionServerMonitoring.sh
    START!!
    MEMORY TOTAL: 960.46MB
    MEMORY USED: 187.34MB
    MEMORY FREE: 380.65MB
    -------------------------------------------------------------------------------------
    MEMORY percent is 34.10%
    MEMORY limit is over 80.00%
    -------------------------------------------------------------------------------------
    DISK TOTAL: 24.99GB
    DISK USED: 2.47GB
    DISK FREE: 22.52GB
    DISK PERCENT 9.90%
    NETWORK SENT: 2.39MB
    NETWORK RECV: 92.30MB
    NETWORK Packets_SENT: 0.03MB
    NETWORK Packets_RECV: 0.10MB
    BOOT_TIME: 2023-02-02 20:44:51
    CPU CORE: 1
    CPU PERCENT: [10.0]
    -------------------------------------------------------------------------------------
    --2023-02-02 21:14:07--  http://3.34.246.177/serverChecker.php?hostname=amzn2&mem_total=960.46MB&mem_used=187.34MB&mem_free=380.65MB&percent=34.10%25&limit=80.00%25&disk_usage_total=24.99GB&disk_usage_used=2.47GB&disk_usage_free=22.52GB&disk_usage_percent=9.90%25&net_io_counters_bytes_sent=2.39MB&net_io_counters_bytes_recv=92.30MB&net_io_counters_packets_sent=0.03MB&net_io_counters_packets_recv=0.10MB&boot_time=2023-02-02%2020:44:51&cpu_count=1&cpu_percent=[10.0]
    Connecting to 3.34.246.177:80... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 2 [text/html]
    Saving to: ‘/root/_TION/_logs_tionServerMonitor/serverChecker_php_2023-02-02_21:14:06’
    
    100%[===========================================================================================================================================>] 2           --.-K/s   in 0s      
    
    2023-02-02 21:14:07 (135 KB/s) - ‘/root/_TION/_logs_tionServerMonitor/serverChecker_php_2023-02-02_21:14:06’ saved [2/2]
    
    -------------------------------------------------------------------------------------
    INFO: /root/_TION/_logs_tionServerMonitor__ each 3600 minutes
    Checking file to remove in Forder [ /root/_TION/_logs_tionServerMonitor ]
    -------------------------------------------------------------------------------------
    MEMORY percent is 34.10%
    MEMORY limit is over 80.00%
    -------------------------------------------------------------------------------------
                  total        used        free      shared  buff/cache   available
    Mem:           960M        197M        370M        972K        392M        623M
    Swap:            0B          0B          0B
    -------------------------------------------------------------------------------------
    Filesystem      Size  Used Avail Use% Mounted on
    devtmpfs        464M     0  464M   0% /dev
    tmpfs           481M     0  481M   0% /dev/shm
    tmpfs           481M  704K  480M   1% /run
    tmpfs           481M     0  481M   0% /sys/fs/cgroup
    /dev/sda1        25G  2.5G   23G  10% /
    tmpfs            97M     0   97M   0% /run/user/0
    -------------------------------------------------------------------------------------
    [root@amzn2 _TION]# 
    

    위의 결과물이 나왔다면 정상적으로 동작하는것입니다.

    이제 매 1분마다 서버가 잘 동작하는지 확인을 합니다.

    로그 항목이 1분마다 만들어지고 있다면 정상등록된것입니다.

    이제 서버 정보를 findmyserverip.com 으로 보내어 서버 IP와 서버사용량을 실시간 단위로 확인 할 수 있습니다.

    현재는 무료로 사용할수 있으나 사용자가 많이 몰리게되면 1분체크를 5분으로 늘릴겁니다.

    혹시라도 1분 유지를 원하시는 분들은 따로 유료서버를 도입할 계획이니 플랜이 나오면 구입하셔서 사용하시면 됩니다. 지금은 그래프도 만들어야하고 결과 페이지를 만들어야하므로 무료로 사용하실 수 있습니다.

    앞으로만들어질 항목들은 이렇습니다.

    티온 서버모니터링 서비스

    1. 분당 기록되는 정보를 바탕으로 그래프 도표화

    2. 위험수치 (트래픽, 메모리, 디스크 용량 등) 도달시 SMS 문자 발송 서비스

    지금부터 사용하시는 분들에게는 초기맴버로 유료전환시 50% 할인 혜택을 제공해드리겠습니다.

    감사합니다.

  • 리눅스 서버 느림 부하 확인 조치방법

    리눅스 서버 느림 부하 확인 조치방법

    요즘 제가 운영하는 시스템이 손볼곳이 많아서 거의 두달 가까이 다른업무를 할수 없고 이 업무에 집중하고 있습니다. 그중에서 리눅스 서버 느림 현상을 만드는 부하의 원인에 대해서 조사하는중 특정 IP로 지속적인 서버 공격이 있었습니다.

    route 명령어를 이용하여 IP를 하나 막았는데…

    route add -host 180.230.13.57 reject

    다시 다른 아이피로 변경해서 아래처럼 또 공격을 하고 있습니다.

    이번에는 IP를 45.35182.179 로 변경했군요.

    이게 악의적으로 공격한다는것을 어떻게 알수 있냐하면… 기존에 차단한 IP를 차단 풀었더니 그 아이피로는 공격이 안들어오고 있기때문입니다. 즉 누군가가 일부로 리눅스맨 워드프레스 블로그로 공격을 하고 있다는 거죠.

    이런경우라면 수동으로 IP를 차단해봐야 또 그사람도 아이피를 VPN등 이용해서 바꾸고 다시 또 공격할겁니다.

    악의적으로 공격하는것이니 IP추적하여 VPN 업체 알아내고 그 VPN업체를 사이버수사대에 신고하면되지만…

    그런것조차 일이되고 제가 해야할 업무는 태산이라보니 그냥 무시하기로 했습니다.

    그냥 단순히 프로그램 하나 파이썬으로 개발해서 자동으로 IP를 차단하도록 했습니다.

    45.35.182.179 - - [30/Jan/2023:18:27:19 +0900] "\xbfI\xae\xa4E7\x97\x8a\xb9\x0e\xa7\xe2\xca\x8c\x01UH\xf5\x07\xb8\xd0\xa6\xe1\x94\x89\xe0z\xc1c\xe7\x99\xc8\xc7\x84$\x9f\x1d\\-y=\xa8\xd6P\xf9\b'\t\x95\x8b\\R\x0c\x1a\x14a\x88\xfc\xaf\x1c\xeb{\xa0a1\x9a\xae~(\xa8\xc8f@\xe5K9\xe0\x93\x1d%\xe7\x14\xb2\xb0\x94\x1b\b\xad\xc1\xd7tZ{\xd4\xaf,\xcf\xfa\x7f\xb9\xe9\xb2j\x8e\xb94\xbe^\x9fK\x89=\x1e\x16\xf1C\x13/\x87\xf6\x1b[\x8b\xa6\x0f\xe1\x82\x16\xca+\x17?\xfe|\x9aTp\xcc\x9f^\xfd\x18\x1a\xadA\xda{\x801b\x1cm-\x93\xa9\xf5\xe0\rz\xed?PN\x7f7\x90\xda\xc2\x18[9\xe5\x8c\xdc\xd5}e\xf1\x03\xfaKp'\r\xa5\x86\xc4\x9a\xd6\xaa\vjP\xa2\xc3#>\xbe\xdd\xac\x8e\xa0\x03\xd3\x98\xc3" 400 226 "-" "-"
    

    내용을 보면 문자를 인코딩해서 딱히 정확히 뭘 하려는건지는 알듯합니다.

    일단 IP를 바꿔서 재차 공격을 했다는것만 보면 악의적으로 서버부하를 일으켜서 트래픽을 발생시키기 위함입니다.

    일단 금전적인 돈으로 지출을 유도한것으로 보이고요. 서버 해킹이나 뭐 이런건 관심이 없는듯합니다.

    인코딩하면 제가 그 인코딩이 뭘까? 라고 파악할꺼라 생각하겠지만 문자열을 분석해보면 일치되는건 전혀 없고 단순 무의미한 글자를 인코딩해서 저렇게 날리는거보면 서버 부하를 일으켜서 서버 느리게 하고 트래픽으로 서버지출비용을 늘리기 위한 노력인것으로 보입니다.

    게다가 악의적으로 아이피를 바꿔가면서 공격한다는것은 그냥 제가 운영하는 이 워드프레스가 맘에 안드는것으로 보입니다.

    그거 말고는 답이 없습니다.

    일단 파이썬으로 자동으로 아이피 차단하도록 설정해두었으니 모든 서버에 적용시켜서 앞으로는 신경을 안써도 됩니다. 혹시라도 저처럼 이런 악의적인 서버 부하로 서버가 느림현상에 시달리고 계신다면 저에게 요청해주세요.

    제가 만든 자동화 파이썬 툴을 이용해서 자동으로 라우트 IP 차단을 하시기 바랍니다.

    더군다나 서로 공격 IP를 공유해서 미리 공격 IP를 차단시킬 수 있으니 함께 사용하면 더 좋을듯합니다.

    사용하실분들은은 운영하시는 웹서버 블로그에 이 글을 공유하셔서 더 많은 분들이 참여할 수 있도록 해주세요.

    감사합니다.

  • ESXi NAT NETWORK 만들기 IP 동일하게 같은 네트워크 만들기

    ESXi NAT NETWORK 만들기 IP 동일하게 같은 네트워크 만들기

    ESXi NAT NETWORK 만들기 IP 동일하게 같은 네트워크 만들기

    안녕하세요 리눅스맨 워드프레스 블로그에 오신것을 환영합니다.

    요즘 리눅스밍 툴도 개발하고 있으니 많은 검색과 관심 부탁드립니다.

    가끔 이 부분 NAT Network가 왜 필요하냐고 묻는분들이 계실듯합니다.

    공유기가 있으면 딱히 NAT 네트워크를 만들 필요가 없죠. 공유기에서 자동으로 만들어주기 때문이죠.

    공유기가 없지만 NAT 환경을 만들고 싶을때 사용합니다.

    사실 그 보다 더 중요한 부분은 특정 VM끼리 IP 를 동일하게 맞추기 위함입니다.

    가령 예를들어 블로그 운영을 할 경우 A라는 VM과 B라는 VM의 아이피를 동일하게 만들어서 A VM에서는 이웃관리를 자동화로 운영하고 B VM에서는 원격으로 접속하여 블로그관리대행을 할 경우에 바로 이러한 경우에 2개의 VM을 NAT으로 연결해야합니다.

    pfsense 툴 없이도 NAT 환경을 만들 수 있습니다.

    하지만 ESXi 에서는 NAT이 기본적으로 제공되지 않아 VMWRE처럼 방식대로 할 수 없습니다.

    VMWARE Workstation 버전에서는 아래 링크를 통해 2개이상의 VM을 같은 IP 대역대로 만들어 낼 수 있습니다.

    물론 NAT방식과 조금 다르지만 내가 원하는 VM끼리 NAT 방식으로 운영한다는 점에서는 IP 1개로 다수 VM을 여러개 운영할수 있죠. 호스트 IP를 공유하는건 아니고요. VM이 만들어낸 특정 IP 1개를 바탕으로 여러개 VM이 사용하는 방식입니다.

    이 방법식으로 여러 그룹의 NAT 운영을 할 수 있게됩니다.

    ESXi NAT NETWORK Setting

    1. 네트워킹 [ 가상 스위치 ] [ 포트 그룹 ] 항목에서 순서대로 각각 추가를 합니다.

    이 작업은 어렵지 않습니다.

    단순하게 포트 그룹 추가 버튼을 눌러서 기본으로 이름만 잡아주고 만들면됩니다.

    이름은 기억하기 편하도록 VM IP를 공유할 게스트의 이름으로 시작해도 됩니다.

    제 경우에는 네트워크 업데이트 이름을 [ NAT_TVM10_NOUPDATE ] 이렇게 만들었습니다.

    NAT을 사용할건데 TVM10_NOUPDATE 라는 VM 게스트의 이름을 활용한것이죠.

    매우중요

    ※ 이때 가상스위치는 위에서 새로 만든 NAT_TVM10_NOUPDATE 스위치로 선택해야합니다.

    만약 스가상스위치를 선택하지 않게된다면 이상하게 꼬이게되어 다른 네트워드크를 선택하더라도 NAT_TVM10_NOUPDATE 로 연결될 수 있습니다.

    2. 호스트로 지정할 VM의 설정항목에서 네트워크 어댑터 [ NAT_TVM10_NOUPDATE ] 하나 더 추가합니다.

    VM_NAT_TVM10_NOUPDATE 네트워크 어댑터를 이용하여 통신을 하기 위해 추가하는것입니다.

    즉 이 네트워크 어댑터로 게스트VM쪽으로 인터넷이 되도록 IP를 송출한다는 이야기입니다.

    3. 게스트로 지정할 VM의 설정항목에서 네트워크 어댑터를 새로 만든 NAT_TVM10_NOUPDATE 네트워크로 변경합니다.

    게스트로 지정되는 VM에서는 딱히 IP를 할당받을 필요가 없다면 기존 네트워크 어댑터를 위처럼 변경하면됩니다.

    아이피를 유지하면서 NAT을 연결하시려면 역시 네트워크 어댑터를 추가해서 동일하게 세팅하면됩니다.

    4. 호스트 VM에서 새로 추가한 네트워크 어댑터로 인터넷이 되도록 설정합니다.

    윈도우10 설정 – 이더넷 항목에서 [ 어댑터 옵션 변경 ] 항목에 들어갑니다.

    새로 만들어진 Ethernet1 이라는 네트워크가 보일 겁니다.

    현재는 이곳에 자동으로 IP가 할당된 상태이지만 속성에 들어가서 설정을 변경해야합니다.

    쿠팡 버튼은 리눅스맨 서버 호스팅 운영비라 생각해주시고 너그럽게 이해해주세요.

    손해보시는건 없고 그저 한번 쿠팡창 열릴뿐입니다.

    바로 닫고 아래 내용보시면됩니다.

    IP 설정을 꼭 제가 알려드린대로 바꾸셔야 합니다.

    아래 내용보시고 그대로 따라하시면 됩니다.

    [coupang]

    아래처럼 설정을 하지 않게된다면 호스트 VM에서는 총 2개의 아이피를 할당 받게 됩니다.

    내부 통신망을 만들어야하므로 네트워킹 -> 인터넷 프로토콜 버전 4(TCP/IPv4) 항목의 IP를 아래처럼 변경해주세요.

    [coupang_end]

    IP : 192.168.137.10
    SubMask : 255.255.255.0
    Gateway : 192.168.137.1
    
    DNS1 : 168.126.63.1
    DNS1 : 168.126.63.2

    그리고 아래 항목도 매우 중요하니 아래 항목을 꼭 설정해야합니다.

    원래 사용하던 네트워크 Ethenet 클릭 -> 속성 -> 공유 -> 다른 네트워크 사용자가 이 컴퓨터의 인터넷 연결을 통해 연결할 수 있도록 허용(N) 체크해야합니다.

    두개의 네트워크 어댑터 설정이 다르니 꼭 주의하셔야 합니다.

    이제 2개의 VM 아니 3개의 VM에 대해서 NAT이 제대로 이루어졌는지 확인해보겠습니다.

    일단 호스트 VM [ TVM10_NOUPDATE ] 의 IP를 확인해보니 211.xxx.xx.30 으로 나타납니다.

    게스트로 지정한 TVM10_ADOBE VM에 대해서 확인해보니 역시 211.xxx.xx.30 아이피로 동일하게 할당받았습니다.

    게스트로 지정한 TVM10_PROGRAMMING VM에 대해서 확인해보니 역시 211.xxx.xx.30 아이피로 동일하게 할당되었네요. 이로소 총 3대의 VM이 동일한 IP영역을 갖는 NAT 환경이 구성되었습니다.

    이 쉬운 방법을 외국에서는 이상한 프로그램 사용해서 만들어야 한다고 알려주더군요.

    조금 아쉬움도 남고해서 제가 알고 있는 방법을 여러분들에게 알려드리고자 리눅스맨 워드프레스에 남겼습니다.

    ESXi 뿐만 아니라 Xenserver에서도 가능하며 VMWARE 등 각종 가상화 OS에서 모두 사용할 수 있는 방법입니다.

    리눅스에서도 NAT 방식 만들려면 이러한 방법으로 윈도우7이나 윈도우10 호스트 만들고 보내는 네트워크 어댑터를 이용하면 됩니다.

    NAT 방식으로 할 수 있는 사업모델이 많습니다.

    클라이언트와 IP를 동일하게 맞춰야 하는 경우에도 이와같은 방식을 이용하여 호스트 PC에 VPN을 생성하여 게스트 PC에서 호스트PC로 접근하도록 만들수도 있습니다. 방법은 다양하고 많기 때문에 굳이 돈내가며 프로그램 사용해가며 할 필요는 없을겁니다.

    ESXi 와 Xenserver 그리고 VMWARE 만 존재하면 원격시스템과 무인화 시스템을 모두 만들어 낼 수 있습니다.

    감사합니다.

  • 리눅스 불필요한 파일 삭제

    리눅스 불필요한 파일 삭제

    rm -rf _______LOG_DB_TABLE.php
    rm -rf _______redirect_url_check.php
    rm -rf _______test_wordpress_function.php
    rm -rf _______TION_STATS/
    rm -rf _______callcenter.php
    rm -rf _______html_head.php
    rm -rf wordfence-waf.php
    rm -rf _______member.php
    rm -rf _WOPS_wordpress_one_page_system.php
    ll

    _______LOG_DB_TABLE 로그 저장

    _______redirect_url_check URL 리다이렉트 체크

    _______test_wordpress_function 워드프레스 기능 테스트

    _______TION_STATS 로그폴더

    _______callcenter 전화번호 관리

    _______html_head 해더 파일

    wordfence-waf.php 웹방화벽 툴

    _______member 맴버 확인

    _WOPS_wordpress_one_page_system 원페이지 만들때 사용하는 워드프레스 페이지

    ll 리스트 확인

  • vmware esxi 시간 동기화 NTP UTC 설정

    vmware esxi 시간 동기화 NTP UTC 설정

    vmware esxi 시간 동기화

    관리 -> 시간 및 날짜 -> NTP 설정 편집 -> 네트워크 시간 프로토콜 사용(NTP 클라이언트 사용)

    수동으로 시작 및 중지

    NTP 서버

    time.bora.net

    UTP 시간으로 자동 설정되며 이후 리눅스에서 한국 서울 +9시간 더해서 사용합니다.

    리눅스에서도 시간이 동기화 되었으며 ESXi 호스트 시간을 Guest PC에서 그대로 가져오므로 vmware tool 에서 1분마다 자동으로 동기화되어서 crontab 에 따로 구성하지 않아도 됩니다.

    ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime

    localtime 을 Asia/Seoul 설정해서 자동으로 1분마다 동기화

    완료

  • 가져올 데이터가 없습니다. 파일이 지정되지 않았거나 파일 크기가 PHP 설정의 최대 파일 크기를 초과했을 수 있습니다

    가져올 데이터가 없습니다. 파일이 지정되지 않았거나 파일 크기가 PHP 설정의 최대 파일 크기를 초과했을 수 있습니다

    phpMyAdmin 데이터베이스를 이전할때 DB용량이 커서 기본 2MB 이상 업로드를 할 수 없습니다.

    가져올 데이터가 없습니다. 파일이 지정되지 않았거나 파일 크기가 PHP 설정의 최대 파일 크기를 초과했을 수 있습니다

    이때 이러한 멘트가 나오면서 더이상 작업을 할 수 없게됩니다.

    이 방법을 해결하기 위해서는 서버 php.ini 파일에 최고 업로드 용량을 늘려줘야 합니다.

    vi /etc/php.ini

    upload_max_filesize = 2M

    post_max_size = 8M

    이 부분을 2메가에서 256M 이렇게 변경하고 post 최고사이즈를 256M으로 변경해야합니다.

    이렇게 되면 총 256메가까지 업로드 할 수 있게됩니다.

    service httpd restart

    웹서버 재실행을 한번 해주고 확인하면 256메가 이상 업로드가 가능하게됩니다.

  • 파이썬 3 링크 연결 안될때 심볼릭 링크 설정

    파이썬 3 링크 연결 안될때 심볼릭 링크 설정

    파이썬3를 설치하고 파이썬2가 자꾸 연결되면 아래처럼 해결 할 수 있습니다.

    [root@localhost www]# clear
    [root@localhost www]# python
    Python 2.7.18 (default, May 25 2022, 14:30:51) 
    [GCC 7.3.1 20180712 (Red Hat 7.3.1-15)] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    

    우선 심볼릭 링크를 삭제하고 파이썬 3 폴더를 연결해야 하는데 파이썬 버전부터 확인해야합니다.

    ls -l /usr/bin/python*
    [root@localhost www]# ls -l /usr/bin/python*
    lrwxrwxrwx 1 root root    7 Dec 14 07:18 /usr/bin/python -> python2
    lrwxrwxrwx 1 root root    9 Dec 14 07:18 /usr/bin/python2 -> python2.7
    -rwxr-xr-x 1 root root 7048 May 25  2022 /usr/bin/python2.7
    -rwxr-xr-x 1 root root 1846 May 25  2022 /usr/bin/python2.7-config
    lrwxrwxrwx 1 root root   16 Dec 14 07:18 /usr/bin/python2-config -> python2.7-config
    -rwxr-xr-x 1 root root 7048 Nov 17 08:41 /usr/bin/python3.8
    lrwxrwxrwx 1 root root   14 Dec 14 07:18 /usr/bin/python-config -> python2-config
    

    이렇게 나타날겁니다.

    삭제하는 심볼은 /usr/bin/python 이고요

    다시 연결해야하는 링크주소는 /use/bin/python3.8 입니다

    파이썬 2 심볼 삭제 및 파이썬 3 링크 연결하기

    1. 파이썬 실행파일 위치를 확인합니다. 기본 yum 으로 설치 했다면 /usr/bin/python 위치로 나타납니다.

    which python

    2. 파이썬 설치 위치를 모두 찾아냅니다. (저는 파이썬 3를 이미 설치한 상태입니다)

    ls -l /usr/bin/python*

    3. 기존 심볼릭 링크를 삭제합니다

    rm -rf /usr/bin/python

    4. 새로운 파이썬 3 폴더로 심볼릭을 생성합니다.

    ln -s /usr/bin/python3.8 /usr/bin/python

    버전에 따라 3.8이 아닐 수 있으니 꼭 확인하고 자신의 버전에 맞는 폴더로 연결하셔야하합니다.

    이제 파이썬 3 버전이 python 명령어로 사용할 수 있습니다.

    파이썬 3 버전으로 업데이트하고 심볼릭을 바꾸게되면

    yum 설치 할때 에러날 수 있습니다.

    꼭 확인하셔서 설치에 지장없으시기 바랍니다.