Oracle Cloud에서 Ubuntu 이미지로 VM생성을 하면 방화벽 이슈가 발생한다.
퍼블릭 클라우드 마다 약간씩 특징이 있는데 Ubuntu 22.04로 설치하고나면 UFW말고 iptable에서 포트 허용설정을 해야한다.
iptables -I INPUT 5 -i ens3 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -I INPUT 5 -i ens3 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -I INPUT 5 -i ens3 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
좀더 알아보자..
iptables 정보 확인
iptables -L --line-numbers

위에서부터 해석해보자…
1번 : state RELATED,ESTABLISHED: 이미 연결된 세션의 트래픽만 허용됩니다. 새 연결에는 해당되지 않습니다.
2번 : icmp: ICMP 트래픽(예: Ping)을 허용합니다. TCP/UDP 트래픽에는 적용되지 않습니다.
3번 : 모든 트래픽을 허용하는 것처럼 보이지만, 이는 설정의 불일치로 보이며 실제로는 다른 조건에 의해 제한될 수 있습니다.
4번 : UDP 소스 포트가 ntp인 트래픽만 허용됩니다.
5번 : TCP 포트 22(SSH)만 허용됩니다.
6번 : 위 규칙에 해당되지 않는 모든 트래픽은 거부(REJECT)됩니다.
3번이 다 열려있다 생각했는데 이게 동작을 안하나 보다…그래서 포트를 직접 열어주면 된다.
설정 저장
기본적으로 iptables는 재부팅을하면 설정이 날라가므로 저장을 해줘야한다.
root@oci-haproxy:~# sudo netfilter-persistent save
현재 적용상태
root@oci-haproxy:~/oraclecloud-config# iptables -L INPUT --line-numbers -n
Chain INPUT (policy ACCEPT)
num target prot opt source destination
1 ACCEPT tcp -- {특정아이피} 0.0.0.0/0 tcp dpt:9100 state NEW,ESTABLISHED
2 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
3 ACCEPT icmp -- 0.0.0.0/0 0.0.0.0/0
4 ACCEPT all -- 0.0.0.0/0 0.0.0.0/0
5 ACCEPT udp -- 0.0.0.0/0 0.0.0.0/0 udp spt:123
6 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 state NEW tcp dpt:22
7 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 state NEW,ESTABLISHED
8 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:9001 state NEW,ESTABLISHED
9 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:9000 state NEW,ESTABLISHED
10 ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:443 state NEW,ESTABLISHED
11 REJECT all -- 0.0.0.0/0 0.0.0.0/0 reject-with icmp-host-prohibited
12 REJECT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:9100 reject-with icmp-port-unreachable
참고 스크립트
초기 생성된 테이블 삭제후 구성 스크립트
#!/bin/bash
set -e -x
iptables -D INPUT 5
iptables -D INPUT 4
iptables -D INPUT 3
iptables -D INPUT 2
iptables -D INPUT 1
# 1. 9100 포트: 특정 IP만 허용
iptables -I INPUT 1 -s 고정아이피/32 -p tcp --dport 9100 -m state --state NEW,ESTABLISHED -j ACCEPT
# 2. ESTABLISHED,RELATED 허용
iptables -I INPUT 2 -m state --state RELATED,ESTABLISHED -j ACCEPT
# 3. ICMP 허용
iptables -I INPUT 3 -p icmp -j ACCEPT
# 4. 루프백/기타 내부통신 등 허용
iptables -I INPUT 4 -j ACCEPT
# 5. NTP 클라이언트 허용 (udp spt 123)
iptables -I INPUT 5 -p udp --sport 123 -j ACCEPT
# 6. SSH 허용
iptables -I INPUT 6 -p tcp --dport 22 -m state --state NEW -j ACCEPT
# 7~10. 웹/서비스 포트 허용
iptables -I INPUT 7 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -I INPUT 8 -p tcp --dport 9001 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -I INPUT 9 -p tcp --dport 9000 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -I INPUT 10 -p tcp --dport 443 -m state --state NEW,ESTABLISHED -j ACCEPT
# 11. 기본 차단
iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited
# 12. 9100 포트 차단 (고정아이피 외 차단)
iptables -A INPUT -p tcp --dport 9100 -j REJECT --reject-with icmp-port-unreachable