안녕리눅스 3 User Guide
  • Introduction
  • Chapter 1. 안녕 리눅스 3 \/ CentOS 7.2 차이점
  • Chapter 2. Access Control
    • 안녕 리눅스 방화벽 설정
      • 기본 설정
      • Inbound 제어
      • Outbound 제어
      • brute force attack 제어
      • User defined rule 제어
      • 특정 국가에서의 접속 제어
      • oops-firewall 실행 방법
    • Shell login Control (with PAM)
      • login 가능한 account 제한
      • login account chroot
      • Google OTP를 이용한 2 factor 인증
    • 인증 통합 (Authentification\/Authorization Intergrate)
      • Openldap
        • Master Server 설정
        • SSL 설정
        • Slave Server 설정
        • Replication 설정
        • LDAP 클라이언트 인증 연동 설정
        • LDAP data 관리
        • Sudo LDAP 연동
      • NIS
      • Active Directory
  • Chapter 3. Web control
    • httpd
    • nginx
    • lighttpd
    • PHP
    • Web Access Control
      • Apache 2.4
      • Nginx
      • lighttpd
    • Web Monitor agent
  • Chapter 4. JVM 운영
  • Chapter 5. DNS 운영
    • 기본 설정
    • 신규 도메인 설정
    • Slave DNS 구성
    • Inverse Domain 설정
    • DNSSEC 설정
    • GeoDNS 설정
    • Domain 위임
    • IDN
    • Troble Shooting
  • Chapter 6. Time Server 운영
    • Chrony
    • NTP
  • Chapter 7. VPN 운영
  • Chapter 8. SMTP 운영
  • 안녕 리눅스 White Paper
    • Disk Partition Aligment
  • 안녕 리눅스 알려진 버그
  • 안녕 리눅스 3 패키지 일람
    • [AN:core]
      • annyung-release
      • byspam
      • check-utils
      • genpasswd
      • httpd-conf
      • httpd-krisp
      • httpd-nis
      • httpd-url
      • kmod-geoip
      • l4vip
      • ldap-auth-utils
      • libchardet
      • libimginfo
      • libipcalc
      • libkrisp
      • mariadb-aes256
      • olibc
      • oops-firewall
      • perl-KRISP
      • perl-ModuleList
      • php-chardet
      • php56-chardet
      • php71-chardet
      • php-common
      • php56-common
      • php71-common
      • php-fpm-conf
      • php56-fpm-conf
      • php71-fpm-conf
      • php-geoip
      • php56-geoip
      • php71-geoip
      • php-korean
      • php56-korean
      • php71-korean
      • php-krisp
      • php56-krisp
      • php71-krisp
      • php-nis
      • php56-nis
      • php71-nis
      • php-pear-KSC5601
      • php-pear-ipcalc
      • php-pear-krisp
      • php-pear-oops-key
      • procdump
      • python-chardet
      • python-krisp
      • remount
      • utf8-profile
      • whois
      • yum-annyung
    • [AN:base]
      • apr
      • authconfig
      • bash
      • bind
      • chrony
      • coreutils
      • ctags
      • cvs
      • ecj
      • filesystem
      • GeoIP
      • gperftools
      • httpd
      • initscrtips
      • iptables
      • java-1.8.0-openjdk
      • javapacakges-tools
      • linuxdoc-tools
      • mariadb
      • memcached
      • net-tools
      • ntp
      • openssh
      • openssl
      • pam
      • php
      • procmail
      • procps-ng
      • redhat-rpm-config
      • rootfiles
      • rsyslog
      • sendmail
      • setup
      • shadow-utils
      • sudo
      • systemd
      • sysvinit-tools
      • tomcat
      • traceroute
      • unzip
      • util-linux
      • vim
      • xinted
    • [AN:xless]
    • [AN:addon]
      • authbind
      • cronolog
      • google-authenticator
      • hping3
      • httpd-fcgid
      • imap
      • jfbterm
      • jlint
      • libevent14
      • libnet
      • libnetfilter_acct
      • lighttpd
      • mhash
      • mimetex
      • mm
      • netdata
      • netperf
      • nginx
      • openvpn
      • pdnsd
      • perl-CSS-DOM
      • php-pecl-apcu
      • php56-pecl-apcu
      • php71-pecl-apcu
      • php-pecl-memcache
      • php56-pecl-memcache
      • php71-pecl-memcache
      • php-pecl-oauth
      • php56-pecl-oauth
      • php71-pecl-oauth
      • php-pecl-xdebug
      • php56-pecl-xdebug
      • php71-pecl-xdebug
      • php56
      • php71
      • proftpd
      • python-Mako
      • python-MarkupSafe
      • python-mcrypt
      • python-openpyxl
      • python-xlrd
      • re2c
      • redis
      • rudiments
      • splint
      • sqlite32
      • sqlrelay
      • tomcat-native
    • [AN:plus]
  • 안녕 리눅스 Upgrade Guide
