2015. 3. 21. 10:03


이 글은 OpenVPN 을 설치 하여 모든 트래픽을 VPN서버로 우회 하여 사용하는 것을 목적으로 설명합니다.


서버로 Rasbian (Raspberry Pi), 클라이언트는 iOS 의 OpenVPN App을 사용했습니다.

(안드로이드에도 구글 플레이스토어에 동일한 앱이 있습니다)



[진행 순서]

1. 서버 설치

2. 인증서 생성

3. 서버 설정

    3-1. server.conf

    3-2. conf 파일명 설정

4. 클라이언트 접속설정

5. 연결

6. 마무리 작업

7. 방화벽 설정 [추가 2015.04.10]




('#'은 root 권한을 의미 합니다.)


1. 서버 설치

# sudo apt-get install openvpn






2. 인증서 생성

1

 # cp /usr/share/doc/openvpn/examples/easy-rsa/2.0/* /etc/openvpn

2

 # cd /etc/openvpn

3

 # source vars

4

 # ./clean-all

5

 # ./build-ca

6

 # ./build-key-server server

7

 # ./build-key haebi

8

 # ./build-dh


- 1. 필요한 설정파일들을 /etc/openvpn 으로 복사합니다.

- 2. 현재 워킹 디렉토리 이동

- 3. 인증서 생성에 필요한 환경변수 등록

- 4. 새로 생성할 것이므로 /etc/openvpn/keys 의 내용을 모두 제거 (진행 중 잘못된 경우에 필요함)

- 5. CA 인증서 생성. (대충 엔터키만 눌러주시면 됩니다)

- 6. 서버 인증서 생성. (엔터키 눌러주다가 y? 라고 묻는 부분에 반드시 y 입력 후 엔터. y는 2번 물어봅니다.)

- 7. 사용자 인증서 생성. (OpenVPN에 접속할 사용자 수 만큼 생성합니다.)

- 8. 디피헬먼 암호화를 위한 키 생성


추후 사용자 인증서가 추가로 필요한 경우, [3번]과 [7번]을 반복해 주시면 되겠습니다.

4번 ./clean-all 해서 다 날려버리면 처음부터 다시 작업 & 기존 사용자의 인증서까지 무효가 됩니다. <-- 조심!!






3. 서버 설정

3-1. server.conf

1

 # cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/

2

 # gunzip server.conf.gz


- 1. 서버 설정파일을 /etc/openvpn 으로 복사.

- 2. 압축해제



# vim server.conf

1

 port 1194

2

 proto udp

3

 dev tun

4

 ca /etc/openvpn/keys/ca.crt

5

 cert /etc/openvpn/keys/server.crt

6

 key /etc/openvpn/keys/server.key  # This file should be kept secret

7

 dh /etc/openvpn/keys/dh1024.pem

8

 server 10.8.0.0 255.255.255.0

9

 push "route 10.8.0.0 255.255.255.0"

10

 push "redirect-gateway def1"

11

 push "dhcp-option DNS 10.8.0.1"

12

 push "dhcp-option DNS 168.126.63.1"


- 1. 포트설정

- 2. 프로토콜 설정 tcp 또는 udp 중에서 선택

- 3. tun 디바이스 사용. (tap 도 있는데 차이점은 모르겠다. 그냥 디폴트로 이거 쓰자)

- 4. CA 인증서 경로 지정

- 5. 서버 인증서 경로 지정

- 6. 서버 개인키 경로 지정

      (이 파일은 비밀리에 지켜져야 한다. 라고 되어있죠? 유출되지 않도록 각별히 신경을 써 줍니다^^)

- 7. 디피헬먼 키 경로 지정

- 8. VPN 서버가 사용할 IP 대역 설정

- 9. 라우팅 경로 설정

     (VPN서버 네트워크의 상위 레벨에 여러 서브넷이 존재하는 경우, 여기서 등록해줘야 접근이 가능한가 봅니다.)

- 10. 패킷의 리 다이렉션 설정. (중요!)

     (이 옵션이 있으면 접속된 클라이언트의 모든 트래픽이 VPN을 거쳐 갑니다. 인터넷은 기존연결로 가고 내부 망 접속만 하고자 한다면 설정하지 않습니다.)

