블로그 이미지
송시혁

calendar

1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31

Notice

Tag

Recent Post

Recent Comment

Recent Trackback

Archive


전체 토폴로지 

제일위에 스위치를 아래와 같이 설정해야 된다.

DHCP relay와 각각의 vlan에 할당한 IP gateway를 할당한다.



그리고 vtp를 설정한다.


vtp란?

대빵 스위치(vtp server)

를 두어 여기서 생성된 vlan들은 trunk port로 

연결된 다른 client 스위치들도 동일하게 생성

되게 하는 프로토콜 --> VTP 

나머지 L3스위치는 vtp 모드를 클라이언트로 설정한다.

vtp mode client로 설정 


도메인 네임 설정



Access Control List를 설정하는 실습



1) 192.168.0.0대역과 192.168.1.0대역의 통신을 차단/허용

2) 192.168.1.0대역은 라우터와 스위치로  telnet불가

3) 모든 PC는 Server로 ping 불가

4) 192.168.0.0대역은 server로 웹 접속 불가




access-list 101 deny ip 192.168.0.0 0.0.0.255 192.168.1.0 0.0.0.255

access-list 101 deny tcp 192.168.1.0 0.0.0.255 any eq 23

access-list 101 deny icmp any 192.168.0.0 0.0.0.0

access-list 101 deny tcp 192.168.0.0 0.0.0.255 host 210.1.1.1 eq 80

access-list 101 permit ip any any


5) 210.1.1.2 PC에서 라우터로 telent 불가

6) 192.168.1.0대역은 DHCP 차단

7) 210.1.1.3 PC에서 192.168.0.0 대역으로 ping 불가 

8) 라우터에서 스위치로 telnet 불가 



access-list 101 deny tcp host 210.1.1.2 any eq 23

access-list 101 deny icmp host 210.1.1.3 192.168.0.0 0.0.0.255

access-list 101 deny tcp 10.1.1.0 0.0.0.3 any eq 23

access-list 101 permit ip any any 

int vlan 1

ip access-group 101 in


access-list 102 deny udp host 192.168.1.254 any eq 67 

access-list 102 permit ip any any

ip access-group 102 in

ip access-group 102 out



9) PC 2대에 대역대에서 나가는 IP를 10.1.1.2를 달게 하시오.

   

 NAT 

 1) 내부 IP를 access-list 로 만든다.

 2) 외부 IP를 NAT pool을 만든다.

 3) ACL과 NAT pool을 매칭 시킨다

 4) 내부에서 들어오는 포트에 NAT inside를 건다

 5) 외부로 나가는 포트에 NAT outside를 건다.

 

access-list 1 permit 192.168.0.0 0.0.1.255 

ip nat pool abc 10.1.1.2 10.1.1.2 netmask 255.255.255.252

ip nat inside list 1 pool abc

ip nat inside source list 1 pool abc overload 

posted by 송시혁
2018. 7. 9. 13:55 네트워크/database실습


먼저 이론 




service -e 

=>현재 구동되고 있는 서비스 목록


sudo service myslq-server status 

=> mqsql 상태


su

=> 바로 root로 접속



numberic(3,2) 

=> 3자리 표현하면 소수점 2자리 표시


enum('wes','central','east');


<관리자 프로그램 , 유틸리티>


- ibd2sdi


- innochecksums


- myisam_ftpdump


- myisamchk


- myisamlog


- mysampack


- myslql_config_editor


- mysqlbinlog


- myusqldumpslow 



● 프로그램 개발 유틸리티


- mysql_config

- my_print_defautlts

- resolve_statck_dump

- Iz4_decompress

- perror

- resloveip

- zlib_decompress



<>


● 오픈소스 데이터베이스 엔진


● 데이터를 디스크에 어떠한 형태로 기록, 관리할 것인가를 결정


● MyISAM : 구형 엔진, 읽기 위주 데이터 저장에 적합


● 새로운 버전, MyISAM을 대체해 나가는 중



<Mysql - 사용자 계정관리>


● 데이터 베이스는 별도의 사용자 데이터 베이스를 구축


● 시스템 사용자와는 다른 사용자 세트를 사용


● select current_user(); -- 현재 사용중인 계정명 반환




<사용자 계정의 표시>


● 'user_name'@'host_name'


● user_name은 최대 32개 문자까지 가능


● 여러 호스트/도메인에 돔영 이인이 있을 수 있으므로 


메일 주소와 비슷한 형식을 사용자


- 'alice'@'192.168.0.10'


- 'alice'@'%.my_domian.com'


- 'bob'@'localhost'


