★iptables 란?

- 커널의 ip 패킷 필터링(Packet Filtering)기능을 하는 Netfilter에 규칙을 설정하고 관리하는 도구

- 체인이라고 불리는 방향성을 가진 규칙을 연결한 테이블이다.

 

★패킷 필터링

- 네트워크를 통과하는 모든 패킷들은 패킷 헤더에 출발지와 목적지 그리고 어떤 프로토콜을 이용하는지에

관한 정보를 담고 있다. 이러한 패킷의 헤더 정보를 보고 호스트로 들어오는 (INPUT)패킷과 나가는 패킷(OUTPUT)

통과하는 패킷 (FORWARD) 패킷 등을 검사하여 (TABLE과 비교 ) 불필요한 패킷이나 잘못된 패킷을 폐기

(DROP)하고 규칙과 일치하는 패킷만 허용(ACCPECT)시키는 기능을 한다.

 

 

 

 

 

★규칙 확인 및 제거

service iptables start

chkconfig iptables on

chkconfig --list iptables

 

iptables -L       //리스트 형태로 출력

iptables -nL     //숫자로 출력

 

iptables -L --line-numbers      //라인번호 + 리스트 형태로 출력, 규칙제거시 유용!

 

iptables -S     //체인에 설정된 규칙을 명령어 형태로 출력

/etc/sysconfig/iptables와 동일

 

iptables -D [chain] [num]

 

iptables -F    //모든 규칙제거 방화벽 초기화 ssh설정 날라가고 xsehll 접속x

netstat -nltp 22  //22번 포트 열려 있음을 확인

 

★기본 정책 설정 및 데몬 관리

 

iptables-save > /etc/iptables.tmp

- 기본 설정 파일 외 다른 파일에 저장시 사용

iptables-restore < /etc/iptables.tmp

- 해당 파일의 내용으로 설정을 되돌릴시 사용

iptables-save > /root/default_policy

iptables -A [chain] -p [protocol] --[S/DPORT] [PortNum] -j [Target]

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

- 어떤 IP든 22번 포트로의 접근이 가능하도록 설정

service iptables save

- 시스템 재기동 시 자동 실행되도록 저장

 

★실습 SSH통신하기

Client-Linux로부터 SSH접속은 허용하고, Server-B와 그외 다른 호스트 및 네트워크로부터의

SSH접속은 차단한다.

iptables -A [chain] -p [protocol] --[S/DPORT] [PortNum] -j [Target]

 

★Server-B, Client-Linux

yum -y install openssh-client

service iptables stop

 

★Server-A

iptables -A INPUT -p tcp -s 100.100.100.120 --dport 22 -j DROP

iptables -A INPUT -p tcp -s 100.100.100.130 --dport 22 -j ACCEPT

 

Server-B, Client-Linux

첫번째 규칙이 먼저 적용되 다 접속이 가능

 

Client-Linux

 

Server-B

 

다시 순서대로 시도

iptables -F 로 규칙 모두 삭제후 다시 순서대로 입력

iptables -A INPUT -p tcp -s 100.100.100.120 --dport 22 -j DROP

iptables -A INPUT -p tcp -s 100.100.100.130 --dport 22 -j ACCEPT

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

 

Server-B, Client-Linux

 

Client-Linux 접속 성공

 

Server-B 접속 실패

 

 

★실습1

Server-A 에서 nslookup 명령어로 Google.com IP확인하기 (DNS 53:UDP)

nslookup google.com

 

nslookup에서 ip확인이 안되 firefox에서 주소를 쳐봤더니 역시 서버 찾을수 없음 확인

 

service iptables restart

vi /etc/resolve.conf

 

iptables -A INPUT -p udp --sport 53 -j ACCEPT

nslookup google.com

 

★실습2

Server-A firefox를 이용해 네이버 접속하기

iptables -A INPUT -p tcp --sport 80 -j ACCEPT

 

 

★실습3

Client-Linux가 Server-A의 WEB 접속을 허용하도록 설정

 

Server-A

yum -y install httpd

service httpd restart

 

Client-Linux

yum -y install elinks

 

Server-A

iptables -A INPUT -p tcp -s 100.100.100.130 --dport 80 -j ACCEPT

 

Client-Linux

elinks 100.100.100.110

 

 

★iptables 응용-로그기록

-규칙에 맞는 패킷을 로그에 기록

-기본적으로 생성되는 커널 로그 파일은 /var/log/messages이며 이곳에 로그가 저장

 

★LOG타겟 사용 - 실습

Server-A

iptables -I INPUT 1 -s 100.100.100.120 -j LOG

 

Server-B

ssh 100.100.100.110

 

Server-A

tail -f /var/log/messages    //실시간으로 로그 변경 확인

Server-A 접속

 

접속을 시도하면 로그가 저장되고 있다.

 

LOG타겟 사용-실습2

Server-B 접근 시 차단하며, 차단한 기록을 로그 파일에 저장한다.

 

Server-A

iptables -I INPUT 2 -s 100.100.100.120 -j DROP

 

Server-B

ssh 100.100.100.110

 

Server-A

tail -f /var/log/messages   //실시간으로 로그 변경 확인

접속을 시도하면 접속이 불가능하다

 

★LOG타겟 사용-실습3

다른 로그 기록과 차단한 로그 기록을 구별하기 위해 차단 로그 앞에 prefix(접두사)를 붙여 관리한다.

 

Server-A

iptables -D INPUT 1  //기존 로그 규칙 삭제

iptables -I INPUT 1 -s 100.100.100.120 -j LOG --log-prefix "Dropped IP:"

- 로그에 접두사 "Dropped IP:"를 붙여서 저장이 되도록 --log-prefix 옵션 사용

 

Server-B

ssh 100.100.100.110

 

Server-A

tail -f /var/log/messages

 

접두사 와 출발지 MAC주소 확인  차단된IP 확인할수 있다

 

 

★iptables와 연결 추적 (Connection Tracking)

-서비스 연결 상태에 따라서 그연결을 감시하고 제한할수 있다.

-연결 추적 방식은 연결 상태를 저장하기 때문에, 시스템 관리자가 연결을 허용하거나 거부할수 있다.

 

 

☆tcp 프로토콜 동작이해(시험)

SYN -> ACK+SYN-> ACK 

 

 

iptables -A INPUT -p tcp -m state --state NEW --dport 22 -j  ACCEPT

- syn만 실행중 Xshell접속 안됨

 

VM에서 테스트

 

 

Server-A 접속 실패

 

 

iptables -D INPUT 6

 

Server-A xshell 접속 됨

 

★핑 테스트

ping 127.0.0.1      //자기 자신을 뜻하는 가상 인터 페이스 루프백으로 핑 테스트 -> 불가능

iptables -A INPUT -i lo -j ACCEPT

ping 127.0.0.1     //가능

 

<Server-A, Server-B>

iptables -A INPUT -p icmp --icmp-type echo-request -j ACCEPT

iptables -A INPUT -p icmp --icmp-type echo-reply -j ACCEPT

 

<Server-A> <------> <Server-B>

 

 

'Server > Linux' 카테고리의 다른 글

xshell/ 쉘 스크립트  (0) 2017.05.25
xshell/ WEB,APM,XE  (0) 2017.05.21
xshell/ PXE & KICKSTART  (0) 2017.05.15
xshell/ NFS  (0) 2017.05.14
xshell/ SAMBA  (0) 2017.05.14

+ Recent posts