Most Common User Agents

Updated March 29th 2018– A dynamic, downloadable list of the most common user agents. Have you ever wondered what Most Common User Agents are? This is a list of the most common user agents, dynamically generated to remain accurate and up to date. Often times people will post a list on their site, which soon becomes outdated. So, I decided I would create a user agent list that is dynamically generated and updated- it uses data from my own website to keep the list of user-agent data up to date – which means the list stays up to date as new browsers are released and new user agents emerge. It is, in effect, a highly accurate representation of common useragents. Below you will find a table showing the most popular / most-used UserAgents and percentage of visitors who had that user-agent when they visited the site. And, as of May 2012 this page should now be even more dynamic with a new method for calculating a rolling average of visitors.

Your user agent is: 
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36

Last Updated: Thu, 29 Mar 2018 00:54:38 +0000
percentuseragentsystem
13.4%Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36Chrome 64.0 
 Win10 16-bit
4.6%Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36Chrome 64.0 
 Win7 16-bit
4.3%Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0.3 Safari/604.5.6Safari 11.0 
 macOS 16-bit
3.7%Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0Firefox 58.0 
 Win10 16-bit
3.5%Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36Chrome 64.0 
 macOS 16-bit
3.5%Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36Chrome 65.0 
 Win10 16-bit
2.3%Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0Firefox 59.0 
 Win10 16-bit
1.8%Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36 Edge/16.16299Edge 16.0 
 Win10 16-bit
1.8%Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36Chrome 65.0 
 Win10 16-bit
1.8%Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36Chrome 65.0 
 macOS 16-bit
1.5%Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0Firefox 58.0 
 Linux 16-bit
1.5%Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36Chrome 65.0 
 Win7 16-bit
1.4%Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36Chrome 64.0 
 macOS 16-bit
1.3%Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36Chrome 65.0 
 macOS 16-bit
1.3%Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36Chrome 64.0 
 Win8.1 16-bit
1.2%Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0Firefox 58.0 
 Win7 16-bit
1.1%Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36Chrome 63.0 
 Win10 16-bit
1.0%Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0.3 Safari/604.5.6Safari 11.0 
 macOS 16-bit
1.0%Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like GeckoIE 11.0 for Desktop 
 Win7 16-bit
1.0%Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:58.0) Gecko/20100101 Firefox/58.0Firefox 58.0 
 macOS 16-bit
1.0%Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36Chrome 65.0 
 Win10 16-bit
0.8%Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36Chrome 64.0 
 Linux 16-bit
0.8%Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0Firefox 59.0 
 Win7 16-bit
0.8%Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36Chrome 64.0 
 Win10 16-bit
0.8%Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Firefox/52.0Firefox 52.0 
 Linux 16-bit
0.7%Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:59.0) Gecko/20100101 Firefox/59.0Firefox 59.0 
 Linux 16-bit
0.7%Mozilla/5.0 (Macintosh; Intel Mac OS X 10.13; rv:59.0) Gecko/20100101 Firefox/59.0Firefox 59.0 
 macOS 16-bit
0.7%Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like GeckoIE 11.0 for Desktop 
 Win10 16-bit
0.6%Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36Chrome 64.0 
 MacOSX 16-bit
0.6%Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/64.0.3282.167 Chrome/64.0.3282.167 Safari/537.36Chromium 64.0 
 Linux 16-bit
0.6%Mozilla/5.0 (X11; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0Firefox 58.0 
 Linux 16-bit
0.6%Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36Chrome 64.0 
 Win7 16-bit
0.6%Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:52.0) Gecko/20100101 Firefox/52.0Firefox 52.0 
 Win7 16-bit
0.5%Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36Chrome 65.0 
 macOS 16-bit
0.5%Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36Chrome 65.0 
 Win7 16-bit
0.5%Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36Chrome 65.0 
 Linux 16-bit
0.5%Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36Chrome 65.0 
 Linux 16-bit
0.4%Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36Chrome 51.0 
 Linux 16-bit
0.4%Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36Chrome 63.0 
 Win7 16-bit
0.4%Mozilla/5.0 (X11; Linux x86_64; rv:59.0) Gecko/20100101 Firefox/59.0Firefox 59.0 
 Linux 16-bit
0.4%Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36 OPR/51.0.2830.55Opera 51.0 
 Win10 16-bit
0.4%Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:58.0) Gecko/20100101 Firefox/58.0Firefox 58.0 
 macOS 16-bit
0.4%Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0.3 Safari/604.5.6Safari 11.0 
 MacOSX 16-bit
0.4%Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36Chrome 65.0 
 macOS 16-bit
0.4%Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36Chrome 64.0 
 macOS 16-bit
0.4%Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:58.0) Gecko/20100101 Firefox/58.0Firefox 58.0 
 Win8.1 16-bit
0.4%Mozilla/5.0 (iPad; CPU OS 11_2_6 like Mac OS X) AppleWebKit/604.5.6 (KHTML, like Gecko) Version/11.0 Mobile/15D100 Safari/604.1Mobile Safari 11.0 
 iOS 16-bit
0.4%Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36Chrome 64.0 
 macOS 16-bit
0.4%Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36Chrome 65.0 
 macOS 16-bit
0.3%Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0; Trident/5.0)IE 9.0 
 Win7 16-bit
0.3%Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0; Trident/5.0)IE 9.0 
 WinVista 16-bit
0.3%Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/604.4.7 (KHTML, like Gecko) Version/11.0.2 Safari/604.4.7Safari 11.0 
 macOS 16-bit
0.3%Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.168 Safari/537.36 OPR/51.0.2830.40Opera 51.0 
 Win10 16-bit
0.3%Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36Chrome 64.0 
 Linux 16-bit
0.3%Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36Chrome 64.0 
 macOS 16-bit
0.3%Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like GeckoIE 11.0 for Desktop 
 Win7 16-bit
0.3%Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36Chrome 64.0 
 Win7 16-bit
0.3%Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36Chrome 65.0 
 Win7 16-bit
0.3%Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36Chrome 64.0 
 Win10 16-bit
0.3%Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36Chrome 65.0 
 Win8.1 16-bit
0.2%Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:58.0) Gecko/20100101 Firefox/58.0Firefox 58.0 
 MacOSX 16-bit
0.2%Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:57.0) Gecko/20100101 Firefox/57.0Firefox 57.0 
 Win10 16-bit
0.2%Mozilla/5.0 (Macintosh; Intel Mac OS X 10.12; rv:59.0) Gecko/20100101 Firefox/59.0Firefox 59.0 
 macOS 16-bit
0.2%Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0Firefox Generic 
 Win10 16-bit