● 도메인과 호스트 이름


● www.naver.com에서 


- www는 특정 서버 컴퓨터를 뜻하는 호스트의 이름


- naver.com은 도메인 이름을 뜻함


- .com은 최상위 도메인(Top Level domain)이라 부름 



● 일반적으로 호스트명(hostname) www만을 지칭하나

  명확한 호스트명을 표시하기 위해 모든 파트를 다 언급하기도 함


● www.naver.com 과 같이 모든 파트를 다 언급하는 형태를 

  FQFN(Fully qualified domain Name)이라고 하고


● 특히 DNS 시스템을 구성할 때에는 www.naver.com.과 같이

  마지막에 .을 표기하도록 하는 경우도 있음

  

● 사용자 명은 특정 사용자 이름 외 빈칸을 입력할 수 있음

  

● 사용자 명에는 패턴 매칭 사용 불가   

  

● 빈칸은 모든 사용자 명을 뜻함 

  

  - ''@'192.168.0.10'

  - ''@'%.mydomain.com'


● 호스트/도메인을 명을 입력하지 않으면 '%'로 처리

  - 'alice'

  - 'alice'@'%'


● 괄호에 주의 

  - 'alice@localhost'

     => 사용자 이름으로 인식

     'alice'@'localhost;로 사용하여야 한다.

  - 'alice@localhost'@'%'


  

● 호스트/ 도메인 명에 Like 구문에서와 가트은 패턴매칭 사용가능

- 'alice'@'192.168.100.%'

- 'bob'@'%.com'


● IPv4 주소를 사용할 경우 마스크 값 사용가능

- 'alice'@'192.168.100.0/255.255.255.0'



● h1.example.net에서 접속하는 fred

=>'fred'@'h1.example.net'


● h1.example.net에서 접속하는 모든 사용자명

=> ''@'h1.example.net'


● 불특정한 호스트(모든 호스트)에서 접속하는 fred

=>'fred'@'%'


● 불특정한 호스트(모든 호스트)에서 접속하는 모든 사용자명

=> "@'%'


● example.net 도메인의 모든 호스트에서 접속하는 fred

=> 'fred'@'%.example.net'


● 192.51.100.0/24 네트워크에서 접속하는 fred

=>'fred'@'192.51.100.0/255.255.255.0'




<사용자 인증>


● 호스트명, 사용자명, 패스워드 검증


● 검증시 사용자 테이블을 정렬하여 최초 매칭되는 경우를 사용

1. 호스트가 가장 구체적으로 명시되어 있는 순서대로 정렬

2. 사용자명이 가장 구체적으로 명시되어 있는 순서대로 정렬

3. 호스트와 사용자 명의 구체성이 동일한 경우, 정렬순서는 랜덤 


● 구체적인 명시

- 'h1.example.net'이 '%.example.net'보다 더 구체적임

- 'alice' 보다 더 구체적임 



<사용자 작업권한 인증>


● 접속이후 사용자가 입력하는 명령어 사용권한을 인증함


● mysql 데이터 베이스의 user테이블에 기록되는 권한은 

  모든 데이터 베이스에 대한 사용자 계정의 권한을 표시


● 관리자 계정 외에는 myslq.user테이블에 기록되는 권한은 'N'으로,

  mysql.db 테이블을 사용하여 각 데이터베이스, 테이블, 칼럼 별 권한을

  지정하여 사용하는 것이 안전 


   <사용자 작업권한 적용 시기>

● 서버 시작시 권한 사항을 메모리에 저장하여 구동되고


● gran, revoke등 DCL을 사용한 구너한 조정은 실시간 권한 적용


● insert, update 등 DML을 이용하여 직접 테이블 값을 수정한 겂은 


 - FLUSH PRIVILEGES;

 - msysqladmin flush-privileges

 - mysqladmin reload

  명령어 이후 적용

 

● 명령어 권한은 다음번 명령어 사용시 적용시작

 

● 데이터베이스 권한은 다음번 use db_name; 구문 사용시 적용



 

<사용자 계정의 추가 /삭제>


● CREATE USER user_nema IDENTIFIED BY password;


● user_name 은 올바른 사용자계정 이름의 형식을


● password는''를 사용한 문자열 


● DROP USER user_name;




select user,host from mysql.user;

=> 사용자 조회



<사용자 계정: 리소스 권한>


s

● 시간당 SQL문 사용 가능 횟수

=> WITH MAX_QUERIES_PER_HOUR 

 

● 시간당 update 명령어 사용 가능 횟수

=> WITH MAX_UPADATES_PER_HOUR

 

