2016년 4월 21일 목요일

호스트 기반 침입차단(iptables) [출처] 호스트 기반 침입차단(iptables)|작성자 만이

[출처 : http://blog.naver.com/ ]

번역하기 전용뷰어 보기


#service iptables status
-> 방화벽을 설정하지 않았으므로 실행이 정지상태이다.

#setup
-> 방화벽을 Enable로 바꿔서 실행시킨다





[방화벽 기초]

#iptables -L
-> Filter 테이블의 내용을 보여준다. -L 옵션은 방화벽에 설정된 규칙의 목록을 보여주는 옵션이다.

#iptables -F
-> -F 옵션은 기존설정을 제거한다. 즉, 방화벽에 설정된 규칙을 모두 제거한다.

table name : -t filter, -t nat, -t mangle
chain name : -A(Append), -D(Drop), -I(Insert)를 의미
layer object : -s 192.168.x.10(출발지 주소를 의미)
                        -d 192.168.x.20(목적지 주소를 의미)
                        -p는 프로토콜 지정, --dport는 도착지 Port(예: -p -tcp --dport 80)
                        -ACCEPT(접근 허락), -DROP(접근거부), -REJECT(접근거부), -LOG(log를 남김)

[Fedora]
-> 방화벽 설정을 모두 제거했으므로 접속이 된다.


예제 1> Fedora에서 Cent로 접속이 되지 않도록 하라.
[Cent]
#iptables -t filter -A INPUT -s 192.168.77.20 -j DROP

-> 접속이 차단되어 있다.

그러나 xp의 ip는 차단이 안되었기 때문에 통신이 된다.




#iptables -A INPUT -t filter -s 192.168.77.1 -j REJECT
-> DROP과의 차이점을 보자.
REJECT는 응답의 부하를 악용한 도스공격에 노출되게 된다. 그러므로 사용하기에 적합하지 않다.



예제 2> Cent에서 Fedora의 특정 서비스(telnet) 접속만 차단하라.
[Cent]
#iptables -F
#iptables -t filter -A INPUT -s 192.168.77.20 -p tcp --dport 23 -j DROP
#iptables -L

[Fedora]
#ping 192.168.77.10 : 접속 O
#telnet 192.168.77.10 : 접속 X
#ssh apple@192.168.77.10 : 접속 O





[방화벽 설정 저장/복구]

#iptables-save > firewall.rule
-> 설정파일로 저장
#iptables-restore < firewall.rule
-> 설정파일 불러오기
#service iptables restart
-> firewall rule 설정이 초기화된다.

 
#vi /etc/sysconfig/iptables-config
-> 최근의 방화벽 rule 설정으로 재시작해도 사용하고 싶으면 파일 수정을 하면 가능하다.
     이렇게 되면 재부팅이나 재시작해도 rule 설정이 초기화 되지 않는다.







[방화벽 기초 연결 설정]

#iptables -nL
-> 숫자 형태로 화면에 출력한다.
#iptables -L --line-numbers
-> rule의 순서를 확인할 수 있다.
#iptables -L -v
-> 자세한 정보 출력. 패킷의 크기 및 룰 등을 보여준다.

#iptables -A INPUT ~~~
-> INPUT chain의 맨 끝에 rule이 추가된다..
#iptables -I INPUT 1 ~~~
-> INPUT chain의 첫번째에 rule이 삽입된다.(rule은 순차적으로 적용되기에 순서가 매우 중요하다)
#iptables -D INPUT 2
-> INPUT chain의 두번째 rule을 삭제한다.
#iptables -R INPUT 2 ~~~
-> INPUT chain의 두번째 rule을 해당 설정으로 수정한다.

#iptables -N EXTRANET
-> EXTRANET이라는 이름의 chain을 생성한다.
#iptables -E A B
-> A chain의 이름을 B으로 변경한다.
#iptables -X EXTRANET
-> EXTRANET chain을 삭제한다.
    그러나 EXTRANET chain에 링크가 걸려있다면!!!
    1. 링크가 걸려있는 rule을 먼저 삭제(예 : #iptables -D INPUT 3)
    2. EXTRANET chain의 rule을 모두 삭제(예 : #iptables -D EXTRANET 1)
    3. EXTRANET chain을 삭제한다.(#iptables -X EXTRANET)


다음과 같이 방화벽 rule이 설정이 되어있다고 가정하자.
사용자 chain인 EXTRANET을 INPUT chain에 연결했다.(#iptables -I INPUT 2 -j EXTRANET)


xp(192.168.77.1)에서 접속을 하게 되면 접속이 안된다.
왜냐하면 rule은 순서가 중요하기 때문에 2번째 rule에 모두 DROP(접속 거부)를 해놓았기 때문에
그 밑에 ACCEPT로 telnet 포트를 열어놓아도 접속이 되지 않된다.
그러므로 xp에서 telnet 포트만 열어놓고 모든 포트를 막으려면 ACCEPT chain이 EXTRANET chain보다 순서가 위에 있어야한다.


예제 3> Fedora에서 Cent로 ssh, ftp는 허용, telnet, web접속은 차단하라
#iptables -F
#iptables -A INPUT -s 192.168.77.20 -p tcp --dport 23 -j DROP
#iptables -A INPUT -s 192.168.77.20 -p tcp --dport 80 -j DROP

왜 허용 설정을 안할까???
--> INPUT chain의 기본 설정이 ACCEPT로 되어있기때문에 차단할 포트만 막아버리면 나머지는 자동으로 허용이 된다.
     그러나 만약 INPUT chain 기본 설정이 DROP으로 되어있으면 허용할 포트만 설정하면 나머지는 자동으로 차단이 된다.
     (#iptables -P INPUT DROP : INPUT chain의 기본 감시 정책을 DROP으로 설정)


기본정책을 DROP으로 설정한 예)
#iptables -P INPUT DROP
#iptables -P OUTPUT DROP
#iptables -F
#iptables -A INPUT -s 192.168.77.1 -p tcp --dport 23 -j ACCEPT

- 이제 xp에서 Cent에 접속 시도해보면 접속이 안된다. 기본정책이 DROP이면 상태추적기능을 사용해야한다.
#iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  - RELATED : 제어를 당한 포트에 대한 응답 허가 설정



예제 4> Cent에 외부의 모든 컴퓨터에 ICMP(ping)에 응답하지 못하도록 설정하고 자기 자신또한 외부로
ping 테스트를 하지 못하도록 설정하라.
#iptables -P INPUT ACCEPT
#iptables -P OUTPUT ACCEPT
#iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
-> 외부로 ping이 못 나가게 설정. echo-request를 숫자 8로 설정도 가능하다.
#iptables -A OUTPUT -p icmp --icmp-type echo-reply -j DROP
-> 외부로부터 ping이 못 들어오게 설정. echo-reply를 숫자 0으로도 설정 가능하다.


* Multiport를 이용
#iptables -P INPUT DROP
#iptables -I INPUT 1 -s 192.168.77.1 -p tcp -m multiport --dport 80,22,23 -j ACCEPT
-> HTTP,SSH,TELNET 포트만 허용
#iptables -I INPUT 1 -p tcp -m multiport --dport 20:80 -j ACCEPT
-> 20~80번 포트만 허가하는 설정

* MAC Address Filtering
IP주소는 쉽게 위조가 가능하다. 왜냐하면 IP주소를 바꿔도 IP주소를 바꾸면 해킹이 가능하므로
MAC의 주소를 바꾸는것이 좋다. MAC의 주소는 위조가 어렵기 때문이다.

[Cent]
#iptables -F
#iptables -P OUTPUT DROP
#iptables -P INPUT DROP
#iptables -A INPUT -s 192.168.77.20 -j ACCEPT
#iptables -A OUTPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

[Fedora]
#ping 192.168.77.10 : 접속 O
#ifconfig eth0 192.168.77.120 up && route add default gw 192.168.77.2
-> ip address를 수정하고 다시 접속하면 접속이 안되는것을 확인가능하다.
    그래서 MAC 주소를 차단해보자
#ifconfig

[Cent]
#iptables -R INPUT 1 -m mac --mac-source <Fedora의 HWaddr> -j ACCEPT
-> Fedora의 MAC 주소를 허용

[Fedora]
#ping 192.168.77.10 : 접속 0




[방화벽 로그파일]

#vi /etc/syslog.conf

3행 -> kern.*           /var/log/firewall : 제일 처음에 설정되어 있어야 log가 남는다. 다른 log설정보다 우선시되야한다.

#service syslog restart
#cat /var/log/firewall
-> 로그를 처음 설정했다면 로그정보가 없을것이다. 로그발생을 위해 일련의 작업을 해보자
#iptables -I INPUT -p tcp -m multiport --dport 21,22,23,80 -j LOG --log--prefix
  "unknown port attempt..."
#watch tail -5 /var/log/firewall
-> 로그 실시간 확인

[xp]
Cent로 접속을 해본다.(http://192.168.77.10).



댓글 없음:

댓글 쓰기