우분투 20.4 기준 글 입니다.

우분투의 방화벽 ufw는 IP를 차단, 허용합니다.
제목은 해외 차단이지만, ufw는 원래 모든 접근을 차단해서 한국 IP를 허용하면 됩니다.

xtables로 한국 IP를 받고 ufw에 사용하여  한국 IP의 톰캣, SSH, DB 포트 접근을 허용하세요.
 
[xtables-addons-commoon 내부]
xt_geoip_dl : 국가 IP 리스트(CSV) 설치기
xt_geoip_build : CSV→Binary 형식 변환기

국가 CSV를  Binary로 바꾸고 modprobe로 활성화하면, ufw에 쓸 수 있습니다.

libtext -csv-xs-perl :  CSV 파일 처리기
*perl로 만든거라 대체제 찾아봤는데 없어요

xtables 설치 및 활성화 방법

활성화 후에, ufw 폴더의 before.rules에 한국IP 허용 명령어를 추가하십쇼

sudo nano /etc/ufw/before.rules

A ufw-before-input -m geoip -p tcp -m multiport --dports SSH 포트,톰캣 포트,DB 포트  --src-cc KR -j ACCEPT
편집기 열고 맨 밑  COMMIT 주석 위에 이 명렁어 추가하세요.
*xtable 모듈 이름이 geoip지만, 쓰는건  geoip CSV가 아니고  db-ip CSV 입니다.

[db-ip CSV 자동 업데이트]
스그립트 폴더, 파일을 만들고 크론탭에 등록하세요.

mkdir crontab_script

sudo nano crontab_script/dbip_update.sh
스크립트 내용은 여기서 보세요.

sudo chmod 755 dbip_update.sh
크론탭이 실행할 수 있게 스크립트에 권한을 준다.

crontab –e
크론탭 편집기를 연다.

0 1 7 * * /home/리눅스계정/crontab_script/dbip_update.sh
크론탭 편집기에 이 명령어를 추가한다
*크론탭이 매월 7일 오전 1시에 이 명령어를 실행한다.

[번외]
한국IP로 SSH 로그인 시도가 있으면 file2ban으로 차단하세요.

톰캣이 DB에 어떻게 접속하는지에 따라 내부, 외부
접속으로 나뉩니다.

내부 접속은 한 서버에 톰캣, DB를 설치하여
톰캣이  TCP 통신없이 DB에 접속하는 것입니다.
외부접속은 두 서버에 각각 설치하여
톰캣이 TCP 통신으로 접속하는 것입니다.

그래서 이 둘은 설정이 다릅니다.

[내부 접속]
bind address: 127.0.0.1
db계정 host: localhost
dao의 DB주소: localhost

[외부 접속]
bind address: 0.0.0.0
db계정 host: 서버 IP주소
dao의 DB주소:  서버 IP주소

내부 접속이 가능한 환경이면 외부 접속도 되지만
보안상 하지 마새우

아래는  Ubuntu 20.04 & MariaDB 10.3.38 기준임다

[bind address 수정]
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
*편집기가 열리면 bind address 찾아서 수정하세요

[db 계정 생성]
CREATE user '계정이름'@'localhost 또는 서버 IP 주소' identified by '비밀번호';
*db계정의 host를 설정하세요

사용자에게 모든 권한을 가진 root 계정을 주면 위험합니다. CRUD만 있는 계정을 줘야해요
아래는  MariaDB 10.3.38 기준입니다.
 
CREATE user '계정이름'@'localhost' identified by '비밀번호';
*이 계정은 localhost 사용할 수 있습니다. 근데
웹 이용자도 사용할 수 있습니다. 웹이  DB를 요청하면 톰캣이 localhost로서 DB에 접근하거든요.

*이 계정에 본인 PC로
접속하려면  %로 모든 IP 허용하지 마시고, 데스크탑 IP만 추가하세요

GRANT select, insert, update, delete on 스키마.테이블 to '계정이름'@'localhost';
*이 계정의 권한을 정하고, 이 권한이 어느 스키마에 속한 테이블을 대상으로 할지 정합니다.

flush privileges;
*계정의 바뀐 권한을 즉시 반영합니다.

SELECT host, user, plugin, password FROM mysql.user; 
*만든 계정을 확인합니다.

show grants for '계정이름'@'localhost';
*계정의 권한을 확인합니다.
 
 

'보안' 카테고리의 다른 글

우분투에서 웹 서버 해외 IP 차단  (0) 2023.09.17
DB 내부, 외부 접속 설정  (0) 2023.09.16
기본 포트 변경(SSH, 톰캣, DB)  (0) 2023.09.09

+ Recent posts