아파치 특정 IP 및 특정 유저만 접근 허용하기



특정 IP 만 접근을 허용할 수도 있고 반대로 특정 아이피만 접근을 차단할 수도 있습니다.


그리고 특정 사용자만 접근하게도 할 수 있습니다.


httpd.conf 파일을 수정하거나 conf.d 폴더 아래에 conf 파일을 생성하여도 됩니다.



▶ 로컬 IP만 허용


<Location />

    Order Deny,Allow

    Deny from all

    Allow from 127.0.0.1 ::1 192.168.1.1

</Location>


Directory 를 사용하여도 됩니다.


<Directory /var/www/html>

    Order Deny,Allow

    Deny from all

    Allow from 127.0.0.1 ::1 192.168.1.1

</Directory>



▶ 특정아이피 접근 차단


<Location />

    Order Allow,Deny

    Allow from all

    Deny from 192.168.1.1

</Location>

192.168.1. 이렇게만 하면 192.168.1.x 대역이 차단됩니다.



▶ 특정 사용자만 허용


<Directory /var/www/html/secret>

    AuthName "Secret Page!"

    AuthType Basic

    AuthUserFile /var/www/auth/.htpasswd

    AuthGroupFile /dev/null

    require valid-user

</Directory>

.htaccess 파일에 위 내용이 들어가도 됩니다.



▶ .htpasswd 파일 생성


# htpasswd -bc /var/www/auth/.htpasswd 아이디 비밀번호

.htpasswd 파일이 있다면 -bc 대신에 -b 옵션만 붙여주면 됩니다.



IP 와 user 를 같이 병행해서도 가능하니 테스트 해보세요~


블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

MySQL database 및 유저 추가 및 삭제



유저 추가 방법은 콘솔에서 직접 추가하는 방법과 쿼리로 하는 방법이 있습니다.


그리고 phpMyAdmin 에서 쉽게 추가가 가능합니다.



▶ 콘솔에서 추가


mysql -uroot -p비밀번호 mysql -e "create database example"

mysql -uroot -p비밀번호 mysql -e "GRANT ALL PRIVILEGES on example.* to 'example'@'localhost' identified by '유저비밀번호'"

mysql -uroot -p비밀번호 mysql -e "GRANT ALL PRIVILEGES on example.* to 'example'@'%' identified by '유저비밀번호'"



▶ 쿼리로 추가


create database example;

GRANT ALL PRIVILEGES on example.* to 'example'@'localhost' identified by '유저비밀번호';

GRANT ALL PRIVILEGES on example.* to 'example'@'%' identified by '유저비밀번호';

grant 로 추가한 경우에는 flush privileges 명령은 실행할 필요가 없습니다.


▶ 콘솔에서 삭제


mysql -uroot -p비밀번호 mysql -e "drop user 'example'@'%'"

mysql -uroot -p비밀번호 mysql -e "drop user 'example'@'localhost'"

mysql -uroot -p비밀번호 mysql -e "drop database example"



▶ 쿼리로 삭제


drop user 'example'@'%';

drop user 'example'@'localhost';

drop database example;



편한 방법대로 하면 됩니다.


phpMyAdmin 최근 버전에서는 사용자추가가 아주 쉽게 되어 있습니다.


MySQL database 및 유저 추가MySQL database 및 유저 추가


사용자에서 사용자 추가가 있습니다.


사용자 추가를 클릭하면 아래 화면이 나옵니다.



MySQL database 및 유저 추가MySQL database 및 유저 추가


사용자명과 비밀번호를 입력하고 실행버튼을 누르면 됩니다.




블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

CentOS 7.x mysql 포트 변경



default 포트는 3306 인데 port 번호를 한번 바꿔보겠습니다.



1. /etc/my.cnf 수정


[mysqld]

port=33306

port= 뒤에 원하는 포트번호를 적어주면 됩니다.


2. mysql 재시작


# systemctl restart mariadb.service

여기까지 하면 내부에서는 접속이 가능하지만 외부에서는 접속이 안됩니다.


3. 방화벽 포트 허용


[root@conoha-jp ~]# firewall-cmd --permanent --zone=public --add-port=33306/tcp

success

[root@conoha-jp ~]# firewall-cmd --reload

success

[root@conoha-jp ~]# firewall-cmd --list-all

