[RHEL6] 방화벽/보안 명렁어(iptables, iptables-restore, iptables-save, md5sum)
본문 바로가기
IT 이야기/Linux 명령어

[RHEL6] 방화벽/보안 명렁어(iptables, iptables-restore, iptables-save, md5sum)

by 찬찬이 아빠 2020. 1. 23.
반응형
  1. iptables(방화벽 관리 도구)

 1) 경로 : /sbin/iptables

 2) 요약 : 패킷 필터링 및 NAT를 설정

 3) 사용 방법 : iptables -[ADC] chain 상세룰 [옵션]

                        iptables -[RI] chain 룰번호 상세룰 [옵션]

                        iptables -D chain 룰번호 [옵션]

                        iptables -[LFZ] [chain] [옵션]

                        iptables -[NX] chain

                        iptables -E 이전체인명 새로운체인명

                        iptables -P chain target [옵션]

                        iptables -h

 4) 옵션

 -A chain, --append chain : 체인을 추가

 -D chain, --delete chain : 체인에서 룰을 삭제

 -D chain 룰번호, --delete chain 룰번호 : 체인 정책 중 지정한 룰 번호를 삭제. 만일 룰번호가 1이라면 체인 규칙의 첫 번째 룰을 삭제

 -I chain [룰번호], --insert cahin [룰번호] : 체인 정책에 새로운 룰을 지정한 위치(룰번호)나 맨 뒤에 삽입

 -R chain 룰번호, --replace : 체인 정책의 지정 위치(룰번호)에 있는 룰을 교체

 -L [chain], --list [chain] : 모든 체인 정책을 보거나 지정한 체인 정책을 봄

 -F [chain], --flush : 모든 체인 정책을 삭제하거나 지정한 체인 정책을 삭제

 -Z [chain], --zero : 모든 체인 정책을 비우거나 지정한 체인 정책을 비움

 -C chain, --check chain : 설정한 체인 정책을 확인

 -N chain, --new-chain : 새로운 정책을 만듦

 -X [chain], --delete-chain : 사용자가 만든 체인이나 모든 체인을 삭제

 -P chain target, --policy chain target : 지정한 체인 정책으로 체인 정책을 바꿈

 -E old-chain new-chain, --rename-chain old-chain new-chain : 체인명을 바꿈

 -p, --protocol [!] proto : 프로토콜을 지정. !는 제외의 의미

 -s, --source [!] address[/mask] : 출발지 주소를 지정. mask는 C클래스면 255.255.255.이나 24비트로 표현

 -d, --destination [!] address[/mask] : 목적지 주소를 지정

 -i, --in-interface [!] input name[+] : 수신하는 네트워크 인터페이스명을 지정. name +는 해당 이름(name)으로 시작되는 모든 인터페이스명임

 -j, --jump target : 지정하는 타켓(target)으로 건너 뜀

 -m : 지정한 매칭으로 문자열을 확장

 -n : IP주소와 포트 번호를 숫자 그대로 출력

 -o, --out-interface [!] output name[+] : 발신하는 네트워크 인터페이스명을 지정

 -v, --verbose : 상세한 정보를 출력

 --line-numbers : 룰 정책을 보여 줄 때 줄 번호도 출력

 -x, --exact : 정확한 값으로 출력

 -V, --version : 버전 정보를 출력

 

 5) 추가 설명

iptables 명령어는 netfilter 필터링 룰에 사용합니다. 대부분 기능은 커널 2.2 버전대의 ipchains 명령어와 사용법이 같고 확장성에서만 큰 차이점이 있습니다. ipchain에서 iptables로 변경된 사항들은 다음과 같습니다.

 * 미리 만들어진 체임이름(input, output, forward)이 소문자에서 대문자로 바뀜

 * -I 지시자는 외부에서 입력되는 패킷의 인터페이스만 의미하고 INPUT과 FORWARD 체인에서만 동작함. FORWARD나 OUTPUT chain은 -o로 사용

 * TCP와 UDP 포트는 --source-port, --sport(--destination-port, --dport)를 사용함. -p tcp 또는 -p udp 옵션과 함께 사용

 * TCP -y 지시자는 --syn으로 바뀌었고, -p tcp 다음에 와야 함

 * DENY target는 DROP으로 바뀜

 

lsmod 명령어로 ip_tables 모듈이 있는지 확인합니다.

# lsmod | grep iptables
ip_iptables     11692   1  iptable_filter

 

아래 예제와 같이 방화벽 설정을 할 수 있습니다.

# 삼바(139), SSH(22), 웹 서비스(80)는 외부에서 오는 모든 sun 패킷에 대해서 접근을 허용(ACCEPT)
# iptables -A INPUT -s 0/0 -d 0/0 --dport 139 -p -tcp --syn -j ACCEPT
# iptables -A INPUT -s 0/0 -d 0/0 --dport 22 -p -tcp --syn -j ACCEPT
# iptables -A INPUT -s 0/0 -d 0/0 --dport 80 -p -tcp --syn -j ACCEPT

# lo와 eth0의 인터페이스 접근을 허용
# iptables -A INPUT -s 0/0 -d 0/0 -i lo -j ACCEPT
# iptables -A INPUT -s 0/0 -d 0/0 -i teh0 -j ACCEPT

# 네임서비스를 위해 61.40.233.124와 168.126.63.1의 목적지 주소를 허용. 이 중 네임서비스는 UDP 프로토콜을 사용하므로 -p 옵션으로 UDP 패키산을 허용
# iptables -A INPUT -s 61.40.233.124 53 -d 0/0 -p udp -j ACCEPT
# iptables -A INPUT -s 168.126.63.1 53 -d 0/0 -p udp -j ACCEPT