0.2%Mozilla/5.0 (Windows NT 10.0; WOW64; rv:56.0) Gecko/20100101 Firefox/56.0Firefox 56.0 
 Win10 16-bit
0.2%Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:58.0) Gecko/20100101 Firefox/58.0Firefox 58.0 
 Linux 16-bit
0.2%Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36Chrome 64.0 
 Linux 16-bit
0.2%Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36Chrome 65.0 
 Linux 16-bit
0.2%Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; Touch; rv:11.0) like GeckoIE 11.0 for Tablet 
 Win10 16-bit
0.2%Mozilla/5.0 (Windows NT 6.1; rv:52.0) Gecko/20100101 Firefox/52.0Firefox 52.0 
 Win7 16-bit
0.2%Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0Firefox 52.0 
 Win7 16-bit
0.2%Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36Chrome 64.0 
 macOS 16-bit
0.2%Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36 Edge/15.15063Edge 15.0 
 Win10 16-bit
0.2%Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36Chrome 64.0 
 Win10 16-bit
0.2%Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36Chrome 63.0 
 Linux 16-bit
0.2%Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36Chrome 65.0 
 MacOSX 16-bit
0.2%Mozilla/5.0 (Windows NT 6.1; rv:58.0) Gecko/20100101 Firefox/58.0Firefox 58.0 
 Win7 16-bit
0.2%Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36Chrome 63.0 
 Linux 16-bit
0.2%Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36Chrome 64.0 
 MacOSX 16-bit
0.2%Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36Chrome 64.0 
 Win10 16-bit
0.2%Mozilla/5.0 (Windows NT 10.0; WOW64; rv:52.0) Gecko/20100101 Firefox/52.0Firefox 52.0 
 Win10 16-bit
0.2%Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36Chrome 65.0 
 Win7 16-bit
0.2%Mozilla/5.0 (Windows NT 6.3; Win64; x64; rv:59.0) Gecko/20100101 Firefox/59.0Firefox 59.0 
 Win8.1 16-bit
0.2%Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.1.2 Safari/603.3.8Safari 10.1 
 MacOSX 16-bit
0.2%Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36Chrome 65.0 
 MacOSX 16-bit
0.2%Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/604.3.5 (KHTML, like Gecko) Version/11.0.1 Safari/604.3.5Safari 11.0 
 macOS 16-bit
0.2%Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36Chrome 64.0 
 Win7 16-bit
0.2%Mozilla/5.0 (Macintosh; Intel Mac OS X 10.11; rv:59.0) Gecko/20100101 Firefox/59.0Firefox 59.0 
 MacOSX 16-bit
0.2%Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/603.3.8 (KHTML, like Gecko) Version/10.1.2 Safari/603.3.8Safari 10.1 
 macOS 16-bit


'Server' 카테고리의 다른 글

CentOS 7 관리 - APM : Apache, PHP, MariaDB 설치  (0) 2017.07.11
CentOS에서 BRO+PF_RING 설치하기  (0) 2017.01.09
nslookup, dig 사용하기  (0) 2017.01.08
umask란?  (0) 2017.01.08
Linux 사용자 계정  (0) 2017.01.08

설치 전 준비

  1. 의존성 라이브러리를 설치합니다
    libpng* 의 경우 설치시 충돌이 발생하여...  --skip-broken 옵션을 지정하여 설치

    # yum -y install gcc gcc-c++  libtermcap-devel gdbm-devel zlib* libxml* freetype* libjpeg* gd-* 
    # yum -y install libpng* --skip-broken

Apache, PHP, MariaDB 설치

  1. yum 으로 Apach 설치

    
    # yum -y install httpd
    
    
  2. Apach 설정

    
    # vi /etc/httpd/conf/httpd.conf
     
    
    
    
    
    #User apache    /*User nobody 변경   */
    #Group apache   /*Group nobody 변경  */ 
    User nobody
    Group nobody
    ... 
    
    
    
    
    
    ServerName centos.kgoon.net:80 
    ...
    DocumentRoot "/var/www/html"    /* 경로 변경 시 해당 경로 755 변경 및 Selinux 보안 기능(?)을 중지하고 아파치 서버를 재 가동 */
    ...
    < Directory "/var/www/html">     /* DocumentRoot와 동일하게 */
    ...
    <IfModule dir_module>
        DirectoryIndex index.html index.php index.htm
    </IfModule>
    ...
    AddDefaultCharset UTF-8   /* 기본 인코딩 설정 */ 
    
    
  3. Apach 상태 및 실행, 부팅 시 자동 실행 등록

    
    # systemctl status httpd           /* 설치된 상태를 봅니다. */
    # systemctl start httpd            /* 서비스 가동 명령어 입니다. */
    # systemctl enable httpd.service   /* 부팅 후 자동 실행 설정 */
    
    
  4. 방화벽 설정

    
    # systemctl status firewalld   /* 방화벽 상태 확인 */
    # vi /etc/firewalld/zones/public.xml
    <?xml version="1.0" encoding="utf-8"?>
    <zone>
      <short>Public</short>
      <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
      <service name="dhcpv6-client"/>
      <service name="ssh"/>
      <port protocol="tcp" port="80"/>
      <port protocol="tcp" port="3306"/>
    </zone> # systemctl reload firewalld /* 방화벽 적용 */
  5. 사이트 접속 확인

     

  6. PHP 설치

    
    # yum -y install php php-mysql php-pdo php-gd php-mbstring
    # echo "<?php phpinfo(); ?>" > /var/www/html/info.php    /* php 정보 출력 페이지 생성 */
    
    # chmod 777 /var/lib/php/session/ /* 그리고 세션 사용을 오픈 해야 됩니다. 셔센은 로그인 할때에 많이 사용하게 됩니다. */
    # systemctl restart httpd
    
    
  7. info.php 사이트 확인

     

     

     

  8. MariaDB 설치

    
    # yum -y install mariadb-server mariadb
    
    # systemctl start mariadb   /* Maria DB 가동 */
    # mysql_secure_installation /* 설정을 합니다. */
    
    항목을 하나하나 알아볼께요
    
    Enter current password for root (enter for none) : 이 부분은 현재 루트 비번이 없기 때문에 엔터치시면 됩니다.
    Set root password ? [Y/n]  : y를 누르고 root 패스워드를 설정합니다. 두번 비번을 입력하게 됩니다.
    Remove anonymous users? [Y/n] ; 익명 접근을 막을것이냐? 라고 묻습니다. 보안상 y 누르고 엔터치세요.
    Disallow root login remotely? [Y/n] ; root 계정으로 원격 접속을 막을 것인가? 보안상 y 누르고 엔터 치세요
    Remove test database and access to it? [Y/n] ; test 용으로 사용된 데이타 베이스를 삭제할것이냐? y 엔터 치시면 됩니다.
    Reload privilege tables now? [Y/n] ; 지금까지 설정한 값을 적용할것이냐? y 엔터 치시면 됩니다.
    
    



