Create TOC

2018년 6월 7일

VSCode에서 OpenSSH로 원격지 파일 편집하기

VSCode에서 OpenSSH로 원격지 파일 편집

OpenSSH 설치

cmd 또는 PowerShell에서 아래 명령으로 설치한다.

C:\> choco install openssh

VSCode 설정

Remote FS 설치

VSCode를 실행하고 Remote FS를 설치한다.

설정

User Setting에 아래와 같이 remotefs.remote 항목을 추가한다.

{
    ....
    "remotefs.remote": {
        "표시될 이름": {
            "scheme": "sftp",
            "host": "서버 이름",
            "port": 22,
            "username": "markboy",
            "rootPath": "접속할 경로"
        },
    }
}

Windows Update에서 특정 항목을 숨기기

Windows 10의 Windows Update에서는 특정 업데이트를 숨기는 기능을 제공하지 않는다. 이 때는 KB3073930을 사용하면 된다.
  1. 설치된 업데이트 삭제
  2. KB3073930 툴 실행
  3. Hide Updates를 선택해서 원하는 업데이트를 숨김 표시

2018년 5월 10일

pi-hole + DNSCrypt

DNSCrypt 설치 및 설청

아래와 같이 DNSCrypt를 설치한다.

$ wget https://github.com/jedisct1/dnscrypt-proxy/releases/download/2.0.11/dnscrypt-proxy-linux_arm-2.0.11.tar.gz
$ tar xvfz dnscrypt-proxy-linux_arm-2.0.11.tar.gz
$ mv linux-arm dnscrypt-proxy
$ sudo mv dnscrypt-proxy /opt

아래와 같이 예제 설정 파일을 복사한다.

$ cd /opt/dnscrypt-proxy
$ sudo cp example-dnscrypt-proxy.toml dnscrypt-proxy.toml

/opt/dnscrypt-proxy/dnscrypt-proxy.toml에서 원하는 설정을 변경하면 된다.

server_names = ['cloudflare', 'arvind-io', 'google']
listen_addresses = ['127.0.0.1:55', '[::1]:55']
require_dnssec = true

설정이 끝나면 아래 명령으로 서비스를 등록한다.

$ sudo /opt/dnscrypt-proxy/dnscrypt-proxy -service install

아래 명령으로 실행한다.

$ sudo systemctl start dnscrypt-proxy.service

pi-hole 설정

4.0 이상

4.0 부터는 DNS 서버를 dnsmasq를 사용하지 않기 때문에 pihole 설정을 직접 수정해야 한다. /etc/pihole/setupVars.conf파일에서 PIHOLE_DNS_1값을 수정한다.

PIHOLE_DNS_1=127.0.0.1#55

DNS 서버를 다시 시작한다.

$ sudo pihole restartdns

4.0 이전

/etc/dnsmasq.d/01-pihole.conf 파일에서 server=로 시작하는 줄을 아래와 같이 #을 붙여서 주석 처리 한다.

#server=1.1.1.1
#server=1.0.0.1

아래와 같은 내용으로 /etc/dnsmasq.d/02-dnscrypt.conf 파일을 만든다.

server=127.0.0.1#55

/etc/pihole/setupVars.conf 파일에서 PIHOLE_DNS로 시작하는 줄을 모두 주석 처리 한다.

그 후 dnsmasq를 재시작한다.

$ sudo systemctl restart dnsmasq.service

테스트

설정이 완료되면 DNSSEC Resolver Test 사이트에 접속해서 확인해본다.

2018년 5월 8일

pi-hole + DNS over HTTPS

Cloudflared 설치 및 설청

아래와 같이 CloudFlared를 설치한다.

$ wget https://bin.equinox.io/c/VdrWdbjqyF/cloudflared-stable-linux-arm.tgz
$ tar xvfz cloudflared-stable-linux-arm.tgz
$ rm cloudflared-stable-linux-arm.tgz
$ sudo mv cloudflared /usr/local/bin

아래 명령을 실행해서 실행되는지 확인한다.

$ sudo cloudfalred proxy-dns --port 54 --upstream https://1.1.1.1/.well-known/dns-query --upstream https://1.0.0.1/.well-
known/dns-query

실행되는 것을 확인했으면 Ctrl-C로 중지 시키고 아래와 같은 내용으로 /usr/local/etc/cloudflared/config.yaml 파일을 만든다.

proxy-dns: true
proxy-dns-port: 54
proxy-dns-upstream:
 - https://1.1.1.1/.well-known/dns-query
 - https://1.0.0.1/.well-known/dns-query

서비스 등록을 위해 아래와 같은 내용으로 /etc/systemd/system/dnsproxy.service 파일을 만든다.

[Unit]
Description=CloudFlare DNS over HTTPS Proxy
Wants=network-online.target
After=network.target network-online.target

[Service]
ExecStart=/usr/local/bin/cloudflared
Restart=on-abort

[Install]
WantedBy=multi-user.target

파일을 만든 후에는 아래 명령을 이용해 dnsproxy.service활성화시킨다.

$ sudo systemctl enable dnsproxy.service

