환경
-
Ubuntu 18.04
-
XShell 6 (무료 버전)
iptables란? (간단한 설명)
-
윈도우에는 방화벽이 있어서 외부로부터 보호한다.
-
iptables = 리눅스 방화벽이라고 생각하면 쉽다.
iptables
Ubuntu에서는 ufw를 사용하여 기본 방화벽을 설정해줄 수 있다.
하지만, 수준 높은 방화벽 구성을 위해서는 iptables를 이용해 설정해줘야 한다.
기본 명령어
- -N (–new-chain) : 새로운 체인을 만듦
- -L (–list) : 새로운 규칙을 출력
- -X (–delete-chain) : 비어 있는 체인 삭제
- -P (–policy) : 기본 정책을 변경
- -F (–flush) : 체인의 모든 규칙을 삭제
- -A (–append) : 새로운 규칙을 추가(맨아래에 추가됨)
- -I (–insert) : 새로운 규칙을 삽입(맨앞쪽에 삽입됨)
- -R (–replace) : 새로운 규칙을 교체
- -D (–delete) : 규칙 삭제
- -C (–check) : 패킷 테스트
제어 옵션 명령어
- -s (–source) : 출발지 주소
- -d (–destination) : 목적지 주소
- –sport : 출발지 포트번호
- –dport : 목적지 포트번호
- -p (–protocol) : 프로토콜(tcp,udp,… etc)
- -i (–in-interface) : 패킷이 들어오는 네트워크 인터페이스
- -o (–out-interface) : 패킷이 나가는 네트워크 인터페이스
- -f (–fragment) : 분절된 패킷
- -j (–jump) 규칙에 맞는 패킷을 어떻게 처리할 것인가
활용 예제
tcp 80번 포트 열어주는 명령어
1
2
$ sudo iptables -I INPUT -p tcp --dport 80 -j ACCEPT
$ sudo iptables -I OUTPUT -p tcp --sport 80 -j ACCEPT
iptables INPUT,OUTPUT 에 새로운 규칙 삽입(-I) 프로토콜(-p)은 tcp 출발,목적지(–dport,–sport) port는 80, 이 포트를(-j) ACCEPT해라.
특성 IP에 특정 포트만 열어주기
1
2
3
$ sudo iptables -I INPUT -p tcp --dport 80 -s 12.34.56.78 -j ACCEPT
$ sudo iptables -I OUTPUT -p tcp --dport 80 -d 12.34.56.78 -j ACCEPT
위와 동일하지만 출발주소(-s), 도착주소(-d) 가 추가 되었다. 주소 = 12.34.56.78
포트 리다이렉트
1
$ sudo iptables -A PREROUTING -t nat -p tcp --dport 80 -j REDIRECT --to-ports 8080
기본적인 iptables는 -L 옵션으로 확인하지만, PREROUTING은 nat테이블을 지정해서 봐야 하는것 같다. 80포트를 8080포트로 리다이렉트
iptables 조회
1
$ sudo iptables -t nat -L --line-numbers
PREROUTING까지 보기 위해 -t nat 추가
규칙 지우기
1
iptables -t nat -D PREROUTING 1
PREROUTING에 있는 1번 규칙 삭제하기
Reference
Ubuntu iptables로 방화벽 port 설정하기