출처: http://blog.kgoon.net/14 [Kgoon]

'Server' 카테고리의 다른 글

User Agent 별 점유율  (0) 2018.03.29
CentOS에서 BRO+PF_RING 설치하기  (0) 2017.01.09
nslookup, dig 사용하기  (0) 2017.01.08
umask란?  (0) 2017.01.08
Linux 사용자 계정  (0) 2017.01.08

# cmake 설치
yum install cmake28

# ipsumdump 설치
wget http://www.read.seas.harvard.edu/~kohler/ipsumdump/ipsumdump-1.85.tar.gz
tar -zxvf ipsumdump-1.85.tar.gz  
cd ipsumdump-1.85 
./configure 
make && make install

# 기타 필요 모듈 설치
yum install kernel-devel kernel-headers -y 
yum install make autoconf automake gcc gcc-c++ flex bison libpcap libpcap-devel -y 
yum install openssl openssl-devel python-devel swig zlib zlib-devel -y 
yum install openssl-libs bind-libs -y 
yum install gawk -y 
yum install pcre-devel -y  
yum install libtool -y   
yum install numactl numactl-devel -y  
yum install gperftools-libs gperftools-devel -y  
yum install GeoIP GeoIP-devel -y  
yum install jemalloc jemalloc-devel 
yum install curl 
yum install libcurl-devel 
or
yum install cmake make gcc gcc-c++ flex bison libpcap-devel openssl-devel python-devel swig zlib-devel perl
yum install GeoIP-devel

wget http://www.read.seas.harvard.edu/~kohler/ipsumdump/ipsumdump-1.85.tar.gz

# PF_RING 설치
wget http://downloads.sourceforge.net/project/ntop/PF_RING/PF_RING-6.0.3.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fntop%2Ffiles%2FPF_RING%2F&ts=1444096722&use_mirror=jaist

# mv PF_RING-6.0.3.tar.gz\?r\=http\:%2F%2Fsourceforge.net%2Fprojects%2Fntop%2Ffiles%2FPF_RING%2F PF_RING-6.0.3.tar.gz
# tar xvfz PF_RING-6.0.3.tar.gz
# cd PF_RING-6.0.3/userland/lib
# ./configure —prefix=/opt/pfring
   ==> libnuma 관련 에러메세지가 나올 경우 아래와 같이 심볼릭 링크 설정 
# cd /usr/lib64
# ln -s ./libnuma.so.1 /usr/lib64/libnuma.so
# make install

# cd ../libpcap
# ./configure --prefix=/opt/pfring
# make install

# cd ../tcpdump-4.1.1/
# ./configure --prefix=/opt/pfring
# make install

# cd ../../kernel/
# make
# make install
insmod ./pf_ring.ko
modprobe pf_ring enable_tx_capture=0 min_num_slots=32768 

export CFLAGS=-I/usr/local/include
export LDFLAGS=-L/usr/local/lib

# wget https://www.bro.org/downloads/archive/bro-2.4.tar.gz
# tar xvfz bro-2.4.tar.gz
# ./configure --with-pcap=/opt/pfring
# make
# make install


libpcap 라이브러리 링크 확인
# ldd /usr/local/bro/bin/bro | grep pcap
    libpcap.so.1 => /usr/lib/libpcap.so.1 (0x0000003471e00000)

#vi http-add-post-bodies.bro
  ==> 아래 내용 삽입

# cp ./http-add-post-bodies.bro /usr/local/bro/share/bro/base/protocols/http/
# cd /usr/local/bro/share/bro/base/protocols/http/
# vi __load__.bro

@load ./main
@load ./entities
@load ./utils
@load ./files
@load ./http-add-post-bodies <=  추가

@load-sigs ./dpd.sig 


'Server' 카테고리의 다른 글

User Agent 별 점유율  (0) 2018.03.29
CentOS 7 관리 - APM : Apache, PHP, MariaDB 설치  (0) 2017.07.11
nslookup, dig 사용하기  (0) 2017.01.08
umask란?  (0) 2017.01.08
Linux 사용자 계정  (0) 2017.01.08

[root@s92 etc]# nslookup
www.ttl.co.kr
Server:         211.63.64.11 우리꺼 네임서버
Address:        211.63.64.11#53 (포트)

Non-authoritative answer:
Name:   www.ttl.co.kr
Address: 203.236.17.23

> set querytype=ns
www.ttl.co.kr
Server:         211.63.64.11
Address:        211.63.64.11#53

Non-authoritative answer:
ttl.co.kr       nameserver = gate.sktelecom.com.
ttl.co.kr       nameserver = gate2.sktelecom.com.

Authoritative answers can be found from:
gate.sktelecom.com      internet address = 203.236.1.12
gate2.sktelecom.com     internet address = 203.236.20.11
>

> set querytype=mx
> ttl.co.kr
Server:         211.63.64.11
Address:        211.63.64.11#53

Non-authoritative answer:
ttl.co.kr       mail exchanger = 100 mail.ttl.co.kr.

Authoritative answers can be found from:
ttl.co.kr       nameserver = gate.sktelecom.com.
ttl.co.kr       nameserver = gate2.sktelecom.com.
mail.ttl.co.kr  internet address = 203.236.1.25
gate.sktelecom.com      internet address = 203.236.1.12
gate2.sktelecom.com     internet address = 203.236.20.11
>

> set querytype=ay
unknown query type: ay
> setquerytpye=ay
Server:         211.63.64.11
Address:        211.63.64.11#53

** server can't find setquerytpye=ay: NXDOMAIN
> naver.com
Server:         211.63.64.11
Address:        211.63.64.11#53

Non-authoritative answer:
naver.com       mail exchanger = 10 rcvmail4.naver.com.
naver.com       mail exchanger = 10 rcvmail5.naver.com.
naver.com       mail exchanger = 10 rcvmail1.naver.com.
naver.com       mail exchanger = 10 rcvmail2.naver.com.
naver.com       mail exchanger = 10 rcvmail3.naver.com.

Authoritative answers can be found from:
naver.com       nameserver = ns1.naver.com.
naver.com       nameserver = ns2.naver.com.
rcvmail4.naver.com      internet address = 220.73.146.166
rcvmail5.naver.com      internet address = 211.218.150.164
rcvmail1.naver.com      internet address = 211.218.150.166
rcvmail2.naver.com      internet address = 220.73.146.164
rcvmail3.naver.com      internet address = 220.73.146.165
ns1.naver.com   internet address = 211.218.150.38
ns2.naver.com   internet address = 211.218.150.37

