iptables

체인은 3가지.

INPUT

OUTPUT

FORWARD : 나를 지나가는 패킷. 라우터 등에서 사용.


iptables는 ip 헤더부터 잡힌다. 그 아래는 안잡힘.


```bash

sudo iptables -L


// 밖으로 나가는 icmp 막기

iptables -A OUTPUT -p icmp -j DROP

iptables -D OUTPUT -p icmp -j DROP


// 80번만 풀기. iptables는 위에서 부터 검사하다 break하기 때문에 먼저 써야 함.

iptables -A OUPUT -p tcp --dport 80 -j ACCEPT

// 밖으로 나가는 tcp 막기

iptables -A OUTPUT -p tcp -j DROP


// netfilter queue로 패킷 보내기.

iptables -A OUTPUT -p tcp --dport 80 -j NFQUEUE

```


firewalld

  • CentOS 7 부터 iptables가 아니라 firewalld가 기본 방화벽으로 깔려있다. 
  • iptables의 업그레이드 wrapper 같은거라 생각하면 된다.
  • iptables와의 가장 큰 차이점은 firewalld는 동적으로 설정을 반영해준다는 점. 
    • 따라서 룰 변경 시 네트워크 중단이 발생하지 않는다.
  • zone은 그냥 네트워크 설정 단위 집합 같은거라고 생각하면 됨 default가 public으로 되어 있다.

--permanent 옵션

  • firewall-cmd는 현재 떠있는 firewalld 에서만 적용 
    • --reload 또는 재부팅 시 초기화
    • 임시 테스트 시 등등...
  • firewall-cmd --permanent는 영구 설정에 추가
    • 그러나 바로 적용되는 것이 아니라 --reload 한 번 해줘야 함.

현재 서비스 확인

```bash

확인 systemctl status firewalld

  또는 systemctl [| grep firewalld]


실행 systemctl start firewalld


재시작 systemctl restart service_name.service


중지 systemctl stop service_name.service


부팅 시 서비스 자동 시작

systemctl enable service_name.service


부팅 시 서비스 자동 시작 해제

systemctl disable service_name.service

```


개방되어 있는 포트 확인

```bash

firewall-cmd --zone=public --list-all

netstat -tupan

```


포트가 외부에서 접속되지 않는다면 포트를 방화벽에 추가하고, 리로드

```bash

sudo firewall-cmd --zone=public --add-port=8000/tcp --permanent

sudo firewall-cmd --reload


제거는 add만 remove로 바꿔서 써주면 된다.

```


기타 다양한 사용 예제



8080 -> 80 포트 redirect

root 이외 계정은 1024 포트를 개방할 수 없기 때문에 80 포트로 jenkins 등을 띄우는 것이 불가능하다.
하지만 hook을 받아야 하는데 80으로만 수신이 가능하다는 등... 꼭 80으로 서비스를 띄워야 하는 경우가 있을 수 있는데,
이 때 8080 -> 80으로 REDIRECT 걸어 두는 방법.

*** 앞단에 nginx 두고, 특정 domain name으로 들어온 경우 특정 port로 proxy_pass를 설정하는 것도 가능하다. 사실 이 방법을 더 많이 쓴다.  [nginx] reverse proxy 설정



iptables 사용한 방법

```bash
추가 $ iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
확인 $ iptables -t nat -L -n --line-number

제거 $ iptables -t nat -D PREROUTING {rule-number-here}

```


firewalld 사용한 방법

```bash

$ firewall-cmd --permanent --zone=public --add-forward-port=port=80:proto=tcp:toport=8080:toaddr={ip}

```



기타?

클라우드 플랫폼에는 자체적으로 방화벽을 제공해주기 때문에(NCP의 경우 ACG) 시스템 상의 iptables 같은게 문제인 경우는 잘 없고, 이 플랫폼에서 개방해야 하는 경우가 대부분이다.


'Network & Protocol & Infra' 카테고리의 다른 글

HTTP/2  (0) 2019.08.29
VMware Shared VM 포트 개방 문제  (0) 2019.01.30
iptables / firewalld  (0) 2018.08.15
내부망, 인터넷 동시에 연결해서 사용하기  (0) 2017.11.20
Telnet : raw socket과의 차이  (0) 2017.06.27
Ethernet IEEE 802.3  (0) 2016.12.03