아래 명령으로 실행한다.

$ sudo systemctl start dnsproxy.service

pi-hole 설정

4.0 이상

4.0 부터는 DNS 서버를 dnsmasq를 사용하지 않기 때문에 pihole 설정을 직접 수정해야 한다. /etc/pihole/setupVars.conf파일에서 PIHOLE_DNS_1값을 수정한다.

PIHOLE_DNS_1=127.0.0.1#54

DNS 서버를 다시 시작한다.

$ sudo pihole restartdns

4.0 이전

/etc/dnsmasq.d/01-pihole.conf 파일에서 server=로 시작하는 줄을 아래와 같이 #을 붙여서 주석 처리 한다.

#server=1.1.1.1
#server=1.0.0.1

아래와 같은 내용으로 /etc/dnsmasq.d/02-cloudflare.conf 파일을 만든다.

server=127.0.0.1#54

/etc/pihole/setupVars.conf 파일에서 PIHOLE_DNS로 시작하는 줄을 모두 주석 처리 한다.

그 후 dnsmasq를 재시작한다.

$ sudo systemctl restart dnsmasq.service

테스트

설정이 완료되면 DNSSEC Resolver Test 사이트에 접속해서 확인해본다.

2018년 2월 28일

pi-hole 설치

pi-hole은 DNS에서 원하는 주소를 차단하는 기능을 제공한다. 광고서버를 차단할 수 있지만 domain 단위기 때문에 uBlock 같이 세세하게 차단할 수는 없다.

그렇지만, DNS 단에서 차단을 하기 때문에 uBlock 같은 광고 차단 프로그램을 사용할 수 없는 환경에서도 어느 정도 광고를 차단할 수 있게 된다.

설치

pi-hole설치

아래 명령으로 간단하게 설치할 수 있다. 설치하는 기기의 IP를 고정시켜야 하는 점만 주의하면 된다.

$ curl -sSL https://install.pi-hole.net | bash

보통 전체 설치할 경우 Web으로 관리할 수 있게 되지만, console 만으로도 충분히 사용 가능하다.

DNS 서버 선택
DNS 서버 주소 등록
Web 관리 사용 안함
log 남기지 않음
방화벽 규칙 추가

서비스 활성화

설치 후 아래 명령으로 서비스를 활성화한다.

$ sudo systemctl enable pihole-FTL

테스트

$ nslookup apps.id.net 127.0.0.1
Server:  127.0.0.1
Address: 127.0.0.1#53

Name: apps.id.net
Address: 0.0.0.0

공유기 설정

공유기 설정으로 들어가 pi-hole을 설치한 기기의 ip를 primary domain 으로 등록한다.

설정

규칙 추가

차단 규칙은 /etc/pihole/adlists.list파일을 편집해서 수정할 수 있다.

YousList

/etc/pihole/adlists.list파일에 아래 내용을 추가한다.

## YousList
https://raw.githubusercontent.com/yous/YousList/master/hosts.txt

adlists.list 내용을 바로 반영하기 위해 아래 명령을 실행한다.

$ sudo pihole -g

regex 규칙

pi-hole 4.0이상부터는 정규식 규칙을 추가할 수 있다.

$ curl -sSl https://raw.githubusercontent.com/mmotti/pihole-regex/master/install.sh | sudo bash

local list

규칙 파일을 만들고 적용할 수 있다. 아래와 같은 내용을 /etc/pihole/adlists.list 에 추가하고 /usr/local/etc/pihole/mylist.txt파일에 규칙을 추가하면 된다.

## mylist
file:///usr/local/etc/pihole/mylist.txt

mylist.txt은 아래와 같은 형식으로 만들면 된다.

0.0.0.0 abc.com

규칙 편집을 쉽게 하기 위해서 mylist.txt의 owner를 변경한다(사용자 계정은 pi 라고 가정한다).

$ sudo chown pi /usr/local/etc/pihole/mylist.txt

기존 uBlock에서 사용하던 광고 차단 규칙을 이용하기 위해 간단한 python script를 만들었다.

#!/usr/bin/python
# -*- coding: utf-8

import sys
import os
import re
import requests


ip_regex = re.compile('^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$')

white_lists = [
    'chosun.com',
    'donga.com',
    'hani.co.kr',
    'joins.com',
    'joongang.joins.com',
    'khan.co.kr',
    'mediawatch.kr',
    'newscj.com',
    'ohmynews.com',
    'www.chosun.com',
    'www.donga.com',
    'www.hani.co.kr',
    'www.joins.com',
    'www.joongang.joins.com',
    'www.khan.co.kr',
    'www.mediawatch.kr',
    'www.newscj.com',
    'www.ohmynews.com',
]


def is_valid(hostname):
    """규칙에 추가할 것인지 결정한다.

hostname - 검사할 이름"""
    return True if len(hostname) > 0 and hostname.find(':') == -1 and hostname.find('/') == -1 and hostname.find('*') == -1 and ip_regex.match(hostname) is None and hostname not in white_lists else False