- 11 ~ 12. DNS 설정입니다.

      (모든 패킷을 리다이렉션 하는 경우에, 12번 라인이 없으면 인터넷이 안됩니다. 12번의 DNS 주소는 꼭 저 주소일 필요는 없습니다. 사용하는 다른 DNS 주소가 있다는 그것을 기입합니다.)




3-2. conf 파일명 설정

# vim /etc/default/openvpn

1

 AUTOSTART="openvpn"


- 1. openvpn config 파일명이 openvpn 임을 /etc/init.d/openvpn 에게 알려줍니다.

     ( 이제 /etc/init.d/openvpn start 하게 되면, /etc/openvpn/openvpn.conf 파일을 찾아서 읽게 됩니다.)



# mv server.conf openvpn.conf

- config 파일명을 변경하여 준다.



서버시작

# /etc/init.d/openvpn restart


- 만약 서버 로그가 보고 싶다면, stop 시키고 아래의 명령을 실행하면 실시간 로그를 확인할 수 있습니다.

openvpn --config /etc/openvpn/openvpn.conf 






4. 클라이언트 접속설정

# cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf /etc/openvpn

- 클라이언트 접속 설정 샘플을 복사합니다.



# vim /etc/openvpn/client.conf

1

 client

2

 dev tun

3

 proto udp

4

 remote 0.0.0.0 1194

5

 ca ca.crt

6

 cert haebi.crt

7

 key haebi.key


- 1. client 모드임을 의미. (서버 설정파일에는 server 이라고 되어있다)

- 2. tun 디바이스 사용

- 3. udp 프로토콜 사용

- 4. 서버 접속 주소, 포트 설정 (0.0.0.0 대신 서버 IP나 도메인을 적는다)

- 5. ca 인증서 파일명 설정

- 6. 사용자 인증서 파일명 설정

- 7. 사용자 개인키 파일명 설정


2~4번 항목은 서버와 동일하게 설정해야 합니다.

5번은 서버의 ca 인증서와 동일한 것이어야 합니다.


현재 클라이언트 설정에 필요한 Key의 위치

 /etc/openvpn/keys/ca.crt

 /etc/openvpn/keys/haebi.crt

 /etc/openvpn/keys/haebi.key

 /etc/openvpn/client.conf






5. 연결

앱스토어에 OpenVPN 으로 검색하면 어플이 나옵니다.

제작자가 OpenVpn Technologies 라고 된것으로 다운 받습니다.




iTunes 에 연결 후, OpenVPN 앱의 도큐먼트에 4개 파일을 넣어줍니다.

ca.crt

haebi.crt

haebi.key

client.ovpn


(client.ovpn 은 client.conf 파일명을 변경한 것 입니다)


앱을 실행하면 + 버튼이 생기고 눌러서 추가하면 저 4개 파일이 사라지면서 설정이 추가 됩니다.


인 / 아웃 용량까지 제공하므로, 간에 데이터 사용량 측정? 도 가능하겠군요~호호호...(???)


팁 한가지 : 서버측 말고 클라이언트 측 로고를 볼수 있는 방법... 조기 위에 Connected 옆에 우측에 꺽쇠괄호 보이죠?

저거 누르면 클라이언트측 로그가 주욱~~~ 나옵니다




연결은 됐는데 인터넷이 안되면...?

NAT설정, ipforward 설정이 필요하다.


NAT 설정

# iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE


ipforward 허용 설정

# vim /etc/sysctl.conf

 net.ipv4.ip_forward=1






6. 마무리 작업

이 설정을 재부팅 시에도 그대로 될수 있도록 하겠다.

openvpn은 알아서 시작하는데 nat 설정이 날아가 버려서 문제가 되었다.


그래서 찾아본 해결책이 외국 포럼에서 본것으로 iptables-save 로 현재 상태를 저장하고, 부팅시 불러오는 방법


# iptables-save > /etc/iptables.conf 

- 일단 현재 nat 상태를 저장한다.



