IPTables로 데이터베이스 서버 보호

IPTables로 데이터베이스 서버 보호

내 앱(WordPress)과 데이터베이스(MySQL)가 별도의 서버에 있습니다. 호스팅 서비스 제공업체가 제공하는 개인 네트워크에 연결되어 있으며 저는모든 예비 단계(내가 아는 한) 보안을 위해.

일반적으로 저는 다음 IPTables 규칙을 따릅니다.

*filter

#  Allow all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 -j REJECT

#  Accept all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#  Allow all outbound traffic - you can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT

#  Allow HTTP and HTTPS connections from anywhere (the normal ports for websites and SSL).
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT

#  Allow SSH connections
#
#  The -dport number should be the same port number you set in sshd_config
#
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT

#  Allow ping
-A INPUT -p icmp -j ACCEPT

#  Log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

#  Drop all other inbound - default deny unless explicitly allowed policy
-A INPUT -j DROP
-A FORWARD -j DROP

COMMIT

하지만 독립 실행형(MySQL) 데이터베이스 서버의 경우 규칙에 몇 가지 변경이 필요하다는 것을 알았습니다. 예를 들어, MySQL의 경우 포트 3306을 열어야 합니다. 이는 다음과 같이 간단합니다.

-A INPUT -p tcp --dport 443 -j ACCEPT

다만, 앱 서버만 데이터베이스에 연결할 수 있도록(즉, 원격 연결을 지원하도록) 수정하는 방법을 모르겠습니다. 그러면 어떻게 해야 합니까?

답변1

그래서 당신은 필요합니다

 -A INPUT -p tcp -s $INTERNAL_WEB_SERVER_IP --dport 3306 -j ACCEPT

귀하의 웹 서버만 mysql과 통신할 수 있도록 허용합니다. dmourati가 언급했듯이 핑 트래픽을 허용하는 것은 좋은 생각입니다. IMHO는 제시된 보안 문제보다 훨씬 더 많은 문제를 해결하는 데 도움이 됩니다.

iptables -A INPUT -p icmp --icmp-type 8 -s 0/0 -d $SERVER_IP -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p icmp --icmp-type 0 -s $SERVER_IP -d 0/0 -m state --state ESTABLISHED,RELATED -j ACCEPT

언급한 아웃바운드 규칙은 DB 서버가 지시받은 모든 나가는 연결을 만들 수 있음을 의미합니다. 기본적으로 데이터베이스 서버에서 발생하는 모든 트래픽이 허용됩니다.

관련 정보