2008. 7. 8. 12:27

linux - 침입차단 , 하이브리드(hybrid)

- 대부분의 firewall 채택방식
- application + packet filtering 방식 혼합
- 사용자 편의성과 기업환경에 따른 유연성 있게 방화벽을 구성할 수 있지만 관리가 복잡하다.

설치 확인

[root@fedora ~]# cd /boot && ls -l

-rw-r--r-- 1 root root   64551 11월 12  2007 config-2.6.18-53.el5
[root@fedora boot]# vi config-2.6.18-53.el5     // config -2.~~~ 커널종류에따라 다르게 표시될것이다.

/NETFILTER
확인
CONFIG_NETFILTER=y                          ( m은 모듈 형태, y는 커널형태)
CONFIG_IP_NF_CONNTRACK=m     (steteful과 같은것으로 상태 추적)

# service iptables status
Firewall is stopped.
# lsmod                              // 현재 모듈과 사이즈등을 보여준다.            
                                          // 정지 상태였기 때문에 iptables가 보여지지 않을것이다.

Netfileter는 리눅스 커널에 포함된 방화벽 프로그램이며 iptables는 방화벽 관리 프로그램이다.




netfilter 프로그램 (iptables)

3개의 기본 테이블로 구성된다. ( filter , nat, mangle)
각 테이블은 chain(패킷 이동통로)로 구성되며, 각 chain에 rule을 설정하게 된다.


mangle : 패킷 속성 변경
NAT     : 사설 ip => 공인 ip
Filter    : 패킷의 허용/차단, 패킷의 필터링(기본_)

룰테이블
Filter
            INPUT - source    와 destination으로 따질때      destination이 나일때 S-> D로
            OUTPUT  - INPUT의 반대상황
            FORWARD - 지나치는 ㅡㅡㅋ
NAT
            POSTROUTING - 사설 - > 공인ip
            PREROUTING - 외부에서 내부로 사설ip로 접속시
            OUTPUT
mangle
            ALL

# iptables -L -t filter
# iptables -L -t nat
# iptables -L -t mangle
           
-------------------------------------------------------------------------------------------------
[root@fedora boot]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0C:29:25:E1:23 
          inet addr:192.168.10.10  Bcast:192.168.10.255  Mask:255.255.255.0
에서 192.168.10.20의 텔넷 접속 차단할 시

layer 3에서
-s 192.168.10.20
# iptables -A INPUT -s 192.168.10.20 -j DORP   


layer 4에서
-p tcp --dport 80        /  -p udp --sport 123
# iptables -A INPUT -s 192.168.10.20 -p tcp --dport 23 -j REJECT

기본 테이블이 filter 라 생략 하면 -t filter가 되어있는것
-p 프로토콜  --ssport 출발지, --dport 목적지
-j 는 jump target처리할
DROP 패킷 버림
REJEXCT 접속 거부하면서 메시지 리턴
ACCEPT 통과


saving /restoring

백업
# rpm -ql iptables | less
# iptables-save > firewall.rule                     : 설정내용을 파일로 저장

복구
# iptables-restore < firewall.rule                 : 파일에서 설정정보로 업!

# cd /etc/sysconfig/
# cat iptables    // 없을 수가 있는데 이때는 딴시스템? 에서 얻어오자 ex. centos에서  # scp iptables root@192.168.10.10
                         //이 파일은 iptables 서비스가 시작할때 읽어 오게 되는데 이것이 없으면 서비스 시작이 안된다.
# service iptables restart / stop / reload / start

iptables에 관련된 설정파일을 보자
iptables -F
service iptables restart  를 해보면 이전에 설정 작업 외에 iptables에 저장된 파일로 재수정 되는것을 볼 수 있다.
이를 피하기 위해서는 아래의 작업이 필요하다.

# vi /etc/sysconfig/iptables-config
사용자 삽입 이미지
그림에서 표시한 두 줄의 "no" -> "yes" 로 바꾸면 된다. 그럼 재시작이나 재부팅 해도 여전히 살아있다.