# vim /etc/network/interfaces

 iface eth0 inet dhcp

    pre-up iptables-restore < /etc/iptables.conf

- eth0 바로 아래부분에 iptables-restore 를 적용해 준다.






7. 방화벽 설정

iptables를 활용하여 방화벽 규칙을 적용한다. [추가 2015.04.10][변경1 2015.04.22]

iptables -P INPUT ACCEPT
iptables -F

iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp ! --syn -m state --state NEW -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP


iptables -A INPUT -i lo -j ACCEPT


iptables -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT


iptables -A INPUT -p tcp -m tcp --dport 1194 -j ACCEPT



iptables -I INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT



iptables -A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
iptables -P INPUT DROP


iptables -P OUTPUT ACCEPT


iptables -nL



iptables -t nat -F
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
iptables -t nat -nL

- 차단된 접속시도는 /var/log/syslog 에 "iptables denied:" 으로 시작하는 로그가 쌓이게 된다.

- iptables -nL, iptables -t nat -nL 은 현재 규칙을 화면에 표시하여 주는 역할을 한다.

- INPUT (들어오는) 규칙은 기본적으로 DROP (갖다버림) 이며, -j ACCEPT 에 명시된 항목만 허용한다.



부팅시 이 방화벽 규칙을 유지 시키기 위해서 아래 작업을 추가한다.

# sudo iptables-save > iptables.conf

# sudo cp iptables.conf /etc/



#sudo vim /etc/network/interfaces

 auto lo

iface lo inet loopback
iface eth0 inet dhcp
pre-up iptables-restore < /etc/iptables.conf

- eth0 아래에 iptables-restore 명령으로 방화벽 규칙을 적용 시켜준다.






[변경사항]

- 2015.04.22 : iptables 설정 중 deny 로그 남기는 부분의 설정 위치에 대한 오류가 있어 정정합니다.






[참고]

https://www.debian-administration.org/article/445/Getting_IPTables_to_survive_a_reboot

http://www.joinc.co.kr/modules/moniwiki/wiki.php/Site/System_management/VPN/OpenVPN

https://openvpn.net/index.php/open-source/documentation/howto.html


openvpn.net 의 링크에서 Routing all client traffic (including web-traffic) through the VPN 항목을 찾아 보면

모든 트래픽 보내기에 대한 설정 예시와 함께 상세한 설명이 있다.





Posted by 해비
2015. 1. 28. 13:30

Tomcat 설치




다운로드

http://tomcat.apache.org/



­압축해제

# tar ­-zxf apache­-tomcat­-8.0.17.tar.gz ­-C /usr/share/tomcat8



­링크설정

# ln -­s /usr/share/tomcat8/apache-­tomcat­-8.0.17 /usr/share/tomcat

- 링크 설정을 하는 이유는 나중에 버젼업이 되어 새 버젼의 톰캣을 설치후 링크 를 변경하는 것으로 다른 파일들의 톰캣 경로를 그대로 사용하고자 함 입니다.


­톰캣계정 추가

# useradd tomcat



­소유권 변경, 실행권한 설정

# chown -­R tomcat:tomcat /usr/share/tomcat8
# chmod +x /usr/share/tomcat/bin/*.sh

- 톰캣 ­8.0.17버젼에서는 기본적으로 실행권한 설정이 되어 있었다.



톰캣 시작/종료

sudo /bin/su ­ - tomcat ­-c /usr/share/tomcat/bin/startup.sh
sudo /bin/su ­ - tomcat ­-c /usr/share/tomcat/bin/shutdown.sh



­시작/종료 스크립트 생성

# vi /etc/init.d/tomcat

#!/bin/sh
### BEGIN INIT INFO
# Provides: Tomcat
# Required­Start: $network
# Required­Stop: $network
# Default­Start: 2 3 5
# Description: Java Servlet and JSP Engine
### END INIT INFO

case "$1" in
'start')
/bin/su ­ - tomcat ­-c /usr/share/tomcat/bin/startup.sh
;;
'stop')
/bin/su ­ - tomcat ­-c /usr/share/tomcat/bin/shutdown.sh
;;
*)
echo "Usage: $0 { start | stop }"
;;
esac
exit 0



