본문 바로가기
工夫/Linux

리눅스 - iptable

by 치세 2009. 8. 10.

보안솔루션은 Firewall → IDS → IPS 로 발전
Stateful inspection  
 1) 낮은 rule → 높은 rule
 2) 정책
'소수를 를 열고 전부를 막고' 또는 ' 소수를 막고 전부를 열고' 라는 정책
    → 즉 '막아두는 정책이던가.' '열어두는 정책이던가' 둘 중 하나이어야 한다.

NEW - 설정되어 있지 않은 것. 처음 들어오는 것으로 파악하는 것
ESTABLISHD - 통과를 설정한 것. 방어막 정책을 통과를 한 정책

INVALID - 파일이 깨어진 것들, 소스가 잘못된 것들. 반송할 필요가 없는 것들.
반송을 하게 되면 메모리 리소스를 잡아먹기 때문에 INVALID를 막아두면 반송을 하지 않고 버린다.

RELATED - ESTABLISHD 상태의 패킷이 다시 접속하기 위해서 다른 포트가 열리면서 listen 상태가 되는 것

DNS포트는 53번

Stateful inspection의 단점
메모리에 저장을 하며,
Rule 정책에 걸러지기 때문에 구체적인 상태에 대한 공격에는 취약
패킷의 내용에 따른 통제가 불가능 -3, 4, 5 계층 밖에 못 보기 때문
1~7계층 모두를 감시하고, 정책을 세운다는 것은 말은 쉽지만 상당히 어려운 것이며 속도 또한 느려진다.
⇒ NPU(Network CPU) 라는 개념을 도입 각각에 방화벽을 만들고 각각 rule를 선언해 준다.
   상당히 돈이 많이 드는 것

*** 그림들은 볼때 바로 위의 그림들과 비교를 하면서 보기를 해야 합니다.***

IpTables → ipchains
#iptables -L
#lsmod | more   → iptables에 관한 모든 것을 확인 가능


Chains : 목적을 가지고 Role 분류 저장
Table : 기능에 따라 각 chain 을 그룹화

기본 table 모듈
#iptables -t filter -L
#iptables -t nat -L
#iptables -t mangle -L → tos값과 ttl 을 조작해서 오역을 하게 할 수 있다.(ip-header에 있는 것)
ttl - time to live  
tos - type of service : 내가 사용하는 서비스 타입을 헥사코드 값으로 지정 핵사코드값을 변경해 버리면 다른 것으로 인식

#iptables -t filter -L : iptables를 확인하는 명령어

#iptables -t filter -A INPUT -j ACCEPT (허용)

#iptables -t filter -A INPUT -j REJECT

#iptables -t filter -A INPUT -j DROP (멈춤)


#iptables -t filter -A INPUT -j ACCEPT   -A(rule을 추가.)
#iptables -t filter -L
#iptables -t filter -t -n --line

삭제
#iptables -t filter -D 또는 #iptables -t filter 줄의 번호
#iptables -t filter -D -n --line  : 라인 삭제
#iptables -t filter -D INPUT 2
아래그림과 위의 그림을 비교해보면 2번 라인이 삭제 된것을 알수 있다.

초기화 하기
#iptables -t filter -F INPUT : 특정(input 부분) 초기화
#iptables -t filter -F : 전체초기화

chain 추가 하기
#iptables -t filter -N block-input  : block 이라는 chain을 만듬
#iptables -t filter -L  : 확인

#iptables -t filter -I INPUT -j block-input  :  들어오는 것을 chan chain으로 가도록 하는 것
#iptables -L

setup으로 방화벽 올리기

#setup
#iptables -L  로 확인

#more /etc/sysconfig/iptables-config
#iptables -t filter -L -n --line

chain 삭제
#iptables -t filter -X block-input  → 정책 초기화 후 -X 로 삭제, 정책이 있으면 삭제가 되지 않음


#iptables -t filter -P INPUT ACCEPT
#iptables -t filter -P IPPUT DROP
#iptables -t filter -L INPUT
기본 정책이 DROP된 것을 확인하며,
허용할 것은 허용하고 DROP하며 INPUT에서 DROP은 항상 조심

#iptables -t filer -A INPUT -s 192.168.102.0/24 -d 192.168.192.100 -j ACCEPT
-s(--source) : 출발지 , -d(--destination) : 목적지


