상세 컨텐츠

본문 제목

iptables 리눅스 20220906

보안

by MustThanks 2022. 9. 6. 17:20

본문

반응형

iptables

-       리눅스에서 방화벽을 설정하는 도구로 커널 2,2에서 사용되던 ipchains의 사슬(chain) 구조를 그대로 승계

-       기능과 역할을 강화하기 위해서 테이블로 확장하여 테이블별로 각각 사승르 지정하고 해당 사슬에 정책을 설정하도록 하였음

-       패킷 필터링 도구로서 방화벽 구성이나 NAT에 사용되는 리눅스 커널 방화벽

-       커널상에서의 netfilter 패킷 필터링 기능을 사용자 공간에서 제어하는 수준

   참고 : 패킷 피터링

         지나가는 패킷의 헤더를 보고 그 전체 패킷의 경로를 결정하는 것

         패킷은 헤더와 데이터로 구성된다.

         헤더 : 필더링 정보인  출발지 IP Port , 도착지 IPPort ,

checksum, protocol option

         데이터 : 전송하가자 하는 데이터

         특정 조건을 가지고 있는 패킷에 대해서 Accept(허용), Drop(차단)등을 지정이 가능

         특정 조건등을 통해 다양한 방식의 패킷 필터일과 처리 방식을 지원

  

iptables의 구성요소

l  Filter , nat,mangle,raw,security 5table로 구성

-       Filter : iptables의 기분 테이블로 패킷 필터링 담당

-       Nat : 필터기능은 없음, 주소변환용으로 사용하며 외부에서 내부로 오는 패킷 포워딩과

      내부에서 외부로 나갈 때 다른 IP주소로 나가게 하는 기능

Network Address Translation IP 주소 변환

-       Raw :  nat 필터의 conection tracking(연결 추적) 기능을 좀더 자세히 다룰 때 사용

        특정 네트워크는 연결 추적에서 제외하는 등의 추적에서 제외 설정이 가능

        Conntrack 모듈보다 우선순위가 높음

하위시스템과 독립적으로 동작해야 하는 규칙을 설정하는 테이블

-       Security : 리눅스 보안 모듀린 SELinux에 의해 사용되는 MAC(Mandatory Access Control) 네트위크 관려 규칙 적용

-       Mangle : TTL이나 TOS(type of service)같은 특수규칙을 적용하기 위해 사용된다.

             패킷안에 데이터를 변화 또는 조작을 위한 테이블

체인(Chain)

-       일치하는 패킷의 규칙을 연결하는 구성

Chain의 구성 요소

l  Input , output, forward 의 내장 체인이 있음

-       Input : 시스템 외부에서 내부로 들어오는 체인

-       Output : 시스템 내부에서 외부로 나가는 체인

-       Forward : 시스템을 통과하는 체인

 

    리눅스 서버를 목적지로 하여 들어오는 모든 패킷은 Input chain을 통과

    리눅스 서버에서 생성되 외부로 보내지는 모든 패킷은 Output chain을 통과

    리눅스 서버가 목적지가 아닌 패킷들은 forward chain을 통과

l  Forward chainNAT-네트워크 공유- 기능을 위해 사용

 

    참고

     Masquerade(마스커레이드)

        내부 사설 IP computer 들이 외부 인터넷 연결을 가능하게 해주는 기능

  

     NAT(Network Address Translation)

   네트워크 주소 변환 서비스

* POSTROUTING

- SNAT (Source NAT) : 내부 사설 IP에서 외부로 나갈 때 공인 IP로 변환

                      공인 아이피 하나에 다수의 컴퓨터가 인테넷에 접속 가능

마스커레이드와 비슷

        * PREROUNTING

     - DNAT (Destination NAT) : 외부에서 방화벽(외부 IP)으로 요청되는 주소를

                                내부 사설 IP로 변환

                                 하나의 공인 IP 주소로 다수의 서버를 운영하는 경우

 

Iptables의 구조

iptable –A INPUT –s[출발지] --sport[출발지 port] –d[목적지] --dport[목적지 포트] –j[정책]

 

l  기본정책을 ACCEPT로 설정하는 법

 #iptables –P INPUT ACCEPT

 #iptables –P OUTPUT ACCEPT

 #iptables –P FORWARD ACCEPT

 

l  현재 방화벽 규칙을 확인 하는 명령

#iptables --list  or  iptables –L

 

l  규칙 추가 후에 저장하기

#service iptables save

-> /etc/sysconfig/iptables 에 저장

 

l  현재 iptables 규칙을 초기화

#iptables –F

 

 

iptables 규칙추가

 * 127.0.0.1 local에서 요청하는 모든 ICMP 패킷에 대해 무시하고자 할 때때

 - ping 요청에 사용되는 protocolICMP이며 발신 주소는 127.0.0.1

 - 패킷 필터의 목표는 DROP(폐기) 이며 사용하는 프로그램은 ping

 

 # iptables –A INPUT –s 127.0.0.1 –p icmp –j DROP

 

 

