검색 엔진의 방문이 늘어나고 있군...

Posted
Filed under 시스템
참조 원문: What is the relationship between Unity, Gnome, Gnome 3, Compiz, Metacity, and LightDM?

리눅스 GUI의 이해에 대해 좋은 글이 있어서 가져왔습니다. GUI와 관련된 리눅스 용어 중에는 아래와 같은 것들이 있습니다.
  • Display Manager
  • Window Manager
  • Desktop Environments

Display Manager
  LightDM, GDM, KDM, LXDM 같은 것들이 여기 속합니다. 보통 이름에 display manager를 의미하는 게 어딘가 있습니다. 이것들은 부팅 시 X server를 시작하며 로그인 화면을 제공합니다. 또한 로그인 중 window manager나/와 desktop environment를 선택할 수 있게 해주는 경우도 많습니다.

Window Manager
  Compiz, Metacity, Mutter, W9dk, fluxbox 같은 것들이 여기 속합니다. 이들은 응용프로그램의 경계선(application border), 윈도우의 위치, 테마, 꾸미기를 담당합니다.

Desktop Environments
  사용자를 위해 완전한 상태계를 제공하는 응용프로그램, 패키지, 서비스 등의 종합 세트를 뜻합니다. Window Manager나 Display Manager와 달리 Desktop Environments는 로그인 화면부터 메일 프로그램, 네트워크 관리자, 텍스트 에디터, 시스템 세팅, 이미지 뷰어, 파일 관리자 등 모든 것을 포함합니다. Desktop Environments 중 아래 4가지가 유명합니다.

  • GNOME
  • KDE
  • LXDE
  • XFCE
2016/04/06 16:51 2016/04/06 16:51
Posted
Filed under 프로그램과 명령어/네트워크와 보안
참조 원문: Linux Terminal: speedtest_cli checks your real bandwidth speed.

인터넷 속도를 측정하는 사이트 중 SpeedTest 라는 웹 서비스(웹 브라우저, 모바일 애플리케이션 모두 존재)가 있는데 speedtest_cli라는 파이선 스크립트를 통해 커맨드 라인에서도 해당 서비스를 이용할 수 있습니다. 따라서 브라우저나 GUI가 없는 서버에서도 속도를 테스트할 수 있죠.

설치
speedtest_cli는 파이선 스크립트기 때문에 설치와 사용이 용이합니다. 설치 방법은 아래 몇 가지 방법 중 하나를 이용하면 됩니다.

1) pip / easy_install
터미널을 열어 아래 두 명령어 중 하나를 사용합니다.
pip install speedtest-cli
또는
easy_install speedtest-cli

2) Github

github로부터 직접 설치하는 방법입니다.
pip install git+https://github.com/sivel/speedtest-cli.git
또는
git clone https://github.com/sivel/speedtest-cli.git
python speedtest-cli/setup.py install

3) Ubuntu/Debian 또는 Mint 패키지

getdeb 저장소를 이용하는 방법으로 먼저 아래 방법으로 저장소를 추가해야 합니다.
getdeb 패키지 설치
또는
- 저장소 수동 설정
System -> Administration -> Software Sources -> Third-Party Software 탭에서 아래 라인을 추가합니다.
deb http://archive.getdeb.net/ubuntu trusty-getdeb apps
저장소 GPG키를 추가하기 위해 터미널 창을 열어서 아래 내용을 실행합니다.
wget -q -O- http://archive.getdeb.net/getdeb-archive.key | sudo apt-key add -
아래 명령어로 speedtest-cli 패키지를 설치합니다.
sudo apt-get update
sudo apt-get install python-speedtest-cli

4) 그냥 다운로드

마지막 방법으로 원하는 곳에서 파이선 스크립트를 다운로드하여 실행하는 방법입니다.
wget -O speedtest-cli https://raw.github.com/sivel/speedtest-cli/master/speedtest_cli.py
chmod +x speedtest-cli
또는
curl -o speedtest-cli https://raw.github.com/sivel/speedtest-cli/master/speedtest_cli.py
chmod +x speedtest-cli

기본 사용법
  옵션 없이 그냥 speedtest_cli.py 를 실행해도 대역폭 속도를 확인할 수 있습니다. 아래는 제가 직접 테스트한 결과입니다.
[root@localhost speedtest-cli]# ./speedtest_cli.py
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from Korea Telecom (210.223.38.159)...
Selecting best server based on latency...
Hosted by China Unicom (Qingdao) [611.01 km]: 50.13 ms
Testing download speed........................................
Download: 8.23 Mbit/s
Testing upload speed..................................................
Upload: 38.19 Mbit/s
  어째서인지 중국 서버를 잡아 테스트했네요. 분명 서울에 있는 서버도 있는데...어쨌든 기본 사용법은 이렇습니다. 결과를 그림 파일로 만들고 싶다면 --share 옵션을 추가하면 됩니다. 그러면 speedtest 사이트에 업로드되고 그 링크가 출력됩니다.
[root@localhost speedtest-cli]# ./speedtest_cli.py
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from Korea Telecom (210.223.38.159)...
Selecting best server based on latency...
Hosted by China Unicom (Qingdao) [611.01 km]: 50.13 ms
Testing download speed........................................
Download: 8.23 Mbit/s
Testing upload speed..................................................
Upload: 38.19 Mbit/s
[root@localhost speedtest-cli]# ./speedtest_cli.py --share
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from Korea Telecom (210.223.38.159)...
Selecting best server based on latency...
Hosted by China Unicom,Changchun Branch (Changchun) [712.22 km]: 56.195 ms
Testing download speed........................................
Download: 7.77 Mbit/s
Testing upload speed..................................................
Upload: 31.63 Mbit/s
Share results: https://www.speedtest.net/result/4455322670.png
  결과는 아래와 같은 형식의 그림 파일입니다.
  또 다른 중요한 옵션은 --list 입니다. 거리순으로 speedtest.net 서버를 출력합니다. 서버명 앞에 ID가 출력되는데 --server 옵션과 ID 값을 사용하면 나열된 서버 중 원하는 서버를 이용할 수 있습니다.
[root@localhost speedtest-cli]# ./speedtest_cli.py --list|more
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
5017) China Unicom,Liaoning Branch (Shenyang, China) [530.54 km]
5710) China Unicom (Qingdao, China) [611.01 km]
1185) China Unicom,Changchun Branch (Changchun, China) [712.22 km]
3133) Rostelecom (Vladivostok, Russian Federation) [744.06 km]
6457) Extreme-VL.ru (Vladivostok, Russian Federation) [744.06 km]
4024) Vladlink (Vladivostok, Russian Federation) [744.06 km]
5652) MegaFon (Vladivostok, Russian Federation) [744.06 km]
6316) Podryad (Vladivostok, Russian Federation) [744.06 km]
이하 생략

[root@localhost speedtest-cli]# ./speedtest_cli.py --server 3133
Retrieving speedtest.net configuration...
Retrieving speedtest.net server list...
Testing from Korea Telecom (210.223.38.159)...
Hosted by Rostelecom (Vladivostok) [744.06 km]: 335.484 ms
Testing download speed........................................
Download: 19.15 Mbit/s
Testing upload speed..................................................
Upload: 15.48 Mbit/s
  다만 웹이나 모바일에서 할 때는 서울 서버가 나오는데 이 방법으로는 이상하게 서울 서버가 나오지 않아서 효용성이 떨어지는 것 같아 아쉽네요.