[root@s92 etc]# nslookup -type=any leopit.com
Server:         211.63.64.11
Address:        211.63.64.11#53

Non-authoritative answer:
leopit.com      nameserver = ns.leopit.com.
Name:   leopit.com
Address: 211.238.132.91
leopit.com      mail exchanger = 10 211.238.132.91.leopit.com.

Authoritative answers can be found from:
leopit.com      nameserver = ns.leopit.com.

[root@s92 etc]# host -v -t ns naver.com
Trying "naver.com"
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59820
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 2

;; QUESTION SECTION:
;naver.com.                     IN      NS

;; ANSWER SECTION:
naver.com.              2191    IN      NS      ns2.naver.com.
naver.com.              2191    IN      NS      ns1.naver.com.

;; ADDITIONAL SECTION:
ns2.naver.com.          171391  IN      A       211.218.150.37
ns1.naver.com.          171391  IN      A       211.218.150.38

Received 95 bytes from 211.63.64.11#53 in 158 ms
[root@s92 etc]#

:: dig - 내가 사용할 네임서버를 지정해야함)
[root@s92 etc]# dig @ns.bora.net kldp.org A

; <<>> DiG 9.2.4 <<>> @ns.bora.net kldp.org A
;; global options:  printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 13148
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 0

;; QUESTION SECTION:
;kldp.org.                      IN      A

;; ANSWER SECTION:
kldp.org.               60      IN      A       210.118.94.78

;; AUTHORITY SECTION:
kldp.org.               60      IN      NS      ns.kldp.org.

;; Query time: 123 msec
;; SERVER: 164.124.101.2#53(ns.bora.net) - 내가 지정한 네임서버
;; WHEN: Fri Nov 25 10:46:01 2005
;; MSG SIZE  rcvd: 59

[root@s92 etc]#

'Server' 카테고리의 다른 글

CentOS 7 관리 - APM : Apache, PHP, MariaDB 설치  (0) 2017.07.11
CentOS에서 BRO+PF_RING 설치하기  (0) 2017.01.09
umask란?  (0) 2017.01.08
Linux 사용자 계정  (0) 2017.01.08
이메일 오픈릴레이 테스트  (0) 2017.01.08

1. umask란?

솔라리스에서는 여러 가지 환경 설정 파일을 제공하는데, 이것은 사용자를 더욱 자유롭고 융통성 있게 만들어 준다. 
이런 파일들은 보통 홈디렉토리안에 위치하고 있으며, '.'으로 시작 하는 파일들을 말한다. 
'ls -a' 명령으로 파일의 존재를 확인할 수 있으며, 파일의 이름은 "Resource Configuration"이라는 의미의 
"rc"라는 스펠링으로 끝나는 경우가 많다. 
Umask는 처음 파일이나 디렉토리를 만들면 파일이나 디렉토리에 대한 기본적인 권한(permission)이 자동설정 되는데, 이러한 것은 
시스템파일의 umask에 의하여 결정이 된다. 
umask는 .profile, .cshrc, .bashrc, .login과 같은 사용자 프로파일에서 설정한다.


2. umask의 사용


가) umask는 chmod와는 정반대의 개념으로 사용된다. 예를 들어, chmod 022라는 명령어가 해당 그룹 및 다른 사용자들에게 
쓰기권한을 부여하지만, umask 022는 해당 그룹 및 다른 사용자들에게 쓰기권한을 박탈하는 것이다. 


나) 파일이나 디렉토리를 만들 때마다, 접근권한은 미리 지정한 값으로 정해집니다. 이 값은 파일 생성 모드 
마스크에 의하여 정의된다. 이 마스크 값을 살펴보려면 다음과 같은 명령을 사용한다.


#umask

077


다) umask명령의 결과로 077이라는 숫자 세 개가 보여지는데, 가끔 0이 생략되기도 
한다.
이 숫자값은 파일의 경우 666, 디렉토리의 경우 777을 빼어, 초기 접근 권한값을 파악하는 데, 
사용된다.


라) 마스크 값을 바꾸기


전체 시스템에 영향을 미치기 위해서는 /etc/profile 파일에 umask 값을 수정해줘야 
한다. 49라인쯤에 umask 022 비스무레한 것이 있을 것이다. 그 값을 수정해주면 된다.


현재 접속되어 있는 쉘에 대해서만 일회성으로 바로잡으려면 다음과 같은 명령을 
수행해준다.

#umask nnn

'Server' 카테고리의 다른 글

CentOS에서 BRO+PF_RING 설치하기  (0) 2017.01.09
nslookup, dig 사용하기  (0) 2017.01.08
Linux 사용자 계정  (0) 2017.01.08
이메일 오픈릴레이 테스트  (0) 2017.01.08
실제예(passwd명령어)로 SetUID, SetGID 이해하기  (0) 2017.01.08

관련커맨드 : useradd, usermod, /etc/passwd, /etc/shadow, /etc/default/useradd
 

/etc/default/useradd (사용자를 추가할때 기본설정환경을 부여해주는 파일) 

# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel<?-ml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /><?XML:NAMESPACE PREFIX = O />

 
GROUP 100 : 기본적으로 사용자/그룹 같게 생성.
HOME=/home : 홈디렉토리
INACTIVE=-1 : 사용자생성시 패스워드생성하지않았을때 Lock를 걸어준다는 기본설정옵션(변경시 0,1로 변경)
EXPIRE : 패스워드 만료시간(공백은 기본설정 기본 : 99999)
SHELL=/bin/bash : 기본 쉘 설정
SKEL=/etc/skel : 기본 사용자에 대한 설정

 

[root@host3 root]# ls -l /usr/sbin/adduser 

lrwxrwxrwx 1 root root 7 8월 28 02:29 /usr/sbin/adduser -> useradd

[root@host3 root]#

 

 useradd

[-c comment] 코멘트
[-d home_dir] 사용자디렉토리
[-e expire_date] 유효기간
[-f inactive_time] 비활성일수 - 패스워드 만료후 계정이 영구히 말소될때까지의 기간
[-g initial_group] 기본그룹
[-G group[,...]] 보조그룹
[-m [-k skeleton_dir] | -M] - 사용자 디렉토리가 존재하지 않을때만 생성
[-p passwd]
[-s shell] 
[-u uid [ -o]] 
[-n] 사용자 계정추가 기본모드를 지정하지 않을때 
[-r] login