Powered by GitBook
On this page

Was this helpful?

  1. Chapter 2. Access Control
  2. 안녕 리눅스 방화벽 설정

brute force attack 제어

PreviousOutbound 제어NextUser defined rule 제어

Last updated 5 years ago

Was this helpful?

은 우리 말로 무차별 대입 공격 이라고 번역을 합니다.

사전 공격(Dictionary attack)의 진화된 형태인데, 사전 공격이라는 것은 ID와 password를 일종의 사전화 하여 가지고 있는 데이터로 대입을 하여 인증을 통과하는 공격을 의미합니다.

은 보통 두가지 부류로 많이 볼 수 있습니다.

  1. SSH/telnet/ftp 등의 shell login service에 대한 공격으로 login shell 권한 획득 목적

  2. drupal/phpBB/wordpress 등의 web application에 spam 등록 및 web service를 통한 shell 권한 획득을 위한 목적

여기서, 두번째 web에 대한 brute force attack에 대한 방어는 netfilter의 l7-filter를 이용할 수 있으나, 이 rule 작성을 하려면 고도의 지식이 필요하므로 web에 대한 부분은 웹방화벽 solution에서 처리를 하는 것이 더 효과적입니다.

그러므로 여기서는 첫번째 shell login 권한 획득에 대한 방어에 대해서 기술을 합니다.

서버에서 볼 수 있는 대표적인 brute force attack의 흔적을 보자면, /var/log/secure 에서 하나의 IP에서 여러 account로 SSH shell login을 시도하는 흔적을 볼 수 있습니다.

Feb 18 16:00:01 kill sshd[4320]: Received disconnect from 125.88.177.93: 11:
Feb 18 16:00:01 kill sshd[4319]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=125.88.177.93  user=root
Feb 18 16:00:03 kill sshd[4325]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=125.88.177.93  user=root
Feb 18 16:00:05 kill sshd[4325]: Failed password for root from 125.88.177.93 port 16277 ssh2
Feb 18 16:00:10 kill last message repeated 2 times
Feb 18 16:00:10 kill sshd[4326]: Received disconnect from 125.88.177.93: 11:
Feb 18 16:00:10 kill sshd[4325]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=125.88.177.93  user=root
Feb 18 16:00:12 kill sshd[4327]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=125.88.177.93  user=root
Feb 18 16:00:14 kill sshd[4327]: Failed password for root from 125.88.177.93 port 48843 ssh2
Feb 18 16:00:18 kill last message repeated 2 times
Feb 18 16:00:18 kill sshd[4328]: Received disconnect from 125.88.177.93: 11:
Feb 18 16:00:18 kill sshd[4327]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=125.88.177.93  user=root
Feb 18 16:00:21 kill sshd[4329]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=125.88.177.93  user=root
Feb 18 16:00:23 kill sshd[4329]: Failed password for root from 125.88.177.93 port 21861 ssh2
Feb 18 16:00:27 kill last message repeated 2 times
Feb 18 16:00:27 kill sshd[4330]: Received disconnect from 125.88.177.93: 11:
Feb 18 16:00:27 kill sshd[4329]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=125.88.177.93  user=root
Feb 18 16:00:29 kill sshd[4331]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=125.88.177.93  user=root
Feb 18 16:00:31 kill sshd[4331]: Failed password for root from 125.88.177.93 port 52989 ssh2
Feb 18 16:00:36 kill last message repeated 2 times
Feb 18 16:00:36 kill sshd[4332]: Received disconnect from 125.88.177.93: 11:
Feb 18 16:00:36 kill sshd[4331]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=125.88.177.93  user=root
Feb 18 16:00:39 kill sshd[4333]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=125.88.177.93  user=root
Feb 18 16:00:41 kill sshd[4333]: Failed password for root from 125.88.177.93 port 29602 ssh2
Feb 18 16:00:46 kill last message repeated 2 times
Feb 18 16:00:46 kill sshd[4334]: Received disconnect from 125.88.177.93: 11:
Feb 18 16:00:46 kill sshd[4333]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=125.88.177.93  user=root
Feb 18 16:00:50 kill sshd[4335]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=125.88.177.93  user=root
Feb 18 16:00:52 kill sshd[4335]: Failed password for root from 125.88.177.93 port 10492 ssh2
Feb 18 16:00:58 kill last message repeated 2 times
Feb 18 16:00:58 kill sshd[4336]: Received disconnect from 125.88.177.93: 11:
Feb 18 16:00:58 kill sshd[4335]: PAM 2 more authentication failures; logname= uid=0 euid=0 tty=ssh ruser= rhost=125.88.177.93  user=root

