본문 바로가기

INFOSEC/LINUX

iptables

 

# iptables [-t 테이블 이름] [Chain 이름] [parameters 옵션] [-m 확장 모듈] [모듈 옵션] [target] [target 옵션]

- 테이블 이름은 소문자로 지정
- 옵션 생략 시 기본 값은 filter table로 지정됨

 

 

 

-  INPUT, OUTPUT, FORWARD, PREROUTING, POSTROUTING

 

 

 iptables 기본 동작


위에서부터 차례로 각 규칙에 대해 검사 수행
- 규칙과 일치하는 패킷에 대하여, 타겟에 지정된 작업을 수행
- 규칙이 일치하고 작업이 수행되면 해당 규칙의 결과에 따라 처리하고 체인에서 추가 규칙을 무시
- 패킷이 체인의 모든 규칙과 매치하지 않아 규칙의 바닥에 도달하면 정해진 기본정책(policy) 수행
     ▪ 기본 정책은 policy ACCEPT , policy DROP 으로 설정

 

• iptables 기본 정책 설정
- [root@localhost ~]# iptables -P  
     ▪ Chain : 기본정책을 설정할 Chain 지정(대문자로 지정)
     ▪ Target : ACCEPT(허용) , DROP(거부) 설정

 

 

들어오는 모든 패킷을 모두 차단

# iptables -t filter -P INPUT DROP

 

기본 INPUT 정책들을 DROP 시키면 쉘이 끊어져버린다.
모든 input에 대해 drop 시킨 후 ping test

 

 

* 핑 (icmp) 만 허용해주는 정책 추가

# iptables -t filter -A INPUT -p icmp -j ACCEPT

 

 

 

 

* tcp 22번 (SSH) 허용

# iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT

 

 

 

* 리스트 볼 때 행번호 추가

[root@localhost ~]# iptables -t filter -L --line-number

 

 

* 행 번호를 이용하여 정책 한 줄만 삭제

[root@localhost ~]# iptables -t filter -D INPUT 1

 

 

 

* http (80번 포트) 허용 추가.

( I 옵션 쓰면 제일 위로, A옵션 쓰면 제일 아래로. 행번호 지정하고 싶으면 다음처럼 I 옵션 뒤에 추가. )

 

 

-A 옵션을 써서 추가하면 제일 아래로 간다.

 

 

 iptables 설정파일
- /etc/sysconfig/iptables 파일

 

# service iptables save

를 해주면 service iptables restart 를 하더라도 초기화되지 않고 보존된다.

 

iptables-save > /root./iptables.01

현재 저장된 iptables 상태 전체를 cat으로 읽을 수 있다.

 

iptables-save > /root./iptables.01

 

 

백업했던 iptables. 파일로 원래상태로 복원시키기

 

 

 


실습 >

httpd를 virtual host 기능을 이용하여 80, 8080 포트로 서비스 하도록 설정 후

iptables 에서 -m miltiport 옵션을 이용하여 추가 후 외부에서 사용가능 하도록 하기

 

httpd 설치 후

 

//설정파일은 항상 백업해놓는 습관들이기

[root@localhost ~]# cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.bak

 

//Listen 포트 8080 추가
[root@localhost ~]# vi /etc/httpd/conf/httpd.conf 
[root@localhost ~]# service httpd restart

vi /etc/httpd/conf/httpd.conf


Virtual host

- 1개의 웹서버에서 여러개의 웹사이트를 동시에 운영

 

/var/www/80

/var/www/8080 

디렉토리 추가 하고

각 디렉토리에 index.html 파일 만들고

이런식으로 대충 html 파일 만들어 준다.

 


[root@localhost 8080]# iptables -t filter -I INPUT -p tcp -m multiport --dports 80,8080 -j ACCEPT

 

 

 

 



* 상태 추적하는 명령어

 

[root@localhost ~]# iptables -F
[root@localhost ~]# cat /proc/net/nf_conntrack
ipv4     2 unknown  2 572 src=200.200.200.254 dst=224.0.0.1 [UNREPLIED] src=224.0.0.1 dst=200.200.200.254 mark=0 secmark=0 use=2
ipv4     2 tcp      6 299 ESTABLISHED src=200.200.200.23 dst=200.200.200.148 sport=50593 dport=22 src=200.200.200.148 dst=200.200.200.23 sport=22 dport=50593 [ASSURED] mark=0 secmark=0 use=2
ipv4     2 udp      17 3 src=200.200.200.29 dst=200.200.200.255 sport=138 dport=138 [UNREPLIED] src=200.200.200.255 dst=200.200.200.29 sport=138 dport=138 mark=0 secmark=0 use=2

 

웹 접속 후에 다시 추적해보면 80번 포트로 접속한 기록을 볼 수 있다

 

 


# iptables -t filter -A INPUT -p tcp --tcp-flag ALL NONE -j LOG --log-prefix "[NULL SCAN DETECTED];"

하고

 

kali 에서

centOS 포트 열려있는지 nmap 명령어로

포트스캐닝

 

 

 

# cat /var/log/messages

포트스캐닝 한 기록이 log 에 남아있다

 

'INFOSEC > LINUX' 카테고리의 다른 글

iptables NAT  (0) 2019.10.11
iptables 실습 - linux router 이용  (0) 2019.10.11
DHCP - Relay Agent ( Helper Address )  (0) 2019.09.30
SNORT ( 2 ) - rules  (0) 2019.09.27
SNORT  (0) 2019.09.26