[firewalld]
CentOS7부터 많은 부분이 통합되고 추상화 되었다. CentOS6까지 방화벽 설정파일을 변경하고 iptables 서비스를 재시작하여 방화벽 규칙을 설정하였다면, CentOS7은 방화벽 규칙을 관리하는 데몬(firewalld)가 작동되고 이 방화벽 데몬이 제공하는 DBUS API를 통해 방화벽을 제어한다. GUI환경에서는 firewall-config를 이용하여 방화벽설정을 할 수 있으며, CUI환경에서는 firewall-cmd를 이용하여 방화벽 설정을 할 수 있다. 방화벽을 제어하려는 별도 어플리케이션을 개발할 때도 filrewalld API를 사용하면 설정파일 변경에 따른 각 방화벽 관리 어플리케이션과의 충돌을 피할 수 있다. 
firewalld에서 사용되는 용어, GUI 프로그램인 firewall-config, CUI 프로그램인 firewall-cmd에 대해 알아보겠다.


[firewalld에서 사용되는 용어]
일반적인 서비스 오픈을 위해서는 앞에서 설명한 정도 방화벽 사용법을 알면 될 것이다. CentOS7에서 도입된 firewalld에 대해 자세히 보면 런타임, 영구적, 영역, 서비스등의 용어들이 사용되는 것을 알 수 있다.

① 설정 : 런타임(run time)
런타임(실행시간)에만 설정한다는 것이다. 즉, 설정 내역이 메모리에 상주되어 있어 적용은 되지만, Firewalld를 다시 불러오거나, 시스템을 재시작 하면 설정된 내역은 지워지게 된다. 

② 설정 : 영구적(permanent)
영구적으로 설정한다는 것이다. 즉, Firewalld를 다시 불러오는 경우 영구적으로 설정된 내역에서 불러오고, 시스템 재시작시 영구적 설정에서 불러와 방화벽을 설정하게 된다. 앞의 http, https 허용 예에서도 영구적 설정을 하였다. 런타임 설정내역을 저장할 수 있는 방법을 제공하지 않기 때문에 영구적 설정으로 관리하는 것이 효율적이다.

③ 영역(zone)
네트워크 연결 신뢰도에 따라 영역을 구분하여 사용할 수 있다. 기본 영역은 public이며 영역을 추가/편집/삭제(일부영역 편집/삭제 불가)할 수 있다. 이 영역을 활용하면 네트워크 상황에 따라 여러 가지 잘 정의된 방화벽룰을 효율적으로 사용할 수 있다. 예를 들면 일반적인 환경에서는 public영역을 초기 구축 단계에서 모든 접속을 허용해야 할 경우 trusted영역을, 시스템 운영중 외부접속 차단을 위해 work영역 또는 drop, block영역을 사용할 수 있다. 
기본적으로 정의된 영역에 대해 알아보자.

 

 

 

 

 

[참 고]
REJECT와 DROP
방화벽 설정에서 패킷을 거부(reject) 또는 폐기(drop)할 수 있다. 거부와 폐기의 차이는 다음과 같다.
REJECT(거부) : 패킷을 받으면 거부한다는 ICMP패킷을 보내게 된다. 기본은 port-unreachable이며 icmp-net-unreachable,   icmp-host-unreachable,   icmp-port-unreachable, icmp-proto-unreachable, icmp-net-prohibited, icmp-host-prohibited, icmp-admin-prohibited등을 선택해서 거부할 수 있다.
DROP(폐기) : 패킷을 받으면 아무런 응답을 하지 않고 버린다.