[root@host3 root]# useradd -c 박성수 -e 2004-12-12 -d /home/sspark2 -u 601 -s /bin/ksh -p 12345 sspark2

위에서 사용한 옵션을 간단히 설명하면 다음과 같다.

 . -c 박성수 : 계정사용자의 간단한 설명
 . -e 2004-12-12 : 계정사용 종료일자
 . -d /home/sspark2 : 홈디렉토리 위치
 . -u 601 : UID 601로 지정
 . -s /bin/ksh : 사용할 기본쉘을 Korn Shell로 지정
 . -p 12345 : 패스워드를 12345로 지정
 . -D : 현재 default로 설정 되어 있는 값들을 보여줌 (/etc/default/useradd 에 정의)
 . sspark2 : 생성할 계정명
[root@s92 ~]#

 

 usermod

[-c comment]
[-d home_dir [ -m]]
[-e expire_date] 
[-f inactive_time]
[-g initial_group] 
[-G group[,...]]
[-l login_name] [-p passwd]
[-s shell] 
[-u uid [ -o]] 
[-L|-U] login

'Server' 카테고리의 다른 글

nslookup, dig 사용하기  (0) 2017.01.08
umask란?  (0) 2017.01.08
이메일 오픈릴레이 테스트  (0) 2017.01.08
실제예(passwd명령어)로 SetUID, SetGID 이해하기  (0) 2017.01.08
iptables  (0) 2017.01.08

오픈릴레이 테스트 

명령 프롬프트 창에서 

telnet x.x.x.x 25 번으로 접속을 하면

220 test3.xxxnet.co.kr ESMTP Sendmail 8.12.8/8.12.8; Tue, 7 Sep 2004 19:09:4
7 +0900

위의 메세지가 뜬다면
다음 명령 실행을 한다.

helo
mail from: test@test.com
rcpt to: administrator@xxxnet.co.kr

205 2.1.0 administrator@xxxnet.co.kr

rcpt to: admin@xxx.com
unable to relay 

위의 메세지가 나오면 

오픈릴레이가 아니라는 것입니다.

'Server' 카테고리의 다른 글

umask란?  (0) 2017.01.08
Linux 사용자 계정  (0) 2017.01.08
실제예(passwd명령어)로 SetUID, SetGID 이해하기  (0) 2017.01.08
iptables  (0) 2017.01.08
아파치 인증창 띄우기  (0) 2017.01.07

/etc/passwd 파일은 여러 가지로 보안의 문제점을 가지고 있습니다. 패스워드를 변경하기 위해 사용하는 명령어인 passwd라는 명령어는 /bin/passwd에 명령어 형태로 존재합니다. 물론 이 명령어는 계정을 가지 사용자이면 누구나 사용가능합니다. 다음의 퍼미션을 확인해 보도록 하겠습니다.

 

패스워드 보관파일

[root@host /root]# ls -l /etc/passwd

-rw-r--r--   1 root   root  1251 Nov 29 14:55 /etc/passwd

 

패스워드변경 명령어

[root@host /root]# ls -l /usr/bin/passwd

-r-s--x--x  1 root  root  10704 Apr 15  1999 /usr/bin/passwd

 

위의 예에서 알수 있듯이 계정사용자의 정보를 보관하고 있는 파일인 passwd파일은 거의 대부분 /etc/passwd에 존재하며, 이 파일의 퍼미션은 644입니다. 즉, 누구나 읽어 볼 수는 있습니다. 단 수정가능한 사용자는 이 파일의 소유자인 root만이 가능하지만, 흔히 계정을 가진 사용자라면 누구나 이파일에 있는 자신의 패스워드를 변경가능하지 않은가? 이상하지 않습니까?

이것의 비밀은 setuid라는 것에 있습니다.

setuid를 설명하기 전에 유닉스시스템에서 명령어가 실행되는 절차를 확인해 보겠습니다.

 

2. 명령어 실행절차

일반적으로 시스템사용자가 명령어를 실행시켰을 때 명령어를 찾아서 실행시키는 경로와 절차는 다음과 같습니다.

  1. 현재 작업디렉토리에서 찾음.
  2. $PATH에서 찾음
  3. 찾은후에 실행권한 체크
  4. 권한이 있다면 실행시킨 사용자의 UID로 실행
  5. 권한이없다면 이 파일이 Setuid bit가 있는가를 확인
  6. Setuid bit가 있다면 명령어 소유주의 UID(Effective UID)로 실행

 

3. SetUID 파일 찾기

일반적으로 시스템에서 SetUID로 실행가능한 명령어는 몇 개로 제한이 되어있습니다. 이미 설정되어있는 명령어외에 새롭게 생성된 SetUID파일(명령어)가 있나를 정기적으로 체크해보셔야합니다.

다음과 같은 find 명령어로 SetUID파일을 찾아보시기 바랍니다.

[root@host /root]# find / -user root -perm -4000 -print -xdev

/bin/login
/bin/su
/bin/mount
/bin/umount
/bin/ping
/sbin/pwdb_chkpwd
/sbin/dump
/sbin/restore

그리고 /usr/bin/passwd라는 명령어의 퍼미션정보를 보면 s라는 것이 있습니다. 이것이 setuid bit입니다.

일반사용자가 자기의 패스워드를 변경하기 위해 "passwd"라는 명령어를 사용했을 때는 s라는 퍼미션(SetUID 퍼미션) 때문에 root권한으로 실행이 되는 것입니다. 따라서 /etc/passwd파일이 root소유임에도 불구하고 일반사용자가 변경이 가능하게 되는 것입니다.

그런데, 해커들은 바로 이런 SetUID퍼미션이 설정되어 있으면서 root소유로 되어있는 명령어들을 해킹에 이용하게되며 가장 대표적인 명령어가 passwd라는 명령어입니다.

즉, 다시말씀드려서 passwd라는 명령어가 실행이 될 때 root 권한으로 /etc/passwd내용을 변경하게되는데 바로 이싯점에 즉 root권한으로 실행이 되고 있을 때에 정규적인 작업만을 하게하는 것이 아니라 자기가 목적하는 악의적인 작업까지 하게 만드는 것입니다.

 

4. SetUID 파일 설정하기

일반적으로 파일퍼미션은 "chmod 777 파일이름"등과 같이 숫자로 지정하는 것이 일반적입니다.

하지만 SetUID를 지정할 때에는 이 3자리숫자앞에 SetUID퍼미션을 하나더 사용하면 됩니다.