룰 생성 / 삭제 / 교체
----------------------------------------------------------------------------------------------
# iptables -I INPUT -s 192.168.10.30 -j DROP                / /기본적으로 최상위 추가됨
# iptables -A INPUT -s 192.168.10.30 -p tcp --dport 23 -j ACCEPT
# iptables -L                   // 두개의 룰이 보인다.
# iptables -D INPUT 2                   // 두번째 룰을 지운다
# iptables -F                // 플러쉬 전체 지움
# iptables -A INPUT -s 192.168.10.30 -p tcp --dport 23 -j ACCEPT
# iptables -R INPUT 1 -s 192.168.10.30 -p tcp --dport 23 -j DROP                // 교체
----------------------------------------------------------------------------------------------


사용자 체인 생성
----------------------------------------------------------------------------------------------
# iptables -Z INPUT
# iptables -N INTRANET                                            // 사용자 정의 체인 생성
# iptables -E INTRANET EXTRANET                             // 체인명 변경
# iptables -I INPUT 2 -j EXTRANET                           // 사용자 체인을 기본 INPUT 체인에 연결

이때 주의할 점은 체인 삭제시에 체인 속에 룰이 포함되어 있다면  룰부터 제거 후 거꾸로 삭제해 나가야 한다.
# iptables -D INPUT #    ( rule ofextranet)
# iptables -D EXTRANET #        ( EXTRANET의 모든 룰 삭제)
# iptables -X EXTRANET                                             // 체인 삭제
----------------------------------------------------------------------------------------------


접속 상태에 따른 패킷 필터링
----------------------------------------------------------------------------------------------
-m state -- state {NEW, ESTABLISHED, RELATED, INVALID]}

NEW : 새롭게 맺어진 경우
ESTABLISHED : 연결시도 후 server에서 응답하여 이미 연결 된상태
RELATED : 새롭게 연결을 시작하려 하나 이미 연결 추적 테이블에 접속과 관련 있는 항목이 있는 경우
                    즉 FTP같이 제어포트와 데이터 포트가 별도로 존재할때 , 접속해제와 데이터 포트가 다르다.
INVALID : 연결 상태 알 수 없거나 잘못된 헤더인 경우
----------------------------------------------------------------------------------------------

# iptables -A INPUT -s ! 192.168.10.20 -j DORP            ' ! ' 를 제외한 모든것은 드랍

ICMP 설정
----------------------------------------------------------------------------------------------
# iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
# iptables -A OUTPUT -p icmp --icmp-type echo-reply -j DROP
icmp echo request , reply 응답 드랍
----------------------------------------------------------------------------------------------


multiple choice   && MAC addre filtering
----------------------------------------------------------------------------------------------
iptables -A INPUT -s 192.168.1.1 -p tcp --dport 24 -j ACCEPT
iptables -A INPUT -s 192.168.1.1 -p tcp --dport 25 -j ACCEPT
iptables -A INPUT -s 192.168.1.1 -p tcp --dport 26 -j ACCEPT
=>
# iptables -A INPUT -s x.x.x.x -p tcp -m multiport --dport 24,25,26 -j ACCEPT 로 할 수 있다.

-m mac --mac-source 00:00:00:00:00:00 ( mac address)로 추가 할 수 있다.
----------------------------------------------------------------------------------------------


LOG messages 남기기
----------------------------------------------------------------------------------------------
Firewall LOG는 /etc/syslog.conf 이용해서 위치를 재지정한다.
기본 값으로 /var/log/messgae 에 저장되게 되어 있다.  지정된 정보를
kern.* /var/log/firewall 로 수정후
log-prefix
--log-prefix "unknown port attemped..."
# service syslog restart
# ls /var/log
# cat /var/log/firewall
# iptables -I INPUT -p tcp -m multiport --dport 21,22,23,80 -j LOG
# iptables -I INPUT 2 -s 192.168.10.10 --dport 80 -j ACCEPT
# service httpd restart
# watch tail -3 /var/log/firewall
[ xp ]
웹으로 접속 시도 해볼것
[fedora]
# iptables -R INPUT 1 -p tcp -m multiport --dport 21.23.80 -j LOG --log-prefix  "unknown host ATTACK me"

[xp]
다시 접속 시도 해볼것

후에 log file 보면 메시지가 출력 된것을 볼 수 있다.