④ 서비스(service)
각 서비스별 정의된 프로토콜, 포트, 모듈, 목적지에 대해 정의가 된 서비스이다. 여기서 서비스는 /etc/service에 명시된 내용과는 조금 다르다. 
firewalld의 서비스는 /usr/lib/firewalld/services/*.xml 파일에 명시되어 있다. 여러 서비스 중 ftp 서비스 파일(ftp.xml) 내용을 살펴보자.

~]# cat /usr/lib/firewalld/services/ftp.xml
<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>FTP</short>
  <description>FTP is a protocol used for remote file transfer. If you plan to make your FTP server publicly available, enable this option. You need the vsftpd package installed for this option to be useful.</description>
  <port protocol="tcp" port="21"/>
  <module name="nf_conntrack_ftp"/>
</service>

위 내용을 보면, FTP 서비스에 대한 설명과 프로토콜(tcp), 포트(21)가 명시되어 있고, FTP passive 모드를 위해 사용하는 nf_conntrack_ftp 모듈이 설정되어 있다. FTP 서비스를 선택하게되면 nf_conntrack_ftp 모듈이 로드된다

 


[방화벽 CUI 설정 (firewall-cmd)]
firewalld의 CUI인터페이스인 firewall-cmd에 대해 알아보기 이전에 웹서버를 운영하기 위해 HTTP, HTTPS 포트를 허용하는 방법에 대해 알아보자.

터미널 창에서 다음과 같이 입력한다.

~]# firewall-cmd   --permanent   --add-service=http   --add-service=https
success
~]# firewall-cmd --reload
success
~]# firewall-cmd --list-all
public (default)
  interfaces:
  sources:
  services: dhcpv6-client http https ssh
  ports: 5900-5910/tcp
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules:

firewall-cmd명령을 사용하여 위와 같이 룰을 추가할 수 있다. --permanent 옵션은 영구적인 설정을 의미하며 옵션을 주지 않으면 런타임 환경에서 적용되기 때문에 서버를 리부팅하면 룰이 없어진다. --add-service 옵션을 사용하여 오픈하고자 하는 서비스를 지정한다. 만약 이미 추가된 서비스를 제거하기 위해서는 --remove-service 옵션을 사용한다. 다음으로 --reload 옵션을 사용하여 영구적으로 설정된 룰을 런타임 환경에 적용시킨다. 적용이 완료된 후 --list-all 옵션으로 설정된 룰을 확인한다.

방화벽 오픈 여부를 위해 다른 리눅스 컴퓨터에서 다음과 같이 확인해 보자.

~]#  nmap 192.168.0.201 -p 443,80,22,25

Starting Nmap 5.21 ( http://nmap.org ) at 2015-03-24 19:57 KST
Nmap scan report for 192.168.0.201
Host is up (0.00041s latency).
PORT    STATE    SERVICE
22/tcp  open     ssh
25/tcp  filtered smtp
80/tcp  closed   http
443/tcp closed   https

Nmap done: 1 IP address (1 host up) scanned in 0.03 seconds

nmap명령어를 방화벽 설정 내역을 확인할 수 있다. 22/tcp(SSH)는 오픈된 것이 확인되고, 25/tcp(SMTP)는 filtered되었다. 웹서비스 포트 80/tcp(HTTP), 443/tcp(HTTPS)는 방화벽에서 차단된 것은 아니지만 닫혀 있다고 나타난다. 

[참 고]
firewall-cmd 자동완성 기능
CentOS7의 통합된 명령어들은 자동완성 기능을 제공한다. 자동완성이란 옵션의 몇몇 단어만 입력하고 <TAB>키를 누르게 되면 관련 옵션의 단어가 자동완성된다. 또 여러개의 가능한 옵션이 있을때는 <TAB>키를 여러번 누르면 옵션 리스트가 나타난다. 아래와 같이 옵션을 모를 때는 <TAB>키를 여러번 누르면 사용할 수 있는 옵션 리스트가 나타난다.

~]#  firewall-cmd --permanent --
--add-forward-port=                   --list-rich-rules
--add-icmp-block=                     --list-services
--add-interface=                      --list-sources
--add-lockdown-whitelist-command=     --query-forward-port=
... 

[영역(zone) 변경]
앞에서 설명한 영역(zone)은 다음과 같은 방법으로 변경할 수 있다.

~]#  firewall-cmd --set-default-zone=block
success

기본 영역을 block으로 변경하였다. 설정 가능한 영역은 영역값을 입력하지 않고 <TAB>키를 여러번 누르면 다음과 같이 확인할 수 있다.

~]#  firewall-cmd --set-default-zone=<TAB><TAB>
block     dmz       drop      external  home      internal  public    trusted   work

설정된 내역은 다음과 같이 확인할 수 있다.

~]#  firewall-cmd --list-all
block (default, active)
  interfaces: eth0
  sources:
  services:
  ports:
  masquerade: no
  forward-ports:
  icmp-blocks:
  rich rules:

위 결과를 보면 기본영역이 block으로 변경된 것을 확인할 수 있다. 물론 --get-default-zone 옵션으로 기본영역을 확인할 수 있다.

[서비스(service) 수정]
GUI와 다르게 firewall-cmd는 서비스 추가/수정 방법을 제공하지 않는다. 다음과 같은 방법으로 미리 정의된 서비스를 편집하여 사용할 수 있다. 리눅스 서버 접속을 위해 SSH를 가장 많이 사용한다. 많이 사용되는 만큼 인터넷에 공개된 서버의 경우 사전(dictionary) 공격을 통해 접속정보를 획득하려는 시도가 많이 일어난다. 이러한 접근 시도를 회피하기 위해 SSH 기본포트(tcp/22)를 1024이후 잘 알려지지 않은 포트로 변경한다. 이러한 경우 SSH 서비스에 대한 서비스 포트 또한 변경이 되어야 하기에 다음과 같이 방화벽 설정을 변경해 보도록 하자.

~]#  cp /usr/lib/firewalld/services/ssh.xml /etc/firewalld/services/

서비스가 정의된 파일(ssh.xml)을 /usr/lib/firewalld/services 디렉토리에서 /etc/firewalld/services 디렉토리로 복사한다.
/etc/firewalld/services/ssh.xml 파일을 열어 다음과 같이 수정한다.

<?xml version="1.0" encoding="utf-8"?>
<service>
  <short>SSH</short>
  <description>Secure Shell (SSH) is a protocol for logging into and executing commands on remote machines. It provides secure encrypted communications. If you plan on accessing your machine remotely via SSH over a firewalled interface, enable this option. You need the openssh-server package installed for this option to be useful.</description>
  <port protocol="tcp" port="15322"/>
</service>

필자는 SSH포트로 15322를 입력하였다.

~]#  firewall-cmd --reload
success
--reload옵션으로 변경내역을 반영한다. 

~]#  iptables -nL |grep 15322
ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0      tcp dpt:15322 ctstate NEW

firewall-cmd으로는 서비스의 변경내역을 확인할 수 없었다. iptables명령을 사용하여 변경된 서비스 포트를 확인하였다.

[포트 및 프로토콜 직접 추가]
앞에서 다뤘던 서비스를 이용하여 방화벽을 관리하기도 하지만, 앞 예와 같이 미리 정의된 서비스의 포트를 변경하는 경우는 포트 및 프로토콜을 직접 추가하는 것이 방화벽 관리에 더 효율적이다. SSH 포트를 변경한 경우 서비스 리스트에서는 바로 확인하기 어렵기 때문에 서버를 이전하는 경우 실수할 수 있다. 
 VNC접속을 위해 포트 및 프로토콜을 직접 추가해 보도록 하자.

~]# firewall-cmd --permanent --add-port=5900-5910/tcp
success
~]# firewall-cmd --reload
success
~]# firewall-cmd --list-all
public (default, active)
  interfaces: eth0
  sources: 
  services: dhcpv6-client http https ssh
  ports: 5900-5910/tcp
  masquerade: no
  forward-ports: 
  icmp-blocks: 
  rich rules: 

firewall-cmd명령을 사용하여 위와 같이 룰을 추가할 수 있다. --permanent 옵션은 영구적인 설정을 의미하며 옵션을 주지 않으면 런타임 환경에서 적용되기 때문에 서버를 리부팅하면 룰이 없어진다. --add-port 옵션을 사용하여 오픈하고자 하는 포트 및 포트범위/프로토콜을 지정한다. 만약 추가된 포트를 제거하기 위해서는 --remove-port 옵션을 사용한다. 다음으로 --reload 옵션을 사용하여 영구적으로 설정된 룰을 런타임 환경에 적용시킨다. 적용이 완료된 후 --list-all 옵션으로 설정된 룰을 확인한다. 물론 추가된 포트는 --list-ports 옵션으로 확인 가능하다.

[마스커레이딩(Masquerading)]
리눅스 시스템을 인터넷 공유 목적의 라우터 기능을 사용하기 위해 마스커레이딩 기능을 활성화 시킨다. 
마스커레이딩을 사용하기 위해 공인망, 사설망 네트워크 구성을 미리 해 두어야 한다.

~]# firewall-cmd --permanent --add-masquerade
success
~]# firewall-cmd --reload
success
~]# firewall-cmd --list-all
public (default, active)
  interfaces: eth0
  sources:
  services: dhcpv6-client http https ssh
  ports: 5900-5910/tcp
  masquerade: yes
  forward-ports: 
  icmp-blocks: 
  rich rules:

firewall-cmd명령을 사용하여 위와 같이 마스커레이딩을 활성화 시킬 수 있다. --permanent 옵션은 영구적인 설정을 의미하며 옵션을 주지 않으면 런타임 환경에서 적용되기 때문에 서버를 리부팅하면 룰이 없어진다. --add-masquerade 옵션을 사용 마스커레이딩을 활성화시킨다. 만약 마스커레이딩을 비활성화시고 싶다면 --remove-masquerade 옵션을 사용한다. 다음으로 --reload 옵션을 사용하여 영구적으로 설정된 룰을 런타임 환경에 적용시킨다. 적용이 완료된 후 --list-all 옵션으로 masquerade 활성화 유부를 확인한다. 

[포트 포워딩(port forwarding)]
앞에서 마스커레이딩 설정으로 인터넷 공유 라우터를 설정한 경우 외부에서 공인IP로 접속되는 연결에 대해서 포트에 따라 내부 서버로 연결시킬 수 있는 포트 포워딩 기능을 사용할 수 있다. 
또, 시스템으로 들어오는 포트를 포워딩하여 로컬의 다른 포트로 포워딩할 수 있다. 시스템의 각 서비스들은 보안을 위해 일반 사용자 권한으로 서비스를 실행하기를 권장한다. 예를 들어 Tomcat은 JSP 컨테이너이면서 웹서버 기능을 가지고 있다. Tomcat은 일반 사용자 계정으로 실행할 것을 권장한다. 하지만, HTTP기본포트 80을 사용할 경우 root권한이 아니면 80포트를 Bind할 수 없다. 이러한 경우 포트포워딩을 사용하여 80포트로 접속되는 패킷을 로컬의 8080(Tomcat의 기본 HTTP 포트)포트로 포워딩 시킴으로 root권한 없이 80포트를 사용하여 웹서비스를 할 수 있다.
80포트로 접속되는 패킷을 8080포트로 포워딩 설정해 보자.

~]# firewall-cmd --permanent --add-forward-port=port=80:proto=tcp:toport=8080
success
~]# firewall-cmd --reload
success
~]# firewall-cmd --list-all
public (default, active)
  interfaces: eth0
  sources:
  services: dhcpv6-client http https ssh
  ports: 5900-5910/tcp
  masquerade: yes
  forward-ports: port=80:proto=tcp:toport=8080:toaddr=
  icmp-blocks: 
  rich rules:

firewall-cmd명령을 사용하여 위와 같이 포트 포워딩 하였다. --permanent 옵션은 영구적인 설정을 의미하며 옵션을 주지 않으면 런타임 환경에서 적용되기 때문에 서버를 리부팅하면 룰이 없어진다. --add-forward-port 옵션을 사용 포트 포워딩 규칙을 추가하였다. 다음과 같은 방법으로 입력된다.
--add-forward-port=port=portid[-portid]:proto=protocol[:toport=portid[-portid]][:toaddr=address[/mask]]
만약 포트포워딩을 제거하기 위해서는 --remove-forward-port 옵션을 사용한다.다음과 같은 방법으로 입력된다.
--remove-forward-port=port=portid[-portid]:proto=protocol[:toport=portid[-portid]][:toaddr=address[/mask]]
 다음으로 --reload 옵션을 사용하여 영구적으로 설정된 룰을 런타임 환경에 적용시킨다. 적용이 완료된 후 --list-all 옵션으로 포트포워딩 설정내역을 확인할 수 있다. 물론 --list-forward-ports 옵션으로 확인할 수 있다.

[ping 응답 하지 않기]
시스템의 네트워크 상태를 확인하기 위해 ping명령어를 이용하여 응답 테스트를 한다. ping은 네트워크 확인을 위해 유용하게 사용되지만, 악의적으로 패킷크기를조절하여 네트워크의 과다한 트래픽을 유발하기도 한다. 이러한 공격을 차단하기 위해 ping에 대해 응답하지 않도록 설정하는 경우가 있다. 
다음은 ICMP 프로토콜 중 ping에 대해 응답하지 않게 설정하고 있다.

~]# firewall-cmd --permanent --add-icmp-block=echo-request
success
~]# firewall-cmd --reload
success
~]# firewall-cmd --list-all
public (default, active)
  interfaces: eth0
  sources:
  services: dhcpv6-client http https ssh
  ports: 5900-5910/tcp
  masquerade: yes
  forward-ports: port=80:proto=tcp:toport=8080:toaddr=
  icmp-blocks: echo-request
  rich rules:

firewall-cmd명령을 사용하여 위와 같이 ping을 차단할 수 있다. --permanent 옵션은 영구적인 설정을 의미하며 옵션을 주지 않으면 런타임 환경에서 적용되기 때문에 서버를 리부팅하면 룰이 없어진다. --add-icmp-block 옵션을 사용 ICMP 차단할 유형을 추가하였다. 만약 차단할 유형을 제거하기 위해서는 --remove-icmp-block옵션을 사용한다. 다음으로 --reload 옵션을 사용하여 영구적으로 설정된 룰을 런타임 환경에 적용시킨다. 적용이 완료된 후 --list-all 옵션으로 차단된 ICMP 유형을 확인할 수 있다. 물론 --list-icmp-blocks 옵션으로도 확인할 수 있다.

[직접 방화벽 규칙 넣기]
리눅스 방화벽 iptables는 막강한 확장기능을 제공한다. firewalld에서 제공되는 기능은 확장 기능 중 일부만 사용할 수 있으며, 원하는 확장 기능 사용을 위해 다음과 같은 방법으로 직접 입력하여 사용할 수 있는 인터페이스가 제공된다.
웹서버를 대상으로 DOS공격이 많이 발생된다. 특정 클라이언트 IP에서 접속이 많이 발생된다면 특정 클라이언트 IP 차단을 위해 사용하는 모듈이 connlimit이다. 
다음은 connlimit를 사용하여 DOS공격을 막도록 설정해 보겠다.

~]# firewall-cmd --permanent --direct --add-passthrough ipv4 -I INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 16 -j REJECT
success
~]# firewall-cmd --reload
success

firewall-cmd명령을 사용하여 DOS공격을 막을 수 있다. --permanent 옵션은 영구적인 설정을 의미하며 옵션을 주지 않으면 런타임 환경에서 적용되기 때문에 서버를 리부팅하면 룰이 없어진다. --direct 옵션은 직접 입력한다는 설정이다. --add-passthrough는 통과 규칙을 직접 입력하는 옵션이다. 만약 통과 규칙을 제거하기 위해서는 --remove-passthrough을 사용한다. 다음으로 --reload 옵션을 사용하여 영구적으로 설정된 룰을 런타임 환경에 적용시킨다. 

~]# iptables -nL |grep conn
REJECT     tcp  --  0.0.0.0/0            0.0.0.0/0            tcp dpt:80 flags:0x17/0x02 #conn src/32 > 16 reject-with icmp-port-unreachable

firewall-cmd으로는 직접 설정한 규칙 확인이 어려워 iptables명령을 사용하여 직접 추가한 규칙을 확인하였다.

시스템 전역 timezone 설정은 /etc/sysconfig/clock 에 정의되어 있다.

 

# cat /etc/sysconfig/clock
   ZONE="America/Los_Angeles"

 

한국 시간으로 설정할 경우 clock 파일내에 ZONE="Asia/Seoul" 으로 설정하고,

다음과 같이 해당 지역에 맞게 /etc/localtime 파일을 수정해야 한다.

 

cp -p /usr/share/zoneinfo/Asia/Seoul  /etc/localtime 

 

 

 

 

 

Linux 시스템의 시간 확인은 date 명령으로 할 수 있으며, date 명령은 수동으로 시간 설정도 가능하다. 
그리고, rdate, ntpdate 명령을 이용하여 time 서버와의 시간을 동기화 할 수 있으며, ntpd 데몬을 이용해서 자동으로 서버의 시간을 time서버와 맞출 수도 있다. 

 

 

1 시스템의 시간 확인

[root@localhost ~]# date
Wed May 16 12:01:03 KST 2018
[root@localhost ~]# 

 

 

2 시스템 시간 수동으로 변경하기

- date 명령어 뒤에 "월시간년도.초" 의 형식으로 입력하면 시간 세팅이 가능 하며, 별도의 형식으로 출력 및 세팅이 가능하다.
[root@localhost ~]# date 031211572018.00
Mon Mar 12 11:57:00 KST 2018
[root@localhost ~]# date
Mon Mar 12 11:57:02 KST 2018
[root@localhost ~]# 

- YYYY-MM-DD 형식으로 날짜 확인 및 날짜 변경
[root@localhost ~]# date '+%Y-%m-%d'
2018-05-16
[root@localhost ~]# date '+%Y-%m-%d' -s "2018-05-13"
2018-05-13
[root@localhost ~]# date '+%Y-%m-%d'
2018-05-13

- hh:mm:ss 형식으로 시간 확인 및 시간 변경
[root@localhost ~]# date +%T
11:56:42
[root@localhost ~]# date +%T -s "10:00:00"
10:00:00
[root@localhost ~]# date +%T
10:00:01
[root@localhost ~]# 

 

 

3. 시스템 시간을 time 서버와 동기화 하기

rdate 명령이나, ntpdate 명령을 이용해서 시스템의 시간을 time서버와 동기화 할 수 있다.
참고로 ntpdate 명령은 아래에서 설명할 ntpd 데몬이 실행되고 있는 경우 사용이 불가능하기 때문에, ntpd 데몬을 종료한 후 사용해야 한다.

- rdate 명령을 이용한 time서버와이 시간 동기화
[root@localhost ~]# date
Mon Mar 12 12:02:31 KST 2018
[root@localhost ~]# rdate -s time.bora.net
[root@localhost ~]# date
Wed May 16 12:10:09 KST 2018
[root@localhost ~]# 

- ntpdate 명령을 이용한 time서버와의 시간 동기화
[root@localhost ~]# ntpdate time.bora.net
16 May 12:10:56 ntpdate[26374]: adjust time server 203.248.240.140 offset 0.036118 sec
[root@localhost ~]# date
Wed May 16 12:11:00 KST 2018
[root@localhost ~]# 

 

 

4. 시스템의 하드웨어 시간 확인 및 변경

시스템의 하드웨어 시간은 mainboard 에 저장되어 있는 시간이며, 시스템의 로드 증가나, 메인보드 battery에 따라 시간이 느려질 수 있다.
hwclock 명령으로 하드웨어 시간을 확인 할 수 있으며, -w 옵션을 추가하면 하드웨어 시간을 시스템시간과 동일하게 맞출 수 있다. 

[root@localhost etc]# hwclock
Wed 16 May 2018 02:41:56 AM KST  -0.487239 seconds
[root@localhost etc]# hwclock -w
[root@localhost etc]# hwclock
Wed 16 May 2018 11:44:41 AM KST  -0.200472 seconds
[root@localhost etc]# 

 

 

5. cron을 이용한 time 서버와의 시간 동기화

- 아래와 같이 crontab에 등록하여, 주시적으로 시스템의 시간을 time서버와 동기화 하고, 하드웨어 시간을 시스템 시간과 동기화 할 수 있다.
[root@localhost etc]# crontab -l
#DATE sync
0 0 * * * /usr/bin/rdate -s time.bora.net && /sbin/clock -w
[root@localhost ~]# 

 

 

 

6. ntpd 데몬을 이용한 time서버와의 자동 동기화

- ntp 패키지가 설치되어 있지 않을 경우, yum 으로 설치
[root@localhost ~]# rpm -qa | grep ntp
[root@localhost ~]# yum install ntp


- ntpd 데몬 실행
[root@localhost ~]# /etc/init.d/ntpd start
Starting ntpd:                                             [  OK  ]

- ntp 상태 확인
ntpq -p 명령으로 확인 할 수 있으며, ntpd 데몬을 실행 하고 일정 시간이 지나면 * 표시된 서버가 현재 시스템과 시간이 동기화되고 있는 time 서버이다.


[root@localhost ~]# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
====================================================================
==
*dadns.cdnetwork 204.123.2.5      2 u    2   64    1    1.538  -12.351   0.245
-static.betaidc. 106.247.248.106  3 u    1   64    1    2.140   -9.795   0.271
+211.52.209.148  216.239.35.12    2 u    2   64    1    8.017   -9.683   0.141
+send.mx.cdnetwo 204.123.2.5      2 u    1   64    1    1.343  -11.319   0.194
[root@localhost ~]# 

- ntp 데몬 활성화
런레벨 2,3,4,5 에서 ntpd 데몬이 자동으로 실행 되도록 활성화 한다.
[root@localhost etc]# chkconfig --list | grep ntp
ntpd            0:off   1:off   2:off   3:off   4:off   5:off   6:off
ntpdate         0:off   1:off   2:off   3:off   4:off   5:off   6:off
[root@localhost etc]# chkconfig ntpd on
[root@localhost etc]# chkconfig --list | grep ntp
ntpd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
ntpdate         0:off   1:off   2:off   3:off   4:off   5:off   6:off

- time서버 변경
시간을 동기화 할 time서버를 변경할 경우, /etc/ntp.conf 파일에서 아래와 같이 기존 time 서버에 주석처리하고 변경할 time서버를 입력하여 저장한 후에 ntpd 데몬을 리스타트 하면 된다.

#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server kr.pool.ntp.org
server asia.pool.ntp.org
server pool.ntp.org

[root@localhost ~]# /etc/init.d/ntpd restart
Shutting down ntpd:                                        [  OK  ]
Starting ntpd:                                             [  OK  ]
[root@localhost ~]# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
============================================================================
+send.mx.cdnetwo 204.123.2.5      2 u   29   64  377    1.395   -4.453   4.039
+ntp.nap.net.id  103.31.225.225   3 u   22   64  257  433.249   -6.238   5.598
*211.52.209.148  216.239.35.12    2 u   21   64  377    8.066    4.448   5.816
[root@localhost ~]# 

 

 

 

 

 

 

 

NTP 서버의 정의

NTP(Network  Time  Protocol)는 패킷교환, 가변 지연 데이터 네트워크를 통해 컴퓨터 시스템간의 시간 동기화를 위한 네트워킹 프로토콜이다. NTP보다 심플하게 구현된 SNTP가 있으며 이는 높은 시간정확도를 필요로 하지 않는 임베디드 장치 와 응용 프로그램에 사용된다. MS Window 2000과 XP 이전 버전에서는 SNTP를 사용하였고, Windows 2003, Vista 이후 버전에서 NTP를 사용하고 있다.

 

NTP는 보통 인터넷을 통해 수십밀리 초에서 이상적인 조건의 로컬 네트웍크 영역에서는 1밀리 초의 정확성을 유지할 수 있다. 2010년 구현을 위한 레프런스는 버전 4 (NTPv4, RFC 5906)이다.

NTP는 UDP(User Datagram Protocol) 포트 123 을 사용한다.  pool.ntp.org 에서는 수백만 클라이언트에게 안정적이고 사용하기 쉬운 커다란 가상의 시간 서버 클러스터를 제공한다.  시아트를 방문하면 가까운 지역의 카임서버를 찾을 수 있고 타임서버 풀에 참여할 수도 있다.

 

 

NTP 서버 구축

1. NTP  Package 설치 
    대부분의 리눅스 배포판에서 NTP 패키지를 배포하며, CentOS의 경우 다음과 같이 yum 으로
    NTP 서버를 설치할 수 있다. (클라이언트에서도 설치한다.)

 

# yum  -y  install  ntp

 

2. NTP  (서버 설정)
    NTP 서버는 2가지 역할을 한다.
    한가지는 NTP 클라이언트로부터 요청을 받아 시간 정보를 응답할 서버 역할이며,
    또 한 가지는 NTP 서버들로부터 시간정보를 요청하여 받아올 클라이언트 
역할이다.

   

    이 모든 설정을 /etc/ntp.conf  파일에 설정하게 된다. 

 

# vi  /etc/ntp.conf

restrict default nomodify notrap noquery
restrict 127.0.0.1
restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap

# straum 2 server list
server  ntp.ewha.net
server  ntp1.epidc.co.kr
server  time.wonkwang.ac.kr
server  time.korserve.net
server  noc6-3.koren21.net

driftfile  /var/lib/ntp/drift
broadcastdelay  0.008
keys  /etc/ntp/keys

 

  • /etc/ntp.conf와 driftfile 과 keys의 경우 배포본마다 위치가 다를 수 있으니 확인을 하도록 한다.
  • restric 설정은 peer 들이 본 서버로 sync 하는 것에 대한 제한을 한다.
  • restrict default nomodify notrap noquery 설정은 기본으로 모든 권한을 주지 않음을 의미한다.
  • restrict 127.0.0.1 설정은 127.0.0.1 즉, 서버 자신에서는 모든 권한을 가진다.
  • restrict 192.168.0.0 mask 255.255.255.0 nomodify notrap 설정은 192.168.0.0 ~ 192.168.0.255 c class 에서는 질의를 할 수 있는 권한을 가진다. 즉, 위의 2 라인은 항상 기본으로 들어가는 설정이며, peer 를 거느릴 서버에서는 (즉 A 의 입장에서는) 하위 peer 들의 질의를 받을수 있도록 3 번째 라인과 같이 restrict 설정을 해 주어야 한다.

설정을 마쳤다면, service ntpd restart 명령으로 ntpd 데몬을 시작하고, ntpq 명령을 이용하여 sync 를 잘 하고 있는지 확인을 한다.

 

 

NTP 명령어 (클라이언트)

다음 명령어를 통해 NTP 서버들의 상태를 확인 할 수 있다.

[root@pnfcfpscrtl ~]# ntpq -p
     remote           refid              st    t    when    poll    reach   delay   offset     jitter
=============================================================
*time.bora.net  203.250.179.76      3    u     62       64      377    8.347    2.121     0.774
+time.bora.net 90.1.14.51             2    u     1        64      177    7.049   -4.907    12.329
+ntp1.sjtel.net 192.168.18.6          2    u     4         64      377    9.096   10.322    5.248


  • * : 현재 sync 를 받고 있음을 의미
  • + : ntp 알고리즘에 의해 접속은 가능하지만 sync 를 하고 있지는 않음을 의미
  • - : ntp 알고리즘에 의해 접속은 가능하지만 sync 가능 리스트에서 제외
  • blank : 접속이 불가능함을 의미

remote는 sync 를 하는 straum 2 서버주소를 가리키며, refid는 각 straum 2 서버가 현재 sync 를 하고 있는 straum 1 서버를 보여준다. st가 16일 경우 해당 서버에 접속 할 수 없음을 의미한다.

 

 

ntpdate  명령를 통해 원격지의 NTP 서버에 접속하여  직접 시간을 동기화할 수 있다.

# ntpdate -u 192.168.0.99 
 3 Nov 11:23:33 ntpdate[4286]: adjust time server 192.168.0.99 offset -0.004684 sec

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

[특수 기호]

 

~ : 홈 디렉토리를 나타낸다.

$ : 변수의 값을 표출할때 변수 이름 앞에 사용한다.

& : 백그라운드 작업 실행의 위해 사용한다.

# : 주석

* : 와일드 카드 문자

? : 와일드카드(단일 문자)

\ : 다음 문자 일반  문자화

(  : 하위 쉘 시작

)  : 하위 쉘 끝

!  : 논리적으로  NOT 의미

/  : 디렉토리 경로 구분자

;  :  쉘 명령 구분자

< :  입력 리다이렉션 기호 ( 파일에서 입력값을 받음)

> :  출력 리다이렉션, 덮어쓰기

>> : 출력 리다이렉션 기호, 추가의 의미

`cmd` :  역 따옴표, 명령 내 명령을 실행

| : 파이프 명령의 출력값을 다른 명령의 입력값으로 사용

[ : 문자 집합의 시작을 나타냄 

] : 문자 집합의 끝을 나타냄.  (  #ls [ a-d]*.sh )

 

 

 

 

[ 인용 부호 ] 


 - 단일 따옴표(Single Quotes)
    : 감싸진 모든 특수 기호는 일반 문자화 처리
 - 이중 따옴표(Double Quotes)
     :  $, `, \를 제외한 모든 특수 기호가 일반 문자화 됩니다.

 

 

[ 중복 데이타 확인하기 ] 


SELECT  필드명, count(*) as 변수명   FROM   테이블명   GROUP BY  필드명  HAVING  변수명>n

SELECT  EMPID, COUNT(*) AS cnt  FROM `SYSBASE_EMPLOYEE_RESIGNATION`  GROUP BY  EMPID  HAVING  cnt > 1

마지막 컬럼 출력

원본출력 awk '{print $NF}'

awk '{print $NF}' 원본파일 

 

 

마지막 2개 컬럼 출력

원본출력 | awk '{print $(NF-1)"\t"$NF}'

awk '{print $(NF-1)"\t"$NF}' 원본파일

네트워크의 설정 (NIC, ifconfig)

 

NIC (Network Interface Card)

 

  - 리눅스에서 사용하는 Ethernet Card(eth0, eth1 등) 

 

  - 이더넷을 이용하여 LAN을 구성하기 위해서는 이더넷 카드(NIC)를 사용하며, 리눅스에서 이더넷

     카드는 eth0 , eth1 등의 장치명으로 표시된다. 네트워크 장치명은 /dev 에 등록되어 있지 않으며,

     커널이 장치 검색을 한 후에 장치명를 리턴한다.

  

 

 

ifconfig

 

  - 리눅스 네트워크 설정시 네트워크 인터페이스를 설정하는 명령어.

     NIC 상태확인, 설정, 수정 등에 사용

 

  - 형식

     : ifconfig      netmask    broadcast  

 

  - 주의

     : ifconfig를 사용하여 네트워크 정보를 설정했을 경우 시스템을 재부팅하면 네트워크 설정 정보는

       모두 사라진다.

 

   - ifconfig로 설정했을 경우 /etc/sysconfig/network-scripts/ifcfg-eth0, /etc/sysconfig/

      network,  /etc/resolv.conf  파일 등을 수동으로 설정해 주어야만 한다.

 

   - 커널에 상주하는 네트워크 장치를 구성하고, 부팅 시에 필요한 장치를 설정하기 위해 사용된다.

 

   - ifconfig 명령어를 이용하여 IP 주소, 넷마스크 등의 네트워크 정보를 설정할 수 있다.

 

   - ifconfig로  IP Address 할당하기

 

         다음과 같은 네트워크 정보를 ifconfig로 할당할 경우

           IP Address              192.168.1.31

           Netmask                  255.255.255.0

           Network Address     192.168.1.0

           Broadcast Address  192.168.1.255

 

         【root@colt357 root】# ifconfig eth0 192.168.1.31 netmask 255.255.255.0 broadcast 192.

                                168.1.255 up

 

    - 작동중인 네트워크 인터페이스 정보

 

       [root@cobee13 etc】# ifconfig  

          Link encap:Ethernet  HWaddr 00:04:23:B5:5D:92 
          inet addr:61.108.83.43  Bcast:61.108.83.127  Mask:255.255.255.128
          inet6 addr: fe80::204:23ff:feb5:5d92/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:12009614 errors:0 dropped:0 overruns:0 frame:0
          TX packets:17836040 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1905778220 (1.7 GiB)  TX bytes:1895444103 (1.7 GiB)
          Base address:0xec80 Memory:febe0000-fec00000

        

            HWaddr : 각 NIC에 고유한 하드웨어(MAC) 주소이다. IP 주소 충돌 등의 문제가 발생할 때는

                            하드웨어 주소에 할당된 IP Address를 확인한다.

            inet addr : IPv4 방식으로 NIC에 할당된 IP 주소를 의미한다.

            Bcast :  브로드케스트 주소를 나타낸다.

            MTU(Macimum  Transmission  Unit) : 최대 전송 패킷의 크기를 말한다.

            Metric : 라우팅할 때 참조하는 거리에 관한 값으로, '1'은 같은 로컬을 의미한다.

            RX/TX : 받은 패킷에 대한 통계와 보낸 패킷에 대한 통계값을 나타낸다.

            packets :  받거나 보낸 패킷의 총 개수를, error는 그중 오류가 발생한 패킷의 개수를,

                            dropped는 이유를 막론하고 버려진 패킷의 개수를, 그리고 overruns는 이더넷

                            이 처리할 수 없는 속도로 빠르게 자료가 오고 감으로써 그 사이에서 손실된 패킷

                            의 개수를 나타낸다.

'배워서 남주자 > Linux 명령' 카테고리의 다른 글

[find] find 명령어  (0) 2020.05.10
[명령어] 기타 잡동사니  (0) 2020.05.10
[split] TAR 분할 압축  (0) 2020.05.10
[SSL] 생성  (0) 2020.05.10
CentOS7 - 네트워크 명령  (0) 2020.05.10

find 는 특정 속성의 파일을 검색할 경우 많이 사용된다.

【 -type c】
        File is of type c:
      b      block (buffered) special
      c      character (unbuffered) special
      d      directory
      p      named pipe (FIFO)
      f      regular file
      l      symbolic link
      s      socket
      D      door (Solaris)

【 -newer   file1 】
    --> file1 보다

 

============================================================================

 특정단어 찾기 】

 

 find . -type f -exec grep -H '#!@#ADVERT' {} \;

-H 는 화일명 표시하기 옵션

 

============================================================================

【 find 】

find 경로명-리스트 수식

 

유용한 옵션들

옵션들은 결합될 수 있다.

 

-name 화일명        만약 " 화일명" 이 현재 황리 이름과 맞으면 참

-perm octnum        만약 접근 허용이 8진수 octnum과 맞으면 참

-print                      화일 이름을 출력

-type t                    만약 화일의 형이 t 이면 참.    t는 d(디렉토리), f(화일), c(문자 특수화일), b(블럭화일)

-exec 명령어         실행 명령어가 0 종료 상태를 반환하면 참, 현재 경로명을 {}로 대치,  "명령어" 뒤에 "\;" 이 나온다.

-size n                     화일의 크기가 n이면 참 (+n 은 n보다 큰것을, -n은 n보다 작은 것을 찾을 때 사용한다.)

 

 

 

 

==========================================================================

옵션명령 -maxdepth 와 -mindepth에 대한 정의

==========================================================================

1. maxdepth 의 의미는 현재위치에서  지정된 단계까지의 검색 뜻함.

  ex) find  /home  -name 'kiss' -type d -maxdepth 3

       => /home 에서부터  이름이 kiss인 디렉토리를 /home 의 서브디렉토리 3단계까지 찾는다.

 

2. mindepth 의 의미는 지정된 단계에서부터 그 이후의 단계까지 (끝까지)를 의미한다.

    ex)find /home/segio -name 'kiss' -type d -mindepth 3

      =>/home/segio를 기준으로  그 이하 서브3단계에서부터 끝까지  kiss라는 디렉토리를 찾는다.

 

3. 특정 단계의 디렉토리만을 선택하려면 다음과 같이 두 옵션을 모두 사용한다.

     ex) find  /home -name 'kiss' -type f  -maxdepth 2 -mindepth 2

      => /home 에서 2단계에 속하는 위치에서만  이름이 kiss인 디렉토리를 찾는다.

'배워서 남주자 > Linux 명령' 카테고리의 다른 글

[ifconfig] 네트워크 설정  (0) 2020.05.10
[명령어] 기타 잡동사니  (0) 2020.05.10
[split] TAR 분할 압축  (0) 2020.05.10
[SSL] 생성  (0) 2020.05.10
CentOS7 - 네트워크 명령  (0) 2020.05.10

[파일지우기]
    ex)rm  test[2-4]
test2부터 test4까지 해당되는 파일을



--------------------------------------------------------------------------------
[리눅스 포트관리]

리눅스 시스템에서 포트는 총 65535개은 포트가 존재한다...
이중에 1에서 1024까지는 시스템에서 사용하도록 지정되어있다.

관리하는 곳은 SERVICES 이다.
/etc/services 는 특정서비스가 어느 포트를 사용하고 있는지 확인할 수
있다.

실질적으로 서비스를 주관하는것은 데몬이다.  
각각의 서비스에는 관련 데몬이 존재한다.....이중 중요한(?) 데몬을 inetd.d가 관리를 한다.

--------------------------------------------------------------------

[RPM 설치관련]

설치 : rpm -ivh 팩키지
삭제 : rpm -e 팩키지
설치여부확인 : rpm -qa | grep 팩키지
강제설치 : rpm -ivh --force 팩키지     ----->시스템 장애가 올수있다.
의존성무시: rpm -ivh --nodeps 팩키지   ----->시스템 장애가 올수있다.
명령에 관련된 팩키지알아내기 : rpm -qf  명령어 위치(경로까지 입력)

--------------------------------------------------------------------


[파일시스템]

1. 파티션 나누기  
   #fdisk /dev/sda
2. 포멧하기
   #mkfs -t ext2 /dev/sda1
   (파티션를 포멧한다.)
3. 마운트
   #/etc/fstab    에 설정한다.
4. 시스템검사
   #fsck /dev/hda1 -->이런식으로 장치지정.
---------------------------------------------------------------------
[프로세스]
ps aux 상태를 보여주는 STAT상태..
(옵션  -a: 모든 유저들의 프로세스
       -u: 사용자 이름과 시간등
       -x: 기타 프로세스
)

  R - 실행대기상태
  S - 잠든상태
  D - 입출력을 기다리는 인터럽트가 불가능한 상태
  T - 멈춰있거나 흔적이 남아 있는 상태
  Z - 좀비(zombie) 완전히 죽어 있는 상태

# 프로세스를 확인하기위해서는 grep 를 함께 쓴다.
  ps -aux | grep bbsd
  ps -ef  | grep bbsd
  이런식으로 찾았으나...pid 번호만을 찾을때는
  pidof  bbsd
  이렇게 사용해도 무관하다....


#kill 프로세스 (옵션   -9: 강제종료)
  kill  PID

---------------------------------------------------------------------

[초기 로그인 화면구성]

/etc/issue 와 /etc/issue.net 를 편집하고 /etc/wow-release 파일을
삭제한다.

--------------------------------------------------------------------

[경로 추적 명령어]
  리눅스에선 #traceroute (도메인 or IP).
  도스에선  c:/>tracert  (도메인 or IP)
----------------------------------------------------------------------

[FTP 명령어]
  FTP접속시에 상대서버에서 local서버의 내용를 확인 및 위치
  변경 명령 !ls , lcd
----------------------------------------------------------------------
[ntsysv 관련명령어]
  bind(DNS관련), portmapf 등은 설치하지 않는다.
----------------------------------------------------------------------
[top]
  프로세서 상태를 확인하는 명령어 .....해킹 검색
----------------------------------------------------------------------
[find]
  찾기 명령어..파일을 검색할때의 옵션은
ex) find / -name colt357
     해석  ( 찾아라 루트부터 이름으로 colt357이란놈을..^^)
--------------------------------------------------
[X-Window]
  /etc/X11/xinit/xclients 를 자신의 홈디렉토리로  cp한후
  내용을 편집한다. 윗줄에 exec wmaker를 입력한다.
--------------------------------------------------------------------
[tar]
  tar로 묶여 있는 화일을 확인하는 옵션 ---  tar tf 화일
  tar.gz 으로 묶은 화일 확인 하는 옵션 ---  tar ztf 화일
--------------------------------------------------------------------
[netstat]
netstat -nr : route명령보다 좀더 자세한 라우팅 테이블정보.
netstat -t  : 인터넷 네트워크 접속상태 점검.
netstat -i  : 네트워크 패킷 전송 상태 점검

--------------------------------------------------------------------
[host -a 도메인]
도메인을 검색할 때 사용하는 명령어
--------------------------------------------------------------------
[mkdir]

만일 현재 디렉토리에서   ./sub/doc/html 이라는 디렉토리를 생성하고 싶다면,
#mkdir -p  sub/doc/html
--------------------------------------------------------------------
[grep]
문서내용 중에서 특정단어를 찾을때도 사용된다.

ex)grep "찾는단어" 파일

이런 형태다...파일위치에 * 를 쓰면 전체에서 검색을 한다.
---------------------------------------------------------------------
[du]
파일이나 폴더의 용량을 확인한다.

-s : 총합계...
-b : 바이트 크리로..
-h : 휴먼인식용의

---------------------------------------------------------------------

[ifconfig]

ex) ifconfig 인터페이스 IP [Netmask] [broadcast] up/down


---------------------------------------------------------------------

[route]

ex) route add/del -net/-host network/host address
    route add/del default gw IP dev interface

'배워서 남주자 > Linux 명령' 카테고리의 다른 글

[ifconfig] 네트워크 설정  (0) 2020.05.10
[find] find 명령어  (0) 2020.05.10
[split] TAR 분할 압축  (0) 2020.05.10
[SSL] 생성  (0) 2020.05.10
CentOS7 - 네트워크 명령  (0) 2020.05.10

+ Recent posts