
내 앱(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 서버가 지시받은 모든 나가는 연결을 만들 수 있음을 의미합니다. 기본적으로 데이터베이스 서버에서 발생하는 모든 트래픽이 허용됩니다.