Linux

[Ubuntu] 리눅스 포트 포워딩 방법

컨텐츠 정보

본문

1. 현재 iptables 규칙 백업

명령어 다루기가 까다로우므로 순간실수로 네트워크 마비가 올수 있다.

이때 빠른 복구를 위해서 현 상태를 저장해 놓는다.

/root 디렉토리에서 작업한다.

#su -l root

 

백업폴더생성

#mkdir iptables_backup

 

폴더로 이동

#cd iptables_backup

 

iptables 규칙 백업 (파일명은 2013.02.12.rule 알맞게 변경)

#iptables-save > 2013.02.12.rule

 

iptables 규칙 복원 테스트

#iptables-restore < 2013.02.12.rule

 


 

2. iptables 포워딩 규칙 설정

 

#주의 : 포워딩을 새로 설정하시려는 분이면 다음의 초기화를 해도 되지만

클라우드 구축중이라면 초기화를 하면 안됩니다.

클라우드 구축중 다음의 초기화 구문을 실행하면 내부 가상머신들의 네트워크 단절이 발생할 수도 있습니다.

 

리눅스 특색인지는 모르겠지만 대소문자를 맞춰서 써주세요.

 


#iptables 초기화;클라우드 구축중인 사용자는 실행하면 안되는 구문 - 실행시 내부 네트워크가 단절됨

 

- 기본규칙을 허용(ALLOW)로 설정

이걸 하지 않으면 콘솔직접접근을 할수없다면 서버에 접속이 불가능해 진다.

* 아래 명령어가 오류가 발생한다면 ALLOW 대신 ACCEPT 라는 단어를 사용하여라.

# iptables -P INPUT ALLOW
# iptables -P OUTPUT ALLOW
# iptables -P FORWARD ALLOW

 

iptables 모두 초기화 (초기화 직전에 꼭 위의 3가지 구문을 실행하였는지 확인하여라)

 

#iptables -F
#iptables -X
#iptables -Z

 

-A(--append)            : 규칙을 추가한다.

-N(--new-chain)        : 새로운 체인 생성

-X(--delete-chain)     : 체인 제거

-P(--policy)              : 체인 기본정책 변경

-L(--list)                  : 체인의 규칙상태 보기

-F(--flush)               : 체인내의 모든 규칙 제거(방화벽 초기화)

-Z(--zero)                : 체인내의 모든 규칙의 패킷과 바이트의 카운트를 0으로 초기화

-D(--delete)             : 규칙을 삭제

-R(--replace)            : 새로운 규칙으로 대체

-I(--insert)               : 체인의 가장 처음에 규칙을 추가한다.

-E(--rename-chain)    : 체인의 이름을 변경한다.

 


 

내 IP만 ssh 접속가능하게 - 같은 기본세팅을 쓸까 했는데 글이 포트포워딩이므로 관련 기능만 쓰겠습니다.

방화벽이 모두 open되어 있더라도 관리가 잘 되어 있다면 (루트 비밀번호가 매우 짧다던가) 해킹당하지는 않는다. - 관련하여 부연설명을 길게 적지는 않겠다.

 

포트포워딩 관련구분은 다음과 같다.

iptables -A PREROUTING -t nat -p tcp  -d 호스트서버의아이피  --dport 포트번호 -j DNAT --to 포워딩내부아이피:포트번호
iptables -A PREROUTING -t nat -p udp  -d 호스트서버의아이피  --dport 포트번호 -j DNAT --to 포워딩내부아이피:포트번호

예를들면

iptables -A PREROUTING -t nat -p tcp  -d 115.268.342.73  --dport 25565 -j DNAT --to 192.168.122.12:25565
iptables -A PREROUTING -t nat -p udp  -d 115.268.342.73  --dport 25566 -j DNAT --to 192.168.122.12:25566

가 가능해진다.

서비스들은 거의다 tcp 이므로 첫번째의 구문만 사용하면 된다.
다만 이 -t nat(내부네트워크) 의 PREROUTING 구문은 상위단계의 FORWARD 에서 한번 걸러지므로

iptables -A FORWARD -p tcp --dport 25565 -d 192.168.122.12 -j ACCEPT
iptables -A FORWARD -p udp --dport 25566 -d 192.168.122.12 -j ACCEPT

로 허용해 주어야 합니다. (FORWARD 기본값이 ALLOW라면 안해줘도 되지만)

 

올바로 세팅되었는지 체크

#iptables -L PREROUTING -t nat
#iptables -L FORWARD

 

필요없는 세팅 삭제 (예시: 상단의 -L로 봤을때 첫번째 룰 삭제, 삭제시 순서번호가 다시 매겨지므로 여러개 삭제시 순서를 잘 보고 하세요.)

#iptables -D PREROUTING 1 -t nat

 

virtual machine manager 로 세팅중이라면 FORWARD 구문중에 내부패킷 DROP 이 있을겁니다.

인덱스번호가 3,4 였던가 4,5 였던가 나란히 있는데 해당 룰을 제거해 주어야 합니다. (#iptables -L FORWARD 로 인덱스를 확인하세요)

예를들어 내부 DROP 구문이 세번째, 네번째라면

#iptables -D FORWARD 3 라는 명령어를 두번 실행해 주세요. (3번 삭제 후 인덱스 번호가 다시 매겨지므로)

 

작업이 어렵다면 방화벽룰 백업(iptables-save)을 하신 후에

해당 백업파일을 vi 나 nano 같은 에디터로 열어서 편집하신 후 복원(iptables-restore)하시면 됩니다.



추가 : [root@localhost~]# iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

삭제 : [root@localhost~]# iptables -D PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080

iptables 저장 : [root@localhost~]# service iptables save

iptables 확인 : [root@localhost~]# iptables -t nat -L

iptables 재시작 : [root@localhost~]# service iptables restart

 

관련자료

댓글 0
등록된 댓글이 없습니다.
알림 0