public (active)

  target: default

  icmp-block-inversion: no

  interfaces: eth0

  sources:

  services: dhcpv6-client ftp http https mysql ssh

  ports: 33306/tcp

  protocols:

  masquerade: no

  forward-ports:

  sourceports:

  icmp-blocks:

  rich rules:


이제는 외부에서도 접근이 가능합니다.


포트번호가 변경되었기 때문에 외부에서 접속하는 방법은 -P 옵션을 사용해서 접속하여야 합니다.


mysql -h도메인 -P포트번호 -u유저명 -p비밀번호 이런씩으로 사용하면 됩니다.


블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

MySQL mysqldump 시 특정테이블만 백업 받는 방법



DB 테이블 덤프할 때 table_* 이런형태의 asterisk 별표를 사용한 특정 테이블만 받고 싶을때 사용할 수 있습니다.


방법은 여러가지가 있지만 아래처럼 하면 간단하게 백업을 받을 수 있습니다.


# mysqldump -u유저아이디 -p비밀번호 dbname table_* > backup.sql

mysqldump: Couldn't find table: "table_*"


이렇게 하면 에러가 나지요~



# mysqldump -u유저아이디 -p비밀번호 dbname $(mysql -u유저아이디 -p비밀번호 dbname -Bse "show tables like 'test_%'") > backup.sql


이런 방법으로 백업이 가능합니다.



$() 변수로 받는다는 의미입니다.


# mysql -u유저아이디 -p비밀번호 dbname -Bse "show tables like 'test_%'"


괄호 안에 있는 내용을 먼저 테스트 해보고 사용하면 됩니다.



블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

리눅스 MySQL 3306 외부망 차단하기



iptables 로 3306 포트를 외부IP는 접속을 차단하고 로컬(127.0.0.1)IP는 허용을 하면 됩니다.


외부로 부터 공격시도가 많다면 한번 시도해보세요~


# iptables -I INPUT -p tcp --dport 3306 -j DROP

# iptables -I INPUT -s 127.0.0.1 -p tcp --dport 3306 -j ACCEPT

# service iptables save

순서가 바뀌면 안됩니다. drop 을 먼저 하고 accept 를 하여야 합니다.


룰이 잘 적용되었는지 한번 확인해 봅시다.


[root@vps log]# iptables -L | grep mysql

ACCEPT     tcp  --  localhost.localdomain  anywhere            tcp dpt:mysql

DROP       tcp  --  anywhere             anywhere            tcp dpt:mysql


잘 적용되었네요.



외부에서 접속을 한번 시도해 보겠습니다.


[root@conoha-jp ~]# mysql -hexample.com -uroot

ERROR 2003 (HY000): Can't connect to MySQL server on 'example.com' (110)


접근이 안되는 것을 확인되었습니다.


블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

MySQL 바이너리 로그 및 슬로우쿼리 로그 삭제 방법



서버를 운영하다 보면 binary 로그와 slow-query.log 가 계속해서 쌓이게 됩니다.


/etc/my.cnf 파일에 아래 부분을 적용하면 로그 조절이 가능합니다.


[mysqld]

log-bin=mysql-bin

expire_logs_days=7

long_query_time=3

slow_query_log=1

slow_query_log_file=slow-query.log



log-bin=mysql-bin  바이너리 로그 파일명을 지정할 수 있습니다.

expire_logs-days=7  최근 일주일 분량만 남기는 옵션입니다.

long_query_time=3  쿼리타임이 3초를 넘어가면 로그를 남깁니다.

slow_query_log=1  슬로우쿼리 로그를 작성하는다는 옵션입니다.

slow_query_log_file=slow-query.log  슬로우쿼리 로그 파일명을 지정할 수 있습니다.


여기까지는 환경설정으로 컨트롤 하는 것에 대해서 알아 보았습니다.



콘솔에서 로그를 지우는 방법에 대해서 알아봅니다.



바이너리 로그를 특정날짜 이전은 지우는 명령어입니다.


# mysql -u유저아이디 -p비밀번호 -e "PURGE MASTER LOGS BEFORE '2016-12-31 23:59:59'"



바이너리 로그를 7일 이전 데이터를 지우는 명령어입니다.


# mysql -u유저아이디 -p비밀번호 -e "PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 7 DAY)"



슬로우쿼리 로그를 지우는 명령어입니다.


# cp /dev/null /var/lib/mysql/slow-query.log

