Categories
SSH

보안 강화를 위한 OpenSSH 서버 구성 변경

OpenSSH 서버의 구성 파일은 /etc/ssh/sshd_config 이다.

/etc/ssh/sshd_config 파일을 편집한다.

vi /etc/ssh/sshd_config

루트 계정으로 로그인하지 못하도록 한다. PermitRootLogin 항목을 no 로 설정한다.

PermitRootLogin no

암호를 통한 로그인을 금지한다.

PasswordAuthentication no

퍼블릭키를 통한 인증이 가능하도록 한다.

PubkeyAuthentication yes

퍼블릭키 방식의 로그인만 허용한다.

AuthenticationMethods publickey

SSH 의 디폴트 (default) 포트는 22번 포트이다. 보안을 위해 다른 포트로 변경한다.

Port 2424

SSH 는 모든 네트워크 인터페이스에 대하여 대기한다. 특정한 인터페이스에 대하여 대기하도록 변경한다.

ListenAddress 192.168.0.101

사용하지 않고 일정 시간이 지나면 클라이언트에 메시지를 보낸다. 시간은 초 단위이다.

ClientAliveInterval 15

클라이언트에 메시지를 보내는 회수를 지정한다. 해당 회수 만큼 메시지를 보낸 후에 응답이 없으면 접속을 끊는다.

ClientAliveCountMax 3

파일을 저장하고 편집을 마친다.

변경한 내용이 적용되도록 SSH 서버를 재시작한다.

sudo systemctl restart ssh

Categories
Linux

gzip 명령: 리눅스에서 파일을 압축하고 해제하기

1. 파일 1개 압축하기

gzip 명령으로 파일 1개를 압축해 보자.

gzip example.txt

위 명령을 실행하면 example.txt.gz 라는 파일이 생성된다. 압축하기 전의 example.txt 파일은 삭제된다는 점을 주의하자.

압축 전 파일을 삭제하지 않고 보존하려면 -k 옵션을 사용한다.

gzip -k example.txt

2. 여러 파일 압축하기

여러 파일을 한번에 압축해 보자.

gzip a.txt b.txt c.txt

위 명령을 실행하면 a.txt.gz, b.txt.gz, c.txt.gz 가 생성된다.

3. 디렉토리 안의 파일 압축하기

gzip 은 디렉토리를 압축하지 않는다. 대신 디렉토리 안의 파일들을 하나의 명령으로 압축할 수 있다. 이때 -r 옵션을 사용한다.

gzip -r ~/backup/

위 명령은 ~/backup/ 디렉토리 안의 모든 파일을 압축한다.

4. 압축 결과를 1개의 파일에 저장하기

여러 파일과 디렉토리를 압축하여 1개의 파일에 저장하려면 tar 명령이 필요하다.

현재 디렉토리의 모든 파일과 서브 디렉토리를 재귀적으로 압축하여 결과를 backup.tar.gz 파일에 저장해 보자.

tar -czvf backup.tar.gz *

5. 압축 해제

파일의 압축을 해제하여 원본 파일을 복구해 보자. -d 옵션을 사용한다.

gzip -d example.txt.gz

위 명령을 실행하면 example.txt 파일이 복구되고 압축 파일은 삭제된다.

압축을 해제하는 또다른 방법은 gunzip 명령을 사용하는 것이다.

gunzip example.txt.gz

이 경우에도 원본 파일이 복구되면서 압축 파일은 삭제된다.

Categories
Computer Network

hostapd: PC를 무선 공유기로 만드는 방법

무선 랜카드를 이용해서 PC 를 무선 공유기로 사용하는 방법을 알아보자.

1. 무선 랜카드의 AP 모드 지원 여부 확인

무선 랜카드가 AP 모드를 지원하는지 확인한다.

iw list | grep “Supported interface modes” -A 10

출력 결과에 AP 가 표시되면 무선 랜카드가 AP 모드를 지원하는 것이다. 그렇지 않다면 무선 랜카드를 다른 제품으로 교체해야 작업을 계속할 수 있다.

2. 네트워크 인터페이스 구성

네트워크 인터페이스를 구성하자.

Netplan 구성 파일을 연다.

sudo vi /etc/netplan/00-installer-config.yaml

아래와 같은 내용으로 파일을 작성한다.

network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:    # 인터넷에 연결된 유선 랜카드.
      dhcp4: true
    wlan0:    # 무선 랜카드
      dhcp4: false
      addresses:
      - 192.168.0.101/24    # 고정 IP 주소를 부여한다.

파일을 저장하고 편집기를 닫는다.

변경한 내용을 시스템에 적용한다.

sudo netplan apply

3. 인터넷 연결 공유 설정하기

인터넷 연결 공유 설정을 한다.

IP 포워딩을 활성화한다.

sudo sysctl -w net.ipv4.ip_forward=1

아래와 같은 iptables 명령으로 FILTER 테이블과 NAT 테이블을 구성한다.

# FILTER 테이블의 모든 체인을 초기화한다.
sudo iptables -F

# NAT 테이블의 모든 체인을 초기화한다.
sudo iptables -t nat -F

# NAT 테이블에 IP 매스커레이딩을 적용한다.
iptables -t nat -A POSTROUTING -o enp3s0 -j MASQUERADE

4. DHCP 서버 설정하기

DHCP 서버 구성 파일을 연다.

sudo vi /etc/dhcp/dhcpd.conf

