리눅스 iptables: Difference between revisions

From CS Wiki
No edit summary
No edit summary
Line 77: Line 77:
== 예제 ==
== 예제 ==


=== IP 차단 ===
=== 특정 IP 및 IP 대역 차단 ===
(참고) IDS/IPS나 WAF로부터 악성 공격을 일삼는 IP를 차단하는 경우 C 클래스 대역을 통째로 차단해주는 것을 권장한다. (특히 해외 IP인 경우)
(참고) IDS/IPS나 WAF로부터 악성 공격을 일삼는 IP를 차단하는 경우 C 클래스 대역을 통째로 차단해주는 것을 권장한다. (특히 해외 IP인 경우)


Line 97: Line 97:
</pre>
</pre>


* 차단 정책 추가 시 코멘트(주석)를 추가해서 기록을 남겨주는 것이 좋다.
<pre class="shell">
# iptables -A INPUT -s 192.168.10.0/24 -j DROP -m comment --comment "bruteforce ip 20240516"
</pre>
=== 기본 차단, 인터페이스별 포워딩 ===
* '''예제 조건'''<ref>http://q.fran.kr/문제/6515 리눅스마스터 1급 1501 실기 기출문제</ref>
* '''예제 조건'''<ref>http://q.fran.kr/문제/6515 리눅스마스터 1급 1501 실기 기출문제</ref>
** 패킷은 거부 메시지 없이 무조건 거절한다. (DROP)
** 패킷은 거부 메시지 없이 무조건 거절한다. (DROP)

Revision as of 04:51, 16 May 2024

개요

리눅스의 패킷 필터링(Packet Filtering) 도구로서 방화벽 구성이나 NAT(Network Address Translation)에 사용된다.

사용법

# iptables  [-t 테이블] [액션] [체인] [매치] [-j 타겟]

테이블(Table)

  • filter, nat, mangle, raw
  • 명시하지 않으면 기본적으로 filter이다.

액션(Action)

  • -A: APPEND: 정책 추가
  • -I: INSERT: 정책 삽입
  • -D: DELETE: 정책 삭제
  • -R: REPLACE: 정책 교체
  • -F: FLUSH: 모든 정책 삭제
  • -P: POLICY: 기본 정책을 설정
  • -L: LIST: 정책 나열

체인(Chain)

  • INPUT
  • OUTPUT
  • FORWARD
  • PREROUTING
  • POSTROUTING

매치(Match)

  • -s: 출발지 매칭. 도메인, IP 주소, 넷마스크 값을 이용하여 표기(––source, ––src)
  • -d: 목적지 매칭. 도메인, IP 주소, 넷마스크 값을 이용하여 표기(––destination, ––dst)
  • -p: 프로토콜과 매칭. TCP, UDP, ICMP 와 같은 이름을 사용하고 대소문자는 구분하지 않음
  • -i: 입력 인터페이스와 매칭(––in-interface)
  • -o: 출력 인터페이스와 매칭(––out-interface)
  • -j: 매치되는 패킷을 어떻게 처리할지 지정 (--jump)

타깃(target)

패킷이 규칙과 일치할 때 취하는 동작을 지정한다.

  • ACCEPT: 패킷을 허용한다.
  • DROP: 패킷을 버린다(패킷이 전송된 적이 없던 것처럼)
  • REJECT: 패킷을 버리고 이와 동시에 적절한 응답 패킷을 전송한다.(icmp-port-unreachable)
  • LOG: 패킷을 syslog에 기록한다.
  • SNAT --to [주소]: 소스 IP를 [변환(NAT)|NAT]한다.
  • DNAT --to [주소]: 목적지 IP를 변환(NAT)한다.
  • RETURN: 호출 체인 내에서 패킷 처리를 계속한다.

정책 열람·저장·반영

  • 보기
# iptables -L
 또는
# cat /etc/sysconfig/iptables
  • 차단 횟수 및 byte 수 포함하여 보기
# iptables -L -nvx
  • 저장
# service iptables save
또는
# iptables-save
  • 저장 & 불러오기
# iptables-save > firewall.sh
# iptables-restore < firewall.sh
  • 정책을 추가한 다음 save만 하면 된다. 서비스를 restart할 필요는 없다.

예제

특정 IP 및 IP 대역 차단

(참고) IDS/IPS나 WAF로부터 악성 공격을 일삼는 IP를 차단하는 경우 C 클래스 대역을 통째로 차단해주는 것을 권장한다. (특히 해외 IP인 경우)

  • 차단 정책 적용 후 iptables-save를 꼭 해야 함을 명심하자

단순 차단 예제

  • 192.168.10.22로부터 들어오는 패킷들은 차단하는 정책을 추가[1]