실행권한 부여

# chmod 755 /etc/init.d/tomcat



자동시작 등록

update­rc.d tomcat defaults

- 부팅 시 자동으로 톰캣 서버가 실행되도록 한다.



자동시작 제거

update­rc.d -­f tomcat remove



관리페이지 경로 변경

도메인 루트는 서비스에 사용하면서 동시에 톰캣 관리 페이지를 사용하고자 할때, 관리페이지 접근경로를 변경 한다.


/usr/share/tomcat/webapps/ROOT

톰캣 루트 경로 이다.


관리 페이지에 접근시 사용할 경로(이하 여기서는 /tcman) 으로 한다.

/usr/share/tomcat/webapps/ROOT/tcman 폴더 생성


/usr/share/tomcat/webapps/ROOT/ 폴더에서 WEB­INF 폴더를 제외한 모든 파일을 tcman 으로 이동


톰캣 재기동

/etc/init.d/tomcat stop

/etc/init.d/tomcat start


이제 /tcman 을 붙여야지 관리페이지로의 접근이 가능하다.

물론 / 로 접근 시 404 오류를 내뱉을 것이다. 파일 없다고...


오류 보기가 싫으면 index.html 하나 만들어서 임시로 넣어두는 것도 좋은 방법~

- 관리페이지 경로 변경은 제가 생각한 방법인데, 더 좋은 방법이 있을지는 모르겠네요...





- 참고 -

http://wolfpaulus.com/jounal/software/tomcat_squeeze/comment­page­1/#comment­60189
http://fruitdev.tistory.com/19
https://www.debian­administration.org/article/28/Making_scripts_run_at_boot_time_with_Debian






Posted by 해비
2015. 1. 28. 13:11

Oracle JDK 설치

리눅스에 기본 설치된 OpenJDK 또는 JRE ? 대신 오라클에서 제공하는 자바 가상머신 설치 방법에 대해 설명합니다.


모든 과정은 Root 권한으로 진행합니다.

매 구문마다 sudo 명령어를 붙여서 진행해도 되지만 불편하다면 su - root 로 아예 루트권한으로 바꾼 후 작업 합니다.




다운로드

오라클 사이트에 가서 최신 자바 JDK를 다운로드 합니다.

http://www.oracle.com/technetwork/java/index.html




­압축해제

# tar ­-zxf jdk-­8u31-­linux­-x64.tar.gz ­-C /opt/jdk/

- 표시된 부분의 파일명은 JDK 버젼과 OS 버젼에 따라 다릅니다. 알아서 수정할 것!




설치확인

# ls /opt/jdk/
jdk1.8.0_31

- ls 명령어 실행 시, jdk어쩌고 폴더가 리스트에 있다면 성공적으로 설치된 것 입니다.


기본JDK설정 (2개 다 실행한다)

# update­alternatives --­­install /usr/bin/java java /opt/jdk/jdk1.8.0_05/bin/java 100
# update­alternatives ­­--install /usr/bin/javac javac /opt/jdk/jdk1.8.0_05/bin/javac 100

(노란배경 부분은 설치확인 명령에서에 확인된 폴더명으로 버젼에 맞게 수정한다.)

- java, javac 명령어 입력 시 현재 설치된 것을 불러오도록 설정 합니다.


기본설정 확인

# update­alternatives ­­--display java
# update­alternatives ­­--display javac

- ­ 자바 버젼을 계속 구 버젼 참조하면 우선순위 변경(표시된 위치는 알아서 시스템에 맞게 수정)




우선순위 변경

# update­alternatives ­­--install /usr/bin/java java /usr/lib/jvm/java­6­openjdk­amd64/jre/bin/java 90

- 맨 뒤의 숫자가 클 수록 우선순위가 높다. 우리가 설정한 수치는 100 이었으므로 100 보다 작은 수로 지정을 한다.

- 기존 것 손대기 싫다면, 저위에 수치를 100 대신 기존 수치 보다 더 높은 값으로 지정해 주면 된다.