[root@hlxsvr /imsi]# ls -l
-rw-r--r--  1 root   root        0 Oct 27 14:06 testfile

[root@hlxsvr /imsi]# chmod 4755 testfile
[root@hlxsvr /imsi]# ls -l
-rwsr-xr-x    1 root     root            0 Oct 27 14:06 testfile*

 

5. SetUID, SetGID, Sticky-bit

SetUID설정을 할 때와 마찬가지로 퍼미션의 3자리숫자앞에 2또는 1을 함께입력하면 SetGID와 Sticky-bit을 설정할 수 있습니다.

4000 : SetUID설정

2000 : SetGID설정

1000 : Sticky-bit설정

참고로 Sticky-bit설정은 대부분 /tmp 디렉토리에 설정되어 있는데, 가장 흔한 용도는 공용디렉토리로 사용하기 위한 것입니다.  즉, Sticky-bit로 설정된 디렉토리는 모든 사용자가 write가능하며 write된 파일은 그 사용자의 소유되 됩니다. Sticky-bit 때문에 가능한 것이지요. 물론 삭제할 수 있는 권한또한 root와 해당사용자만이 가능합니다.

따라서 사용자들에게 공용으로 사용될 디렉토리를 Sticky-bit로 설정해두면 이런 것들이 가능하게 됩니다.


// cafe.naver.com/bestreal/170

'Server' 카테고리의 다른 글

Linux 사용자 계정  (0) 2017.01.08
이메일 오픈릴레이 테스트  (0) 2017.01.08
iptables  (0) 2017.01.08
아파치 인증창 띄우기  (0) 2017.01.07
CentOS/Apache SSL 설정  (0) 2017.01.06
이번시간에는 Iptables사용법과 기본적인 firewall구성법에 대해서 알아보도록 하겠다. 

이제 Iptables를 사용하기 위한 기본적인 설정에 대해서 알아보자. Iptables는 Kernel 2.4.x 기반의 리눅스 설치시에 기본으로 설치되어있고 /sbin 디렉토리 아래에 있다. 그리고 iptables와 ipchains는 동시에 사용할 수 없으므로 우선 ipchains의 모듈을 내려줘야 한다. 

아래의 그림처럼 lsmod를 해보고 만약 ipchains 모듈이 올라와 있다면 rmmod ipchains 명령으로 모듈을 내려줘야 iptables 사용이 가능하다. 


이제 Iptables에 대해서 본격적으로 알아보도록 하자. 

기본적으로 Iptables에는 세가지 chain이 있고 모든 패킷은 이 세가지 chain중 하나를 통과하게 된다. 이 세가지 chain은 INPUT, OUTPUT, FORWARD chain인데 우선 여러분의 컴퓨터로 들어가는 모든 패킷은 INPUT chain을 통과한다. 그리고 여러분의 컴퓨터에서 나가는 모든 패킷은 OUTPUT chain을 통과한다. 그리고 하나의 네트워크에서 다른 곳으로 보내는 모든 패킷은 FORWARD chain을 통과한다.


Iptables가 작동하는 방식은 이들 각각의 INPUT, OUTPUT, FORWARD chain에 당신이 어떠한 rule을 세우는 지에 따라 달라진다. 
예를 들어 당신이 HTML 페이지를 요청하기 위해 www.yahoo.com에 패킷을 보낸다면 이 패킷은 우선 당신 컴퓨터의 OUTPUT chain을 통과하게 된다. 
그러면 kernel에서 OUTPUT chain의 rule을 확인하고 rule과 match가 되는지 확인을 하게된다. rule중에서 최초로 match되는 것에 의해 당신이 보낸 패킷의 운명이 결정되는 것이다. 
만약 어떤 rule과도 match되지 않는다면 전체 chain의 정책이 ACCEPT냐 DROP이냐에 따라 패킷의 운명이 결정될 것이다. 그러고 나서 Yahoo! 에서 응답하는 패킷은 당신의 INPUT chain을 통과하게 될 것이다. 

IP 주소 막기 

이제 기초적인 개념에 대해서 알아봤으니 실제로 사용해 보도록 하겠다. 

Iptable을 사용할 때에는 기억해야 할 많은 옵션들이 있으므로 man 페이지(man iptables)를 잘 활용하는 것이 중요하다. 이제 특정 IP를 조종하는 법에 대해서 알아보자. 우선 당신이 200.200.200.1 이라는 IP로부터 오는 모든 패킷을 막고 싶어한다고 가정하자. 우선 -s 옵션이 사용되는데 여기에서 source IP나 DNS name을 지칭할 수 있다. 그러므로 다음과 같이 함으로써 이 IP를 지칭할 수 있다. 


./iptables -s 200.200.200.1 


하지만 위처럼만 명령을 내리면 kernel은 위의 주소에서 오는 패킷을 어떻게 처리해야 할 지를 알 수가 없다. 그러므로 -j 옵션으로 그 패킷을 어떻게 처리해야 하는지 결정해야 한다. 일반적으로 3가지 옵션이 있는데 ACCEPT, DENY, DROP이다. 

ACCEPT는 대충 예상할 수 있듯이 패킷을 허용하는 옵션이다. DENY 옵션은 컴퓨터가 연결을 허용하지 않는다고 메시지를 돌려 보내는 옵션이다. 그리고 DROP 옵션은 패킷을 완전히 무시해 버린다. 만약 우리가 이 IP에 대해 확실히 의심이 간다면 우리는 DENY 대신에 DROP을 사용해야 할 것이다. 
그러므로 결과적으론 다음과같이 옵션을 주면 된다. 


./iptables -s 200.200.200.1 -j DROP 


하지만 이 명령만으로는 아직 컴퓨터가 명령을 이해할 수가 없다. 우리는 한가지를 더 추가해야 되는데 바로 어떤 chain의 rule로 적용시킬지 결정해야 하는 것이다. 
여러분은 -A 옵션을 사용해서 이를 결정할 수 있다. 즉 아까 위에서 본 INPUT, OUTPUT, FORWARD 옵션 중에서 하나를 선택해야 하는 것이다. 이 옵션을 줌으로써 당신이 선택한 chain의 맨 아래부분에 새로운 rule이 추가될 것이다. 
따라서 우리는 우리에게 들어오는 패킷을 차단하고 싶으므로 INPUT 옵션을 주면 되는 것이다. 그러므로 전체 명령은 다음과 같다. 


./iptables -A INPUT -s 200.200.200.1 -j DROP 