방화벽 설정하기(만들기)
>create by mahanaim(박찬주-naver의 login café 지기)
>state less firewall  순서가 바뀌면 안된다.

#iptables -t filter -N chan-input
#iptables -t filter -A INPUT -j chan-input
#iptables -t filter -A chan-input -i lo -j ACCEPT
#iptables -t filter -A chan-input -i eth0 -j ACCEPT :랜카드에 들어오는 것을 허용 ->빼도 된다.
#iptables -t filter -A chan-input -p icmp --icmp-type any -j ACCEPT
#iptables -t filter -A chan-input -p tcp -d 210.205.237.65 --dport 80 -j ACCEPT
#iptables -t filter -A chan-input -p tcp -s 210.205.237.64/26 -d 210.205.237.65 --dport 22 -j ACCEPT
#iptables -t filter -A chan-input -p udp -d 210.205.237.65 --dport 53 -j ACCEPT
#iptables -t filter -A chan-input -p tcp -d 210.205.237.65 --dport 53 -j ACCEPT

--sport 1024:65535를 넣으면 조금 더 견고해 진다. 아래와 같다.(위와 비교)
#iptables -t filter -A chan-input -p icmp --sport 1024:65535 --icmp-type any -j ACCEPT
#iptables -t filter -A chan-input -p tcp --sport 1024:65535 -d 210.205.237.65 --dport 80 -j ACCEPT
#iptables -t filter -A chan-input -p tcp --sport 1024:65535 -s 210.205.237.64/26 -d 210.205.237.65 --dport 22 -j ACCEPT
#iptables -t filter -A chan-input -p udp --sport 1024:65535 -d 210.205.237.65 --dport 53 -j ACCEPT
#iptables -t filter -A chan-input -p tcp --sport 1024:65535 -d 210.205.237.65 --dport 53 -j ACCEPT

아래부분을 첨가 하면 port 22, 23 도 포함된다.
//#iptables -t filter -A chan-input -p udp --sport 1024:65535 -d 210.205.237.65 --dport 22 -j ACCEPT
   #iptables -t filter -A chan-input -p tcp --sport 1024:65535 -d 210.205.237.65 --dport 23 -j ACCEPT //

1)외부에서 cmd 나 터미널 환경에서 telnet 서버ip 22 telnet 서버ip 80 그리고 open되지 않은 서비스 가령 telnet 과 같은 23 으로 접속을 해보자
2) nmap을 이용하여 스켄 (P0옵션은 붙이지 않는다.)

>stateful inspection

#iptables -t filter -N chan-input
#iptables -t filter -A INPUT -j chan-input
#iptables -t filter -A chan-input -i lo -j ACCEPT
#iptables -t filter -A chan-input -i eth0 -j ACCEPT
#iptables -t filter -A chan-input -p icmp --icmp-type any -j ACCEPT

#iptables -t filter -A chan-input -m state --state ESTABLISHED.RELATED -j ACCEPT
#iptables -t filter -A chan-input -m state --state NEW -p tcp -d 210.205.237.65 --dport 80 -j ACCEPT
#iptables -t filter -A chan-input -m state --state NEW -p tcp -s 210.25.237.64 -d 210.205.237.65 --dport 22 -j ACCEPT
#iptables -t filter -A chan-input -m state --state NEW -p udp -d 210.205.237.65 --dport 53 -j ACCEPT
#iptables -t filter -A chan-input -m state --state NEW -p tcp -d 210.205.237.65 --dport 53 -j ACCEPT

위의 부분에서 port 22, 23 도 포함 시키면 아래의 명령어를 포함시켜야 한다.
// #iptables -t filter -A chan-input -m state --state NEW -p tcp --sport 1024:65535  -d 210.205.237.65 --dport 21 -j ACCEPT  //


localhost의 메인화면 설정
#/etc/rc.d/init.d/httpd restart
#cd /var/www/
#cd html/

#vi index.html

인터넷 주소창에 http://localhost를 넣으면

index.html 에 적은 것이 나타난다...

 

'工夫 > Linux' 카테고리의 다른 글

커널(kernel)  (0) 2009.10.08
리눅스 명령어  (0) 2009.10.08
리눅스 user에 관련된 것을 변경하기  (0) 2009.07.23
runlevel  (0) 2009.07.14
리눅스 부팅로더 GRUB  (0) 2009.07.14

댓글