아웃바운드 트래픽을 제한하고 제어하는 것은 여러 상황에서 유용할 수 있습니다. 예를 들어:
- 공격으로부터 보호 - 서버의 서비스가 응답을 생성할 때
- 데이터 보호 - 서버에서 정보를 빼내기 어렵게 만듦
- 사용자가 모르는 사이에 정보를 수집하고 전송할 수 있는 폐쇄 소스 스크립트로부터 보호
이 예제에서는 가상 머신을 생성하고 특정 소프트웨어의 데이터 전송을 테스트해야 한다고 가정하겠습니다. 따라서 우리는 소프트웨어를 테스트할 하나의 IP 주소를 제외하고 모든 것을 차단할 것입니다.
1. iptables에 규칙 추가
# 현재 규칙 초기화 (SSH로 연결되어 있다면 주의)
iptables -F OUTPUT
# 루프백(localhost) 허용
iptables -A OUTPUT -o lo -j ACCEPT
# DNS 쿼리 허용 (필요한 경우, 선택 사항)
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
# IP 111.222.111.222로의 모든 아웃바운드 연결 허용
iptables -A OUTPUT -d 111.222.111.222 -j ACCEPT
# 다른 모든 아웃바운드 연결 차단
iptables -A OUTPUT -j REJECT
여기서 111.222.111.222는 테스트, 데이터 송수신에 사용할 IP 주소입니다.
2. 규칙 확인, 서버 자체에서 SSH를 통해 검증
2.1 핑(ping) 확인
ping 8.8.8.8
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
From 79.174.xx.xxx icmp_seq=1 Destination Port Unreachable
ping: sendmsg: 작업이 허용되지 않음
From 79.174.xx.xxx icmp_seq=2 Destination Port Unreachable
ping: sendmsg: 작업이 허용되지 않음
From 79.174.xx.xxx icmp_seq=3 Destination Port Unreachable
ping: sendmsg: 작업이 허용되지 않음
2.2 텔넷(telnet) 확인
telnet google.com 443
Trying 209.85.233.101...
Connection failed: 연결이 거부됨
Trying 209.85.233.113...
Connection failed: 연결이 거부됨
Trying 209.85.233.139...
Connection failed: 연결이 거부됨
Trying 209.85.233.100...
보시다시피 규칙이 작동하며, 스크립트나 서비스가 연결을 시도할 때 인터넷으로 데이터가 전송되지 않습니다.
3. 트래픽 및 연결 시도 모니터링
3.1 이 예제는 PHP 연결 데이터를 1초마다 업데이트합니다
watch -n 1 'lsof -i -nP | grep php'
php-fpm8. 445 www-data 11u IPv4 2405976614 0t0 TCP 127.0.0.1:9000 (LISTEN)
php-fpm8. 448 www-data 12u IPv4 2405976614 0t0 TCP 127.0.0.1:9000 (LISTEN)
php-fpm8. 449 www-data 14u IPv4 2405976614 0t0 TCP 127.0.0.1:9000 (LISTEN)
php-fpm8. 453 www-data 16u IPv4 2405976614 0t0 TCP 127.0.0.1:9000 (LISTEN)
외부 노드에 연결하려는 시도가 있을 경우, 연결 정보(포트 및 IP 주소 포함)가 표시됩니다.
PHP 스크립트를 모니터링할 때 xdebug와 같은 추가 모듈이 있습니다. 프로덕션 환경에서는 이를 활성화하지 말고 디버깅용으로만 사용하세요.
이 방법을 통해 가상 서버에서 필요한 스크립트를 위한 샌드박스를 빠르게 만들고 네트워크 활동을 모니터링하여 데이터 노출 위험을 줄일 수 있습니다.
No Comments Yet