Iptables 규칙 제거

 * iptables –D INPUT –s[발송지] --sport[발송지 포드] –d[목적지] --dport[목적지 포트] –j[정책]

 * iptables –D INPUT [필터일 번호]

   - 필터링 번호는 service iptables stat를 통해 확인

참고 : iptables –F INPUT 을 입력할 경우 모든 체인이 삭제 된다.

 

#iptables –D INPUT 1

#iptalbes –D INPUT –s 127.0.0.1 –p icmp –j DROP

 

Iptables 정책 순서

l  모든 방화벽은 순차적 실행으로 먼저 등록된 부분에 대해서 효력이 유효하다

l  이것은 등록시의 순서가 매우 중요하다는 것으로 모든 입출력 패킷에 대해 거부하는 설정이 먼저 등록되면 이후에 포트를 열어도 포트가 열리지 않는다.

l  오픈 하는 정책을 먼저 반영 하고 난 이후에 거부하는 정책을 반영해야 정확한 정책설정이된다.

    

 

 

    ) SSH 통신을 위한 22port 오픈이후 다시 DROP을 수행하므로 22port 통신이 가능

    #iptables –A INPUT –p tcp --dport 22 –j ACCEPT

    #iptables –A INPUT –p tcp --dport 22:30 –j DROP

   

Iptables의 확장

 1초동안 80포트에 똑 같은 IP10번 이상의 SYN가 들어오면 드랍시킴

 (정상적인 요청이 아닌 웹서비스 공격으로 간주하여 요청패킷을 폐기시켜 등답하지 않도록한다)

#iptables –A INPUT –p tcp --dport 80 –m recent –update –seconds 1 –hitcount 10 --name HTTP –j DROP

 

iptables 활용 예

1) 소스 ip 192.168.0.111 인 접속의 모든 접속 포트를 막아라.
    # iptables -A INPUT -s 192.168.0.111 -j DROP

 

2) INPUT 사슬에 출발지 주소가 127.0.0.1(-s 127.0.0.1) icmp 프로토콜(-p icmp) 패킷을 거부(-j DROP)하는 정책을 추가(-A)하라
    # iptables -A INPUT -p icmp -s 127.0.0.1 -j DROP

 

3) INPUT 사슬에 목적지 포트가 23(--dport23) tcp 프로토콜(-p tcp) 패킷을 거부하는(-j DROP)규칙을 추가(-A) 하라.
    # iptables -A INPUT -p tcp --dport 23 -j DROP

 

4) INPUT 사슬에 목적지 포트 번호가 80(--dport 80) tcp 프로토콜(-p tcp)패킷을 받아들이는(-j ACCEPT) 규칙을 추가(-A) 하라
    # iptables -A INPUT -p tcp --dport 80 -j ACCEPT

 

5) INPUT 사슬에 목적지 포트번호가 1023번 보다 작은 모든 포트(--dport :1023) tcp프로토콜(-p tcp)패킷을 거부하는(-j DROP)규칙을 추가(-A)하라
    # iptables -A INPUT -p tcp --dport :1023 -j DROP

 

6) ftp포트를 열어라
    # iptables -I INPUT -p tcp --dport 21 -j ACCEPT

 

7) imap 서비스를 방화벽에서 열어라
    # iptables -I INPUT -s 192.168.0.0/255.255.255.0 -p udp --dport 143 -j ACCEPT

 

8) 웹서버 방화벽 열어라
    # iptables -I INPUT -p tcp --dport 80 -j ACCEPT

 

9) 웹서버 포트 80 -> 8880으로 교체하라( 웹서비스 포트 변경시 /etc/services 에서도 변경 해줘야 함)
   # iptables -R INPUT 2 -p tcp --dport 8880 -j ACCEPT

 

10) domain-access_log 파일에 있는 모든 ip의 모든 접속 포트를 막아라(DOS공격 방어시 사용)
   # cat domain-access_log |awk '{print $1}'|sort |uniq |awk '{print "iptables -A INPUT -s "$1" -j DROP"}'|/bin/bash

출처:

https://gatsbyv.tistory.com/516

https://linuxstory1.tistory.com/entry/iptables-기본-명령어-및-옵션-명령어

https://meongj-devlog.tistory.com/127

 

 

iptables.docx
0.10MB

'보안' 카테고리의 다른 글

세션 통제 20220907  (0) 2022.09.08
에러 처리 20220906  (0) 2022.09.06
중요정보 전송 20220906  (0) 2022.09.06
중요정보 저장 보안 대책 [20220905]  (0) 2022.09.05
HTTP Only 와 Secure Cookie 20220905  (0) 2022.09.05

관련글 더보기

댓글 영역