안녕리눅스 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
  • 1. booting 시 oops-firewall 이 구동 되도록 설정
  • 2. booting 시 oops-firewall 이 구동되지 않도록 설정
  • 3. init(or systemd)를 이용한 oops-firewall 구동
  • 4. 실행 명령을 이용한 oops-firewall 구동

Was this helpful?

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

oops-firewall 실행 방법

1. booting 시 oops-firewall 이 구동 되도록 설정

  [root@an3 ~]$ /sbin/service oops-firewall enable
  [root@an3 ~]$ systemctl enable oops-firewall

2. booting 시 oops-firewall 이 구동되지 않도록 설정

  [root@an3 ~]$ /sbin/service oops-firewall disable
  [root@an3 ~]$ systemctl disable oops-firewall

3. init(or systemd)를 이용한 oops-firewall 구동

  [root@an3 ~]$ /sbin/service oops-firewall [start|stop|restart|status]
  [root@an3 ~]$ systemctl [start|stop|restart|status] oops-firewall

4. 실행 명령을 이용한 oops-firewall 구동

oops-firewall 구동 방법에 주의할 점이 있습니다. 일단, oops-firewlall 명령어에는 적용되어 있는 ruleset을 내릴 수 있는 방법이 없다 그렇기 때문에 rule set을 모두 내리기 위해서는 무조건 아래의 방법만이 가능합니다.

    [root@an3 ~]$ service oops-firewall stop

그리고, oops-firewall을 구동하는 방법은 3번 항목에서 기술한 service 또는 systemctl 명령을 이용하는 방법과 여기서 기술할 oops-firewall 명령을 직접 실행하는 방법이 있습니다.

이 둘의 차이를 잘 이해를 해야 하는데, 이는 설정 작업 환경에 따라 유리한 부분이 있기 때문입니다.

먼저, 원격에서 작업을 한다면, oops-firewall을 직접 구동하는 것 보다는 serivce나 systemctl을 이용해서 구동하는 권장한다. 이유는, service나 systemctl을 이용하여 구동을 할 경우, rule set 적용에 에러가 발생할 경우 먼저 적용된 rule들을 rollback하는 기능이 있기 때문입니다.

그리고, oops-firewall을 직접 구동하는 경우의 장점은 oops-firewall을 실행할 경우 기존의 rule set을 모두 초기화 한 후에 다시 적용하는 구조이기 때문에 굳이 restart를 할 필요가 없기 때문입니다.

또한, -v 옵션을 주면 oops-firewall이 어떻게 ruleset을 적용하는지를 모두 출력해 주기 때문에 내가 만든 정책이 잘 반영이 되었는지 확인이 가능합니다.

또한 -t 옵션을 같이 주면, 실제 deploy는 하지 않고 적용될 rule set을 미리 확인을 할 수도 있습니다.

어떻게 구동을 하든지는 편리한 쪽을 선택하면 됩니다.