- 참고 -

https://www.digitalocean.com/community/tutorials/how­to­manually­install­oracle­java­on­a­debian­or-
ubuntu­vps






Posted by 해비
2015. 1. 24. 08:46

SSH 터널을 이용한 VNC 연결




Putty 설정 창으로 가서...

접속 > SSH > X11 > X11 포워딩 사용 항목 체크




접속 > SSH > 터널링 > 원포트 5900, 로컬, 127.0.0.1:5900 추가
(포트 번호는 상황에 맞게 수정 필요함, 여기서는 0번 디스플레이사용으로 가정함)




x11vnc 접속 예시.

- 뭔가 휑한 빈화면 보여주는건 좀 그렇다 싶어서 최대한 있어보이게(?) 만들고 캡쳐~






사용된 x11vnc 시작 명령어

 sudo x11vnc -auth guess -display :0

- sudo 안 붙이고 그냥 적으니까 display:0 번 어쩌고 오류남...(이유는 모르겠는데 아마 특정 파일에 접근이 안되나 봄)






[내용추가]

1. VNC 서버를 현재 데스크탑 화면을 직접 조정

apt-get install x11vnc 

하나의 데스크탑이 공유되므로 동시에 같은 화면을 보게 됩니다.



2. 별도의 가상 데스크탑 화면으로 접속

apt-get install tightvncserver

각각 독립적인 가상의 데스크탑으로 접속되므로 별도의 화면에서 작업하게 됩니다.





Posted by 해비
2015. 1. 10. 08:55

네트워크  서비스 재시작, 시작, 종료 명령어



레드헷 계열

# service network restart
OR
# /etc/init.d/network restart

To start Linux network service:
# service network start

To stop Linux network service:
# service network stop



데비안 계열

# /etc/init.d/networking restart

To start Linux network service:
# /etc/init.d/networking start

To stop Linux network service:
# /etc/init.d/networking stop




출처 : http://theos.in/desktop-linux/tip-that-matters/how-do-i-restart-linux-network-service/


Posted by 해비
2010. 11. 24. 10:22

1. 파일 복사
http://www.phpmyadmin.net/ 에서 최신버젼(.gz)을 내려받습니다.

wget http://downloads.sourceforge.net/project/phpmyadmin/phpMyAdmin/3.3.8/phpMyAdmin-3.3.8-all-languages.tar.gz?r=http%3A%2F%2Fwww.phpmyadmin.net%2Fhome_page%2Findex.php&ts=1291003785&use_mirror=cdnetworks-kr-2

tar xvfz phpMyAdmin-3.3.8-all-languages.tar.gz
압축해제(임의의 적정한 곳에 풀어 줍시다)

mv phpMyAdmin-3.3.8-all-languages /var/www/html/myadmin
폴더를 httpd의 DocumentRoot 인 /var/www/html/myadmin 에 위치 시킵니다.(폴더 이동 & 폴더명변경)



2. 환경설정
cp config.sample.inc.php config.inc.php
(실제로 사용되어지는 파일은 config.inc.php 입니다)

vim config.inc.php
$cfg['blowfish_secret'] = 'qwertyuiop'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

$cfg['Servers'][$i]['auth_type'] = 'http';

/* User for advanced features */
$cfg['Servers'][$i]['controluser'] = 'phpmyadmin';
$cfg['Servers'][$i]['controlpass'] = 'phpmyadmin';

/* Advanced phpMyAdmin features */
$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin';
$cfg['Servers'][$i]['bookmarktable'] = 'pma_bookmark';
$cfg['Servers'][$i]['relation'] = 'pma_relation';
$cfg['Servers'][$i]['table_info'] = 'pma_table_info';
$cfg['Servers'][$i]['table_coords'] = 'pma_table_coords';
$cfg['Servers'][$i]['pdf_pages'] = 'pma_pdf_pages';
$cfg['Servers'][$i]['column_info'] = 'pma_column_info';
$cfg['Servers'][$i]['history'] = 'pma_history';
$cfg['Servers'][$i]['designer_coords'] = 'pma_designer_coords';
blowfish_secret은 쿠키값 암호화 관련 옵션으로 추정되는데 아무 문자열이나 넣어주면 됩니다.
'auth_type' 은 보안상 http가 좋다고 하네요(http인증의 경우, 모든 웹 브라우저를 닫아야 로그아웃이 완료 됩니다)
'controluser', 'controlpass' 는 pma DB를 사용할 계정입니다.
/* Advanced phpMyAdmin features */ 부분은 주석처리 되어있는데 앞에 // 지우면 주석 해제 됩니다