# 모든 출발지와 목적지 주소의 TCP 패킷은 모두 버리고(DROP), UDP 프로토콜은 거부(REJECT)함. 
# 여기서 DROP 체인은 보낸 상대방이 패킷 상태를 알 수 없도록 버리지만, REJECT 체인은 상대방에게 거부했다는 메시지를 보냄
# iptables -A INPUT -s 0/0 -d 0/0 -p tcp --syn -j DROP
# iptables -A INPUT -s 0/0 -d 0/0 -p udp -j REJECT

 

모든 iptables 정책 설정은 시스템 메모리에만 있으므로, iptables-save 명령으로 설정을 파일로 저장해야 합니다.

# iptables-save > iptables_test

 

 

  2. iptables-restore(iptables 방화벽 정책 복구)

 1) 경로 : /sbin/iptables-restore

 2) 요약 : 파일을 읽어 방화벽 설정을 복구

 3) 사용 방법 : iptables-restore [옵션]

 4) 옵션

 -c, --counters : 패킷과 바이트 카운터 값들을 복구

 -n, --noflush : 기존 테이블 정보를 삭제하지 않음. 이 옵션을 사용하지 않으면 기존 방화벽 정책은 모두 지워짐

 

 5) 추가 설명

시스템 관리 명령어로서 방화벽 정책을 표준 입력 방식으로 받아서 복구합니다. iptables-save 명령어는 시스템의 방화벽 정책을 볼 수 있고, 표준 출력 방식으로 저장할 수 있습니다. 이 명령어를 시스템 초기화 스크립트에 추가하여 부팅 시에 자동으로 방화벽 정책을 불러와 사스템에 적용할 수 있습니다.

 

아래의 명령어를 그대로  /etc/rc.local 파일에 추가하면 시스템이 부팅될 때 마다 자동으로 iptables_test 방화벽 정책을 복구합니다. 물론 시스템이 운영 중인 상태에서 사용할 수 있습니다.

$ iptables-restore < iptables_test

 

 

 

  3. iptables-save(iptables 방화벽 정책 저장)

 1) 경로 : /sbin/iptables-save

 2) 요약 : 방화벽 정책을 파일에 저장

 3) 사용 방법 : iptables-save [옵션]

 4) 옵션

 -c, --counters : 패킷과 바이트 카운터 값들을 저장

 -t name, --table name : 지정된 테이블의 방화벽 정책만 저장

 

 5) 추가 설명

시스템 관리 명령어로서 커널에 저장되어 있는 IP 방화벽 정책을 표준출력합니다. 출력된 방화벽 정책은 리다이렉트하여 파일에 저장할 수 있으며 저장된 방화벽 저어책 iptables-restore를 이용해 시스템에 복구할 수 있습니다.

$ iptables-save > iptables_test

 

 

  4. md5sum(md5 체크섬)

 1) 경로 : /usr/bin/md5sum

 2) 요약 : md5 체크섬을 계산하거나 검사

 3) 사용 방법 : md5sum [옵션] [파일]

 4) 옵션

 -b, --binary : 바이너리 모드로 읽

 -c, --check : 파일에서 MD5 sum을 일고 검사함

 -t, --text : 텍스트 모드로 읽음(기본값)

 --help : 도물말을 출력

 --version : 버전 정보를 출력

 

아래 3가지 옵션은 체크섬 무결성을 확인할때 유용합니다.

 --quiet : 체크섬이 성공하더라도 OK를 출력하지 않음

 --status : success 메시지 이외에 어떤 것도 출력하지 않음

 -w, --warn : 부적절한 포맷 체크섬에 대해서는 경고 메시지를 출력

 

 5) 추가 설명

md5sum 명령어는 다운로드한 파일이나 특히, ISO 이미지 파일의 이상 유무를 확인할 경우 유용하고, 파일의 체크섬을 생성하는 경우에도 사용합니다. 체크섬이란 대상 파일을 기준으로 산술 계산으로 특정 숫자 패턴을 만들어 파일의 무결성을 확인하는 방법입니다. 특히 보안과 관련하여 시스템의 파일이 변경 혹은 손상 여부를 확인할 때 유용합니다. 아래와 같이 안드로이드 SDK 파일을 다운로드 후 무결성을 체크해 봅시다.

$ md5sum android-sdk_r06-linux_86.tgz
84499r9409349f0r3r0e34903490 android-sdk_r06-linux_86..tgz

 

http://developer.android.com/sdk/index.html에는 리눅스 SDK 파일에 다음의 정보가 있습니다. 

Platform Package Size MD5 Checksum
Linux (i386) android-sdk_r06-linux_86.tgz 16971139 bytes 848371e4bfg05943dbb43052b7094f33d0309e

 

패키지를 다운로드 후 아래와 같이 sdk 파일의 무결성을 검사 할 수 있습니다. 검사 결과 MD5 체크섬이 동일하므로 이 파일은 문제가 없습니다.

 

-c 옵션은 md5 정보 파일을 가지고 파일의 무결성을 확인할 수 있습니다.

$ md5sum -c android-sdk_r06-linux_86.md5
android-sdk_r06-linux_86.tgz: 성공

 

md5sum은 보안과 관련해 시스템 파일의 변경이나 손상 여부를 확인할 수 있습니다.

$ touch checksum
$ md5sum checksum
d412430493r90e9erf90349fe094 checksum

$ echo "chanchan.co.kr" >> checksum
$ md5sum checksum
f27a
f5
de409r09cac94c	checksum
반응형

댓글