2015/06/24 15:07 2015/06/24 15:07
Posted
Filed under 프로그램과 명령어/네트워크와 보안
참조 원문: How to manage a WiFi connection from the command line

  GUI 없이 WiFi 접속을 다루는 내용입니다. 일반적으로 서버에서 무선을 쓰는 일은 없고 일반 PC에서 GUI를 안 쓰는 일도 거의 없으므로 실제로 사용할 일이 별로 없는 내용이지만 기초라는 건 언제나 중요한 법이죠. 그에 따라 사용하는 프로그램도 최대한 배포판에 상관 없이 기본 패키지에 포함되어 설치되는 것을 위주로 사용하여 설명합니다.

  먼저 사용하는 무선 LAN카드(NIC)를 위한 적절한 드라이버가 로드되어 있다고 가정한 상태에서 진행합니다. 드라이버가 없으면 아무것도 할 수 없죠. 적절한 드라이버가 있는 상태에서 아래 명령어를 통해 무선 접속을 지원하는 인터페이스를 확인할 수 있습니다.
$ iwconfig

출처: http://xmodulo.com/manage-wifi-connection-command-line.html

  보통 무선 인터페이스의 이름은 위의 모습처럼 wlan0이 됩니다. 인터페이스가 up 상태인지 확인하려면 아래 명령어를 사용합니다.
$ sudo ip link set wlan0 up
  인터페이스가 작동한다면 주변의 무선 네트워크를 스캔할 수 있어야 합니다.
$ sudo iw dev wlan0 scan | less

출처: http://xmodulo.com/manage-wifi-connection-command-line.html

  출력 결과를 통해 네트워크 이름(SSID), 신호 강도, 보안 타입(WEP, WPA/WPA2 등)을 알 수 있습니다. 여기서 다음 단계의 난이도가 나눠집니다. 만약 접속하려는 네트워크가 암호화를 사용하지 않는다면 아래 명령어를 통해 바로 접속이 가능합니다.
$ sudo iw dev wlan0 connect 네트워크_SSID
  WEP 암호화를 사용할 경우도 비슷한 방법으로 접속할 수 있습니다.
$ sudo iw dev wlan0 connect 네트워크_SSID key 0:키값
  하지만 WPA나 WPA2를 사용하는 네트워크라면 방법이 좀 복잡합니다. 이 경우에는 wpa_supplicant라는 유틸리티를 사용해야 하며 이 유틸리티는 배포판에 따라 기본으로 설치되지 않을 수도 있습니다. 이 유틸리티를 사용하려면 먼저 /etc/wpa_supplicant/wpa_supplicant.conf 파일에 있는 내용들을 주석처리하고 아래 내용을 추가합니다. 참고로 SSID 대신 AP의 이름을 넣는 것도 가능하며 그 경우 wpa_supplicant가 그에 해당하는 SSID로 변경합니다.
network={
    ssid="네트워크_SSID"
    psk="패스프레이즈"
    priority=1
}
  설정을 끝내면 아래 명령어를 사용하여 wpa_supplicant를 백그라운드로 돌립니다.
$ sudo wpa_supplicant -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf
  이제 IP를 받기 위해 DHCP를 사용합니다.
$ sudo dhcpcd wlan0
  이제 DHCP를 통해 로컬 IP를 받으며 프로세스가 백그라운드에서 fork 됩니다. 접속여부를 확인하고 싶다면 iwconfig 명령어를 사용합니다.
$ iwconfig

출처: http://xmodulo.com/manage-wifi-connection-command-line.html

2015/03/05 17:35 2015/03/05 17:35
Posted
Filed under 취미 및 잡담
이번에 아마존에서 mp3를 구매해봤습니다. 처음 구매를 시도하니 에러가 나더군요. 알고 보니 여러 가지 법적인 문제 때문에 미국 내의 고객만을 대상으로 판매하는 것이었습니다. 대충 VPN으로 우회만 하면 되나 생각하고 시도해봤으나 그렇게 손쉽게 되진 않더군요. 일단 결론으로 구매 방법부터 내려쓰면 아래와 같습니다.

  1. 원래 가지고 있던 아마존 계정으로 원하는 금액의 기프트 카드를 구매하여 이메일로 클레임 코드를 받는다.
  2. 아마존에서 새로운 계정을 생성. 새로 만든 계정의 배송 및 빌링 주소는 미국 내 주소를 사용. 대충 검색하면 나오는 배송/구매 대행업체의 배송대행지(일명 배대지) 주소를 사용하면 편하다.
  3. 새로 생성한 아마존 계정에 기프트 카드의 클레임 코드를 등록한다.
  4. 음악을 구매한다.
  여기서 결론을 더 압축하자면 '신용카드로 결제한 이력이 없는 계정에서 기프트 카드를 이용해 구매한다'가 되겠습니다. 처음에는 접속IP를 기준으로 자국인 여부를 가릴 것이라 생각했지만 그것은 아니었고 주소를 변경해도 구매를 할 수 없더군요. 심지어 등록된 모든 배송 및 빌링 정보(카드 포함)를 삭제한 후 미국 주소만 입력하는 등 기존 계정으로 구매를 하기 위해 여러 시도를 해봤지만 실패했습니다. 실험을 통해 내린 가설은 아래와 같습니다.

  1. 1-클릭 구매 설정에서 디폴트 사용으로 설정한 빌링 정보에 등록된 주소(배송 주소도 검사 대상일 가능성 있음)가 미국이 아닐 경우 구매 불가
  2. 1-클릭 구매 설정에서 디폴트 사용으로 설정한 빌링 정보에 등록된 카드가 미국에서 발행한 카드가 아닐 경우 구매 불가
  3. 1-클릭 구매 설정에서 디폴트 사용으로 설정한 빌링 정보에 카드 정보가 없을 경우 기존 구매에 사용한 카드 정보를 통해 자국인 여부를 판단
  4. 카드를 통해 구매한 이력이 없을 경우 일단 자국인으로 가정
  마지막 4번 항목 덕분에 새로 만든 계정에서 기프트 카드 이용 시 구매가 가능한 것으로 보입니다. 참고로 처음엔 혹시 몰라 VPN을 사용하며 실험했지만 마지막 실험에선 VPN을 사용하지 않고도 구매에 성공했습니다. 이것으로 추측컨데 접속IP는 자국인 판단 요소에 포함되지 않는 것으로 보입니다.