● 시간당 접속 가능 횟수

=> WITH MAX_CONNECTIONS_PER_HOUR

 

● 가능한 동시접속 횟수 

=> WITH MAX_USERS_CONNNECTIONS 

 

<사용자 계정 : 패스워드 관리 >


/usr/local/etc/mysql


● 패스워드 변경

 - ALTER USER user_name IDENTIFIED BY password;

 - SET password for user_name = password;


● 패스워드 만료 설정

 - ALTER USER user_name PASSWORD EXPIRE

 - ALTER USER user_name PASSWORD EXPIRE INTERVAL 90 DAY;


 - my.cnf mysqlid 섹션 : default_passwordk_lifetime

   0는 제한없음, 기타 숫자는 패스워드의 기본 유효기간 


● 패스워드 재사용

  - my.conf의 mysql 섹션 : password_history

                           password_reuse_interval

● 패스워드 재사용 전 5번의 다른 패스워드 사용을 강제   

- ALTER USER user_name PASSWORD HISTORY 5;


● 패스워드 재상용 전 6일이 지나도록 강제 

- ALTER USER user_name PASSWORD REUSE INTERVAL 6 DAY;


● 패스워드가 만료된 계정으로 접속이후

mysql --connect-expired-password 사용 


<사용자 계정 잠금>

● ALTER USER user_name ACCOUNT LOCK


● ALTER USER user_name ACCOUNT UNLOCK



<사용자 계정 보안 접속방법 제한>

● ALTER USER user_name REQUIRE NONE;


● ALTER USER user_name REQUIRE SSL;


● ALTER USER user_name REQUIRE X509;


● ALTER USER user_name REQUIRE ISSUER;


● ALTER USER user_name REQUIRE SSL;

'/C=SE/ST=Stcoholm/L=stockholm/O=MySQL/CN=CA/

 emailAddress=ca@example.com


<사용자 계정 실습>

 

● vic.esample.net에서 접속하는 vitcor계정을 생성하면서

  'my_pass'를 패스워드로 지정

=>  create user victro'@'vic.example.net identifed by 'my_pass';



● t5.example.net에서 접속하는 trent계정을 생성하면서

  SSL 암호화된 접속만을 허용하고 동시 접속 가능 회선을 3개로 제한 

=> create user trent'@'t5.example.net' identifed by 'password' REQUIRE 

   SSL with MAX_USER_CONNECTION 3;

   


<Grant, Revoke>   

● 계정에 대한 현재 GRANT 내역 조회


● 사용가능한 SQL문의 제한없음

ALL

SELECT

UPDATE

INSERT

CREATE

DROP

ALTER

...



● 레벨: 전체, 테이블, 칼럼


● 레벨의 표시


*

*.*

db_name.*

db_name.table_name



<사용자 계정 SQL >

● GRANT _ 허용 SQL_ON_ 레벨_TO user_name;


● GRANT SELECT ON test.*TO 'eve'@'localhost';


● GRANT SELECT(col1). INSERT(col1, col2) ON test.tb1 TO 'may'@'localhost';


● REVOKE는 GRANT와 같은 형태의 문법 사용 


● FLUSH PRIVILEGES

  => 권한 다시 재로드.(초기화)


root에서 권한 

grant all on world.* to 'tuser1'@'localhost';


tuser1으로 로그인

=> show databases;



● 192.168.0.0/24 네트워크 대에서 접속하는 trent계정

=> create user 'trent'@'192.168.0.0/255.255.255.0' identfied by 'pass';


● trent는 test 데이터베이스의 t1 테이블에 데이터 추가 가능

=> grant insert on test.t1 to 'trent'@'192.198.0.0/255.255.255.0';


● trent는 test 데이터베이스의 모든 테이블 값을 제한없이 조회가능

=> grant all on test.* to 'trent'@'192.168.0.0/255.255.255.0';


● trent는 test 데이터베이스의 t2 테이블의 c1 칼럼의 값을 변경 가능 

=> grant update(c1) on test.t2 to 'trent'@'192.168.0.0/255.255.255.0';

   칼럼은 ()쳐서 칼럼을 적는다.


//////////////////////////////////////////////////////////////////////////////


service -e 

=>현재 구동되고 있는 서비스 목록


sudo service myslq-server status 

=> mqsql 상태

아래 명령어도 mysql -uroop -p와 같은 명령어이다. 길게 사용할 때는 '--'를 두번 붙인다.


그냥 pager라고 하면 more인식되나, pager less라고 입력시 less처럼 사용할 수 있다.


● select current_user(); -- 현재 사용중인 계정명 반환