다음은 oops-firewall에 -v 옵션을 주고 실행했을 때의 출력 메시지 입니다.

    [root@an3 ~]$ oops-firewall -h

    ############################################################################
    # OOPS Firewall - 설정이 간단한 iptables 프론트엔드 v7.0.2
    ############################################################################

    사용법: oops-firewall -[옵션]
    옵션:
             -c config_directory    설정 파일 디렉토리 지정
             -t                     테스트 모드로 실행
             -v                     상세 모드
             -n                     안시 모드 출력 하지 않음
             -V                     현재 버전 출력
             -h                     도움말

    [root@an3 ~]$ oops-firewall -t -v

    ############################################################################
    # OOPS Firewall - 설정이 간단한 iptables 프론트엔드 v7.0.2
    ############################################################################


    1. 실행 유저 체크                              : OK

    2. 커널 버전 검사                              : OK

    3. IP 주소 체크

      * ETH0 정보
        IP 주소                                    : 12.1.87.15
        서브넷 마스크                              : 255.255.255.224
        네트워크                                   : 12.1.87.64
        네트워크 프리픽스                          : 27

    4. 인터페이스 정보

      * FIREWALL_WAN                               : eth0
      * MASQUERADE_WAN                             : Not Set
      * MASQUERADE_LOC                             : Not Set

    5. 넷필터 초기화

      * 넷필터 모듈 등록
        ip_conntrack 모듈 등록                     : 존재함
        ip_tables 모듈 등록                        : 존재함
        ip_conntrack_ftp 모듈 등록                 : 존재함

      * 기본 테이블 초기화
        사슬 카운터 초기화                         : OK
        모든 INPUT 사슬 허가                       : OK
        INPUT 사슬의 규칙 제거                     : OK
        모든 OUTPUT 사슬을 허가                    : OK
        FORWARD 사슬의 규칙 제거                   : OK
        모든 FORWARD 사슬 허가                     : OK
        OUTPUT 사슬의 규칙 제거                    : OK

      * NAT 테이블 초기화
        NAT 테이블 카운터 초기화                   : OK
        FORWARD 규칙 제거                          : OK
        PREROUTING 규칙 제거                       : OK
        모든 POSTROUTING 사슬 허가                 : OK
        POSTROUTING 규칙 제거                      : OK

      * Mangle 테이블 초기화
        MANGLE 테이블 카운터 초기화                : OK
        FORWARD 규칙 제거                          : OK
        PREROUTING 규칙 제거                       : OK
        모든 OUTPUT 사슬을 허가                    : OK
        OUTPUT 규칙을 제거                         : OK
        모든 INPUT 사슬 허가                       : OK
        INPUT 규칙을 제거                          : OK
        모든 FORWARD 사슬 허가                     : OK
        FORWARD 규칙 제거                          : OK
        모든 POSTROUTING 사슬 허가                 : OK
        POSTROUTING 규칙 제거                      : OK

    6. Bridge 모드 초기화

      * BRIDGE 모드가 셋팅되지 않았습니다.

    7. 기본 커널 파라미터 설정

      * TCP SYNCOOKIES 파라미터 사용               : OK
      * all IP 스푸핑 체크                         : OK
      * default IP 스푸핑 체크                     : OK
      * eth0 IP 스푸핑 체크                        : OK
      * eth1 IP 스푸핑 체크                        : OK
      * eth2 IP 스푸핑 체크                        : OK
      * eth3 IP 스푸핑 체크                        : OK
      * lo IP 스푸핑 체크                          : OK
      * 유효하지 않은 메세지 거절                  : OK
      * BroadCast 로의 Ping 을 거부                : OK

    8. 이상 패킷 제거

      * iptables -A INPUT   -m state --state INVALID -j DROP
      * iptables -A OUTPUT  -m state --state INVALID -j DROP

    9. 기본 규칙 허가

      * 모든 ESTABLISED/REALTED 연결 허가
        iptables -A INPUT   -m state --state ESTABLISHED,RELATED -j ACCEPT
        iptables -A OUTPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT

      * 외부로의 PING 허가
        iptables -A OUTPUT -p icmp --icmp-type echo-request -j ACCEPT
        iptables -A INPUT  -p icmp --icmp-type echo-reply -j ACCEPT

      * 외부로의 traceroute 허가
        iptables -a input   -p icmp --icmp-type time-exceeded -j accept
        iptables -a input   -p icmp --icmp-type port-unreachable -j accept
        iptables -a output  -p udp --dport 33434:33525 -j accept
        iptables -a output  -p udp --dport 44444:44624 -j accept  

    10. 모든 서비스 허가

      * iptables -A INPUT  -i lo -j ACCEPT
      * iptables -A OUTPUT -o lo -j ACCEPT
      * iptables -A INPUT  -s 21.27.1.26 -j ACCEPT
      * iptables -A OUTPUT -d 21.27.1.26 -j ACCEPT
      * iptables -A INPUT  -s 21.27.1.29 -j ACCEPT
      * iptables -A OUTPUT -d 21.27.1.29 -j ACCEPT
      * iptables -A INPUT  -s 1.25.19.42 -j ACCEPT
      * iptables -A OUTPUT -d 1.25.19.42 -j ACCEPT

    11. 전처리 사용자 설정 규칙 추가

      * Brute Force 공격 필터
        iptables -A INPUT -p tcp --dport 22 -m state --state NEW \
                 -m recent --set --name OFIRE_22
        iptables -A INPUT -p tcp --dport 22 -m state --state NEW \
                 -m recent --update --seconds 60 --hitcount 10 --rttl \
                 --name OFIRE_22 -j DROP

      * 실행 전 유저 명령(%) 이 설정되어 있지 않음

    12. 외부로 나가는 서비스 허가

      * TCP 서비스
        iptables -A OUTPUT  -p tcp  --dport 21    -m state --state NEW -j ACCEPT
        iptables -A OUTPUT  -p tcp  --dport 22    -m state --state NEW -j ACCEPT
        iptables -A OUTPUT  -p tcp  --dport 25    -m state --state NEW -j ACCEPT
        iptables -A OUTPUT  -p tcp  --dport 43    -m state --state NEW -j ACCEPT
        iptables -A OUTPUT  -p tcp  --dport 80    -m state --state NEW -j ACCEPT
        iptables -A OUTPUT  -p tcp  --dport 443   -m state --state NEW -j ACCEPT
        iptables -A OUTPUT  -p tcp  --dport 873   -m state --state NEW -j ACCEPT

      * TCP per HOST 서비스

      * UDP 서비스
        iptables -A OUTPUT  -p udp  --dport 53    -m state --state NEW -j ACCEPT
        iptables -A OUTPUT  -p udp  --dport 123   -m state --state NEW -j ACCEPT

      * UDP per HOST 서비스


    13. 내부로 들어오는 서비스 허가

      * TCP 서비스

      * TCP per HOST 서비스

      * UDP 서비스

      * UDP per HOST 서비스

      * ICMP 서비스 설정
        ==> ping 서비스 설정

        ==> traceroute 서비스 설정
          iptables -A OUTPUT  -s 0.0.0.0/0       -p icmp --icmp-type time-exceeded    -j ACCEPT
          iptables -A OUTPUT  -s 0.0.0.0/0       -p icmp --icmp-type port-unreachable -j ACCEPT
          iptables -A INPUT   -s 0.0.0.0/0       -p udp  --dport 33434:33525 -j ACCEPT
          iptables -A INPUT   -s 0.0.0.0/0       -p udp  --dport 44444:44624 -j ACCEPT


    14. 매스쿼레이드 설정


    15. 포워딩 설정

      * 만료된 지시자 검사


    16. 후처리 사용자 설정 규칙 추가

      * 실행 후 유저 명령(@)이 설정되어 있지 않음

    17. TOS 설정

      * INPUT 체인 Tos 설정
        iptables -t mangle -A INPUT -p tcp --dport 21 -j TOS --set-tos 0x08
        iptables -t mangle -A INPUT -p tcp --sport 21 -j TOS --set-tos 0x08
        iptables -t mangle -A INPUT -p tcp --dport 22 -j TOS --set-tos 0x10
        iptables -t mangle -A INPUT -p tcp --sport 22 -j TOS --set-tos 0x10
        iptables -t mangle -A INPUT -p tcp --dport 23 -j TOS --set-tos 0x10
        iptables -t mangle -A INPUT -p tcp --sport 23 -j TOS --set-tos 0x10
        iptables -t mangle -A INPUT -p tcp --dport 80 -j TOS --set-tos 0x04
        iptables -t mangle -A INPUT -p tcp --sport 80 -j TOS --set-tos 0x04
        iptables -t mangle -A INPUT -p tcp --dport 443 -j TOS --set-tos 0x04
        iptables -t mangle -A INPUT -p tcp --sport 443 -j TOS --set-tos 0x04
        iptables -t mangle -A INPUT -p tcp --dport 1024:65535 -j TOS --set-tos 0x00
        iptables -t mangle -A INPUT -p tcp --sport 1024:65535 -j TOS --set-tos 0x00

      * OUTPUT 체인 Tos 설정
        iptables -t mangle -A OUTPUT -p tcp --dport 21 -j TOS --set-tos 0x08
        iptables -t mangle -A OUTPUT -p tcp --sport 21 -j TOS --set-tos 0x08
        iptables -t mangle -A OUTPUT -p tcp --dport 22 -j TOS --set-tos 0x10
        iptables -t mangle -A OUTPUT -p tcp --sport 22 -j TOS --set-tos 0x10
        iptables -t mangle -A OUTPUT -p tcp --dport 23 -j TOS --set-tos 0x10
        iptables -t mangle -A OUTPUT -p tcp --sport 23 -j TOS --set-tos 0x10
        iptables -t mangle -A OUTPUT -p tcp --dport 80 -j TOS --set-tos 0x04
        iptables -t mangle -A OUTPUT -p tcp --sport 80 -j TOS --set-tos 0x04
        iptables -t mangle -A OUTPUT -p tcp --dport 443 -j TOS --set-tos 0x04
        iptables -t mangle -A OUTPUT -p tcp --sport 443 -j TOS --set-tos 0x04
        iptables -t mangle -A OUTPUT -p tcp --dport 1024:65535 -j TOS --set-tos 0x00
        iptables -t mangle -A OUTPUT -p tcp --sport 1024:65535 -j TOS --set-tos 0x00

    18. 거부 규칙 설정


      * 모든 TCP 패킷을 Drop
        iptables -A INPUT   -p tcp  -j DROP
        iptables -A OUTPUT  -p tcp  -j DROP

      * 모든 UDP 패킷을 Drop
        iptables -A INPUT   -p udp  -j DROP
        iptables -A OUTPUT  -p udp  -j DROP

      * 모든 ICMP 패킷을 거부
        iptables -A INPUT   -p icmp -j DROP
        iptables -A OUTPUT  -p icmp -j DROP

    [root@an3 ~]$
Previous특정 국가에서의 접속 제어NextShell login Control (with PAM)

Last updated 5 years ago

Was this helpful?