2015/03/04 17:28 2015/03/04 17:28
Posted
Filed under 프로그램과 명령어/네트워크와 보안
참조 원문: Unix: Gaining network insights with tcpdump

  tcpdump는 들어온 패킷(더 정확히는 "프레임")을 잡아 내용을 볼 수 있는 "스니퍼"입니다. 기본적으로 로컬 머신에 들어온 모든 트래픽을 볼 수 있는 promiscuous mode로 동작하는데 이 상태에서는 목적지가 로컬 머신이 아닌 트래픽도 모두 잡아서 볼 수 있습니다. 이 기능을 꺼서 자신이 적절한 목적지인 트래픽만 보고 싶다면 -p 옵션을 주면 됩니다. 여담으로 -p가 "promiscuous를 켜라"가 아니라 "promiscuous를 꺼라"라는 의미라서 좀 햇갈리죠.

  만약 tcpdump를 실행했을 때 "No suitable driver found"라는 메시지와 함께 종료된다면 root 권한이 없어서 그런 겁니다. 안타깝게도 이 프로그램을 사용하려면 root 권한이 필요하죠.

  일단 실행에 성공하면 엄청난 내용들이 화면에 가득하게 됩니다. 심지어 트래픽이 거의 없는 네트워크라도 말이죠. 그래서 옵션이 중요합니다. 먼저 알아볼 옵션은 원하는 개수의 패킷(정확히는 "프레임")만 출력하고 종료하는 겁니다. -c (숫자) 옵션을 주면 수집할 프레임의 개수를 정할 수 있습니다.
# tcpdump -c 2
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
13:40:11.368233 IP xyz-boson-1.particles.com.ssh > 10.2.230.115.58774: P 3706680
062:3706680258(196) ack 474521172 win 71
13:40:11.368501 IP 10.20.30.115.58774 > xyz-boson-1.particles.com.ssh: . ack 196
 win 255
2 packets captured
5 packets received by filter
0 packets dropped by kernel
  출력된 프레임의 내용 중 첫 번째 항목은 시간입니다. 위에서 13:40:11.507360에 해당하는 부분이죠. 그 뒤에는 출발지(>의 왼쪽)와 목적지(>의 오른쪽) 및 패킷의 내용이 있습니다.

  패킷을 파일로 캡쳐해서 나중에 다시 볼 수도 있습니다. 아래는 10개의 패킷을 캡쳐해서 /tmp/c10 파일에 저장하는 모습입니다.
# tcpdump -c 10 -w /tmp/c10
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
10 packets captured
12 packets received by filter
0 packets dropped by kernel
  이렇게 만든 파일은 아래의 방법으로 읽을 수 있습니다.
# tcpdump -r /tmp/c10
  이러면 저장했던 내용을 모두 읽습니다.

  -i 옵션을 통해 사용할 인터페이스를 지정할 수 있습니다.
# tcpdump -c 10 -w /tmp/c10 -i bond0
tcpdump: listening on bond0, link-type EN10MB (Ethernet), capture size 96 bytes
10 packets captured
10 packets received by filter
0 packets dropped by kernel
  -D 옵션을 사용하면 패킷을 수집할 수 있는 인터페이스 목록을 보여줍니다.
# tcpdump -D
1.eth0
2.bond0
3.eth1
4.any (모든 인터페이스를 캡쳐하는 가상 장치)
5.lo
  수집할 패킷의 출발지나 목적지(또는 둘 다)를 지정하는 것도 가능합니다. 다만 출발지를 10.20.30.40로 지정하고 목적지를 10.20.30.50으로 지정했다면 10.20.30.50이 10.20.30.40에게 응답하는 패킷을 볼 수 없습니다. 서로의 역할이 뒤바꼈기 때문이죠. 특정 시스템으로 향하거나 그곳으로부터 오는 것을 모두 볼 때는 "host"라는 단어를 사용할 수도 있습니다.
# tcpdump -c 100 src fermion.particles.org
# tcpdump host boson.particles.org -w /tmp/boson$$
  비슷한 명령어를 통해 출발 포트나 목적 포트를 지정하는 것도 가능합니다. 아래의 예는 로컬 웹 서버로 가는 트래픽을 수집합니다.
# tcpdump -i bond0 dst port 80
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on bond0, link-type EN10MB (Ethernet), capture size 96 bytes
14:38:13.301801 IP nagios.particles.com.59344 > www.particles.org.http: S 3558234
391:3558234391(0) win 5840 <mss 1460,sackOK,timestamp 3398452148 0,nop,wscale 7>
14:38:13.301900 IP nagios.particles.com.59344 > www.particles.org.http: . ack 231
4423727 win 46 <nop,nop,timestamp 3398452148 2437740292>
  수집하는 패킷을 어떤 모습으로 출력시킬지도 선택할 수 있습니다. 아래는 수집한 패킷을 헥스와 ASCII 형태로 모두 출력하고 있습니다.
