MySQL 데이터베이스를 보유하는 간단한 Linux 서버를 보호하고 계십니까?

MySQL 데이터베이스를 보유하는 간단한 Linux 서버를 보호하고 계십니까?

초보적인 질문이지만 이 사이트에서 많은 질문을 살펴봤지만 간단하고 직접적인 답변을 찾지 못했습니다.

MySQL 데이터베이스를 저장하기 위해 Ubuntu를 실행하는 Linux 서버를 설정하고 있습니다.

내가 아는 한 이 서버는 가능한 한 안전하다는 것이 중요합니다. 내가 아는 한 주요 관심사는 수신되는 DoS/DDoS 공격과 서버 자체에 대한 무단 액세스입니다.

데이터베이스 서버는 포트 3000에서 하나의 특정 IP(101.432.XX.XX)로부터 들어오는 데이터만 받습니다. 이 서버가 이 IP에서 들어오는 요청을 받을 수 있을 뿐만 아니라 서버가 나가는 요청을 하지 못하도록 방지하기만 원합니다. .

나는 알고 싶습니다:

  1. 내 데이터베이스 서버가 101.432.XX.XX에서만 나가는 요청을 보내고 들어오는 요청을 받는 것을 방지하는 가장 좋은 방법은 무엇입니까? 예를 들어 모든 포트를 닫을 것입니다. 3000이 목표를 달성하는 데 도움이 됩니까?

  2. 보안을 강화할 수 있는 Linux 환경에 다른 추가 사항이 있습니까?

저는 phpmyadmin 포털(MySQL 데이터베이스에 연결됨)을 보호하기 위해 개인 IP 주소에만 액세스하도록 제한하는 등 매우 기본적인 조치를 취했습니다.

데이터베이스 서버에 액세스하려면 SSH 키(자체는 비밀번호로 보호됨)가 필요합니다.

답변1

101.432.xx IP에 대한 연결을 제한하려면 iptables. 포트 3306(기본 mysql 포트)에 대한 기본 방화벽 설정은 다음과 같습니다.

# allow any localhost interface traffic
iptables -A INPUT -i lo -j ACCEPT
# allow any related traffic to existing connections
iptables -A INPUT -m state --state related,established -j ACCEPT
# only allow certain host to mysql
iptables -A INPUT -p tcp --dport 3306 -s 101.232.155.155 -j ACCEPT
# drop all traffic by default
iptables -P INPUT DROP
# oh, add your ssh source address to allow remote connections
iptables -I INPUT 3 -p tcp --dport 22 -s 203.203.203.203 -j ACCEPT

아웃바운드(송신) 트래픽 제한이 우려되는 경우 OUTPUT 체인에서 규칙을 사용합니다. 그러나 까다로워집니다. 송신 필터링에는 서버가 외부 세계와 통신하는 데 사용해야 하는 모든 서비스에 대한 규칙이 포함됩니다. DNS, NTP, HTTP/HTTPS(업데이트용), SMTP관리자 이메일, syslog 트래픽 등에 대한 것입니다. 송신 필터링의 장점은 일단 "정상적인" 송신 트래픽을 설정하고 나면 이상 징후에 대한 경고를 쉽게 얻을 수 있다는 것입니다. 시작하기 위한 간단한 예:

iptables -P OUTPUT ACCEPT
iptables -F OUTPUT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A OUTPUT -m state --state related,established -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 123 -j ACCEPT
iptables -A OUTPUT -p tcp -d 111.222.33.44 --dport 25 -j ACCEPT
iptables -A OUTPUT -p tcp -m multiport --dports 80,443 -j ACCEPT
iptables -P OUTPUT DROP

80,443실제로 서버에서 업데이트를 수행할 때까지 이 기능을 비활성화할 수 있습니다 . 그렇지 않으면 악성 소프트웨어가 해당 포트 중 하나를 통해 빠져나가므로 사용자는 이를 알 수 없습니다. 송신에 '허용된' 대상 IP 주소를 사용하는 것이 실제로 가장 좋은 방법입니다( --dport 25위 줄 참조).

일반적으로 서버 강화는 훨씬 더 복잡한 프로세스입니다. 이제 필요한 것만으로 연결을 제한하는 방법에 대해 생각해 보는 것이 좋습니다.

다음 사항도 고려하세요.

  • 서버 작동에 필요하지 않은 모든 추가 소프트웨어를 제거합니다.
  • 실행 중인 서비스 제한( netstat -topnavelu조사)
  • 모든 최신 패치로 최신 정보를 유지하세요
  • 이상 징후 모니터링( iptables -A INPUT -j LOG, Fail2ban 등)
  • ipv6필요하지 않으면 삭제합니다 ( ipv6.disable=1커널 부팅 인수에서).
  • sshd_config PubKeyAuthentication yes에서 사용PasswordAuthentication no
  • pamin을 통한 로그인 제한/etc/security/access.conf
  • 어떤 방식으로든 모든 네트워크 트래픽을 암호화합니다**
  • 원격 syslog 서버에 시스템 로그 저장**
  • 정기적으로 시스템에서 맬웨어/잘못된 권한/SUID 파일 등(예: /var/www)을 검사합니다.

좋은 가이드가 많이 있지만, 처음 접하는 사람에게는 부담스러울 수 있습니다. 이 두 가지는 기본을 잘 다루는 것 같습니다.

https://www.digitalocean.com/community/tutorials/an-introduction-to-securing-your-linux-vps

https://www.rootusers.com/23-hardening-tips-to-secure-your-linux-server/

** 참고: MySQL 트래픽을 다음을 통해 실행하는 것을 고려하십시오.스턴넬.

답변2

NAT 뒤에 있다고 가정하면 Mysql 구성에서 바인드 주소를 변경할 수 있습니다.

#Replace X's with actual IP address
bind-address=<internal-ip>
port=3000

그러면 MySql이 해당 단일 주소와 포트만 수신하도록 바인딩됩니다.

그런 다음 101.432.XX.XX:3000을 내부 IP로 변환하는 대상 NAT 규칙을 추가합니다.

마지막으로 방화벽에 소스 정책을 추가하여 내부 IP에서 들어오는 모든 패킷을 삭제합니다. 내가 본 서버와 비슷한 설정이 있습니다.

다음은 Ubuntu 서버 강화를 위한 다른 리소스에 대한 몇 가지 링크입니다.

http://bodhizazen.net/Tutorials/SSH_security- SSH 강화 https://www.digitalocean.com/community/tutorials/how-to-secure-mysql-and-mariadb-databases-in-a-linux-vps- MySQL 강화 도움이 되었으면 좋겠습니다.

관련 정보