[리눅스도 클래식하다] 22. 리눅스 보안 방화벽-02 (iptables 설정, iptables 상태 추적, ssh 허용, ping 허용, ftp 허용)

이제 리눅스도 클래식이야!CentOS도 아니다. Ubuntu도 아니다. 데비안도 아니다.전설적인 국산 리눅스, 대히트작 한컴의 아시아낙스3 공부 내용을 공개한다. 클래식하면서도~모던하게!모던하게!※ 실습 중에 사용하는 패키지 및 툴도 클래식하게 old한 version에서 사용합니다.https://terms.naver.com/entry.naver?docId=3436181&cid=42346&categoryId=42346아시아 낫크스 아시아 시장을 목표로 한국 중국 일본 베트남의 대표적인 리눅스 업체들이 공동 개발하는 리눅스 운영 체제(OS).아시아 낫크스(Asianux)는 아시아의 관습과 문화 환경에 적합한 개발된 리눅스에서 공개 소스(opensource)로 배포된다.한국의 한글과 컴퓨터(한컴)중국의 홍기 소프트웨어(Red Flag Software), 일본의 미라클 리눅스, 베트남 비엣토 소프트웨어(Vietsoftware)회사 등이 참여한다.2004년에 중국과 일본이 공동 개발한 아시아 낫크스 1.0이 처음 배포되어 한국은 2005년에 발표된 아시아 낫크스···terms.naver.com아시아낙스 아시아 시장을 목표로 한국 중국 일본 베트남의 대표적인 리눅스 기업들이 공동 개발하는 리눅스 운영체제(OS). 아시아낙스(Asianux)는 아시아 관습과 문화 환경에 적합한 개발된 리눅스로 공개 소스(opensource)로 배포된다. 한국의 한글과컴퓨터(한컴), 중국의 홍기 소프트웨어(Red Flag Software), 일본의 미라클 리눅스, 베트남의 비엣 소프트웨어(Vietsoftware) 회사 등이 참여한다. 2004년 중국과 일본이 공동 개발한 아시아낙스 1.0이 처음 배포됐고, 한국은 2005년 발표된 아시아낙스…terms.naver.com아시아낙스 아시아 시장을 목표로 한국 중국 일본 베트남의 대표적인 리눅스 기업들이 공동 개발하는 리눅스 운영체제(OS). 아시아낙스(Asianux)는 아시아 관습과 문화 환경에 적합한 개발된 리눅스로 공개 소스(opensource)로 배포된다. 한국의 한글과컴퓨터(한컴), 중국의 홍기 소프트웨어(Red Flag Software), 일본의 미라클 리눅스, 베트남의 비엣 소프트웨어(Vietsoftware) 회사 등이 참여한다. 2004년 중국과 일본이 공동 개발한 아시아낙스 1.0이 처음 배포됐고, 한국은 2005년 발표된 아시아낙스…terms.naver.com아시아낙스 아시아 시장을 목표로 한국 중국 일본 베트남의 대표적인 리눅스 기업들이 공동 개발하는 리눅스 운영체제(OS). 아시아낙스(Asianux)는 아시아 관습과 문화 환경에 적합한 개발된 리눅스로 공개 소스(opensource)로 배포된다. 한국의 한글과컴퓨터(한컴), 중국의 홍기 소프트웨어(Red Flag Software), 일본의 미라클 리눅스, 베트남의 비엣 소프트웨어(Vietsoftware) 회사 등이 참여한다. 2004년 중국과 일본이 공동 개발한 아시아낙스 1.0이 처음 배포됐고, 한국은 2005년 발표된 아시아낙스…terms.naver.comiptables 기본 정책 설정iptables 기본 정책 설정•기본 정책(Default Policy) 설정 – 모두 거부하고 특정 서비스만 허용하는 방법 – 모두 허용하고 특정 서비스만 거부하는 방법 – 대부분 첫 번째 방법을 사용하며, 이 방법이 보안 관점에서도 보다 안정적이다.- Default policy는 ACCEPT, DROP 중 하나이다.- 기본정책을 위와 같이 모두 거부한다.•Ping 테스트 – 위와 같은 메시지를 확인할 수 있음.- 다 막아놨기 때문이다.- 이후 특정 서비스만 허용하면 된다.•Ping 테스트 – 위와 같은 메시지를 확인할 수 있음.- 다 막아놨기 때문이다.- 이후 특정 서비스만 허용하면 된다.iptablestcp-flags 블록 (실습과정-01)•비정상적인 tcp-flags 차단 테스트-공격자는 서버에 공격하기 위해 비정상적인 TCP flag를 조작하여 보낸다. 이를 방지하기 위해 tcp-flags를 차단하는 방법을 실습하려고 한다.•비정상적인 tcp-flags 차단(테스트를 위해 스캔)-위는 차단하기 전에 nmap으로 스캐닝한 결과다. 상기와 같이 스캐닝이 정상화됨을 확인할 수 있다. 스캐닝은 비정상적인 플래그를 보내 포트 등 각종 정보를 스캐닝한다.·비정상적인 tcp-flags차단-tcp-flags는 space를 기준으로 왼쪽과 오른쪽의 비트를 구분한다.-왼쪽은 보비트이고 오른쪽은 왼쪽의 비트 중에서 해당 비트가 있는지를 조사할 부분이다.왼쪽의 비트를 모두 조사하고 오른쪽의 비트가 모두 있으면 매칭 되는 것이다, 왼쪽에서 언급되지 않은 비트는 있는지 없는지 상관 없이.또 왼쪽의 비트에 정의되어 있는데, 오른쪽의 비트에 아니면 해당 비트는 꼭 있어서는 안 된다.-각각의 비트가 여러개 있을 경우”,”구분.-위의 규칙은 ACK, FIN의 2개의 플래그를 보고 다만 FIN만 설정되어 있고 ACK이 없는 패킷을 차단한다.ACK없이 FIN만 설정된 패킷은 이상한 패킷이다.•위에는 모든 (ALL) 플래그를 보고 아무런 비트(NONE)도 설정되지 않은 패킷을 차단한다.•왼쪽 SYN, FIN 부분을 보고 오른쪽과 같이 SYN과 FIN 둘 다 설정되어 있을 경우 차단한다.•왼쪽 SYN, FIN 부분을 보고 오른쪽과 같이 SYN과 FIN 둘 다 설정되어 있을 경우 차단한다.iptablestcp-flags 블록 (실습과정-02)·SYN/FIN비트-SYN패킷은 접속을 시작하는 플래그로 FIN는 접속을 종료하는 플래그이다.-하나의 패킷에 SYN과 FIN비트가 함께 지정되고 있다는 것은 정상적인 패킷에서는 있을 수 없는 이상한 패킷이다.·SIN/fIN을 자주 사용하는 이유-일부의 옛 버전인 방화벽 등 보안 기기의 경우 SYN/FIN비트가 함께 설정된 패킷을 적절히 처리할 수 없는 경우가 많다.-몇몇 시스템에서는 SYN/FIN에 대한 로그가 남지 않기 때문이다.•Tcp-flags를 차단한 후 테스트-방화벽을 설정한 후 다시 nmap 명령어를 이용하여 스캐닝을 시도하였다.- 상기와 같이 작동이 정상적으로 되지 않음을 확인할 수 있다.iptables 상태 추적 설정iptables 상태 추적 설정iptables 상태 추적 – 01• 상태 추적-상태 추적을 사용하면 이미 설정된 규칙에 따라 허용된 트래픽의 경우 이어서 전송되는 모든 패킷을 다시 첫 번째 규칙부터 검사할 필요 없이 바로 허용할 수 있다. 이것이 상태 추적의 가장 큰 이점이다.• 상태 추적 설정 – 위의 두 줄을 규칙 설정 앞부분에 선언함으로써 규칙이 간단해지고 성능도 향상될 수 있다. – 우선 매칭되는 룰이 적용되고 DROP나 REJECT, ACCEPT 등으로 매칭되면 더 이상 위 룰에 대해 체크하지 않고 바로 끝난다.- 출입하는 패킷에 대해서 ESTABLISE HD, RELATED를 설정했다. 이것은 최초 접속이 아니라 접속된 후의 상태이다.• 상태 추적 설정 – 위의 두 줄을 규칙 설정 앞부분에 선언함으로써 규칙이 간단해지고 성능도 향상될 수 있다. – 우선 매칭되는 룰이 적용되고 DROP나 REJECT, ACCEPT 등으로 매칭되면 더 이상 위 룰에 대해 체크하지 않고 바로 끝난다.- 출입하는 패킷에 대해서 ESTABLISE HD, RELATED를 설정했다. 이것은 최초 접속이 아니라 접속된 후의 상태이다.iptables 소스 주소로 필터링 (학습과정-01)• 소스 주소로 필터링-source, destination address 필터링하기-인터넷에서 존재할 수 없는 비정상적인 소스 IP를 필터링한다. IP 주소를 위조하는 서비스 거부 공격 등에 대비할 수 있다.•방화벽 자기 자신을 소스로 하는 IP-인터넷에 연결된 방화벽 외부 인터페이스를 통해 방화벽에 할당된 공인 IP를 소스 주소로 방화벽에 들어오는 트래픽은 위조된 트래픽이다.- “land attack”: 소스 IP를 대상 시스템 IP로 위조한 패킷과 목적지 IP가 동일한 패킷을 전송하고 시스템 내에서 무한 루프가 돌아가 시스템을 마비시키는 공격•사설 IP의 경우-사설 IP 주소는 특별한 목적으로 사용될 뿐 공인 네트워크인 인터넷에서는 라우팅할 수 없기 때문에 상기와 같이 사설 IP 주소를 소스로 들어오는 트래픽은 위조된 트래픽이므로 차단되어야 한다.- 위에는 A, B, C, D클래스 IP 대역을 차단하는 설정이다.•사설 IP의 경우-사설 IP 주소는 특별한 목적으로 사용될 뿐 공인 네트워크인 인터넷에서는 라우팅할 수 없기 때문에 상기와 같이 사설 IP 주소를 소스로 들어오는 트래픽은 위조된 트래픽이므로 차단되어야 한다.- 위에는 A, B, C, D클래스 IP 대역을 차단하는 설정이다.iptables 소스 주소로 필터링 (학습과정-02)iptables 소스 주소로 필터링 (학습과정-02)•루프백 IP주소-루프백 IP주소는 내부의 루프백 인터페이스를 통해서만 통신하기 때문에 루프백 어드레스를 소스로 하여 외부 네트워크를 통해서 들어오는 트래픽은 위조된 트래픽이다. 웜 바이러스의 경우, 127.0.0.1 를 소스로서 공격하는 경우도 있다. – 상기와 같이 127.0.0 대역을 막는다.·기타 예약된 IP대역-특별한 어머니적으로 사전에 예약하는 IP대역이 있다.이런 IP는 아직도 할당되지 않아 인터넷에서 루팅 할 수 없다.-0.0.0.0/8,248.0.0/5은 예약된 IP대역이며 169.254.0.0/16은 DHCP등에서 IP배정 전인에 일시적으로 사용하는 Link Local Network, 192.2/2/4는 TEST_NET대역이다.-이들의 IP는 이처럼 거부한다.•기타 예약된 IP 대역-특별한 모적으로 미리 예약해 놓은 IP 대역이 있다. 이러한 IP는 아직 할당되지 않았기 때문에 인터넷에서 라우팅될 수 없다. – 0.0.0.0/8, 248.0.0/5는 예약된 IP 대역이며, 169.254.0.0/16은 DHCP 등으로 IP 할당 전에 일시적으로 사용하는 Link Local Network, 192.2/2/4는 TEST_NET 대역이다.- 이러한 IP는 상기와 같이 거부해 둔다.iptablesternet 서비스 허가(학습과정-01)•telnet 서비스 허용 실습•telnet 서비스 23번 포트 허용 – 텔넷 서비스를 허용하기 위해 상기 명령어로 방화벽을 설정하였다. – tcp인 프로토콜을 텔넷 포트인 23번 포트를 허용했는데 텔넷으로 테스트한 결과 접속이 안된다.•telnet 서비스 포트 확인 – 위와 같이 “netstat” 명령으로 열린 포트를 확인한 결과 telnet은 23번 포트만 사용하는 것이 아니라 50950~포트도 사용하고 있었다. 접속할 때마다 자 프로세스처럼 50951, 50952 순으로 포트가 열리는 것을 확인할 수 있었다.•telnet 서비스 포트 확인 – 위와 같이 “netstat” 명령으로 열린 포트를 확인한 결과 telnet은 23번 포트만 사용하는 것이 아니라 50950~포트도 사용하고 있었다. 접속할 때마다 자 프로세스처럼 50951, 50952 순으로 포트가 열리는 것을 확인할 수 있었다.iptablesternet 서비스 허가(학습과정-02)iptablesternet 서비스 허가(학습과정-02)•iptables→telnet 서비스 허가 – 상기와 같이 INPUT(착신 패킷)에 관해 소스 IP(192.168.237.0/24) 대역에 있는 23번 포트(텔넷), 1024~포트를 허가하였다.- OUTPUT 역시 허용했다.•iptables 설정 후 외부 환경에서 telnet으로 테스트한 결과 정상적으로 접근할 수 있음을 확인할 수 있었다.•iptables 설정 후 외부 환경에서 telnet으로 테스트한 결과 정상적으로 접근할 수 있음을 확인할 수 있었다.iptablesssh 서비스 허용(학습과정-01)•iptables→ssh 서비스 허용 실습•ssh(22) 서비스 허가-ssh 서버도 텔넷과 마찬가지로 iptables에 관련 포트를 허가했다.- 22번 포트와 1024 이후 포트를 모두 허용했다.•iptables 설정 후 외부 환경에서 ssh로 테스트한 결과 정상적으로 접근할 수 있음을 확인할 수 있었다.•iptables 설정 후 외부 환경에서 ssh로 테스트한 결과 정상적으로 접근할 수 있음을 확인할 수 있었다.iptablesssh 서비스 허용(학습과정-02)iptablesssh 서비스 허용(학습과정-02)•상태추적 ssh 허용-방화벽에 장점인 상태추적을 이용하여 ssh를 허용하였다.- – OUTPUT に (!–syn) 는 요청 (syn)에 대한 응답 (syn+ack) 그래서 syn 패킷이 아니면 설정.- INPUT에 NEW, ESTABLISHED는 처음 접속하기 때문이고 OUTPUT에 ESTABLISHED는 접속 후 대상측으로 나오는 경우이므로 상기와 같이 설정하였다.•iptables 설정 후 외부 환경에서 ssh로 테스트한 결과 정상적으로 접근할 수 있음을 확인할 수 있었다.•iptables 설정 후 외부 환경에서 ssh로 테스트한 결과 정상적으로 접근할 수 있음을 확인할 수 있었다.iptables ftp 서비스 허가•ftp 서비스 허용-ftp는 Active 모드와 Passive 모드가 있기 때문에 각각 설정도 다르다.- ftp는 데이터 포트와 command 포트로 2개의 포트를 사용한다.접속시 사용하는 21번 포트 데이터 전송시 사용되는 20번 혹은 1024 이후 포트.•상기와 같이 방화벽에 막혀 접속할 수 없음을 확인할 수 있다.•상기와 같이 방화벽에 막혀 접속할 수 없음을 확인할 수 있다.iptables ftp 서비스 허가•ftp Active 모드 – 클라이언트에서 서버의 21번 포트에 연결(클라이언트가 사용하는 두 번째 포트를 알려준다.) – 서버는 “ack”으로 응답한다. – 서버의 20번 포트는 클라이언트가 알려준 두 번째 포트에 접속을 시도한다.- 클라이언트는 “ack”으로 응답한다.-ftp는 “서버가 클라이언트에 접속을 시도한다” 따라서 클라이언트 PC의 방화벽이나 라우터 등이 있으면 접속할 수 없는 문제가 있다.•Passive 모드 – 서버가 클라이언트에 접속하고자 하는 비정상적인 active 모드와 관련된 문제를 해결하기 위한 모드. – 클라이언트가 command 포트에 접속하려고 하면 서버에서는 서버가 사용하는 두 번째 포트를 알려준다.- 클라이언트는 다른 포트를 열고 서버가 통지한 포트에 접속하려고 한다 – 서버는 ACK로 응답한다. – 두 번째 데이터 포트로 1024 이후의 임의의 포트를 사용한다.•Passive 모드 – 서버가 클라이언트에 접속하고자 하는 비정상적인 active 모드와 관련된 문제를 해결하기 위한 모드. – 클라이언트가 command 포트에 접속하려고 하면 서버에서는 서버가 사용하는 두 번째 포트를 알려준다.- 클라이언트는 다른 포트를 열고 서버가 통지한 포트에 접속하려고 한다 – 서버는 ACK로 응답한다. – 두 번째 데이터 포트로 1024 이후의 임의의 포트를 사용한다.iptables ftp 서비스 허용(실습과정-01)iptables ftp 서비스 허용(실습과정-01)·Active모드 접속 확인-ftp명령에 “d”(debug)옵션을 부여하고 실행한다.-PORT 127,0,0,1,212,19부분은 클라이언트가 서버에 자신의 2번째 포트를 알리는 부분이다.-의미는 클라이언트 ip은 127.0.0.1이며 2번째로 사용 하는 포토는(212 x 256+19)번이라는 것이다.-그 아래의 200PORT command successful은 서버가 클라이언트에 수신을 확인한 것이다.•Active 모드 허용-위와 같이 21번 포트와 20번 포트를 허용한다. – 데이터 교환 시 OUTPUT을 RELATED를 사용한다. 21번 포트의 작동을 통해 주고받은 포트 정보와 연동하기 위해 RELATED를 사용한다. 기존의 포트 정보와도 다르기 때문에 ESTABLISHED는 아니다.•Active 모드 접속 확인- 위와 같이 ftp가 정상적으로 접속되는 것을 확인할 수 있었다.•Active 모드 접속 확인- 위와 같이 ftp가 정상적으로 접속되는 것을 확인할 수 있었다.iptables ftp 서비스 허용(실습과정-02)iptables ftp 서비스 허용(실습과정-02)•”passive” 접속확인-ftp-d 옵션을 주어 접속을 한다.- Dir 착려와 동시에 서버에서 127.0.0.1.117.5라고 응답하는 부분이다.•”passive” 모드 허용 – 접속 요청 부분은 active 모드와 같다. – 데이터 전송 부분에서 1024 이후의 부분을 허용하며, active 모드와 마찬가지로 21번 포트의 통신을 통해 주고받은 포트 정보와 관련되어 있으므로 NEW 대신 RELATED를 사용한다.•”passive” 모드 접속 확인•”passive” 모드 접속 확인iptablesimp 트래픽 허용iptablesimp 트래픽 허용•ICMP(Internet Control Message Protocol) 트래픽 허용-ICMP는 포트를 사용하지 않고 icmp-type과 code를 사용한다.- 위에는 ping 테스트를 할 수 없는 것을 확인했다.•ping 허용-OUTPUT 트래픽에서 ping 요청에 해당하는 icmp를 허용하였다.– ‘-p ICMP-icmp-type echo-request’ 형식으로 icmp-type으로 좀 더 상세하게 허용할 수도 있다.•iptables 설정 후 외부 환경에서 ping 테스트한 결과 정상적으로 icmp 패킷이 전달되는 것으로 나타났다.•iptables 설정 후 외부 환경에서 ping 테스트한 결과 정상적으로 icmp 패킷이 전달되는 것으로 나타났다.•iptables 설정 후 외부 환경에서 ping 테스트한 결과 정상적으로 icmp 패킷이 전달되는 것으로 나타났다.