2016년 4월 27일 수요일

Ubuntu 설정 파일 재 설치 방법

[ 출처 : http://rockball.tistory.com/ ]

Ubuntu Server에서 Apache 서버를 관리 Test를 하다보니 다음과 같은 문제가 발생하였습니다.
Apache2에 대한  Setting을 초기화한 후 Test를 하려고 Apache2 Package를 다음 명령어를 사용하여 삭제하였습니다.

> sudo apt-get autoremove apache2

삭제 후 살펴보니 /etc/apache2 폴더가 그대로 남아 있어 해당 폴더를 다음 명령어를 사용하여 수동 삭제 하엿습니다.

> sudo rm -rf /etc/apache2

그 다음 새로 apache2를 설치하였습니다.

> sudo apt-get install apache2

설치 후 /etc/apache2 폴더 아래를 보면 apache2.conf 파일이 없으며 설치 후 폴더만 존재하는 현상이 발생합니다.
(물론 apache2.conf파일이 없어 apache2 Service도 기동되지 않습니다.)

해당 이슈를 해결하기 위해 다음 명령어 수행이 필요합니다.

> sudo apt-get remove --purge apache2
> sudo apt-get clean
> sudo apt-get install apache2

기본적으로 debian 계열(우분투)는 설정 파일은 별도로 관리하고 있습니다.
해당 파일 삭제를 하기 위해서는 --purge 옵션을 사용한 경우에만 제거가 가능합니다.

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).



네트워크 기반 침입차단(iptables)

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





[Cent]                                                [Fedora]                                           [Win2003]
eth 0 : 192.168.10.10                          eth 0 : 10.1.1.20                                로컬 : 10.1.1.30
            255.255.255.0                                       255.255.255.0                                 255.255.255.0
            192.168.10.2                                        10.1.1.1                                            10.1.1.1
eth 1 : 10.1.1.1
            255.255.255.0


FOWARD는 통과하는 패킷에 대해 설정을 할 때 사용한다.

예졔1> XP에서 Fedora로 web, telnet 접속만 허락하는 설정을 하라.
[Cent]
#iptables -P FORWARD DROP
#iptables -A FORWARD -d 10.1.1.20 -p tcp -m multiport --dport 23,80 -j ACCEPT
#iptalbes -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

예졔2> Fedora에서 xp로 ftp만 허용하는 설정을 하라.
[Fedora]
#iptables -A FORWARD -s 10.1.1.20 -p tcp --dport 21 -j ACCEPT
#iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT


IP MASQUERADE 설정

1. POSTROUTING
   내부의 사설 IP가 라우터를 거쳐 공인 IP를 가지고 외부로 나갈 수 있는 것이며 eth0에 설정된 공인IP로 변환된다.
   - MASQUERADE target : 방화벽의 공인 IP가 유동 IP인 경우 이용한다.
                                          공인 IP를 가지고 외부로 나간다.
   - SNAT target : 방화벽의 공인 IP가 고정 IP인 경우 사용한다.
                             방화벽 자체에서 IP를 할당하여 유연하게 공인 IP를 가지고 나간다.

2. PREROUTING
   외부의 공인 IP가 라우터를 거쳐 내부 IP로 들어올수 있는 것
    - DNAT target : 목적지 주소만 변경된다.

3. OUTPUT


ㅁ POSTROUTING MASQUERADE
방화벽 eth0에 설정된 ip주소로 변환해서 나가도록 하는 것이다.


내부            -------->   eth1    -------->       eth0         --------> 외부
10.1.1.0/24               10.1.1.1                 192.168.77.10               


예제1> 내부에서 외부로 나갈때 eth0의 ip를 달고 나가는지 확인해보자
[Fedora]
#telnet 192.168.10.1 135

[xp]
C:\>netstat -apn tcp
-> Fedora의 주소가 10.1.1.20으로 접속한 것을 확인 가능하다.


