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로 바꿔서 써주면 된다.
[!danger] CentOS 8에서 위처럼 설정 했음에도 접근이 안되는 경우가 있어서, 이런 경우 그냥 firewalld는 내리고 클라우드 방화벽만 유지해도 괜찮아보임.
기타 다양한 사용 예제
https://www.lesstif.com/ws/firewalld-43844015.html
8080 -> 80 포트 redirect
root 이외 계정은 1024 포트를 개방할 수 없기 때문에 80 포트로 jenkins 등을 띄우는 것이 불가능하다.
하지만 hook을 받아야 하는데 80으로만 수신이 가능하다는 등… 꼭 80으로 서비스를 띄워야 하는 경우가 있을 수 있는데,
이 때 8080 -> 80으로 REDIRECT 걸어 두는 방법.
[!tip] 앞단에 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}
기타?
[!info] 클라우드 플랫폼에는 자체적으로 방화벽을 제공해주기 때문에(NCP의 경우 ACG) 시스템 상의 iptables에서도 open, 클라우드 플랫폼에서 관리하는 UI에서도 open, 이렇게 이중으로 열어주어야 한다.
pf.conf
- https://man.openbsd.org/pf.conf
- packet filter로 BSD 계열에서 사용한다. (BSD 기반인 macos에도 기본 탑재되어 있다.)
This post is licensed under CC BY 4.0 by the author.