# tcpdump -i bond0 -c 1 -XX
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on bond0, link-type EN10MB (Ethernet), capture size 96 bytes
17:38:31.570524 IP xyz-boson-1.particles.com.ssh > 10.20.30.115.54669: P 3162608
328:3162608524(196) ack 830478067 win 80
        0x0000:  0000 0c07 ac01 782b cb5f a949 0800 4510  ......x+._.I..E.
        0x0010:  00ec 3cc6 4000 4006 0025 0a01 029b 0a02  ..<.@.@..%......
        0x0020:  e673 0016 d58d bc81 92c8 3180 16f3 5018  .s........1...P.
        0x0030:  0050 33c4 0000 8775 514e a605 e7f7 505c  .P3....uQN....P\
        0x0040:  f6e6 559e 3bc7 2317 f28d 9a29 8798 cf04  ..U.;.#....)....
        0x0050:  b4a7 36f0 30e9 89d1 1da0 0860 3bb7 cfed  ..6.0......`;...
2015/03/03 15:12 2015/03/03 15:12
Posted
Filed under 쉘 스크립트
인터넷을 검색하며 백업을 위한 배치 파일을 만들어 봤습니다. 핵심 내용은 실행할 때마다 30일 이전의 백업본을 지우는 것입니다. 윈도우 스케줄러를 통해 새벽에 돌리면 간단한 백업에 사용할 수 있을 것 같습니다. 에코는 일부로 꺼놓지 않았으므로 명령어가 거슬릴 경우 @echo off 를 첫 번째 줄로 추가하면 됩니다.
set date2=%date:-=%
set YEAR=%date2:~0,4%
set MONTH=%date2:~4,2%
set DAY=%date2:~6,2%
set CurDate=%YEAR%%MONTH%%DAY%
set dayCnt=30

xcopy "C:\Backup" "D:\BACKUP_%CurDate%\" /D /F

REM Substract your days here
set /A DAY=1%DAY% - 100 - %dayCnt%
set /A MONTH=1%MONTH% - 100

:CHKDAY

if /I %DAY% GTR 0 goto DONE

set /A MONTH=%MONTH% - 1

if /I %MONTH% GTR 0 goto ADJUSTDAY

set /A MONTH=12
set /A YEAR=%YEAR% - 1

:ADJUSTDAY

if %MONTH%==1 goto SET31
if %MONTH%==2 goto LEAPCHK
if %MONTH%==3 goto SET31
if %MONTH%==4 goto SET30
if %MONTH%==5 goto SET31
if %MONTH%==6 goto SET30
if %MONTH%==7 goto SET31
if %MONTH%==8 goto SET31
if %MONTH%==9 goto SET30
if %MONTH%==10 goto SET31
if %MONTH%==11 goto SET30
REM ** Month 12 falls through

:SET31

set /A DAY=31 + %DAY%

goto CHKDAY

:SET30

set /A DAY=30 + %DAY%

goto CHKDAY

:LEAPCHK

set /A tt=%YEAR% %% 4

if not %tt%==0 goto SET28

set /A tt=%YEAR% %% 100

if not %tt%==0 goto SET29

set /A tt=%YEAR% %% 400

if %tt%==0 goto SET29

:SET28

set /A DAY=28 + %DAY%

goto CHKDAY

:SET29

set /A DAY=29 + %DAY%

goto CHKDAY

:DONE

if /I %MONTH% LSS 10 set MONTH=0%MONTH%
if /I %DAY% LSS 10 set DAY=0%DAY%

echo Date %dayCnt% day(s) before %CurDate% is %YEAR%%MONTH%%DAY%
rmdir /S /Q "D:\BACKUP_%YEAR%%MONTH%%DAY%\"



2014/12/01 19:29 2014/12/01 19:29
Posted
Filed under 프로그램과 명령어/관리와 유지보수
참조 원문: RHEL 7 / CentOS 7 : Single User Mode / Recovering / Reset Root Password

기존 RHEL/CentOS 5~6까진 '싱글 유저 모드'라는 상태에서 패스워드를 복구했지만 RHEL/CentOS 7부터는 그것이 '복구 모드(Rescue Mode)' 또는 '비상 모드(Emergency Mode)'라는 이름으로 바꼈습니다. 아래는 root 패스워드를 다시 설정하는 방법입니다.

  1. 부팅해서 GRUB 2 부트 스크린이 나왔을 때 e 키를 눌러 수정 모드로 진입
  2. 'linux' 라인(UEFI의 경우 'linuxefi' 라인)의 끝에 아래의 파라미터를 추가(VMware, KVM, VirtualBox에서는 아래 대신 'rb.break'라고 적는다.
    init=/bin/sh
    이러면 리눅스 커널이 시스템 init 데몬 대신 /bin/sh를 실행할 것이다. 그러므로 일부 기능의 사용이 제한되거나 불가할 수 있다.
    중요: 부팅 메시지를 보려면 'rhgb'와 'quiet' 파라미터가 없어야 한다.
  3. Ctrl+x를 눌러 지정한 파라미터로 부팅을 한다. 쉘 프롬프트가 나타날 것이다.
  4. 파일 시스템은 읽기 전용으로 마운트 된다. 파일시스템에 쓰기를 할 수 없다면 패스워드를 바꿀 수 없으므로 아래 명령어를 통해 다시 마운트한다.
    # mount -o remount,rw /
  5. 'passwd' 명령어를 실행하여 패스워드를 변경한다. 참고로 쓰기가 불가능한 상태라면 명령어 사용 시 아래의 에러를 보게 된다.
    Authentication token manipulation error
  6. 변경된 파일의 SELinux 컨텍스트가 부팅 후 적절히 복구될 수 있도록 아래 명령어를 실행한다.
    # touch /.autorelabel
  7. 'exec /sbin/init' 명령어를 실행하여 시스템 부팅을 재개한다. exec 명령어로 다른 명령어를 실행하면 새로운 프로세스를 생성하고 쉘을 그 프로세스로 교체하는데 이 경우 쉘이 init으로 교체가 된다. 또 다른 방법으로는 'exec /sbin/reboot' 명령어를 실행하여 시스템을 리부팅하는 방법이 있다.
2014/11/17 17:10 2014/11/17 17:10
Posted
Filed under 프로그램과 명령어/서버와 서비스
참조 원문: How to set up a secure FTP service with vsftpd on Linux

  FTP 자체는 안전한 프로토콜로서 설계된 것이 아니라서 일반 FTP 서비스는 Man in the Middle이나 Brute Force 같은 일반적인 공격에 취약합니다. 그래서 많은 FTP 서버들이 보안 기능을 추가로 사용합니다. 예를 들어 FTPS(FTP Secure)는 SSL/TLS 인증서를 이용해 종단간에 데이터를 암호화합니다. FTPS는 설정에 따라 암호화 연결과 비암호화 연결 중 하나만을 지원하거나 둘 다 지원할 수 있습니다. SFTP(SSH FTP)는 또 다른 보안 방식으로 SSH를 이용하는 형태로 만들어졌으며 다른 보안 프로토콜과 함께 사용할 수 있습니다.

  이 글에서는 SSL/TLS를 활성화한 vsftpd를 이용해 FTP 서비스를 운영하는 법을 설명합니다.

  기본적으로 알고 있어야 하는 것으로 일반적인 FTP 서버는 데이터 전송을 위해 TCP 20번 포트를 열고 있으며 명령어 전송을 위해 21번 포트(컨트롤 포트라고도 부름)를 열고 있습니다. 접속 처리와 명령어 파라미터의 교환은 21번 포트를 통해 이뤄집니다. FTP 접속에는 2가지 방식이 있는데 하나는 액티브 모드이며 다른 하나는 패시브 모드입니다. 액티브 모드로 접속 중일 때는 서버가 자신의 20번 포트(데이터)로부터 클라이언트를 향해 접속을 시도합니다. 패시브 모드로 접속 중일 때는 각 클라이언트 세션을 위한 랜덤 포트를 열어서 그 포트를 클라이언트에게 통보합니다. 그러면 통보를 받은 클라이언트는 서버의 해당 랜덤 포트를 향해 접속을 시도합니다.

  RFC 1635에 따르면 FTP는 패스워드가 필요 없는 anonymous라는 공용 계정, 그리고 ftp라는 패스워드를 가진 ftp라는 공용 계정을 둘 중 하나만 지원할 수도 있고 둘 다 지원할 수도 있습니다. 거기에 더하여 vsftpd는 로컬 계정을 이용한 로그인도 지원합니다. 서버에 등록된 계정으로 접속하면 해당 계정의 홈 디렉토리에 접근할 수 있습니다.

리눅스에 vsftpd 설치
  우분투, 데비안, 리눅스 민트 등에 vsftpd를 설치할 때는 apt-get 명령어를 사용합니다. vsftpd 서비스는 부팅 시 자동으로 실행됩니다.
$ sudo apt-get install vsftpd
  센트OS, 페도라, RHEL 등에 vsftpd를 설치할 때는 yum 명령어를 사용합니다. 서비스 시작과 부팅 시 실행은 아래와 같이 따로 설정해야 합니다.
# yum install vsftpd
# service vsftpd start
# chkconfig vsftpd on
  vsftpd를 사용한 FTP 서비스의 가장 기본적인 준비는 이것으로 끝입니다. 브라우저에서 ftp://[서버이름/IP] 라는 형태로 접속할 수도 있고 FileZilla 같은 FTP 클라이언트를 이용해서 패스워드 없이 anonymous라는 계정명을 사용하거나 계정명과 패스워드 모두 ftp를 사용하여 접속할 수도 있습니다.

  vsftpd가 설치되면 홈 디렉토리가 /var/ftp인 ftp라는 시스템 계정이 시스템에 추가됩니다. 공용 FTP 접속이 형성될 때마다 접속자는 /var/ftp로 보내집니다. 따라서 우리는 이 디렉토리를 FTP 공용 계정의 홈 디렉토리로 사용할 수 있습니다. /var/ftp 디렉토리에 있는 모든 파일과 디렉토리는 ftp://[서버이름/IP]로 접속하여 접근할 수 있습니다.

  vsftpd 설정 파일의 위치는 아래와 같습니다.
  • 우분투, 데비안, 리눅스 민트 등: /etc/vsftpd.conf
  • 센트OS, 페도라, RHEL: /etc/vsftpd/vsftpd.conf

FTP 계정 튜닝
  공용 계정을 비활성화하려면 vsftpd.conf 파일에서 anonymous 계정을 명시적으로 비활성화시켜야 합니다. 디폴트 값이 활성화이기 때문에 주석처리하는 것은 소용이 없습니다.
anonymous_enable=NO
  그리고 서비스를 다시 시작합니다.
# service vsfptd restart
  이러면 이미 시스템에 존재하는 계정을 통해서만 접속할 수 있습니다.

  로컬 계정을 활성화하거나 비활성화하려면 vsftpd.conf 파일을 수정해야 합니다. 로컬 계정을 비활성화할 거면anonymous 계정으로 접속할 수 있도록 만들어놔야 합니다.
local_enable=YES/NO
  적용하려면 마찬가지로 서비스를 다시 시작합니다.
# service vsfptd restart
  특정 계정으로 접속하려면 URI를 ftp://계정명@[서버명/IP]로 사용하면 됩니다. 특정 계정으로 접속하면 해당 계정의 홈 디렉토리에 접근할 수 있습니다.

계정의 홈 디렉토리 밖으로 못 나오게 만들기
  FTP로 접속을 하면 사용자는 권한에 문제가 없는 한 시스템 전체를 돌아다닐 수 있습니다. 이는 모든 사용자가 /etc, /var, /usr 등 모든 시스템 파일들을 읽을 수 있게 해주기 때문에 문제가 있습니다.

  사용자가 FTP로 접속하고 있는 동안 자신의 홈 디렉토리 밖으로 못 나가게 만들려면 파라미터를 아래처럼 수정합니다.
chroot_local_user=YES
  마찬가지로 서비스를 다시 시작합니다.
# service vsftpd restart

SSL/TLS 암호화 적용
  FTP는 평문을 전송하는 프로토콜이기 때문에 클라이언트와 FTP 서버 사이의 파일 전송 트래픽을 누구나 쉽게 훔쳐볼 수 있습니다. 그런 FTP 통신을 암호화하기 위해 SSL/TLS를 활성화할 수 있습니다.

  첫 번째 할 일은 SSL/TLS 인증서와 그에 따른 비밀 키를 만드는 겁니다. 아래 명령어를 통해 인증서와 키를 생성해 한 파일에 저장합니다.

데비안/우분투
$ sudo openssl req -x509 -days 365 -newkey rsa:2048 -nodes -keyout /etc/vsftpd.pem -out /etc/vsftpd.pem
센트OS/페도라/RHEL
$ sudo openssl req -x509 -days 365 -newkey rsa:2048 -nodes -keyout /etc/vsftpd/vsftpd.pem -out /etc/vsftpd/vsftpd.pem
  그리고 나서 아래의 내용을 vsftpd.conf 파일에 적용합니다.
# TLS/SSL 활성화
ssl_enable=YES

# 로그인할 때 클라이언트가 반드시 TLS를 사용하도록 만들기
allow_anon_ssl=NO
force_local_data_ssl=YES
force_local_logins_ssl=YES
ssl_tlsv1=YES
ssl_sslv2=NO
ssl_sslv3=NO
require_ssl_reuse=NO
ssl_ciphers=HIGH

# SSL 인증서/비밀 키의 위치 지정(Debian/Ubuntu)
# CentOS/Fedora/RHEL는 /etc/vsftpd/vsftpd.pem로 수정
rsa_cert_file=/etc/vsftpd.pem
rsa_private_key_file=/etc/vsftpd.pem

# 패시브 모드 접속을 위한 포트 범위 설정
pasv_max_port=65535
pasv_min_port=64000
  이제 vsftpd를 서비스를 다시 시작합니다.
# service vsftpd restart

접속과 대역폭 제어
  vsftpd는 접속과 사용자 대역폭을 제어할 수 있는 방법을 몇 가지 제공하는데 아래는 그 중 일부의 예입니다.
## anonymous 세션별 대역폭을 대략 30 KB/s로 설정
anon_max_rate=30000

## 각 로컬 계정의 대역폭을 대략 30 KB/s로 설정
local_max_rate=30000

## 클라이언트 세션이 300초 동안 활동이 없을 경우 세션을 끊어버림
idle_session_timeout=300

## 소스 IP 당 최고 접속 수. DoS와 DDoS 공격 방어에 유용
max_per_ip=50

방화벽 튜닝
  iptables 방화벽을 사용하고 있다면 FTP 트래픽을 허용하도록 방화벽 규칙을 조정해야 합니다.
# iptables -I INPUT -p tcp --dport 20 -j ACCEPT
# iptables -I INPUT -p tcp --dport 21 -j ACCEPT
# iptables -I INPUT -p tcp --dport 64000:65535 -j ACCEPT
  처음 2개는 FTP 데이터/제어 포트의 트래픽을 허용하는 규칙입니다. 마지막은 앞서 vsftpd.conf 파일에서 정의한 패시브 모드용 포트들의 트래픽을 허용하는 규칙입니다.

로그 활성화
  이 글을 따라하던 중 무슨 문제가 있을 경우에 대비하여 vsftpd.conf 파일에서 아래의 파라미터를 조정하여 로그를 활성화할 수 있습니다.
xferlog_enable=YES
xferlog_std_format=NO
xferlog_file=/var/log/vsftpd.log
log_ftp_protocol=YES
debug_ssl=YES
# service vsftpd restart

FileZilla를 이용하여 FTP 서버에 접속하기
  SSL/TLS를 지원하는 FTP 클라이언트 중 FileZilla를 사용해보겠습니다. SSL/TLS를 사용하는 FTP 서버에 접속할 땐 아래처럼 설정을 합니다.

출처: http://xmodulo.com/secure-ftp-service-vsftpd-linux.html

  SSL/TLS를 사용하는 서버에 접속할 때 그 서버에 처음 접속하는 거라면 그 서버의 인증서가 표시됩니다. 인증서를 확인하고 로그인을 진행합니다.

출처: http://xmodulo.com/secure-ftp-service-vsftpd-linux.html


sftpd 트러블슈팅
1. FTP 서버에 접속할 때 아래와 같은 에러가 발생한다면 FTP 트래픽이 방화벽에 막히고 있을 가능성이 높습니다. 위에서 설명한 것처럼 필요한 포트를 방화벽에서 열어야 합니다.
ftp: connect: No route to host
2. 센트OS/RHEL에서 실행 중인 chroot 상태의 FTP 서버에 접속할 때 아래와 같은 에러가 발생할 경우 SELinux를 비활성화하거나 SELinux의 설정 값을 변경해야 합니다.
500 OOPS: cannot change directory:/home/dev
Login failed.
  SELinux의 설정 값을 변경하여 해결하려면 아래의 명령어를 사용합니다.
$ sudo setsebool -P ftp_home_dir on
3. FileZilla로 SSL/TLS를 사용하는 서버에 접속할 때 아래와 같은 에러가 발생한다면 vsftpd.conf 파일에 "ssl_ciphers=HIGH"를 추가합니다. vsftpd의 디폴트 암호화 방식(DES-CBC3-SHA)을 FileZilla가 지원하지 않아서 생기는 문제입니다.
Trace:    GnuTLS alert 40: Handshake failed
Error:    GnuTLS error -12: A TLS fatal alert has been received.
"SSL_accept failed: error:1408A0C1:SSL routines:SSL3_GET_CLIENT_HELLO:no shared cipher"


2014/10/28 16:06 2014/10/28 16:06
Posted
Filed under 프로그램과 명령어/네트워크와 보안
참조 원문: 10 examples of Linux ss command to monitor network connections

ss - socket statistics
  ss 명령어는 deprecated 된 netstat 명령어를 대체하는 명령어입니다. netstat 보다 많은 정보를 출력할 수 있으며 더 빠릅니다. netstat 명령어가 정보를 수집하기 위해 다양한 /proc 파일들을 읽는데 이러한 방식은 표시할 연결이 많을 경우 속도를 느리게 만듭니다. 이와 달리 ss 명령어는 정보를 커널 스페이스에서 직접 가져옵니다. ss 명령어에 사용하는 옵션은 netstat과 매우 비슷하기 때문에 쉽게 대체 사용이 가능합니다.

1. 모든 연결 출력
$ ss | less
Netid  State      Recv-Q Send-Q   Local Address:Port       Peer Address:Port  
u_str  ESTAB      0      0                    * 15545                 * 15544 
u_str  ESTAB      0      0                    * 12240                 * 12241 
u_str  ESTAB      0      0      @/tmp/dbus-2hQdRvvg49 12726                 * 12159 
u_str  ESTAB      0      0                    * 11808                 * 11256 
u_str  ESTAB      0      0                    * 15204                 * 15205 
.....

2. TCP, UDP, UNIX 연결 필터링
  TCP는 t, UDP는 u, UNIX는 x 옵션 사용
$ ss -t 또는 ss -A tcp
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port  
ESTAB      0      0           192.168.1.2:43839     108.160.162.37:http   
ESTAB      0      0           192.168.1.2:43622     199.59.149.201:https  
ESTAB      0      0           192.168.1.2:33141      83.170.73.249:ircd   
ESTAB      0      0           192.168.1.2:54028     74.125.135.125:xmpp-client
  기본적으로 t 옵션은 "established"나 "CONNECTED" 상태인 연결만 출력합니다. 즉, "LISTENING" 상태인 것들은 출력하지 않습니다. 그것들까지 출력하려면 -a 옵션을 t 옵션과 함께 사용하면 됩니다.
$ ss -ua 또는 ss -a -A udp
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port  
UNCONN     0      0           192.168.1.2:48268                  *:*      
UNCONN     0      0           192.168.1.2:56575                  *:*      
UNCONN     0      0                     *:40309                  *:*      
UNCONN     0      0           192.168.1.2:56879                  *:*      
UNCONN     0      0                     *:49014                  *:*      
UNCONN     0      0           192.168.1.2:53124                  *:*      
UNCONN     0      0             127.0.1.1:domain                 *:*
  a 옵션은 "CONNECTED"와 "LISTENING" 상태의 소켓을 출력합니다. UDP는 연결이 없는 프로토콜이기 때문에 대부분의 경우 "ss -u" 명령어로는 아무 내용도 출력되지 않으므로 모든 UDP 연결을 출력하려면 a 옵션을 사용해야 합니다.

3. 호스트네임 해석 방지
  빠른 출력을 위해 n 옵션을 사용하여 IP 주소를 호스트네임으로 해석하는 것을 막을 수 있습니다. 다만 포트 번호도 해석하지 않게 됩니다.
$ ss -nt
State      Recv-Q Send-Q      Local Address:Port        Peer Address:Port
ESTAB      0      0             192.168.1.2:43839     108.160.162.37:80   
ESTAB      0      0             192.168.1.2:51350      74.125.200.84:443  
ESTAB      0      0             192.168.1.2:33141      83.170.73.249:6667 
ESTAB      0      0             192.168.1.2:54028     74.125.135.125:5222 
ESTAB      0      0             192.168.1.2:48156      66.196.120.44:5050

4. LISTENING 소켓만 출력
$ ss -ltn
State      Recv-Q Send-Q        Local Address:Port          Peer Address:Port
LISTEN     0      5                 127.0.1.1:53                       *:*    
LISTEN     0      128               127.0.0.1:631                      *:*    
LISTEN     0      128                     ::1:631                     :::*
  위 명령어는 모든 "listening" "tcp" 연결을 출력합니다. n 옵션은 IP 주소를 호스트네임으로 번역하는 것을 막아 출력을 더 빠르게 해줍니다.

  모든 listening udp 연결을 출력시키려면 t를 u로 바꿉니다.
$ ss -lun
State      Recv-Q Send-Q        Local Address:Port          Peer Address:Port
UNCONN     0      0                 127.0.1.1:53                       *:*    
UNCONN     0      0                         *:68                       *:*    
UNCONN     0      0               192.168.1.2:123                      *:*    
UNCONN     0      0                 127.0.0.1:123                      *:*    
UNCONN     0      0                         *:123                      *:*    
UNCONN     0      0                         *:5353                     *:*    
UNCONN     0      0                         *:47799                    *:*    
UNCONN     0      0                         *:25322                    *:*    
UNCONN     0      0                        :::54310                   :::*    
.....

5. 프로세스 이름과 PID 출력
  연결을 소유한 프로세스 이름/PID를 출력할 때는 p 옵션을 사용합니다.
$ ss -ltp
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port  
LISTEN     0      100           127.0.0.1:smtp                   *:*      
LISTEN     0      128           127.0.0.1:9050                   *:*      
LISTEN     0      128                   *:90                     *:*      
LISTEN     0      128                   *:db-lsp                 *:*        users:(("dropbox",3566,32))
LISTEN     0      5             127.0.0.1:6600                   *:*      
LISTEN     0      128           127.0.0.1:9000                   *:*        users:(("php5-fpm",1620,0),("php5-fpm",1619,0))
  root 권한으로 실행하면 더 많은 출력 결과가 나옵니다.
s -ltp
[sudo] password for enlightened:
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port  
LISTEN     0      100           127.0.0.1:smtp                   *:*        users:(("master",2051,12))
LISTEN     0      128                   *:90                     *:*        users:(("nginx",1701,6),("nginx",1700,6),("nginx",1699,6),("nginx",1697,6),("nginx",1696,6))
LISTEN     0      5             127.0.0.1:6600                   *:*        users:(("mpd",2392,5))
LISTEN     0      128           127.0.0.1:9000                   *:*        users:(("php5-fpm",1620,0),("php5-fpm",1619,0),("php5-fpm",1616,7))
LISTEN     0      16                    *:2633                   *:*        users:(("oned",1853,16))
LISTEN     0      50            127.0.0.1:mysql                  *:*        users:(("mysqld",1095,10))
LISTEN     0      5             127.0.1.1:domain                 *:*        users:(("dnsmasq",1347,5))
LISTEN     0      32                    *:ftp                    *:*        users:(("vsftpd",1051,3))
LISTEN     0      128                   *:ssh                    *:*        users:(("sshd",1015,3))
LISTEN     0      128           127.0.0.1:ipp                    *:*        users:(("cupsd",688,11))
LISTEN     0      128                  :::http                  :::*        users:(("apache2",5322,4),("apache2",5321,4),("apache2",5317,4),("apache2",5316,4),("apache2",5313,4),("apache2",2505,4))
LISTEN     0      128                  :::ssh                   :::*        users:(("sshd",1015,4))
LISTEN     0      128                 ::1:ipp                   :::*        users:(("cupsd",688,10))

6. 통계 현황 출력
$ ss -s
Total: 526 (kernel 0)
TCP:   10 (estab 7, closed 0, orphaned 0, synrecv 0, timewait 0/0), ports 0

Transport Total     IP        IPv6
*      0         -         -       
RAW      0         0         0       
UDP      15        9         6       
TCP      10        9         1       
INET      25        18        7       
FRAG      0         0         0

7. 연결 유지 시간 출력
$ ss -tn -o
State      Recv-Q Send-Q      Local Address:Port        Peer Address:Port
ESTAB      0      0             192.168.1.2:43839     108.160.162.37:80   
ESTAB      0      0             192.168.1.2:36335     204.144.140.26:80     timer:(keepalive,26sec,0)
ESTAB      0      0             192.168.1.2:33141      83.170.73.249:6667 
ESTAB      0      0             192.168.1.2:58857      74.121.141.84:80     timer:(keepalive,23sec,0)
ESTAB      0      0             192.168.1.2:42794     173.194.40.239:80     timer:(keepalive,32sec,0)

8. IPv4 또는 IPv6 소켓 연결만 출력
  IPv4 소켓 연결만 출력하려면 '-f inet' 옵션이나 '-4' 옵션을 사용한다.
$ ss -tl -f inet
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port  
LISTEN     0      100           127.0.0.1:smtp                   *:*      
LISTEN     0      128           127.0.0.1:9050                   *:*      
LISTEN     0      128                   *:90                     *:*      
LISTEN     0      128                   *:db-lsp                 *:*      
LISTEN     0      5             127.0.0.1:6600                   *:*
  IPv6 연결만 출력하려면 '-f inet6' 옵션이나 '-6' 옵션을 사용한다.
$ ss -tl6
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port  
LISTEN     0      100                 ::1:smtp                  :::*      
LISTEN     0      128                  :::12865                 :::*      
LISTEN     0      128                  :::http                  :::*      
LISTEN     0      128                  :::ssh                   :::*      
LISTEN     0      128                 ::1:ipp                   :::*

9. TCP 상태에 따른 필터링
  특정 연결에 대해서만 출력시킬 수 있다. 필터 표현식은 모든 옵션 뒤에 나열해야 한다. 아래와 같은 형식으로 사용할 수 있다.
$ ss [ OPTIONS ] [ STATE-FILTER ] [ ADDRESS-FILTER ]
  "CONNECTED" 상태인 모든 IPv4 TCP 소켓을 출력하는 방법은 아래와 같다.
$ ss -t4 state established
Recv-Q Send-Q         Local Address:Port             Peer Address:Port  
0      0                192.168.1.2:54436          165.193.246.23:https  
0      0                192.168.1.2:43386          173.194.72.125:xmpp-client
0      0                192.168.1.2:38355           199.59.150.46:https  
0      0                192.168.1.2:56198          108.160.162.37:http
  'TIME-WAIT' 상태인 소켓을 출력하는 방법은 아래와 같다.
$ ss -t4 state time-wait
Recv-Q Send-Q         Local Address:Port             Peer Address:Port  
0      0                192.168.1.2:42261           199.59.150.39:https  
0      0                  127.0.0.1:43541               127.0.0.1:2633
  상태는 아래와 같은 것들이 있다.
1. established
2. syn-sent
3. syn-recv
4. fin-wait-1
5. fin-wait-2
6. time-wait
7. closed
8. close-wait
9. last-ack
10. closing
11. all - 위의 모든 상태 포함
12. connected - listen과 closed를 제외한 모든 상태
13. synchronized - syn-sent를 제외한 모든 connected 상태
14. bucket - 미니소켓으로 유지되고 있는 상태(예: time-wait과 syn-recv)
15. big - bucket과 정반대 상태
  syn-sent, syn-recv를 포함한 많은 상태들은 볼 일이 많지 않다. 그런 상태는 매우 짧은 시간 동안만 존재하기 때문이다. 그런 상태를 실시간으로 감지하려면 watch 명령어를 사용하는 것이 좋다.
$ watch -n 1 "ss -t4 state syn-sent"
  위의 명령어를 실행한 후 브라우저에서 아무 웹사이트나 열어보거나 뭔가를 다운로드 하고 즉시 출력 결과를 살펴보면 짧은 시간 동안 아래처럼 특수한 상태를 확인할 수 있다.
Every 1.0s: ss -t4 state syn-sent                   Tue Apr  1 10:07:33 2014
Recv-Q Send-Q           Local Address:Port               Peer Address:Port
0      1                  192.168.1.2:55089            202.79.210.121:https
0      1                  192.168.1.2:33733             203.84.220.80:https
0      1                  192.168.1.2:36240             106.10.198.33:https

10. 주소와 포트 번호로 출력 걸러내기
  출발지나 목적지 포트가 SSH인 모든 소켓 연결을 출력
$ ss -at '( dport = :ssh or sport = :ssh )'
State      Recv-Q Send-Q    Local Address:Port        Peer Address:Port  
LISTEN     0      128                   *:ssh                    *:*      
LISTEN     0      128                  :::ssh                   :::*
  목적지 포트가 443이나 80인 소켓
$ ss -nt '( dst :443 or dst :80 )'
State      Recv-Q Send-Q      Local Address:Port        Peer Address:Port
ESTAB      0      0             192.168.1.2:58844      199.59.148.82:443  
ESTAB      0      0             192.168.1.2:55320     165.193.246.23:443  
ESTAB      0      0             192.168.1.2:56198     108.160.162.37:80   
ESTAB      0      0             192.168.1.2:54889    192.241.177.148:443  
ESTAB      0      0             192.168.1.2:39893      173.255.230.5:80   
ESTAB      0      0             192.168.1.2:33440      38.127.167.38:443
  아래의 명령어로 위와 같은 효과를 얻을 수 있다.
$ ss -nt dst :443 or dst :80
  기타 예제
# 주소로 걸러내기
$ ss -nt dst 74.125.236.178

# CIDR 표기법도 지원
$ ss -nt dst 74.125.236.178/16

# 주소와 포트 모두 이용
$ ss -nt dst 74.125.236.178:80
  포트는 dport와 sport 옵션을 통해서도 걸러낼 수 있다. 포트 번호 앞에는 ":"을 반드시 붙여야 한다.
$ ss -nt dport = :80
State      Recv-Q Send-Q      Local Address:Port        Peer Address:Port
ESTAB      0      0             192.168.1.2:56198     108.160.162.37:80   
ESTAB      0      0             192.168.1.2:39893      173.255.230.5:80   
ESTAB      0      0             192.168.1.2:55043     74.125.236.178:80
  'ss -nt dst :80' 명령어로 위의 명령어와 같은 효과를 볼 수 있다.

  아래는 필터링에 대한 다른 예제이다.
# 출발지 주소가 127.0.0.1이며 출발지 포트가 5000보다 큰 경우
$ ss -nt src 127.0.0.1 sport gt :5000

# 로컬 SMTP(25번 포트) 소켓
$ sudo ss -ntlp sport eq :smtp

# 포트 번호가 25보다 큰 경우
$ sudo ss -nt sport gt :1024

# 원격지의 포트가 100 미만인 경우
$ sudo ss -nt dport \< :100

# 원격지 포트 80번에 대한 연결
$ sudo ss -nt state connected dport = :80
  아래 연산자는 포트 번호를 비교할 때 사용할 수 있다.
<= or le : 포트 이하
>= or ge : 포트 이상
== or eq : 해당 포트
!= or ne : 해당 포트가 아닌 포트
< or gt : 포트 미만
> or lt : 포트 초과
  필터 문법에 대한 문서는 iproute2-doc 패키지(데비안/우분투 시스템 기준)에 있으며 /usr/share/doc/iproute2-doc/ss.html 파일에 ss 명령어의 필터 문법이 상세히 기록되어 있다.


2014/10/21 15:45 2014/10/21 15:45
Posted
Filed under 취미 및 잡담
  먼저 데수라는 인디 게임계의 스팀이라 불릴 정도로 인디 게임이 포진한 곳입니다. 스팀처럼 데수라에도 많은 무료 게임이 있는데요. 스팀의 무료 게임이 대부분 F2P인 것에 비해 데수라의 무료 게임들은 정말로 무료 게임인 경우가 대부분입니다. 다만 인디 게임이면서 무료이기 때문에 퀄리티가...

  이 글에서는 이러한 무료 게임에 대한 팁들을 설명합니다.


팁1. 데수라의 모든 무료 게임을 라이브러리에 추가하기
※ 데수라의 라간지에 관심이 없으시다면 이 팁을 무시하시기 바랍니다. 그렇지 않는다면 돈 주고도 살 수 없는 여러분의 소중한 2시간을 낭비하게 될 것입니다.

  먼저 말씀드리자면 모든 무료 게임을 라이브러리에 추가하는 것은 상당한 노가다를 요구합니다. 약 2시간 동안 클릭질을 해야 하므로 라간지에 관심이 없으시다면 이 팁을 사뿐히 무시하시기 바랍니다.

  우선 데수라 홈페이지에서 클라이언트를 받아 설치 및 실행, 그리고 데수라에 가입 및 로그인을 합니다. 그 후 게임 목록 페이지에서 전체 목록을 나열합니다. 그러면 아래와 같은 화면이 됩니다.

  여기서 빨간 동그라미에 있는 버튼을 눌러 아래와 같이 게임 목록을 좀 더 컴팩트하게 만듭니다. 이는 한 화면에 좀 더 많은 게임들을 표시하기 위한 것으로 필요 없으시다면 안 하셔도 무방합니다.
  그런데 일부 게임에서 눈에 띄는 단어들이 보이네요? FREE?! 어서 눌러서 들어가보죠!
  여기서 'Install game'이라고 적힌 파란색 버튼을 누르시면 브라우저 가운데에 아래와 같은 창이 하나 뜹니다.
  여기서 왼쪽 버튼을 누르면 라이브러리에 해당 게임이 추가되는 것을 데수라 클라이언트를 통해 확인하실 수 있습니다. 이제 게임 목록으로 되돌아간 후 라이브러리에 추가한 게임의 페이지에 다시 가보면 아래처럼 Install game 버튼이 Play game 버튼으로 변한 것을 확인하실 수 있습니다.
  자, 이제 게임 목록으로 되돌아갑시다. 이제 뭘 하냐고요? 같은 방법으로 데수라에 있는 2011개의 게임 중 무료인 것을 일일이 찾아내서 라이브러리에 추가하시면 됩니다. 네. 제가 해보니 한 1~2시간 정도 걸리는 것 같네요......OTL



팁2. 대충 괜찮을 것 같은 것만 추가하기
  아무래도 전부 추가하기엔 게임이 좀 많죠? 그렇다면 좀 괜찮을 것 같은 것들만 추가해볼까요? 게시판에 대략 일주일에 한 번씩 데수라 무료 게임들이 올라오는 것을 보셨을 겁니다. 데수라는 현지 시각으로 금요일마다 무료 게임을 4개씩 공개합니다. 데수라에서 공식적으로 밀어주는 무료 게임들이니 다른 무료 게임에 비해 퀄리티가 아마도 더 좋을 것 같군요. 물론 매주 공개하는 걸 보면 그렇지 않을 수도 있겠지만 그렇다고 믿읍시다.

  그렇다면 이런 무료 공개 정보는 어디에서 확인할 수 있을까요? 바로 여깁니다. 들어가 보시면 블로그란에 FREEDOM FRIDAY라는 포스트들이 있는데 이게 바로 무료 공개 기사들입니다. 최초 기사는 2013년 8월 30일에 작성된 것 같네요. 1페이지부터 시작해서 해당 기사까지 쭉 지나가면서 공개된 게임들을 추가하시면 되겠습니다.



팁3. 게임을 라이브러리에 추가할 때 설치 방지하기

  무료 게임을 라이브러리에 추가하기 위해 Install game 버튼을 누르면 잠시 후 아래와 같은 창이 뜹니다.
  여기서 Cancel 버튼을 누르시면 안 됩니다. 데수라 클라이언트 버그인지는 모르겠는데 Cancel을 누르면 창은 닫히지만 설치는 그대로 진행되기 때문입니다. 저 상태에서 잠시 기다리면 창의 내용이 아래와 같이 바뀌는데 이때 Cancel을 눌러주시면 라이브러리 추가 후 설치를 진행하지 않습니다.
  설치된 게임은 라이브러리의 STATUS 란에 Ready가 찍히므로 실수로 설치한 게임들을 찾아 우클릭하여 Uninstall 메뉴로 삭제합시다.



팁4. 설치한 무료 게임을 삭제할 때 라이브러리에서 제거하지 않기

  설치한 무료 게임을 삭제할 땐 유의해야 할 것이 있습니다. 아래는 설치한 무료 게임을 언인스톨할 때 볼 수 있는 메뉴입니다.
  여기서 Remove From Account 체크박스의 체크를 빼지 않으면 해당 게임이 라이브러리에서 사라집니다. 물론 다시 추가할 순 있지만 귀찮으므로 삭제할 때 꼭 체크를 빼도록 합시다.



팁5. 설치 옵션이 2개 이상인 경우
  설치 시 게임에 따라 아래처럼 고를 수 있는 항목이 2개 이상인 경우가 있습니다.
  위의 예를 보면 게임의 데모와 본편이 모두 FREE로 되어 있습니다. 이는 처음에 유료로 등록됐다가 후에 무료로 풀린 게임에서 흔히 볼 수 있는 모습입니다. 그 외에도 '기본적으로 공짜지만 소정의 금액을 개발자에게 기부할 수 있는 경우', 'FREE라고 써 있어서 들어와 봤더니 알파 버전 등 사실상 데모만 공짜고 제대로 된 건 구매해야 하는 경우' 등 여러 케이스가 있으니 잘 보고 적절한 걸 선택하시기 바랍니다.





  이상입니다. 도움이 되셨으면 좋겠네요.

2014/04/12 06:43 2014/04/12 06:43