cp: overwrite `/var/lib/mysql/slow-query.log'? y



블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

IPTABLES 특정아이피 특정포트 허용 방법



리눅스에서 특정IP 만 특정포트를 허용해주고 싶을 때 아래 처럼 명령어를 주면 됩니다.


# iptables -I INPUT -p tcp -s 허용아이피 --dport 포트번호 -j ACCEPT


-I 대신에 -A 를 사용하여도 되지만 iptables 는 위쪽 조건이 우선이기 때문에 조건을 잘 고려해서 사용하시면 됩니다.


아이피대역으로 허용하려면 192.168.1.0/24, 192.168.0.0/16, 10.0.0.0/8 이렇게 설정할 수 있습니다.



특정 포트를 차단하는 방법은


# iptables -I INPUT -p tcp --dport 포트번호 -j DROP



방화벽 규칙이 잘 적용되었는지 확인하는 방법은


# iptables -L


적용한 규칙을 삭제하는 방법은


# iptables -D INPUT -p tcp -s 허용아이피 --dport 포트번호 -j ACCEPT


-I 대신에 -D 를 사용하면 됩니다.



[root@vps bin]# iptables -I INPUT -p tcp -s 192.168.1.100 --dport 3306 -j ACCEPT

[root@vps bin]# iptables -L | grep mysql

ACCEPT     tcp  --  192.168.1.100        anywhere            tcp dpt:mysql

[root@vps bin]# iptables -D INPUT -p tcp -s 192.168.1.100 --dport 3306 -j ACCEPT

[root@vps bin]# iptables -L | grep mysql


마지막으로 재부팅 되더라도 규칙을 적용하려면


service iptables save 를 해주어야 합니다.



블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

CentOS 7.x vsftpd passive mode 설정



패시브 모드 설정 방법입니다.


vsftpd 기본 설정 방법은 https://ivps.tistory.com/51 여기를 참고하시면 됩니다.



▶ vi /etc/vsftpd/vsftpd.conf ( 아래 내용 추가 )


pasv_enable=YES

pasv_min_port=50001

pasv_max_port=50040


min 과 max 포트는 자신에 맞게 수정하시면 됩니다.


블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

리눅스 http 접근시 자동으로 https 리디렉트 시키기



브라우저에서 80 포트 접근시 443 포트로 전환 시켜주는 방법입니다.


아파치 .htaccess 에서 해주는게 제일 편하겠지요~


아파치에서 .htaccess 가 먹히게 하는 방법입니다.


<<Directory "/var/www/html">

    #AllowOverride None

    AllowOverride FileInfo AuthConfig Limit

</Directory>


AllowOverride None 으로 되어 있다면 위에 처럼 수정하시면 됩니다.



# vi /var/www/html/.htaccess ( 아래 처럼 자신의 도메인에 맞게 변경하시면 됩니다. )


RewriteEngine On

RewriteCond %{HTTP_HOST} ^www\.ivps\.kr$ [NC]

RewriteCond %{SERVER_PORT} !^443$

RewriteRule ^(.*)$ https://www.ivps.kr%{REQUEST_URI} [R=301,L]



블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

CentOS 7.x 아파치 SSL 인증서 설정 방법



이번에는 letsencrypt 로 무료 발급 받은 인증서를 아파치에 설정을 해봅니다.


발급 받은 인증서 파일은 /etc/letsencrypt/archive/ 디렉토리에 있지만


live 디렉토리에 심볼릭 링크가 됩니다.


<VirtualHost conoha.ivps.kr:443>

    SSLEngine on

    SSLCertificateFile /etc/letsencrypt/live/conoha.ivps.kr/cert.pem

    SSLCertificateKeyFile /etc/letsencrypt/live/conoha.ivps.kr/privkey.pem

    SSLCertificateChainFile /etc/letsencrypt/live/conoha.ivps.kr/fullchain.pem

    ServerName conoha.ivps.kr

    DocumentRoot /var/www/html

    ErrorLog logs/conoha.ivps.kr_error_log

    CustomLog logs/conoha.ivps.kr_access_log common

</VirtualHost>


그리고 SSLEngine 이 동작하게 mod_ssl 모듈을 설치하여야 합니다.


# yum install mod_ssl


아파치를 재시작하고 브라우저로 접속해 보면 됩니다.



블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,