기본설정
- root 계정 활성화
- root활성화
# sudo passwd root
- root 접근
# su
- 사용자확인
# whoami
- 우분투 버전확인
# lsb_release -a
- 우분투 업데이트
- 업데이트 가능 패키지 확인
# sudo apt-get update
- 업그레이드 (1)
# sudo apt-get upgrade
- 의존성 검사해서 필요한 패키지도 같이 업그레이드 (2)
# sudo apt-get dist-upgrade
- 기본 패키지 설치 (Ubuntu Server Minimal Installed)
- vi
# sudo apt-get install vim
- nano
# sudo apt-get install nano
- less
# sudo apt-get install less
- ping
# sudo apt-get install iputils-ping
- crontab
# sudo apt-get install cron
- rsyslog (fail2ban 로그분석)
# sudo apt-get install rsyslog
- git (github, gitlab 프로그램 다운로드, 유틸 개발용)
# sudo apt-get install git
- 확장 패키지 설치
- unzip (zip파일 압축 프로그램)
# sudo apt-get install unzip
- tree (디렉토리 tree구조 뷰)
# sudo apt-get install tree
- ifconfig
# sudo apt-get install net-tools
- glances 설치 (하드웨어 모니터링)
# sudo apt-get install glances
- multitail 설치 (로그분석)
# sudo apt-get install multitail
- grc 설치 (로그 컬러)
# sudo apt-get install grc
---------------------------------------
https://github.com/garabik/grc
---------------------------------------
# grc netstat
# grc ping hostname
# grc tail -f /var/log/syslog
# grc ps aux
- 시간대(timezone) 변경
- 설정시간대 확인(Etc/UTC 시간대로 확인)
# timedatectl
- 원하는 시간대 확인
# timedatectl list-timezones | grep Seoul
- 시간대 변경
# timedatectl set-timezone Asia/Seoul
- 시간 동기화(NTP)
- rdate 설치
# sudo apt-get install rdate
- 시간동기화 서버(NTP) 시간 확인
# rdate -p time.bora.net
- 시간 동기화(NTP) 서버 리스트
time.bora.net (LGU+)
time.nist.gov (NIST)
- 시간 동기화(NTP서버 -> 운영체제(Linux))
# rdate -s time.bora.net
- 현재 운영체제(Linux)시간 확인
# date
- 하드웨어(Server) 시간 조회
# hwclock
- 운영체제(Linux) -> 하드웨어(Server) 시간 동기화
# hwclock -w
- 하드웨어(Server) -> 운영체제(Linux) 시간 동기화
# hwclock -s
- crontab을 이용한 동기화 작업, 운영체제(Linux)&하드웨어(Server) 동시에 시간 동기화
# crontab -e
# 매 5시간마다 한번 실행
0 */5 * * * rdate -s time.bora.net && hwclock -w &> /dev/null
# 매일 3시10분마다 한번 실행
10 3 * * * rdate -s time.bora.net && hwclock -w &> /dev/null
- 시간 수동 설정
-운영체제(Linux) 시간 동기화 해제
# timedatectl set-ntp 0
- 운영체제(Linux) 시간 수동설정
# date -s "2020-01-01 12:00:00"
- 운영체제(Linux) 시간 동기화 활성(활성화 동시에 시간이 ntp서버와 동기화)
# timedatectl set-ntp 1
- network IP 설정
# sudo vi /etc/netplan/00-installer-config.yaml
dhcp ip
# This is the network config written by 'subiquity'
network:
ethernets:
enp1s0:
dhcp4: true
version: 2
static ip (1)
# This is the network config written by 'subiquity'
network:
ethernets:
enp2s0:
dhcp4: false
addresses:
- 192.168.1.220/24
nameservers:
addresses: [168.126.63.1,168.126.63.2]
routes:
- to: default
via: 192.168.1.1
version: 2
static ip (2)
# This is the network config written by 'subiquity'
network:
ethernets:
enp1s0:
addresses:
- 192.168.1.220/24
nameservers:
addresses:
- 168.126.63.1
search:
- 168.126.63.2
routes:
- to: default
via: 192.168.1.1
version: 2
- 네트워크 설정값 테스트
# sudo netplan try
- 네트워크 설정값 적용
# sudo netplan apply
- netplan try, apply 실행시 Permission오류해결방안 (https://askubuntu.com/questions/1477287/need-help-with-a-netplan-configuration-issue)
-----------------------------오류문구----------------------------------------
** (process:1457): WARNING **: 13:38:27.428: Permissions for /etc/netplan/00-installer-config.yaml are too open. Netplan configuration should NOT be accessible by others.
** (process:1457): WARNING **: 13:38:27.429: Permissions for /etc/netplan/00-installer-config.yaml are too open. Netplan configuration should NOT be accessible by others.
Do you want to keep these settings?
Press ENTER before the timeout to accept the new configuration
-----------------------------오류문구----------------------------------------
해결방안
권한변경 (644->600)
# chmod 600 00-installer-config.yaml
root@plex:/etc/netplan# ll
total 12
drwxr-xr-x 2 root root 4096 Nov 21 12:45 ./
drwxr-xr-x 107 root root 4096 Nov 20 21:30 ../
-rw------- 1 root root 324 Nov 21 12:45 00-installer-config.yaml
- netplan try, apply 실행시 ovsdb-server.service 오류해결방안(https://ccclog.tistory.com/104)
-----------------------------오류문구----------------------------------------
WARNING:root:Cannot call Open vSwitch: ovsdb-server.service is not running.
Do you want to keep these settings?
Press ENTER before the timeout to accept the new configuration
Changes will revert in 110 seconds
-----------------------------오류문구----------------------------------------
해결방안
# apt-get install openvswitch-switch
# systemctl disable ovsdb-server
# systemctl mask ovsdb-server
- 네트워크 구성 대기로 인한 부팅지연 해결
운용서버인 경우에 비활성화 하지 않는것을 추천드립니다.
networkd가 올라올때까지 기다리는것을 무시하고 부팅합니다.
올라오는 서비스중에 네트워크활성과 관련된다면 문제가 발생할수 있습니다.
개인서버에는 크게 지장없음을 확인함
- (1안) /etc/netplan/00-installer-config.yaml 수정
optional: true
networkd 서비스(온라인) 연결을 기다리지 않고 바로 부팅
# nano /etc/netplan/00-installer-config.yaml
.
.
network:
ethernets:
enp1s0:
optional: true
.
.
# sudo netplan try
# sudo netplan apply
- (2안) systemd-networkd-wait-online.serivce 비활성화
- 네트워크 연결을 기다리지 않기 위해 아래 서비스 비활성화
# systemctl disable systemd-networkd-wait-online.service
- 다른 서비스에서 활성화 시키지 않기위해 마스킹
# systemctl mask systemd-networkd-wait-online.service
snapd(패키지 관리) 삭제
우분투 데스크탑이나 특정 프로그램이 snapd패키지에서만 설치되는 경우가 아니면 사용빈도가 낮아서 삭제합니다.
시스템 전반적으로 무겁게 하는 경우도 발생
- snapd 패키지 확인
# snap list
Name Version Rev Tracking Publisher Notes
core20 20230801 2015 latest/stable canonical✓ base
lxd 5.0.2-838e1b2 24322 5.0/stable/… canonical✓ -
snapd 2.60.4 20290 latest/stable canonical✓ snapd
- snapd 서비스 중지
# systemctl stop snapd
# systemctl stop snapd.socket
- snapd 패키지 삭제
# snap remove --purge lxd
# snap remove --purge core20
# snap remove --purge snapd
# apt autoremove --purge snapd
- 폴더 삭제
rm -rf ~/snap/
- 불필요한 폴더 위치(삭제 안된경우 삭제)
/snap
/var/snap
/var/lib/snapd
- snapd 설치안되게 hold
# apt-mark hold snapd
sendmail 설치(메일 발송 전용)
- host 설정
메일발송 지연시 로컬호스트명이 localhost이 아닌 경우 발생
메일발송오류 문구 "My unqualified host name (zosystem) unkown; sleeping for retry"
ex) 호스트명 zosystem인경우
# nano /etc/hosts
127.0.0.1 localhost localhost.localdomain zosystem
127.0.1.1 zosystem
- daemon(networkd) 재시작
# systemctl daemon-reload
- sendmail 설치확인 (SMTP포트 확인)
- sendmail 미설치시
# telnet localhost 25
Trying 127.0.0.1...
telnet: Unable to connect to remote host: Connection refused
- sendmail 설치시
# telnet localhost 25
Trying 127.0.0.1...
Connected to zosystem.example.com
Escape character is '^]'.
220 lab.doc.co.kr ESMTP Sendmail 8.15.2/8.15.2/Debian-22ubuntu3; Mon, 20 Nov 2023 21:10:36 +0900; (No UCE/UBE) logging access from: zosystem.example.com(OK)-zosystem.example.com [127.0.0.1]
- sendmail 설치 및 활성화
# apt-get install sendmail
# systemctl enable sendmail
# systemctl start sendmail
# systemctl status sendmail
- sendmail 설정
# nano /etc/mail/sendmail.mc
IPv4 프로토콜 smtp(25), submission(587) 포트 외부송신 허용
submission(587)포트는 메일송신(SMTP)에 이용되는 TCP 25번 포트 외의 사용가능한 전용포트로
ISP에서 SMTP(25)포트를 차단한 경우 submission(587)포트로 송신가능
---------------------------------------------------------------------------------------------------
dnl DAEMON_OPTIONS(`Family=inet6, Name=MTA-v6, Port=smtp, Addr=::1')dnl
DAEMON_OPTIONS(`Family=inet, Name=MTA-v4, Port=smtp, Addr=127.0.0.1')dnl
dnl DAEMON_OPTIONS(`Family=inet6, Name=MSP-v6, Port=submission, M=Ea, Addr=::1')dnl
DAEMON_OPTIONS(`Family=inet, Name=MSP-v4, Port=submission, M=Ea, Addr=127.0.0.1')dnl
---------------------------------------------------------------------------------------------------
to
---------------------------------------------------------------------------------------------------
dnl DAEMON_OPTIONS(`Family=inet6, Name=MTA-v6, Port=smtp, Addr=::1')dnl
DAEMON_OPTIONS(`Family=inet, Name=MTA-v4, Port=smtp, Addr=0.0.0.0')dnl
dnl DAEMON_OPTIONS(`Family=inet6, Name=MSP-v6, Port=submission, M=Ea, Addr=::1')dnl
DAEMON_OPTIONS(`Family=inet, Name=MSP-v4, Port=submission, M=Ea, Addr=0.0.0.0')dnl
---------------------------------------------------------------------------------------------------
- sendmail 설정 파일 생성
# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
- sendmail 재시작
# systemctl restart sendmail
- 포트 확인
# netstat -anp | grep sendmail | grep LISTEN
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 1241/sendmail: MTA:
tcp 0 0 0.0.0.0:587 0.0.0.0:* LISTEN 1241/sendmail: MTA:
unix 2 [ ACC ] STREAM LISTENING 26043 1241/sendmail: MTA: /var/run/sendmail/mta/smcontrol
- 메일 발송 테스트
# sendmail -v my@email.com < /dev/null
# echo "Subject: sendmail TEST" | sendmail -v my@email.com
방화벽 설정(ufw)
- ufw 방화벽 상태확인 및 활성화
- ufw 서비스 상태 확인
# ufw status verbose
Status:: inactive
- ufw 서비스 활성화(ssh포트 허용후 활성화)
# ufw allow ssh
Rules updated
Rules updated (v6)
# ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
- ufw 서비스 상태 확인
# ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
22/tcp (v6) ALLOW IN Anywhere (v6)
- ufw IPv6 비활성화
- IPv6 서비스 비활성화(/etc/default/ufw)
# nano /etc/default/ufw
IPV6=yes를 IPV6=no 수정후 저장
.
.
.
# Set to yes to apply rules to support IPv6 (no means only IPv6 on loopback
# accepted). You will need to 'disable' and then 'enable' the firewall for
# the changes to take affect.
IPV6=no
# Set the default input policy to ACCEPT, DROP, or REJECT. Please note that if
# you change this you will most likely want to adjust your rules.
DEFAULT_INPUT_POLICY="DROP"
.
.
.
- ufw 서비스 재시작
# ufw diable && ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
- ufw 서비스 확인
# ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp ALLOW IN Anywhere
방화벽 설정(iptables)
- ufw 방화벽 비활성화
- ufw 설치확인
# sudo which ufw
- ufw 비활성화(1)
# sudo systemctl stop ufw
# sudo systemctl disable ufw
- ufw 비활성화(2)
# sudo ufw disable
- iptables 설치
- iptables 설치확인
# which iptables
- iptables 필요 패키지 포함 설치(iptables-persistent)
# sudo apt-get install iptables-persistent
- iptables 설치확인&활성화
# sudo systemctl start iptables
# sudo systemctl enable iptables
# sudo systemctl status iptables
- iptables 자동실행(enable) 안되는 문제 해결 (Ubuntu Server Minimal Installed)
- ubuntu 22버전에서 iptables 자동실행(systemctl enable iptables)이 안되는 문제가 있음
(ubuntu 20은 정상작동)
iptables.service파일에 "Alias=iptables.service" 추가
# nano /lib/systemd/system/iptables.service
-----------------------------------------------------------------------------------
[Unit]
Description=netfilter persistent configuration
DefaultDependencies=no
Wants=network-pre.target systemd-modules-load.service local-fs.target
Before=network-pre.target shutdown.target
After=systemd-modules-load.service local-fs.target
Conflicts=shutdown.target
Documentation=man:netfilter-persistent(8)
[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/sbin/netfilter-persistent start
ExecStop=/usr/sbin/netfilter-persistent stop
[Install]
WantedBy=multi-user.target
Alias=iptables.service
-----------------------------------------------------------------------------------
- enable 재적용
# systemctl enable iptables
- reboot
# reboot
- iptables 상태확인
# systemctl status iptables
- iptables 설정 확인
# sudo iptables -S
-----------------------------------------------------------------------------------
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-----------------------------------------------------------------------------------
- iptables 방화벽 설정
- established and related 접속 허용
일반적으로 네트워크 트래픽은 양방으로 흘러야 합니다. 때문에 established and related 접속 허용합니다.
# sudo iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
# sudo iptables -A OUTPUT -m conntrack --ctstate ESTABLISHED -j ACCEPT
- loopback 허용
# sudo iptables -A INPUT -i lo -j ACCEPT
- ICMP(Ping) 허용
# sudo iptables -A INPUT -p icmp -j ACCEPT
- http, https 허용
# sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
# sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
- SSH 허용
# sudo iptables -I INPUT -p tcp --dport (SSL/SFTP용 포트) -j ACCEPT
iptables -I INPUT -p tcp --dport 22 -j ACCEPT
- INPUT, FORWARD 차단
# sudo iptables -P INPUT DROP
# sudo iptables -P FORWARD DROP
- iptables 저장
# netfilter-persistent save
- reboot
# reboot
- iptables 정책확인
# iptables -S
fail2ban 설정
우분투 서버 최소 설치시 rsyslog가 설치되지 않습니다.
fail2ban은 /var/log/auth.log을 참조해서 구동되는 프로그램으로 rsyslog를 설치해야됩니다.
# sudo apt-get list rsyslog
# sudo apt-get install rsyslog
- fail2ban 설치
# sudo apt-get install fail2ban
# sudo systemctl start fail2ban
# sudo systemctl enable fail2ban
# sudo systemctl status fail2ban
# fail2ban-client -V
0.11.2
- fail2ban 설정파일 생성(jail.conf -> jail.local)
- .conf파일은 패키지 업데이트할때 같이 업데이트가 됩니다.
설정유지를 위해서 .local파일로 재정의 합니다.
# sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
- fail2ban 설정
# nano /etc/fail2ban/jail.local
[INCLUDES]
before = paths-debian.conf
[DEFAULT]
# 차단하지 않을 IP설정
# 여러IP적용하려면 ' '또는 ','로 구분
ignoreip = 127.0.0.1/8,192.168.0.0/24
# 구글봇 차단, 특정 ISP 허용 기능 shell 설정
# ignorecommand = /path/to/command <ip>
ignorecommand =
# 해당IP가 특정 횟수 이상 실패시 차단(-1:영구차단)
# 86400, 24h=24시간, 10m=10분, 1h=1시간
bantime = 6h
# 차단시간 증분차단 활성화
bantime.increment = true
# 차단 증분값 (1h -> 1d 2d 4d 8d 16d 32d ..)
bantime.factor = 24
# 차단 최대시간 6w = 6 week
bantime.maxtime = 6w
# findtime시간내에 maxretry만큼 실패하면 차단
findtime = 30m
# 차단 재시도 횟수
maxretry = 3
# 수신 메일주소
destemail = zosystem@naver.com
# 발송 메일주소
sender = admin@example.com
# 메일 전송 에이전트(Mail Transfer Agent)
mta = sendmail
1) ufw ------------------------------------------------------------------------------
# 방화벽 ufw 사용시
banaction = ufw # 방화벽 선택(ufw, iptables)
banaction_allports = ufw # 모든 포트 차단
2) iptables -------------------------------------------------------------------------
# 방화벽 iptables 사용시
banaction = iptables-multiport # 방화벽 선택(iptables, ufw)
banaction_allports = iptables-allports # 모든 포트 차단
-------------------------------------------------------------------------------------
[sshd]
enabled = true
port = ssh
mode = aggressive # 공개키, ddos 인증실패도 차단
logpath = %(sshd_log)s
backend = %(sshd_backend)s
- fail2ban 재시작&서비스확인
# systemctl restart fail2ban
# systemctl status fail2ban
● fail2ban.service - Fail2Ban Service
Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2023-11-20 21:23:12 KST; 33min ago
Docs: man:fail2ban(1)
Main PID: 834 (fail2ban-server)
Tasks: 5 (limit: 9256)
Memory: 16.1M
CPU: 1.165s
CGroup: /system.slice/fail2ban.service
└─834 /usr/bin/python3 /usr/bin/fail2ban-server -xf start
Nov 20 21:23:12 zosystem systemd[1]: Started Fail2Ban Service.
Nov 20 21:23:13 zosystem fail2ban-server[834]: Server ready
- fail2ban-client 활용
- sshd 차단 ip 확인
# fail2ban-client status sshd
Status for the jail: sshd
|- Filter
| |- Currently failed: 0
| |- Total failed: 3
| `- File list: /var/log/auth.log
`- Actions
|- Currently banned: 1
|- Total banned: 2
`- Banned IP list: xxx.xxx.xxx.xxx (ban ip)
- sshd필터 차단 ip 해제
# fail2ban-client set sshd unbanip xxx.xxx.xxx.xxx vvv.vvv.vvv.vvv
- 필터 상관없이 ip 해제
# fail2ban-client unban xxx.xxx.xxx.xxx vvv.vvv.vvv.vvv
- sqlite3를 활용한 차단 되었던 IP Address 확인
- sqlite3 설치
# apt-get install sqlite3
차단되었던 IP Address 리스트(차단해제 포함, 모든 서비스)
# sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 "select ip,jail from bips"
차단되었던 IP Address 리스트(차단해제 포함, 모든 서비스) Group BY
# sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 "select distinct ip from bips"
서비스(sshd or apache or nginx)별 차단되었던 IP Address 리스트(차단해제 포함)
# sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 "select distinct ip from bips where jail='sshd'"
차단횟수가 높은 IP Address 20개 출력
# sqlite3 /var/lib/fail2ban/fail2ban.sqlite3 "select jail,ip,count(*) as count from bips group by ip order by count desc limit 20"
'Linux > 설치 및 셋팅' 카테고리의 다른 글
[Ubuntu 22.04] SSH 비밀번호 인증 설정이 되지 않을때 (PasswordAuthentication no not working) (0) | 2023.08.22 |
---|---|
Windows 10 Pro(EFI) + Ubuntu 20.04.4 desktop(EFI) 멀티부팅 및 우분투 복제(dd) (1) | 2022.09.16 |
ssh 스크린 메세지(motd) (0) | 2021.09.22 |
네트워크 대역폭 속도 저하 해결방안 (10Mbps, 100Mbps, 1000Mbps) (0) | 2021.06.06 |
리눅스 네트워크 대역폭 모니터링 (nload, iptop) (0) | 2021.06.06 |