이 한 줄의 명령으로 200.200.200.1로부터 오는 모든 패킷을 무시할 수 있다. 옵션의 순서는 바뀌어도 상관이 없다. 즉 -j DROP이 -s 200.200.200.1 보다 앞에 가도 상관이 없다. 만약 그 반대로 200.200.200.1로 패킷이 못가도록 하려면 INPUT 대신에 OUTPUT을, -s 대신에 -d(destination) 옵션을 주면된다.

 

  • Service 차단하기


  • 만약 우리가 해당 컴퓨터로부터 telnet 요청만 무시하고싶다면 어떻게 해야 하는가? 이것도 그다지 어렵지 않다. 일단 큰 범주로 나누어 봤을 때 적어도 3가지의 프로토콜 - TCP, UDP, ICMP - 가 있다. 다른 대부분의 서비스와 마찬가지로 telnet은 TCP 프로토콜로 작동한다. -p 옵션으로 우리는 프로토콜을 결정할 수 있다. 하지만 TCP라고만 옵션을 줘서는 컴퓨터가 인식하지를 못한다. telnet은 TCP프로토콜로 작동하는 특정 서비스에 불과하기 때문이다. 우선 우리가 프로토콜을 TCP로 설정한 다음에는 --destination-port 옵션으로 해당하는 port를 설정해 줘야한다. 
    우선 telnet의 포트번호는 23번이다. 포트번호 대신에 telnet이라 써도 상관없다. 
    여기서 source port 와 destination port를 혼동하면 안된다. 즉 클라이언트는 어떤 포트로도 작동할 수 있는 반면에 서버는 23번 포트로 작동하기 때문이다. 즉 특정 서비스를 차단하기 위해서는 -destination-port를 이용하면 되고, 그 반대는 -source-port를 이용하면 된다. 이제 이들 옵션을 합쳐서 아래와 같이 명령을 주면 된다. 

    ./iptables –A INPUT –s 200.200.200.1 –p tcp --destination-port telnet –j DROP 


    그리고 IP의 영역을 선택하고 싶다면 200.200.200.0/24 와 같이 설정하면 된다. 이것은 200.200.200.* 에 해당하는 모든 IP를 선택하는 것과 같다. 

    선택적인 차단 

    이제 좀더 심화된 내용에 대해서 알아보자. 우선 여러분의 컴퓨터가 local area network(LAN)에 있고, Internet에 접속 가능하다고 가정한다. 알다시피 LAN은 eth0으로 Internet 연결은 ppp0으로 구분할 수 있다. 이제 다시 다음과 같이 가정해 보자. 우리는 telnet 서비스를 LAN상의 컴퓨터에게는 서비스하고 보안상 Internet상에서는 접근하지 못하도록 하고 싶다. 이것 역시 쉽게 구성할 수 있다. 우리는 input interface에 대해서는 -i 옵션을 output interface에 대해서는 -o 옵션을 사용할 수 있다. 즉 다음처럼 명령을 주면 된다. 

    ./iptables –A INPUT –p tcp --destination-port telnet –i ppp0 –j DROP 



    이렇게 함으로써 우리는 LAN상의 사용자는 telnet을 사용하고 그밖에 Internet상의 사용자는 telnet 을 사용하지 못하도록 할 수 있다. 

    Rule 순서에 관하여 
    이제 다음 단계로 들어가기에 앞서서 rule을 조종하는 다른 방법에 대해서 간단히 알아보자. 
    Iptables의 chain에서는 먼저 등록 된 rule이 효력을 발생하기때문에 등록을 하는 순서가 중요하다. 모든 것을 거부하는 설정이 먼저오게 되면 그 이후에 포트를 열어주는 설정이 와도 효과가 없다. 그러므로 허용하는 정책이 먼저오고 나서 거부하는 정책이 와야한다. 

    –A 옵션을 줌으로써 우리는 새로운 규칙을 chain의 맨 아래에 추가하게 된다. 즉 chain상의 상위 rule이 먼저 작동하기 때문에, 만일 새로 추가하는 rule을 먼저 작동시키기 위해서는 -I 옵션을 줌으로써 새로운 rule을 원하는 위치에 놓을 수 있다. 예를 들어 INPUT chain의 가장 위에 어떤 rule을 놓고 싶다면 “-I INPUT 1” 이라 명령하면 된다. 그리고 다른 위치로 놓고 싶다면 1을 다른 숫자로 바꿔주면 된다. 

    그리고 이미 위치된 rule을 다른 위치로 바꾸고 싶다면 -R 옵션을 주면 된다. -I 옵션을 주는 것과 마찬가지로 사용할 수 있는데 다만 -I옵션을 사용해서 1의 위치에 놓으면 다른 rule들이 밑으로 한칸씩 내려가는 반면 -R옵션을 사용해서 1의 위치에 놓으면 그 위치의 rule은 삭제된다. 

    그리고 끝으로 rule을 삭제하고 싶다면 -D옵션과 숫자를 사용하면 되고, -L 옵션을 사용하면 작성된 모든 rule의 목록을 보여주고, -F 옵션을 주면 해당 chain의 모든 rule을 삭제한다. 그리고 만약 chain을 명시하지 않았다면 모든 것을 flush할 것이다.

     

  • SYN Packets

  • 좀더 심화된 내용에 대해서 알아보자. 우선 패킷들은 특정 프로토콜을 사용한다. 그리고 프로토콜이 TCP라면 역시 특정 port를 사용한다. 그러므로 여러분 컴퓨터의 모든 포트를 막음으로써 보안을 할 수 있을 것이다. 
    하지만 당신이 다른 컴퓨터에 패킷을 보내면 그 컴퓨터는 당신에게 다시 응답을 해야한다. 그러므로 만약 당신에게 들어오는 모든 포트를 막아버린다면 당신에게 응답하는 패킷도 결국 못 들어오므로 connection을 하는 의미가 없을 것이다. 

    하지만 다른 방법이 있다. 두 컴퓨터가 TCP connection으로 패킷을 주고 받는다면 그 connection은 우선 초기화가 되어야 한다. 

    이것은 바로 SYN packet이 담당한다. SYN packet은 단순히 다른 컴퓨터에게 주고 받을 준비가 되었다는 것만 알려주는 초기화 기능만을 한다. 이제 서비스를 요청하는 컴퓨터는 우선적으로 SYN packet을 보낸다는 것을 알게 되었다. 그러므로 들어오는 SYN packet만 막기만 하면 다른 컴퓨터가 당신 컴퓨터의 서비스를 이용하지 못하게 할 수 있고, 하지만 당신은 그들과 통신할 수 있는 것이다. 

    즉 이와 같이 하면 당신이 먼저 패킷을 보내서 요청이 들어오는 것이 아니면 모두 무시해 버리게 된다. 
    이 옵션을 사용하기 위해서는 선택한 프로토콜 뒤에 --syn이라고 명령을 넣으면 된다. 이제 인터넷으로부터 오는 모든 연결을 막기위해서는 다음과 같이 rule을 정하면 된다. 

    ./iptables –A INPUT –i ppp0 –p tcp --syn –j DROP 


    당신이 만약 웹 서비스를 운영하는 것이 아니라면 이것은 유용한 rule이 될 것이다. 

    만약 당신이 웹서비스를 위해 하나의 포트(예를들어 80번-HTTP)만 열어두고 싶다면 역시 한가지 방법이 있다. 
    바로 “!” 마크를 사용하면 되는데 많은 프로그래밍 언어에서처럼 “!”은 “not”을 의미한다. 

    예를들어 80번 포트만 제외하고 모든 SYN packet들을 막고싶다면 다음과 같이 하면 된다. 


    ./iptables –A INPUT –i ppp0 –p tcp --syn --destination-port ! 80 –j DROP 


    다소 복잡한듯해도 간단한 rule이다. 

    Chain 정책 

    마지막으로 한가지 남은 것이 있다. 이것은 chain의 정책을 바꾸는 것으로 INPUT과 OUTPUT chain은 디폴트로 ACCEPT로 정해져 있고, FORWARD chain은 DENY로 정해져 있다. 
    만약 당신의 컴퓨터를 라우터로 사용하려면 당신은 FORWARD chain의 정책을 ACCEPT로 설정하고 싶을 것이다. 

    이럴때 어떻게 해야하는가? 이것은 매우 간단하다. -P 옵션을 사용하면 된다. 즉 FORWARD chain을 ACCEPT로 정하기 위해선 다음과 같이 명령을 내리면 된다. 


    ./iptables -P FORWARD ACCEPT 

     

     


  • iptables, 스크립트로 만들어 사용하기

  • 이번에는 iptable 명령어를 편리하게 스크립트로 만들어서 사용해 보자 
    일단 iptables라는 파일을 다음처럼 작성해 보자. 파일의 위치는 /etc/sysconfig/ 아래에 두도록 하겠다. 



    --begin script-- 
    #!/bin/sh 

    # 우선 모든 Rule을 정리한다. 

    /sbin/iptables -F 

    # 다음으로 각각에 대한 정책을 세운다. 

    /sbin/iptables -P INPUT DROP 
    /sbin/iptables -P OUTPUT ACCEPT 
    /sbin/iptables -P FORWARD DROP 

    # localhost에서의 traffic을 받아들인다. 

    /sbin/iptables -A INPUT -i lo -j ACCEPT 

    # 확립된 연결에 대한 Packet을 받아들인다. 

    /sbin/iptables -A INPUT -i eth0 -p tcp ! --syn -j ACCEPT 

    # DNS 응답을 받아들인다. 

    /sbin/iptables -A INPUT -i eth0 -p tcp --source-port 53 -j ACCEPT 
    /sbin/iptables -A INPUT -i eth0 -p udp --source-port 53 -j ACCEPT 

    # 인증 연결을 거부한다(그렇지 않을 경우 메일서버가 오랫동안 타임아웃 상태가 될 것이다.) 
    /sbin/iptables -A INPUT -i eth0 -p tcp --destination-port 113 -j REJECT 

    # echo나 목적지에 도착 못하거나 시간 초과된 icmp packet들을 받아들인다. 

    /sbin/iptables -A INPUT -i eth0 -p icmp --icmp-type 0 -j ACCEPT 
    /sbin/iptables -A INPUT -i eth0 -p icmp --icmp-type 3 -j ACCEPT 
    /sbin/iptables -A INPUT -i eth0 -p icmp --icmp-type 11 -j ACCEPT 

    --end script— 



    위의 스크립트는 하나의 예에 불과하고 기타 ssh나 ftp, samba등을 이용하기 위한 설정사항을 직접 작성해야 한다. 
    파일 작성이 끝났으면 파일에 실행권한을 줘야한다. 보안상 root만 실행할 수 있도록 권한을 변경한 후 위의 스크립트를 실행하면 된다. 

    확인을 하려면 /sbin/iptables –L 이라고 하면 방금 실행시킨 스크립트가 나올 것이다. 

    그리고 부팅시마다 실행을 시키려면 /etc/rc.d/rc.local 파일 맨 아래 부분에 다음처럼 넣으면 된다. 

    if [ -f /etc/sysconfig/iptables ]; then 
    /etc/sysconfig/iptables 
    fi


    어드민 페이지에 이용하시면 될듯 합니다. 모든게 아파치가 알아서 해주니 참 편합니다.
    해당디렉토리의 모든 파일에 다 적용됩니다.

    먼저 해당 디렉토리의 아파치설정이 FileInfo AuthConfig 로 되어있는지 확인해야 됩니다.
    안되어있으면 수정해줘야합니다. httpd.conf 파일에서 확인해보세요
    # vi /usr/local/apache/conf/httpd.conf

    쭉쭉~ 내려가다 보시면 350라인쯤에 요런게 있습니다.

    ..
    ..
    AllowOverride None

    위와같이 AllowOverride None이나 All로 되어있으면 안됩니다. 위의 라인을 다음과같이 수정합니다.

    AllowOverride FileInfo AuthConfig


    일단 .htaccess 파일을 맹급니다
    인증을 걸고싶은 디렉토리에서 아래와 같이 파일을 작성하세요

    AuthName "access only members" 
    AuthType Basic 
    AuthUserFile 디렉토리의절대경로/.htpasswd 
    AuthGroupFile /dev/null 
    ErrorDocument 401 
    require valid-user

    다음은 .htaccess 를 생성한 디렉토리에서 htpasswd를 실행해줍니다.

    htpasswd -c .htpasswd 아이디 
    New password: (사용할 패스워드 입력) 
    Re-type new password: (사용할 패스워드 재입력) 
    Adding password for user hostway 

    사용자 추가 : htpasswd .htpasswd 추가아이디 
    패스워드 변경 : htpasswd .htpasswd 아이디

    'Server' 카테고리의 다른 글

    실제예(passwd명령어)로 SetUID, SetGID 이해하기  (0) 2017.01.08
    iptables  (0) 2017.01.08
    CentOS/Apache SSL 설정  (0) 2017.01.06
    FTP 정리 Active/Passive 그리고 TFTP  (0) 2017.01.06
    윈도우 net user 커맨드  (0) 2017.01.06

    + Recent posts