mysql데이터베이스에 user라는 테이블에서 계정을 관리하고 생성, 삭제가 이루어진다. 따라서 계정을 조회하기 위해서는

mysql.user에서 조회 가능하다. 


계정을 삭제하는 모습 


계정을 생성이 가능하다. 생성된 계정을 한 번 더 만들려고 하면 에러가 발생한다. 그러나 syntax를 참고하여 if not exist를 적어두면

에러를 내지 않는다. 왜냐하면 적어도 되고, 안적어도 된다라고 알려주므로 PC가 있으면 생성하지 않고, 없으면 생성한다고 알아먹기

때문이다. 



<사용자 작업권한 인증>


● 접속이후 사용자가 입력하는 명령어 사용권한을 인증함


● mysql 데이터 베이스의 user테이블에 기록되는 권한은 

  모든 데이터 베이스에 대한 사용자 계정의 권한을 표시


● 관리자 계정 외에는 myslq.user테이블에 기록되는 권한은 'N'으로,

  mysql.db 테이블을 사용하여 각 데이터베이스, 테이블, 칼럼 별 권한을

  지정하여 사용하는 것이 안전 


   <사용자 작업권한 적용 시기>

● 서버 시작시 권한 사항을 메모리에 저장하여 구동되고


● gran, revoke등 DCL을 사용한 구너한 조정은 실시간 권한 적용


● insert, update 등 DML을 이용하여 직접 테이블 값을 수정한 겂은 


 - FLUSH PRIVILEGES;

 - msysqladmin flush-privileges

 - mysqladmin reload

  명령어 이후 적용

 

● 명령어 권한은 다음번 명령어 사용시 적용시작

 

● 데이터베이스 권한은 다음번 use db_name; 구문 사용시 적용



 

<사용자 계정의 추가 /삭제>


● CREATE USER user_nema IDENTIFIED BY password;


● user_name 은 올바른 사용자계정 이름의 형식을


● password는''를 사용한 문자열 


● DROP USER user_name;




select user,host from mysql.user;

=> 사용자 조회



<사용자 계정: 리소스 권한>


● 시간당 SQL문 사용 가능 횟수

=> WITH MAX_QUERIES_PER_HOUR 

 

● 시간당 update 명령어 사용 가능 횟수

=> WITH MAX_UPADATES_PER_HOUR

 

● 시간당 접속 가능 횟수

=> WITH MAX_CONNECTIONS_PER_HOUR

 

● 가능한 동시접속 횟수 

=> WITH MAX_USERS_CONNNECTIONS 

 

<사용자 계정 : 패스워드 관리 >


/usr/local/etc/mysql


● 패스워드 변경

 - ALTER USER user_name IDENTIFIED BY password;

 - SET password for user_name = password;


● 패스워드 만료 설정

 - ALTER USER user_name PASSWORD EXPIRE

 - ALTER USER user_name PASSWORD EXPIRE INTERVAL 90 DAY;


 - my.cnf mysqlid 섹션 : default_passwordk_lifetime

   0는 제한없음, 기타 숫자는 패스워드의 기본 유효기간 


● 패스워드 재사용

  - my.conf의 mysql 섹션 : password_history

                           password_reuse_interval

● 패스워드 재사용 전 5번의 다른 패스워드 사용을 강제   

- ALTER USER user_name PASSWORD HISTORY 5;


● 패스워드 재상용 전 6일이 지나도록 강제 

- ALTER USER user_name PASSWORD REUSE INTERVAL 6 DAY;


● 패스워드가 만료된 계정으로 접속이후

mysql --connect-expired-password 사용 


<사용자 계정 잠금>

● ALTER USER user_name ACCOUNT LOCK


● ALTER USER user_name ACCOUNT UNLOCK



<사용자 계정 보안 접속방법 제한>

● ALTER USER user_name REQUIRE NONE;


● ALTER USER user_name REQUIRE SSL;


● ALTER USER user_name REQUIRE X509;


● ALTER USER user_name REQUIRE ISSUER;


● ALTER USER user_name REQUIRE SSL;

'/C=SE/ST=Stcoholm/L=stockholm/O=MySQL/CN=CA/

 emailAddress=ca@example.com


● t5.example.net에서 접속하는 trent계정을 생성하면서

  SSL 암호화된 접속만을 허용하고 동시 접속 가능 회선을 3개로 제한 

=> create user trent'@'t5.example.net' identifed by 'password' REQUIRE 

   SSL with MAX_USER_CONNECTION 3;


이 부분은 syntax를 참고해야 한다. syntax는 나중에 포스팅 예정 


