모든 Linux 관리자가 알아야 할 25 가지 유용한 IPtable 방화벽 규칙


네트워크 트래픽 관리는 시스템 관리자가 처리해야하는 가장 어려운 작업 중 하나입니다. 그는 시스템이 공격에 취약한 상태로 두지 않고 들어오고 나가는 연결 모두에 대한 시스템 및 사용자 요구 사항을 충족하는 방식으로 방화벽을 구성해야합니다.

이것이 iptables 가 유용한 곳입니다. Iptables는 시스템 관리자가 구성 가능한 테이블 규칙 집합을 통해 들어오고 나가는 트래픽을 관리 할 수있는 Linux 명령 줄 방화벽입니다.

Iptables는 기본 제공 또는 사용자 정의 규칙 집합을 포함하는 체인이있는 테이블 집합을 사용합니다. 덕분에 시스템 관리자는 시스템의 네트워크 트래픽을 적절히 필터링 할 수 있습니다.

iptables 매뉴얼에 따라 현재 3 가지 유형의 테이블이 있습니다.

    1. FILTER – this is the default table, which contains the built in chains for:
      1. INPUT  – packages destined for local sockets
      2. FORWARD – packets routed through the system
      3. OUTPUT – packets generated locally
      1. PREROUTING – used for altering a packet as soon as it’s received
      2. OUTPUT – used for altering locally generated packets
      3. POSTROUTING – used for altering packets as they are about to go out
      1. PREROUTING – for altering incoming connections
      2. OUTPUT – for altering locally generated  packets
      3. INPUT – for incoming packets
      4. POSTROUTING – for altering packets as they are about to go out
      5. FORWARD – for packets routed through the box

      이 기사에서는 iptables를 통해 Linux 박스 방화벽을 관리하는 데 도움이되는 몇 가지 유용한 명령을 볼 수 있습니다. 이 도움말의 목적을 위해 더 간단한 명령으로 시작하여 끝까지 더 복잡한 단계로 이동하겠습니다.

      1. Iptables 방화벽 시작 / 중지 / 다시 시작

      먼저 다양한 Linux 배포에서 iptables 서비스를 관리하는 방법을 알아야합니다. "이것은 매우 쉽습니다.

      ------------ On Cent/RHEL 7 and Fedora 22+ ------------
      # systemctl start iptables
      # systemctl stop iptables
      # systemctl restart iptables
      
      ------------ On Cent/RHEL 6/5 and Fedora ------------
      # /etc/init.d/iptables start 
      # /etc/init.d/iptables stop
      # /etc/init.d/iptables restart
      

      2. 모든 IPtables 방화벽 규칙 확인

      기존 규칙을 확인하려면 다음 명령을 사용하십시오.

      # iptables -L -n -v
      

      다음과 유사한 출력이 반환되어야합니다.

      Chain INPUT (policy ACCEPT 1129K packets, 415M bytes)
       pkts bytes target prot opt in out source destination 
       0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
       0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
       0 0 ACCEPT tcp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
       0 0 ACCEPT udp -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67
      Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
       pkts bytes target prot opt in out source destination 
       0 0 ACCEPT all -- * lxcbr0 0.0.0.0/0 0.0.0.0/0 
       0 0 ACCEPT all -- lxcbr0 * 0.0.0.0/0 0.0.0.0/0
      Chain OUTPUT (policy ACCEPT 354K packets, 185M bytes)
       pkts bytes target prot opt in out source destination

      특정 테이블에 대한 규칙을 확인하려면 -t 옵션 뒤에 확인하려는 테이블을 사용할 수 있습니다. 예를 들어 NAT 테이블의 규칙을 확인하려면 다음을 사용할 수 있습니다.

      # iptables -t nat -L -v -n
      

      3. IPtables 방화벽에서 특정 IP 주소 차단

      IP 주소에서 비정상적이거나 악의적 인 활동을 발견하면 다음 규칙을 사용하여 해당 IP 주소를 차단할 수 있습니다.

      # iptables -A INPUT -s xxx.xxx.xxx.xxx -j DROP
      

      실제 IP 주소로 xxx.xxx.xxx.xxx 를 변경해야하는 곳. 실수로 자신의 IP 주소를 차단할 수 있으므로이 명령을 실행할 때 매우주의하십시오. -A 옵션은 선택한 체인의 끝에 규칙을 추가합니다.

      해당 IP 주소의 TCP 트래픽 만 차단하려는 경우 프로토콜을 지정하는 -p 옵션을 사용할 수 있습니다. 이렇게하면 명령이 다음과 같이 표시됩니다.

      # iptables -A INPUT -p tcp -s xxx.xxx.xxx.xxx -j DROP
      

      4. IPtables 방화벽에서 IP 주소 차단 해제

      특정 IP 주소의 요청을 더 이상 차단하지 않기로 결정한 경우 다음 명령을 사용하여 차단 규칙을 삭제할 수 있습니다.

      # iptables -D INPUT -s xxx.xxx.xxx.xxx -j DROP
      

      -D 옵션은 선택한 체인에서 하나 이상의 규칙을 삭제합니다. 더 긴 옵션을 사용하려면 -delete 를 사용할 수 있습니다.

      5. IPtables 방화벽에서 특정 포트 차단

      때때로 특정 포트에서 들어 오거나 나가는 연결을 차단할 수 있습니다. 이는 좋은 보안 조치이며 방화벽을 설정할 때 그 문제를 실제로 생각해야합니다.

      특정 포트에서 나가는 연결을 차단하려면 다음을 사용하십시오.

      # iptables -A OUTPUT -p tcp --dport xxx -j DROP
      

      들어오는 연결을 허용하려면 다음을 사용하십시오.

      # iptables -A INPUT -p tcp --dport xxx -j ACCEPT
      

      두 예 모두 허용하려는 실제 포트로 xxx 를 변경합니다. TCP 대신 UDP 트래픽을 차단하려면 위의 iptables 규칙에서 udp tcp 를 변경하면됩니다.

      6. Multiport를 사용하여 IPtables에서 다중 포트 허용

      멀티 포트를 사용하여 한 번에 여러 포트를 허용 할 수 있습니다. 아래에서 수신 및 발신 연결에 대한 규칙을 찾을 수 있습니다.

      # iptables -A INPUT  -p tcp -m multiport --dports 22,80,443 -j ACCEPT
      # iptables -A OUTPUT -p tcp -m multiport --sports 22,80,443 -j ACCEPT
      

      7. IPtables의 특정 포트에서 특정 네트워크 범위 허용

      특정 포트의 특정 연결을 특정 네트워크로 제한 할 수 있습니다. 22 포트에서 192.168.100.0/24 네트워크로 나가는 연결을 허용한다고 가정 해 보겠습니다.

      다음 명령으로 수행 할 수 있습니다.

      # iptables -A OUTPUT -p tcp -d 192.168.100.0/24 --dport 22 -j ACCEPT
      

      8. IPtables 방화벽에서 Facebook 차단

      일부 고용주는 직원의 Facebook 액세스를 차단하고 싶어합니다. 다음은 Facebook에 대한 트래픽을 차단하는 방법의 예입니다.

      참고 : 시스템 관리자이고 이러한 규칙을 적용해야하는 경우 동료가 대화를 중단 할 수 있습니다. :)

      먼저 Facebook에서 사용하는 IP 주소를 찾으십시오.

      # host facebook.com 
      facebook.com has address 66.220.156.68
      
      # whois 66.220.156.68 | grep CIDR
      CIDR: 66.220.144.0/20
      

      그런 다음 다음을 사용하여 해당 Facebook 네트워크를 차단할 수 있습니다.

      # iptables -A OUTPUT -p tcp -d 66.220.144.0/20 -j DROP
      

      Facebook에서 사용하는 IP 주소 범위는 국가마다 다를 수 있습니다.

      9. IPtables에서 포트 포워딩 설정

      때로는 한 서비스의 트래픽을 다른 포트로 전달하고자 할 수 있습니다. 다음 명령을 사용하여이를 수행 할 수 있습니다.

      # iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 25 -j REDIRECT --to-port 2525
      

      위의 명령은 25 포트에서 2525 포트로 네트워크 인터페이스 eth0 에서 들어오는 모든 트래픽을 전달합니다. 필요한 포트로 변경할 수 있습니다.

      10. IPtables를 사용하여 Apache 포트에서 네트워크 플러드 차단

      때때로 IP 주소는 웹 사이트의 웹 포트에 대해 너무 많은 연결을 요청할 수 있습니다. 이로 인해 많은 문제가 발생할 수 있으며 이러한 문제를 방지하기 위해 다음 규칙을 사용할 수 있습니다.

      # iptables -A INPUT -p tcp --dport 80 -m limit --limit 100/minute --limit-burst 200 -j ACCEPT
      

      위의 명령어는 수신 연결을 분당 100 으로 제한하고 제한 버스트를 200 으로 설정합니다. 자신의 특정 요구 사항에 따라 제한 및 제한 버스트를 편집 할 수 있습니다.

      11. IPtables에서 들어오는 Ping 요청 차단

      일부 시스템 관리자는 보안 문제로 인해 들어오는 ping 요청을 차단하려고합니다. 위협이 그다지 크지는 않지만 이러한 요청을 차단하는 방법을 아는 것이 좋습니다.

      # iptables -A INPUT -p icmp -i eth0 -j DROP
      

      12. 루프백 액세스 허용

      루프백 액세스 ( 127.0.0.1 에서 액세스)는 중요하며 항상 활성 상태로 두어야합니다.

      # iptables -A INPUT -i lo -j ACCEPT
      # iptables -A OUTPUT -o lo -j ACCEPT
      

      13. 삭제 된 네트워크 패킷의 로그를 IPtables에 보관

      네트워크 인터페이스 eth0 에서 삭제 된 패킷을 기록하려면 다음 명령을 사용할 수 있습니다.

      # iptables -A INPUT -i eth0 -j LOG --log-prefix "IPtables dropped packets:"
      

      -log-prefix 뒤의 값을 원하는대로 변경할 수 있습니다. 메시지는 /var/log/messages 에 기록되며 다음을 사용하여 검색 할 수 있습니다.

      # grep "IPtables dropped packets:" /var/log/messages
      

      14. IPtables의 특정 MAC 주소에 대한 액세스 차단

      다음을 사용하여 특정 MAC 주소에서 시스템에 대한 액세스를 차단할 수 있습니다.

      # iptables -A INPUT -m mac --mac-source 00:00:00:00:00:00 -j DROP
      

      물론 차단하려는 실제 MAC 주소로 00 : 00 : 00 : 00 : 00 : 00 을 변경해야합니다.

      15. IP 주소 당 동시 연결 수 제한

      주어진 포트의 단일 IP 주소에서 너무 많은 동시 연결을 설정하지 않으려면 아래 명령을 사용할 수 있습니다.

      # iptables -A INPUT -p tcp --syn --dport 22 -m connlimit --connlimit-above 3 -j REJECT
      

      위 명령은 클라이언트 당 3 개의 연결 만 허용합니다. 물론 다른 서비스에 맞게 포트 번호를 변경할 수 있습니다. 또한 -connlimit-above 는 요구 사항에 맞게 변경해야합니다.

      16. IPtables 규칙 내에서 검색

      iptables 규칙을 정의한 후에는 수시로 검색하고 변경해야 할 수 있습니다. 규칙 내에서 검색하는 쉬운 방법은 다음을 사용하는 것입니다.

      # iptables -L $table -v -n | grep $string
      

      위의 예에서 검색하려는 실제 테이블로 를 변경하고 찾고있는 실제 문자열로 를 변경해야합니다.

      예를 들면 다음과 같습니다.

      # iptables -L INPUT -v -n | grep 192.168.0.100
      

      17. 새 IPTables 체인 정의

      iptables를 사용하면 자신 만의 체인을 정의하고 그 안에 사용자 지정 규칙을 저장할 수 있습니다. 체인을 정의하려면 다음을 사용하십시오.

      # iptables -N custom-filter
      

      이제 새 필터가 있는지 확인할 수 있습니다.

      # iptables -L
      
      Chain INPUT (policy ACCEPT)
      target prot opt source destination
      
      Chain FORWARD (policy ACCEPT)
      target prot opt source destination
      Chain OUTPUT (policy ACCEPT)
      target prot opt source destination
      Chain custom-filter (0 references)
      target prot opt source destination

      18. IPtables 방화벽 체인 또는 규칙 플러시

      방화벽 체인을 플러시하려면 다음을 사용할 수 있습니다.

      # iptables -F
      

      다음을 사용하여 특정 테이블에서 체인을 플러시 할 수 있습니다.

      # iptables -t nat -F
      

      플러시하려는 실제 테이블로 nat 를 변경할 수 있습니다.

      19. 파일에 IPtables 규칙 저장

      방화벽 규칙을 저장하려면 iptables-save 명령을 사용할 수 있습니다. 다음을 사용하여 규칙을 파일에 저장하고 저장할 수 있습니다.

      # iptables-save > ~/iptables.rules
      

      파일을 저장할 위치와 이름을 지정하는 방법은 사용자에게 달려 있습니다.

      20. 파일에서 IPtables 규칙 복원

      iptables 규칙 목록을 복원하려면 iptables-restore 를 사용할 수 있습니다. "명령은 다음과 같습니다.

      # iptables-restore < ~/iptables.rules
      

      물론 규칙 파일의 경로는 다를 수 있습니다.

      21. PCI 준수를위한 IPtables 규칙 설정

      일부 시스템 관리자는 서버를 PCI 호환으로 구성해야 할 수 있습니다. PCI 규정 준수 공급 업체마다 요구 사항이 많지만 공통적 인 요구 사항은 거의 없습니다.

      대부분의 경우 IP 주소가 두 개 이상 필요합니다. 사이트의 IP 주소에 대해 아래 규칙을 적용해야합니다. 아래 규칙을 사용할 때 각별히주의하고 수행중인 작업이 확실한 경우에만 사용하십시오.

      # iptables -I INPUT -d SITE -p tcp -m multiport --dports 21,25,110,143,465,587,993,995 -j DROP
      

      cPanel 또는 유사한 제어판을 사용하는 경우 해당 포트도 차단해야 할 수 있습니다. "예를 들면 다음과 같습니다.

      # iptables -I in_sg -d DEDI_IP -p tcp -m multiport --dports  2082,2083,2095,2096,2525,2086,2087 -j DROP
      

      참고 : PCI 공급 업체의 요구 사항을 충족하는지 확인하려면 보고서를주의 깊게 확인하고 필요한 규칙을 적용하십시오. 어떤 경우에는 특정 포트에서도 UDP 트래픽을 차단해야 할 수도 있습니다.

      22. 설정 및 관련 연결 허용

      네트워크 트래픽은 들어오고 나가는 트래픽이 분리되어 있으므로 설정된 트래픽과 관련된 수신 트래픽을 허용해야합니다. 들어오는 연결의 경우 다음을 사용하십시오.

      # iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
      

      나가는 사용 :

      # iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
      

      23. IPtables에서 유효하지 않은 패킷 삭제

      일부 네트워크 패킷이 잘못된 것으로 표시 될 수 있습니다. 어떤 사람들은 이러한 패키지를 기록하는 것을 선호하지만 다른 사람들은 패키지를 삭제하는 것을 선호합니다. 유효하지 않은 패킷을 삭제하려면 다음을 사용할 수 있습니다.

      # iptables -A INPUT -m conntrack --ctstate INVALID -j DROP 
      

      24. 네트워크 인터페이스에서 연결 차단

      일부 시스템에는 둘 이상의 네트워크 인터페이스가있을 수 있습니다. "해당 네트워크 인터페이스에 대한 액세스를 제한하거나 특정 IP 주소의 연결을 차단할 수 있습니다.

      예를 들면 :

      # iptables -A INPUT -i eth0 -s xxx.xxx.xxx.xxx -j DROP
      

      차단하려는 실제 IP 주소 (또는 네트워크)로 \"xxx.xxx.xxx.xxx\"를 변경합니다.

      25. IPTable을 통해 보내는 메일 비활성화

      시스템에서 이메일을 보내지 않아야하는 경우 SMTP 포트에서 나가는 포트를 차단할 수 있습니다. 예를 들어 다음을 사용할 수 있습니다.

      # iptables -A OUTPUT -p tcp --dports 25,465,587 -j REJECT
      

      결론

      Iptables는 쉽게 혜택을받을 수있는 강력한 방화벽입니다. 모든 시스템 관리자는 최소한 iptables의 기초를 배우는 것이 중요합니다. iptables 및 옵션에 대한 더 자세한 정보를 찾으려면 설명서를 읽어 보는 것이 좋습니다.

      # man iptables
      

      이 목록에 더 많은 명령을 추가해야한다고 생각되면 아래 댓글 섹션에 제출하여 우리와 공유하십시오.