[go] net/http 패키지를 사용한 서버 보안 설정
이 기술 블로그 게시물에서는 Go 언어의 net/http 패키지를 사용하여 웹 서버의 보안 설정에 대해 알아보겠습니다.
TLS (Transport Layer Security) 설정
TLS는 데이터 통신 보안을 위한 프로토콜로, HTTPS 통신을 가능하게 합니다. net/http 패키지를 사용하여 서버에 TLS를 적용하려면 다음과 같이 작성할 수 있습니다.
package main
import (
"net/http"
"log"
"fmt"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello, TLS!")
})
err := http.ListenAndServeTLS(":443", "server.crt", "server.key", nil)
if err != nil {
log.Fatal("ListenAndServeTLS: ", err)
}
}
위 코드에서 server.crt
와 server.key
는 각각 서버 인증서와 비밀키 파일의 경로를 나타냅니다.
보안 헤더 설정
웹 서버의 보안을 높이기 위해 HTTP 응답 헤더에 다양한 보안 헤더를 설정할 수 있습니다. 이를 통해 XSS, Clickjacking, MIME 스니핑 등과 같은 공격을 방지할 수 있습니다.
func main() {
handler := http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("X-Content-Type-Options", "nosniff")
w.Header().Set("X-Frame-Options", "SAMEORIGIN")
w.Header().Set("X-XSS-Protection", "1; mode=block")
// ... 다른 보안 헤더 설정
})
http.ListenAndServe(":80", handler)
}
IP 및 포트 제한
특정 IP 주소나 포트를 통한 접근을 제한하여 보안을 강화할 수 있습니다.
func main() {
server := &http.Server{
Addr: ":8080",
Handler: handler,
}
// 특정 IP 주소에만 바인딩
listener, err := net.Listen("tcp", "192.168.1.100:8080")
if err != nil {
log.Fatal(err)
}
server.Serve(listener)
}
이렇게 net/http 패키지를 사용하여 웹 서버의 보안을 설정할 수 있습니다. 위 예제 코드를 참고하여 웹 서버를 더욱 안전하게 운영할 수 있습니다.