아래와 같은 내용으로 파일을 작성한다.

default-lease-time 600;
max-lease-time 7200;

subnet 192.168.0.0 netmask 255.255.255.0 {
  range 192.168.0.201 192.168.0.220;
  option routers 192.168.0.101;    # 게이트웨이 주소. 무선 랜카드의 IP 주소이다.
  option domain-name-servers 8.8.8.8, 8.8.4.4;
}

DHCP 서버가 무선 랜카드를 통해 클라이언트의 요청에 응답하도록 한다.

/etc/default/isc-dhcp-server 파일을 열고 아래와 같이 작성한다.

INTERFACESv4="wlan0"    # 무선 랜카드의 인터페이스 이름이다.
INTERFACESv6=""

변경한 내용를 시스템에 적용한다.

sudo systemctl restart isc-dhcp-server

5. hostapd 의 설치와 구성

hostapd 는 액세스 포인트와 인증 서버를 위한 데몬 프로그램이다.

hostapd 패키지를 설치한다.

apt install hostapd

hostapd 의 구성 파일을 만든다.

vi ~/hostapd/hostapd.conf

구성 파일에 아래와 같은 내용을 입력한다.

Wi-Fi 인터페이스를 지정한다.

interface=wlan0

무선 랜카드 드라이버를 지정한다. 대부분의 경우에 nl80211 이면 된다.

driver=nl80211

공유기의 SSID 를 지정한다.

ssid=xtmci

Wi-Fi 인증 방식을 지정한다. 1은 WPA 방식이고 2는 WPA2 방식이다. 3은 2가지 방식을 모두 사용한다는 의미이다.

wpa=2

공유기 암호를 지정한다.

wpa_passphrase=pass1234

암호화 방식을 지정한다.

wpa_key_mgmt=WPA-PSK

인증 방식이 WPA 인 경우에 사용할 암호화 프로토콜을 지정한다.

wpa_pairwise=TKIP

인증 방식이 WPA2 인 경우에 사용할 암호화 프로토콜을 지정한다.

rsn_pairwise=CCMP

Wi-Fi 채널을 지정한다.

channel=6

Wi-Fi 모드를 지정한다. a, b, g, n 중 하나를 지정하면 된다.

hw_mode=g

MAC 주소 필터링 방식을 지정한다.

macaddr_acl=0

인증 알고리즘을 지정한다. 1은 오픈 시스템 인증 방식을 가리킨다. 2는 오픈 시스템 인증 방식과 공유키 인증 방식을 모두 사용한다는 의미이다.

auth_algs=1

SSID 를 공개할 것인지 여부를 지정한다. 0으로 하면 공개하게 되고 1로 하면 공개하지 않게 된다.

ignore_broadcast_ssid=0

완성된 ~/hostapd/hostapd.conf 파일의 내용은 다음과 같다.

interface=wlan0
driver=nl80211
ssid=xtmci
wpa=2
wpa_passphrase=pass1234
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP
channel=6
hw_mode=g
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0

hostapd 를 실행한다.

sudo hostapd -B ~/hostapd/hostapd.conf

-B 옵션은 백그라운드 상태에서 실행한다는 의미이다.

6. 테스트

PC와 무선 랜카드를 이용한 무선 공유기가 완성되었다. 스마트폰 등 모바일 기기에서 무선 공유기에 접속해 보자. 접속 방법은 일반 공유기에 접속할 때와 같다. 네트워크 이름 (SSID) 을 찾아 선택한 후 암호를 입력하면 된다.

Categories
JavaScript

자바스크립트로 스타일 속성값을 읽고 쓰기

자바스크립트를 이용해서 HTML 엘리먼트에 스타일을 적용하는 방법을 알아보자.

다음과 같이 id 가 example 인 p 엘리먼트가 있다고 하자.

<p id=”example”>자바스크립트 예제</p>

엘리먼트를 선택한다.

var exam = document.getElementById(“example”);

폰트의 색상을 노란색으로 바꾼다.

exam.style.color = “yellow”;

폰트의 크기를 2배로 키운다.

exam.style.fontSize = “2em”;

스타일 속성의 이름이 font-size 가 아니라 fontSize 라는 점에 유의한다.

HTML 엘리먼트 스타일의 속성값을 읽는 방법을 알아보자.

다음과 같은 p 엘리먼트가 있다고 하자.

<p id=”example” style=”color:yellow; font-size:2em;”>자바스크립트 예제</p>

엘리먼트를 선택한다.

var exam = document.getElementById(“example”);

스타일 속성값을 읽어 alert() 메소드로 출력한다.

alert(exam.style.color);    // yellow 를 출력한다.

alert(exam.style.fontSize);    // 2em 을 출력한다.

font-weight 속성의 값도 출력해 보자.

alert(exam.style.fontWeight);    // 아무 것도 출력하지 않는다.

font-weight 속성값이 출력되지 않는 이유는 해당 속성이 명시적으로 지정되지 않았기 때문이다.

엘리먼트의 모든 스타일 속성값을 읽으려면 window.getComputedSytle() 메소드를 사용한다.

엘리먼트의 모든 스타일 정보를 읽어 변수에 저장한다.

var cStyle = window.getComputedStyle(exam);

스타일 정보에서 font-weight 속성값을 읽어 변수에 저장한다.

var pValue = cStyle.getPropertyValue(“font-weight”);

alert() 메소드로 속성값을 출력한다.

alert(pValue);    // 700 을 출력한다.