3-1. pma용 DB계정생성 (첨부된 파일 사용 권장)
mysql -uroot -p1234
use mysql;
 INSERT INTO `mysql`.`user` (
`Host` ,
`User` ,
`Password` ,
`Select_priv` ,
`Insert_priv` ,
`Update_priv` ,
`Delete_priv` ,
`Create_priv` ,
`Drop_priv` ,
`Reload_priv` ,
`Shutdown_priv` ,
`Process_priv` ,
`File_priv` ,
`Grant_priv` ,
`References_priv` ,
`Index_priv` ,
`Alter_priv` ,
`Show_db_priv` ,
`Super_priv` ,
`Create_tmp_table_priv` ,
`Lock_tables_priv` ,
`Execute_priv` ,
`Repl_slave_priv` ,
`Repl_client_priv` ,
`Create_view_priv` ,
`Show_view_priv` ,
`Create_routine_priv` ,
`Alter_routine_priv` ,
`Create_user_priv` ,
`ssl_type` ,
`max_questions` ,
`max_updates` ,
`max_connections` ,
`max_user_connections`
)
VALUES (
'localhost', 'phpmyadmin', PASSWORD( 'phpmyadmin' ) , 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', '', '0', '0', '0', '0'
);
 INSERT INTO `mysql`.`db` (
`Host` ,
`Db` ,
`User` ,
`Select_priv` ,
`Insert_priv` ,
`Update_priv` ,
`Delete_priv` ,
`Create_priv` ,
`Drop_priv` ,
`Grant_priv` ,
`References_priv` ,
`Index_priv` ,
`Alter_priv` ,
`Create_tmp_table_priv` ,
`Lock_tables_priv` ,
`Create_view_priv` ,
`Show_view_priv` ,
`Create_routine_priv` ,
`Alter_routine_priv` ,
`Execute_priv`
)
VALUES (
'localhost', 'phpmyadmin', 'phpmyadmin', 'Y', 'Y', 'Y', 'Y', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N'
);
FLUSH PRIVILEGES ;
권한 재적용

phpmyadmin계정관련 사용자 등록 및 설정 완료!!



3-2. 여기 포스트에 첨부된 파일 사용시...
mysql -uroot -p1234 < phpmyadmin.sql
간단하게 위의 절차가 완료~



4. 환경설정 적용준비
mkdir config
(config 폴더 생성)

chmod o+rw config
(폴더의 권한 rw 추가)

cp config.inc.php config/
설정파일을 config에 복사

chmod o+w config/config.inc.php
설정파일에 쓰기 옵션 추가

cd /var/www/html/myadmin/scripts
script 폴더로 이동

mysql -uroot -p1234 < create_tables.sql
pma에서 사용할 데이터 베이스 생성



5. 환결설정 적용
웹서버 재시작
service httpd restart

웹브라우저 열고
http://컴퓨터 IP또는 도메인주소/myadmin/
phpmyadmin로그인
여기서 하단에 보면 설정이 저장되었으니 보안상 config 폴더를 삭제해 달라는 내용이 있습니다.

만약에 Forbidden 오류 발생시 myadmin 폴더에 보안문맥 설정
chcon -R -u system_u -t httpd_sys_content_t myadmin



6. 뒷정리
rm -rf config
환경설정 폴더 삭제 (또는 폴더이름 변경해도 상관없음)



* 사용된 파일 정리

haebi's phpmyadmin.zip


2013-05-23
헐...
패스워드 깜빡했네요... 사이트 주소 입니다.
http://haebi.kr



Posted by 해비