burte force attack의 문제점은 3가지의 큰 문제가 있습니다.

  1. 엄청난 시도로 서비스 resource에 부하를 줄 수 있다.

  2. logging message가 너무 많이 남아 logging 활용성이 떨어진다.

  3. 엄청난 시도로 취약한 암호를 사용하는 계정은 탈취를 당할 수 있다.

일단, 안녕 리눅승 shell login에 대한 brute force attack 방어는 /etc/oops-firewall/application.conf 에서 할 수 있습니다.

  [root@an3 ~]$ cat application.conf
  ##########################################################################
  # Application filtering
  # $Id: application.conf 338 2013-01-04 19:17:13Z oops $
  #
  # 이 파일은 특정 공격이나 scan 등을 막기위한 정형적인 서비스를 제공한다.

  ##########################################################################
  # SSH Brute Force Attack
  ##########################################################################
  #
  # BRUTE FORCE FILTER 는 PORT:SECONDS:HIT 로 설정을 한다. 예를 들어 60:10
  # 으로 설정을 할 경우, 60 초 동안 10 번째 접속이 발생하면 다음 60 초동안
  # 필터 한다는 의미이다.
  #
  # Rule:
  #       BRUTE_FORCE_FILTER    = DEST_PORT:SECOND:HIT
  #       BR_BRUTE_FORCE_FILTER = SOURCE_IP|DEST_IP|DEST_PORT:SECOND:HIT
  #
  #BRUTE_FORCE_FILTER = 22:60:10
  BRUTE_FORCE_FILTER    =
  BR_BRUTE_FORCE_FILTER =

  # BFUTE FORCE FILTER 사용시에 로깅을 할지 안할지를 결정한다.
  #
  BRUTE_FORCE_LOG = false

  ** 하략 **
  [root@an3 ~]$

위의 설정 주석과 같이 SSH service에 대한 공격을 막기 위해서는 BURTE_FORCE_FILTER 설정을 해 줍니다.

  BRUTE_FORCE_FILTER = 22:60:10

위의 설정은 다음의 의미를 가집니다.

22번 포트로 60초 동안 10번의 접속을 시도하면 다음 60초 동안 접속을 제한한다.

이 설정 처럼 SSH외의 shell login이 가능한 서비스가 있다면 설정을 해 주는 것이 좋습니다.

  BURTE_FORCE_FILTER = 21:60:10 22:60:10 23:60:10

상기 설정은 FTP(21), SSH(22), TELNET(23) 서비스에 대해 적용을 한 예 입니다. 안녕 리눅스의 shell login은 기본으로 SSH(22)만 가능하므로, 만약 FTP나 TELNET과 같은 서비스를 추가 한다면, 여기에 추가해 주시면 되겠습니다.

BR_BRUTE_FORCE_FILTER는 만약 이 서버가 network bridge로 구성이 되어 있을 경우 bridge device를 통해서 지나가는 packet을 제어하기 위해 사용합니다. bridge device를 구성하지 않았다면(기본으로는 구성되지 않습니다.) 신경쓰실 필요 없습니다.

brute force attack
brute force attack