def adblock_rule():
    """adblock 규칙중 hostname 기반 규칙에서 hostname 만 모아서 꺼낸다."""
    urls = [
        'https://raw.githubusercontent.com/NativeHyun/HyunGuard/master/General/general.txt',  # HyunGuard
        'https://raw.githubusercontent.com/SlowMemory/List-KR/master/filter.txt',  # ListKR
        'https://raw.githubusercontent.com/gfmaster/adblock-korea-contrib/master/filter.txt',  # adblock-korea-contrib
    ]

    result = list()

    s = requests.Session()

    for url in urls:
        r = s.get(url)
        if r.status_code == 200:
            result = result + [line[2:-1] for line in r.text.split('\n') if line.startswith('||') and line.endswith('^') and is_valid(line[2:-1])]

    return result


def hostfile_rule():
    """hosts 규칙중 hostname 기반 규칙에서 hostname 만 모아서 꺼낸다."""
    urls = [
        'https://godpeople.or.kr/hosts.txt',  # godpeople
        'http://www.malwaredomainlist.com/hostslist/hosts.txt',  # malware domains
        'https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=1&mimetype=plaintext&_=210978',  # Peter Lowe's Ad and tracking server list
    ]
    result = list()
    s = requests.Session()
    for url in urls:
        r = s.get(url)
        if r.status_code == 200:
            for line in r.text.split('\r\n'):
                if len(line) == 0:
                    continue
                if line.startswith('#'):
                    continue
                try:
                    host = line.replace('  ', ' ').split(' ')[1]
                    if is_valid(host):
                        result.append(host)
                except IndexError:
                    pass

    return result


def main(filename=None):
    hosts = list(set(adblock_rule() + hostfile_rule()))  # 중복 제거
    hosts.sort()

    if filename is None:
        for host in hosts:
            print '0.0.0.0 {}'.format(host)
    else:
        with file(filename, 'wt') as f:
            for host in hosts:
                f.write('0.0.0.0 {}\n'.format(host))


if __name__ == '__main__':
    filename = sys.argv[1] if len(sys.argv) >= 2 else None
    main(filename)

스크립트를 /usr/local/bin/myrule_update.py으로 저장한 후 아래와 같이 permission을 조정한다.

$ sudo chmod +x /usr/local/bin/myrule_update.py

실행할 때는 아래와 같이 실행하면 된다.

$ /usr/local/bin/myrule_update.py /usr/local/etc/pihole/mylist.txt
$ sudo pihole -g

white list 추가

clien 문제 수정

iPhone에서 ClienKit 이나 볼라고를 이용해 clien 사용시 SSL 연결 오류가 발생할 수 있다. 아래 주소를 whitelist에 등록하면 문제가 해결된다.

$ sudo pihole -w clien.net

tmdb, tving 문제 수정

$ sudo pihole -w image.tmdb.org
$ sudo pihole -w image.tving.com

명령 모음

업데이트 명령들은 crontab에 등록되어 동작하기 때문에 따로 신경쓸 필요는 없다.

규칙 업데이트

$ sudo pihole -g

pi-hole 업데이트

$ sudo pihole -up

pi-hole 중지

$ sudo pihole disable

white list 추가

$ sudo pihole -w 주소

2018년 1월 9일

Debian/bash에서 zsh로 이전하기

bash에서 zsh로 이전하면서 작업한 내용을 적는다. zsh 플러그인 관리는 antigen을 사용한다.

zsh 설치

$ sudo apt-get zsh zsh-antigen

설정 파일 작성

~/.zshrc


# path 지정
export PATH=$HOME/.local/bin:$PATH

# antigen 설정. antigen 설정은 ~/.antigenrc에 따로 적는다.
source /usr/share/zsh-antigen/antigen.zsh
antigen init $HOME/.antigenrc

# ssh 접속시에만 prompt에 hostname이 표시되도록 설정
prompt_context() {
        if [[ -n $SSH_CONNECTION ]]; then
                prompt_segment black default "%(!.%{%F{yellow}%}.)$USER@`hostname`"
        else
                prompt_segment black default "%(!.%{%F{yellow}%}.)$USER"
        fi
}

# 기존에 사용하던 ~/.bash_aliases를 그대로 사용한다.
if [ -f $HOME/.bash_aliases ]; then
    source $HOME/.bash_aliases
fi

~/.antigenrc

antigen 관련 설정은 ~/.antigenrc로 분리한다.


antigen use oh-my-zsh

antigen bundle debian
antigen bundle git
antigen bundle pip
antigen bundle python
antigen bundle sudo
antigen bundle systemd
antigen bundle tmux
antigen bundle command-not-found

antigen bundle zdharma/fast-syntax-highlighting
antigen bundle djui/alias-tips
antigen bundle chrissicool/zsh-256color
antigen bundle zsh-users/zsh-autosuggestions
antigen bundle gko/ssh-connect

# 아래 테마는 D2Coding 같은 powerline 심볼을 지원하는 글꼴을 사용한 터미널에서 봐야 안깨진다.
antigen theme agnoster

antigen apply

기본 쉘 변경

$ chsh -s /bin/zsh