[Cent]
#iptables -P FORWARD ACCEPT
#iptables -F
#iptables -A POSTROUTING -t nat -s 10.1.1.0/24 -j MASQUERADE
#iptables -nL -t nat
#telnet 192.168.77.1 135

[Fedora]
#telnet 192.168.10.1 135

[xp]
C:\>netstat -apn tcp
-> 10.1.1.20(Fedora)이 192.168.10.10:xxxxx로 ip매스커레이드 된것을 확인 가능하다.

예제2> 사용할 특정 포트를 지정해보아라.
[Cent]
#iptables -F -t nat
#iptables -A POSTROUTING -t nat -s 10.1.1.0/24 -p tcp -j MASQUERADE --to-port 3000-5000
-> 3000번 포트에서 5000번 사이의 포트를 달고 나간다.

[Fedora]
#telnet 192.168.10.1 445

[xp]
C:\>netstat -apn tcp
-> 3000-5000번 사이의 포트를 할당받아 나왔다.


ㅁ POSTROUTING SNAT
 방화벽의 eth0의 여러개의 ip를 사용하는 경우 ip중 하나를 선택해서 나가도록 하는 것이다.
 외부에서 방화벽을 통과해서 들어오려고 할때 POSTROUTING을 이용한다.

                                                 방화벽
내부         ---------->      eth1 ------>  eth0        ----------> 외부
eth0의 ip

[Cent]
#cd /etc/sysconfig/network-scripts
#cp ifcfg-eth0 ifcfg-eth0:1
#cp ifcfg-eth0 ifcfg-eth0:2
#vi ifcfg-eth0:1
-> DEVICE=eth0:1
    IPADDR=192.168.10.11
#vi ifcfg-eth0:2
-> DEVICE=eth0:2
    IPADDR=192.168.10.12
#service network restart


예제1> 내부의 컴퓨터가 xp의 135포트로 접속할 때는 192.168.10.12를 이용하고,
           나머지 모든 포트로 접속할 때는 192.168.10.11을 이용하도록 설정하라.
[Cent]
#iptables -A POSTROUTING -t nat -s 10.1.1.0/24 -d 192.168.10.1 -p tcp --dport 135 -j SNAT --to-source
  192.168.10.12
#iptables -I POSTROUTING 2 -t nat -s 10.1.1.0/24 -j SNAT --to-source 192.168.10.11

[Fedora]
#telnet 192.168.10.1 445
#telnet 192.168.10.1 135

[xp]
C:\>netstat -apn tcp
-> 해당 포트에 맞제 11번과 12번이 ip가 들어온다.



ㅁ PREROUTING
목적지 주소를 변경하려 할 때 사용한다. DNAT Target을 이용한다.

예제1> xp에서 Cent 192.168.10.10 과 192.168.10.11 의 23번 포트로 들어오는 것과 192.168.10.12의
           80번 포트로  들어오는 것을 전부 10.1.1.20으로 변환시켜라.
#iptables -A PREROUTING -t nat -d 192.168.10.10 -p tcp --dport 23 -j DNAT --to-destination 10.1.1.20
#iptables -A PREROUTING -t nat -d 192.168.10.11 -p tcp --dport 23 -j DNAT --to-destination 10.1.1.20
#iptables -A PREROUTING -t nat -d 192.168.10.12 -p tcp --dport 23 -j DNAT --to-destination 10.1.1.20


ㅁ REDIRECT target
포트를 변경 시킬 때 사용한다.

예제1> 목적지가 Fedora의 2222포트로 들어오면 Cent의 80번 포트로 변경시키는 설정을 하라.
[Cent]
#iptables -A PREROUTING -t nat -d 10.1.1.0/24 -p tcp --dport 2222 -j REDIRECT --to-ports 80

[Fedora]
#service httpd stop

[xp]
-> Fedora로 목적지가 되면 Cent방화벽에서 REDIRECT를 시켜서 Cent의 80번포트로 바꾼다.
    즉, Cent는 외부로부터 2222포트로 들어온 패킷을 Cent에서 Listen하고 있는 80번 포트로 REDIRECT한 것이다.