# iptables -A INPUT -s 192.168.10.22 -j DROP
또는
# iptables -I INPUT -s 192.168.10.22 -j DROP
  • 192.168.10. 대역으로부터 들어오는 패킷들은 차단하는 정책을 추가
# iptables -A INPUT -s 192.168.10.0/24 -j DROP
또는
# iptables -I INPUT -s 192.168.10.0/24 -j DROP
  • 차단 정책 추가 시 코멘트(주석)를 추가해서 기록을 남겨주는 것이 좋다.
# iptables -A INPUT -s 192.168.10.0/24 -j DROP -m comment --comment "bruteforce ip 20240516"

기본 차단, 인터페이스별 포워딩

  • 예제 조건[2]
    • 패킷은 거부 메시지 없이 무조건 거절한다. (DROP)
    • 두 번째 이더넷카드(eth1)로 들어오는 패킷인 경우에만 포워딩을 허가한다.
    • 어떠한 방화벽도 설정되어 있지 않고 커널에서 포워딩을 허가한 상태이다.
# iptables -P FORWARD DROP
# iptables -A FORWARD -i eth1 -j ACCEPT
  • 예제 조건[3]
    • 해당 시스템에는 이더넷 카드가 두 개가 장착되어 있는데, 첫 번째 이더넷 카드에서 나가는 패킷에 대해 공인 IP 주소인 203.247.40.100을 할당한다.
# iptables –t nat –A POSTROUTING -o eth0 –j SNAT --to 203.247.40.100
  • 예제 조건[4]
    • 첫 번째로 기존에 설정된 정책을 전부 삭제한다.
    • 두 번째로 INPUT 체인에 loopback 인터페이스에 들어오는 모든 패킷에 대해 허용 정책을 추가 한다.
    • 세 번째로 INPUT 체인에 프로토콜이 tcp이며 목적지포트가 22번부터 23번 포트인 패킷에 대해 허용 정책을 추가 한다.
    • 마지막으로 INPUT 체인에 대한 기본 정책을 거부 메시지 없이 거절로 변경한다.
# iptables -F INPUT
# iptables -A INPUT -i lo -j ACCEPT
# iptables -A INPUT -p tcp --dport 22:23 -j ACCEPT
# iptables -P INPUT DROP
  • 예제 조건[5]
    • 서버에서 외부로는 ping 테스트가 되고 외부에서 서버쪽으로는 ping 테스트가 되지 않도록 한다.
    • iptables 명령어를 수행하는 서버의 IP는 192.168.10.1이다.
    • INPUT 체인의 기본 정책은 DROP이다.
      1. 프로토콜은 icmp이며 icmp echo request 패킷이 외부로 나가는 것에 대해 허용한다.
      2. 프로토콜은 icmp이며 외부에서 들어오는 icmp echo reply 패킷에 대해서 허용한다.
      3. 프로토콜은 icmp이며 외부에서 들어오는 icmp destination-unreachable 패킷에 대해서 허용한다.
# iptables –A INPUT -p icmp --icmp-type echo-request -s 192.168.10.1 –d 0/0 -j ACCEPT
# iptables –A INPUT -p icmp --icmp-type echo-reply -s 0/0 –d 192.168.10.1 -j ACCEPT
# iptables –A INPUT -p icmp --icmp-type destination-unreachable -s 0/0 –d 192.168.10.1 -j ACCEPT
  • 예제 조건
    • 로드 밸런서나 프록시 등을 통해 들어온 경우X-Forwarded-For을 사용하여 차단
    • String을 기반으로 차단 규칙 설정
# iptables -I INPUT -p tcp --dport 80 -m string --string "X-Forwarded-For: 111.222.111.222" --algo bm -j DROP
  • 예제 조건[6]
    • 대상 프로토콜 SSH
    • 같은 IP 주소에서 60초 동안에 15번 이상 접속을 시도하면 DROP시키는 정책을 추가
# iptables -A SSH -p udp --dport 22 -m recent --update--seconds 60 --hitcount 15 -j drop
  • 삭제
    • --line-number 옵션을 통해 정책의 번호를 확인한다.
iptables -L --line-numbers
    • -D 옵션을 지정하여 특정 번호의 정책을 삭제한다.
iptables -D INPUT [번호]

참고 문헌

  1. http://q.fran.kr/문제/2748 리눅스마스터 1급 1501 필기 기출문제
  2. http://q.fran.kr/문제/6515 리눅스마스터 1급 1501 실기 기출문제
  3. http://q.fran.kr/문제/6483 리눅스마스터 1급 1602 실기 기출문제
  4. http://q.fran.kr/문제/6547 리눅스마스터 1급 1701 실시 기출문제
  5. http://q.fran.kr/문제/6499 리눅스마스터 1급 1502 실시 기출문제
  6. http://q.fran.kr/문제/2963 리눅스마스터 1급 1601 필기 기출문제