<사용자 계정 SQL >

● GRANT _ 허용 SQL_ON_ 레벨_TO user_name;


● GRANT SELECT ON test.*TO 'eve'@'localhost';


● GRANT SELECT(col1). INSERT(col1, col2) ON test.tb1 TO 'may'@'localhost';


● REVOKE는 GRANT와 같은 형태의 문법 사용 


● FLUSH PRIVILEGES

  => 권한 다시 재로드.(초기화)



<실습>

create user 'tuser'@'localhost' (identified by '패스워드'); 명령어로 임의의 계정을 생성.



root 계정에서 먼저 권한을 준다.

=>grant all on world.* to 'tuser1'@'localhost';


tuser1으로 로그인

=> show databases;




posted by 송시혁


<대칭키 실습1>

● ~아래 , opnessl_practice 돌더 생성

=> mkdir openssl_practice


● /boot/loader.conf를 ~/openssl_practice/ 아래로 복사

=> cp /boot/loader.conf ~/openssl_practice/ 

   cp /boot/loader.conf ./ 


● loader.conf의 sha256 해시값을 -r 옵션을 사용하여 

  loader.conf.sha256로 저장

  

=> openssl dgst -r -sha256 loader.conf > loader.conf.sha256

   -r옵션은 해시값이외에 앞에 내용을 지운다.

  

● loader.conf를 aes 알고리즘을 사용(128비트 키, cbc모드)하여

  loader.conf.en으로 저장

=> openssl enc -aes-128-cbc -in loader.conf -out loader.conf.en

  

  

● loader.conf.en을 loader.conf.de로 복호화

=> openssl enc -aes-128-cbc -d -in loader.conf.en -out loader.conf.de



● loader.conf.de의 sha256해시값(-r옵션)을 loader.conf.de.sha256에 저장

=> openssl dgst -sha256 -r loader.conf.sha256 > loader.conf.de.sha256



● diff를 이용하여 loader.conf.sha256와 loader.conf.de.sha256을 비교

=> diff loader.conf.sha256 loader.conf.de.sha256


loader.conf               = 원본 

loader.conf.de           = loader.conf.en복호화 파일

loader.conf.de.sha256  = loader.conf.de 파일 해시값

loader.conf.en           = 원본(평문)인 loader.conf을 암호화 

loader.conf.en.sha256  = loader.conf.en에 대한 해시값          


diff명령어로 loader.conf.sha256과 loader.conf.de.sha256의 해시값은 같다. 원래 diff가 참이면 아무것도 안떠야 하지만

뒤에 *loader.conf, *loader.conf.de가 붙어있어 다르다고 인식하여 화면에 출력된다. 해시값은 아니니 무시하자!



sha256명령어를 사용하여 해당 파일에 해시값을 출력 가능하다.


<개인키 생성>

● openssl genrsa -out priv_key.pem 2048(개인키 생성)

=> 키의 비트 갯수는 2048


● openssl rsa -in priv_key.pem -text -noout

=> 암호화돠 키의 내용을 텍스트 내용으로 본다. 

    RSA는 소인수분해을 이용한다.


그 밖에 이진파일과 공개키 생성(캡쳐하지 못함 ㅜㅜ)

● openssl rsa -in priv_key.pem -outform DER -out priv_key.der 

=> priv_key.der 이진파일로 저장. 


<공개키 생성>

● openssl rsa -in priv_key.pem -des3 -out encrypted-priv_key.pem

=> RSA 개인키는 대칭키 시스템으로 암호화 하여 보관


● openssl rsa -in encrypted-priv_key.pem -pubout -out dec_priv_key.pem

=> RSA 개인키에서 공개키를 추출



● Self-signed 인증서 박릅시, 공개키 자동생성 

      

openssl req -newkey rsa:2048 -nodes -keyout privkey.pem

-x509 -days 365 -out certificate.pem


nodes        : 암호화 안함 

      rsa:2048     : 암호화 복잡도

days          :유효기간 1년 


* 아래내용은 인증서 생성시 나타나는것으로 테스트를 위한 것이므로 아무거나 입력. (실제로는 당연히

아무거나 입력해서는 안됨 )

AR                  : KR

some-state        : Busan 

Cityp               : Busan

Oranic             : Mycompany 

unit name         : CA 

Common Name   : CA_ROOT

Email              : mail@mycompany.con


<인증서 생성 명령어 >

 openssl x509 -text -noout -in certificate.pem

=> certificate.pem를 화면에 출력


openssl rsa -in privkey.pem -noout -text 

 => 인증서를 text형식으로 출력 




posted by 송시혁