iptables?
- NetFilter한테 규칙을 적용시키는 도구
- NetFilter가 뭔지에 대해서는 아래의 글 참고
- 14. 리눅스 네트워크 구조 이해하기
0. 백업/복구 하기
백업
iptables-save > <위치>-
iptables의 정책들을 위치에 저장함
-
예시
iptables-save > /data/main/backup/iptables.backup복구
iptables-restore < <위치>-
iptables 백업본을 가지고 복구함
-
예시
iptables-restore < /data/main/backup/iptables.backup1. 확인하기
iptables -L
-
뭔가 이것저것 많이 올라옴
-
특정 테이블이 적용된 체인만 보기
iptables -t <테이블명> -L - 특정 체인에 걸린 정책들을 앞에 번호를 붙여서 표시
- 여기서 나온 번호를 가지고 나중에 정책을 삭제할 수 있음
iptables -L <체인명> -n --line-number2. 정책 추가 / 수정하기
1) 화이트리스트 방식으로 만들기
- 일단 기존 정책 싹 다 지움
iptables -F
iptables -X- 확인해보면 훨씬 정책이 줄어든걸 볼 수 있음

- 이걸 이제 들어오는걸 막고 나가는거만 허용할거임
iptable -P INPUT DROP
iptable -P OUTPUT ACCEPT
iptable -P FORWARD DROP- 아래처럼 들어오는게 막히고 나가는게 허용됨

2) 정책 추가하기
특정 인터페이스에 대한 정책
- 조건을 추가하려면 아래의 양식대로 작성
iptables -A <체인> -i(또는 -o) <인터페이스> -j <다음_행동>-
-A <체인> : 지정한 체인에 있는 룰 뒤에다가 덧붙임 (Append)
-
-i <인터페이스> : 지정한 인터페이스로 들어온 데이터에 해당 규칙을 적용함 (Input)
- 참고 : -i 는 INPUT이랑 FORWARD 체인에 사용함
-
-o <인터페이스> : 지정한 인터페이스로 나가려는 데이터에 해당 규칙을 적용함 (Output)
- 참고 : -o는 OUTPUT이랑 FORWARD 체인에 사용함
-
-j <다음_행동> : 다음 행동으로 어떤걸 할지 지정함 (Drop or Accept) (Jump)
-
예시
iptables -A INPUT -i lo -j ACCEPT- ⇒ 루프백 인터페이스로 들어오는거는 허용
특정 IP에 관해 적용하는 정책
iptables -A <체인> -s(또는 -d) <아이피> -j <다음_행동>-
-A <체인> : 지정한 체인에 있는 룰 뒤에다가 덧붙임 (Append)
-
-s <아이피> : 출발 아이피가 해당 아이피인 경우 (Source)
-
-d <아이피> : 도착 아이피가 해당 아이피인 경우 (Destination)
-
-j <다음_행동> : 다음 행동으로 어떤걸 할지 지정함 (Drop or Accept) (Jump)
-
예시
-
지금 일부러 모든 INPUT 의 ACCEPT 를 막아놨음

- 실제로 핑을 날려보면 안감

iptables -A INPUT -s 192.168.10.20 -j ACCEPT- 저번에 VLAN 때 만들어 둔 Rocky Linux 9 의 IP를 허용으로 추가해놨음

-
참고 : 정책은 1번부터 숫자가 커지는 순서대로 체크하기 때문에, DROP이 위에 있으면 다 떨궈짐!
-
허용으로 추가되었기 때문에 이제 타임아웃이 안걸림

특정 포트에 관해 적용하는 정책
iptables -A <체인> -p <프로토콜> --sport(또는 --dport) <포트>-
-A <체인> : 지정한 체인에 있는 룰 뒤에다가 덧붙임 (Append)
-
-p <프로토콜> : tcp, udp, icmp 등 프로토콜 (Protocol)
-
—sport <포트> : 출발 포트가 해당 포트인 경우 (Source)
-
—dport <포트> : 도착 포트가 해당 포트인 경우 (Destination)
-
-j <다음_행동> : 다음 행동으로 어떤걸 할지 지정함 (Drop or Accept) (Jump)
-
참고 : —sport, —dport 는 -p 로 프로토콜을 지정해주지 않으면 안됨
-
예시
# SSH 허용 예시
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
# HTTP / HTTPS 허용 예시
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT- 제대로 들어갔나 확인
iptables -L INPUT -n --line-numbers
특정 조건을 부합했을 때 적용하는 정책
iptables -A <체인> -m <매칭_조건> -j <다음_행동>- -m <매칭_조건> : 기본적으로 제공되는 기능 (특정 포트, 특정 IP) 이 아니고 다른 추가적인걸 써야 할 때 사용함
| 모듈 | 용도 |
|---|---|
| conntrack | 연결 상태 추적 |
| state | (구버전) 연결 상태 |
| limit | 패킷 속도 제한 |
| recent | 최근 접속 IP 기록 |
| multiport | 여러 포트 한 번에 |
| tcp | TCP 플래그 검사 |
- 현재 연결되어있는 연결 (말이 제법 웃기지만), 그리고 그 부분과 연관된 연결에 대해서는 허용으로 전환하는 예시
iptables -A INPUT -m conntrack --cstate ESTABLISHED, RELATED -j ACCEPT로그를 남기기 위한 정책
iptables -A ........ -j LOG --log-prefix <접두사>-
위에서 써둔 방식 뒤에 -j LOG 를 붙이면 journalctl로 확인이 가능함
-
예시
iptables -A INPUT -p tcp --dport 22 -j LOG --log-prefix "SSH LOG : "NAT 구현
DNAT
iptables -t nat -A <체인> <조건들> \
-j DNAT --to-destination <IP:Port>-
참고 : DNAT은 PREROUTING, OUTPUT 체인에서 사용 가능함
-
예시
iptables -t nat -A PREROUTING -p tcp --dport 80 \
-j DNAT --to-destination 192.168.0.10:8080SNAT
iptables -t nat -A <체인> <조건들> \
-j SNAT --to-source <IP>-
참고 : SNAT은 POSTROUTING 에서만 가능함
-
예시
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 \
-j SNAT --to-source 1.2.3.4MASQUERADE (SNAT IP 자동설정)
iptables -t nat -A <체인> <조건들> \
-o <인터페이스> -j MASQUERADE- 예시
iptables -t nat -A POSTROUTING -s 192.168.0.0./24 \
-o enp0s1 -j MASQUERADE3. 정책 삭제하기
- 정책의 숫자를 사용해서 삭제하는게 편함
iptables -L <체인명> -n --line-numberiptables -D <체인명> <숫자>- 예시
- 아래 사진에서 9번째 조건을 삭제하고 싶다면 아래의 명령어 실행

iptables -D INPUT 9