Gom3rye
방화벽 생성 및 제어 본문
서버의 방화벽 설정
Linux의 방화벽
리눅스에서는 호스트 방화벽 기능을 위해 iptables를 사용하기도 한다.
- CentOS7 이상은 iptables 대신에 firewalld를 사용하도록 되어 있고 Ubuntu에서는 UFW(Ubuntu FireWall)을 사용해서 방화벽 서비스를 제공한다.
- 예전 사용자들은 iptables에 익숙하다.
- UFW는 iptables의 FrontEnd 역할을 수행하기 때문에 iptables에 대한 기본적인 이해가 필요하다.
- iptables가 방화벽의 역할처럼 패킷을 차단, 허용하는 등의 필터링 기능을 직접 수행하는 것은 아니고 리눅스 커널에 내장된 netfilter라는 리눅스 커널 모듈을 통해 필터링이 이루어진다.
- iptables는 netfilter를 이용할 수 있도록 해주는 사용자 공간 응용 프로그램이다.
- iptables나 firewalld나 UFW는 모두 netfilter의 frontend 역할이다.
(제일 큰 동그라미) Shell > Kernel > HW (안 동그라미)
커널에 netfilter가 있고 응용 프로그램에 iptables, firewalld가 있는 것. 우리는 응용 프로그램 가지고 조작을 하는 거지만 실제 일은 netfilter가 하는 것
iptables
서버에서 허용하거나 차단할 IP나 서비스 포트에 대한 정책을 수립한다.
- 수립된 정책은 정책 그룹으로 관리한다.
- 정책 그룹은 트래픽 구간 별로 생성되어, 각 방향에 대해 허용/차단 규칙을 설정한다.
- INPUT (수신 트래픽)
- 외부에서 서버로 유입되는 트래픽
- 예: 클라이언트가 서버의 웹 서비스(80번 포트)에 접속하는 경우
- OUTPUT (송신 트래픽)
- 서버에서 외부로 나가는 트래픽
- 예: 서버가 외부 API에 요청을 보내는 경우
- FORWARD (포워딩 트래픽)
- 서버(호스트)가 라우터 역할을 하며 다른 네트워크 간 트래픽을 중계하는 경우 (서버를 통과하는 구간)
- 일반 서버에서는 잘 안 쓰이고, 라우팅/게이트웨이 역할을 하는 장비에서 사용
- 예: 내부 네트워크를 NAT로 외부에 연결해주는 경우
- INPUT (수신 트래픽)
- iptables에는 Filter Table, NAT Table, Mangle Table, Raw Table, Security Table 5가지가 있다.
- 테이블에는 방향성과 관련된 그룹이 있는데 이 그룹이 체인이다.
- 필터 테이블에는 서버로 들어오는 트래픽, 나가는 트래픽, 통과하는 트래픽에 따라 INPUT 체인, OUTPUT 체인, FORWARD 체인이 있다.
- Filter 테이블
- iptables에서 패킷을 허용하거나 차단하는 역할을 선언하는 영역
- INPUT, OUTPUT, FORWARD 체인
- 호스트 기준으로 호스트로 들어오거나 나가거나 호스트를 통과할 때 사용하는 정책들의 그룹, 패킷의 방향성에 따라 각 체인에 정의된 정책이 적용된다.
- MATCH
- 제어하려는 패킷의 상태 또는 정보 값의 정의
- TARGET
- MATCH에 일치하는 패킷을 허용할지 차단할지에 대한 패킷 처리 방식
네트워크 설정
- ip 확인
- hostname -i
- ifconfig (sudo apt install net-tools로 설치가 되어 있어야 하고 인터페이스 별로 할당된 정보를 출력)
- 내 네트워크 인터페이스 확인 (Virtual Box에 Ubuntu를 설치하면 enp0s3라는 네트워크 인터페이스가 생성된다.)
- ip a
- 인터페이스 별 ip 설정
- sudo nano /etc/netplan/00-installer-config.yaml
- 실제로는 파일 이름은 상관없고 확장자만 yaml 이면 된다.
NAT 네트워크 설정 → DHCP 활성화 uncheck
- /etc/hosts 파일에 ip에 알맞은 도메인 네임을 적어줬으니까 이름으로도 통신이 가능한 것!
iptables의 사용
ubuntu의 기존 방화벽 비활성화
- 상태확인
sudo systemctl status ufw # active 상태
- 부팅될 때 시작하지 않도록 설정
sudo systemctl disable --now ufw # inactive 되었다.
sudo reboot
- 중지
sudo systemctl stop ufw
iptables 설치
sudo apt install iptables-persistent -y
상태 확인
sudo systemctl status iptables # Active: active (exited)
부팅될 때마다 바로 시작하도록 만들어주기
sudo systemctl enable iptables
키고 끄기
sudo systemctl start|stop iptables
리눅스 방화벽 정책 확인
sudo iptables -L
(INPUT : 외부에서 서버로 들어올 때, FORWARD : 서버를 거쳐 갈 때
ACCEPT : 서버에서 외부로 나갈 때)
- INPUT 작업 예시
- ACCEPT all -- anywhere anywhere state RELATED, ESTABLISHED : 상태가 related, established인 경우는 모든 출발지에 대해서 허용하도록 룰을 설정한다.
- ACCEPT icmp -- anywhere anywhere : ICMP 에 대한 허용
- 거부는 ACCEPT 대신에 REJECT
- 웹 서버 열어주기
iptables -A INPUT -p tcp --dport 80 -j ACCECT
→ 규칙을 추가할 때는 -A나 --append 옵션을 사용하고 그 뒤에 체인을 기재
→ -p 다음에 프로토콜을 추가하고 --dport 다음에 포트를 추가한 후 허용인지 불가인지를 추가
→ dport는 도착지 포트이고 sport로 출발지 포트를 설정할 수 있는데 출발지 포트는 랜덤이기 때문에 알 수 없다.
→ 출발지나 목적지 IP를 설정하고자 하는 경우는 -s(--source), -d(--destination)을 사용한다.
- 아파치 웹 서버 설치
sudo apt update
sudo apt install apache2
- 서비스 시작
sudo systemctl start apache2
master에서 wget localhost
slave1에서 wget http://10.0.2.101 해보기
- 웹 서버에 외부에서 접근이 안되도록 설정
ex. slave1에서 못 가져오도록 하고 싶으면
kyla@master:~$ sudo iptables -A INPUT -p tcp --dport 80 -j DROP
→ slave1에서 wget http://10.0.2.101 해도 못 가져온다.
⇒ DROP 대신에 ACCEPT를 사용하면 허용
- rule이 잘 들어갔는지 확인해보기
sudo iptables -L
- rule 다시 지우기
sudo iptables -D INPUT 1
→ 다시 slave1에서 받을 수 있다. (외부에서 접근 가능)
원래 기본은 ufw인데 예전 사람들이 익숙해서 iptables를 많이 사용한다.
⇒ 방화벽의 룰은 위에서 아래로 순차적으로 적용되므로, 특정 트래픽만 통과시키고 나머지를 차단하려면 허용할 트래픽에 대한 룰을 먼저 작성해야 한다. 이후 차단(DROP) 룰은 뒤에 배치하여 나머지 트래픽을 모두 막을 수 있다.
- 좋은 예시: SSH는 허용하고, 나머지는 차단
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -j DROP
원래 기본은 ufw인데 예전 사람들이 익숙해서 iptables를 많이 사용한다.
- 특정한 IP만 허용
iptables -A INPUT -p tcp -s 네트워크대역 --dport 포트번호 -j ACCEPT
sudo iptables -A INPUT -p tcp -s 10.0.2.201/32 --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 80 -j DROP # 나머지는 다 막기
→ /32 : 단일 IP
→ slave1만 허용하고 나머지는 다 막았다.
- 룰 삭제
- iptables -D 체인 라인넘버
- iptables -F: 모든 규칙 제거
sudo iptables -F
- 특정 네트워크 대역에 대해서 거부
sudo iptables -A INPUT -p tcp -s 10.0.2.200/30 --dport 80 -j DROP
(sudo iptables -A INPUT -p tcp --dport 80 -j DROP 은 전체가 못 들어오는 것)
→ 0.0.0.0/0 : ip 전체, anywhere
→ ip/32, ip/255.255.255.255 : ip 1개
⇒ 10.0.2.201, 10.0.2.202를 막고 싶음 → 10.0.2.200/30 으로 해야 200,201,202,203를 막으므로 slave1, 2 다 막을 수 있다.
(10.0.2.203/30 도 똑같다. → ip는 범위 내 아무거나 하나만 들어가면 된다.)
⇒ sudo iptables -A INPUT -p tcp -s 10.0.2.201/31 --dport 80 -j DROP 하면 slave1은 못 하지만 slave2는 받아와버린다.
- 특정한 IP 범위에 대해서 설정
sudo iptables -A INPUT -p all -m iprange --src-range 시작IP-끝IP -j DROP
sudo iptables -A INPUT -p all -m iprange --src-range 10.0.2.201-10.0.2.202 -j DROP
→ -m 옵션: 패턴 매칭
- 특정 포트 범위를 막기
- -m multiport --dports 시작포트:끝포트
- -m multiport --sports 포트나열
sudo iptables -A INPUT -p all -m iprange --src-range 시작IP-끝IP -j DROP
sudo iptables -A INPUT -p all -m iprange --src-range 10.0.2.201-10.0.2.202 -j DROP
- 껐다가 키면 룰이 다 reset 된다. (sudo reboot하면)
영구적인 방화벽 설정
iptables 명령으로 설정한 방화벽은 재부팅 되거나 방화벽이 새로 시작되면 소멸된다.
- 반 영구적으로 설정하고자 하는 경우는 /etc/sysconfig/iptables 파일에 기록하면 된다.
ufw
우분투의 기본 방화벽 서비스
- 관리 명령
- ufw 서브명령
- 옵션
- enable: 방화벽을 활성화
- disable: 방화벽을 비활성화
- default allow | deny | reject [incoming | outgoing]: 방화벽의 기본 동작을 설정
- status [verbose]: 방화벽의 상태를 출력
- allow 서비스 | 포트/프로토콜
- deny 서비스 | 포트/프로토콜
- delete 명령: 명령으로 설정한 규칙을 제거
- 사용
sudo apt install ufw
sudo ufw enable
sudo systemctl start ufw # ufw 서비스를 강제로 띄움, 일반적으로 필요 없음
- http 허용
sudo ufw allow http
- telnet 거부
sudo ufw deny telnet
- 2개의 규칙 삭제
sudo ufw delete allow http
sudo ufw delete deny telnet
확인은 sudo ufw status
→ slave1, 2에서 wget 10.0.2.101 안됨
sudo ufw allow http를 해야 slave1, 2에서 가져올 수 있다.
kyla@slave1:~$ ssh kyla@10.0.2.101 도 안됨 → 방화벽 때문에
- 포트 번호로 허용하기
sudo ufw allow 80/tcp
→ slave1, 2에서 다시 가져올 수 있음 (wget 10.0.2.101 가능)
- 특정 IP 주소에만 설정
- ex. 10.0.2.201만 허용 (slave1만 허용)
sudo ufw allow from 10.0.2.201 to any port http
참고)
어디에 있는지 위치를 찾고 싶을 때
which iptables # 파일 위치 나올 것
ls -l 파일 위치 # 어떤 파일인지 볼 수 있다.
항목 NAT 네트워크 NAT + 포트 포워딩
인터넷 접속 가능 여부 | 가능 (내부 → 외부) | 가능 |
외부에서 접근 가능 여부 | 불가능 | 가능 (포트 포워딩 필요) |
사용 목적 | 내부에서 인터넷 사용 | 외부에서 내부 시스템에 접근 허용 |
일반 사용 예 | 웹 브라우징, 업데이트 | 웹 서버, SSH 접속 등 |
'현대 오토에버 클라우드 스쿨' 카테고리의 다른 글
클라우드 (4) | 2025.06.09 |
---|---|
방화벽 생성 및 제어 (0) | 2025.06.09 |
보안 (0) | 2025.06.04 |
네트워크 (0) | 2025.06.02 |
네트워크 장비 (0) | 2025.05.30 |