iptables 대신 nftables 사용하기
웹의 많은 공격 유형은 서버가 처리할 수 있는 한계점을 넘어서게 하는 DoS 공격을 수행하는 것입니다. 하지만 우리가 간과하고 넘어갈 수 있는 부분 중에 하나에는 iptables의 사용이 있습니다. iptables의 사용 자체를 지적하는 이유는 그 자체로 필터가 1~2개 정도에서는 괜찮지만 hashmap 등... 여러가지 필터가 쌓이고 쌓이면 점점 더 많은 병목 현상을 일으킵니다. 이미 2020년 기준으로도 nftables는 6년 전에 출시된 소프트웨어로 리눅스에서 tc와 iptables를 개선하고 통합하여 나온 netfiler 소프트웨어 방화벽 프로그램입니다. 여전히 많은 시간이 지났지만 iptables로 괜찮다고 처리하는 곳이 생각보다 많은 것 같습니다.
실제로 2017년에 redhat에서 이에 대해 벤치마킹한 기록이 있으며 nftables가 iptables 대비 훨씬 완화된 결과를 보여줍니다.
아래 그래프는 ipset을 사용하지 않고 일반적인 포트 매핑을 증가하였을 때의 벤치마킹입니다.
물론 현 시점에서 바라보아도 iptables가 더 가벼운 소프트웨어일 수 있고 이미 잘 작동하는 곳도 있지만 특히 위와 같이 컴파일 후의 성능 측정을 하였을 때 얼마나 오류가 많이 예방될 수 있는지 볼 수 있습니다. 또한 tc 명령의 통합으로 더 이상 어댑터 단의 트래픽 컨트롤을 어려운 문법으로 수행하지 않아도 된다는 장점이 있습니다.
iptables-translate 명령어로 간단히 iptables 명령을 nftables 명령으로도 변경이 가능합니다. 국내 문서가 많이 없다는 점이 아쉬워 어느 정도의 이해도가 필요하다고 생각합니다. 그래도 공식 위키(영문)에서 설명을 정말 잘 해주고 있습니다.
Docker 사용 시 주의사항
docker 사용 시에는 한 가지 사항을 주의해야 합니다. docker는 기본적으로 컨테이너를 네트워크로 분리할 때 iptables에 체인을 등록하여 분리합니다. 그렇기 때문에 nftables로 무작정 마이그레이션할 경우에는 서비스가 정상적으로 동작하지 않을 수도 있습니다. docker의 실행 스크립트를 찾아 --iptablese=false를 붙여주면 됩니다.