Post

iptables / firewalld

iptables

체인은 3가지.

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
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 한 번 해줘야 함.
현재 서비스 확인
1
2
3
4
5
6
7
8
9
10
11
12
13
14
확인 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
개방되어 있는 포트 확인
1
2
firewall-cmd --zone=public --list-all
netstat -tupan
포트가 외부에서 접속되지 않는다면 포트를 방화벽에 추가하고, 리로드
1
2
3
4
sudo firewall-cmd --zone=public --add-port=8000/tcp --permanent
sudo firewall-cmd --reload

제거는 add만 remove로 바꿔서 써주면 된다.
기타 다양한 사용 예제

https://www.lesstif.com/ws/firewalld-43844015.html

8080 -> 80 포트 redirect

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

앞단에 nginx 두고, 특정 domain name으로 들어온 경우 특정 port로 proxy_pass를 설정하는 것도 가능하다.
사실 이 방법을 더 많이 쓴다. port redirection 보다 히스토리 관리도 쉽고 명확하기 때문. [nginx] reverse proxy 설정

iptables 사용한 방법

1
2
3
추가 $ 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 사용한 방법

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

기타?

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

pf.conf

This post is licensed under CC BY 4.0 by the author.