wonder

정보보안 스터디 - 8주차 7일 - Email서버 구축, Iptables 방화벽 본문

Security/리눅스

정보보안 스터디 - 8주차 7일 - Email서버 구축, Iptables 방화벽

wonder12 2022. 12. 7. 21:49

☞ email 서버 구축

리눅스에도 outlook과 같은 프로그램이 있습니다.

그래픽 기반의 프로그램이며

 

smtp(25)는 발신이며 pop3(110)는 수신입니다.

암호화 되지 않았으므로 패킷을 캡쳐 후 smtp, pop3 검색을 하면 평문화로 되어

follow tcp stream에 보면 오고간 내용은 물론이고 비밀번호도 확인할 수 있습니다.

그래서 암호화 메일서비스(메일)도 존재합니다.

 

설치를 해주고

yum -y install sendmail dovecot-server

 

활성화를 해줍니다.

systemctl enable --now senmail dovecot

systemctl status dovecot

 

 

sendmail

도메인, 허락ip 관련 설정을 해줍니다.

sendmail.cf는 주 설정파일이며 여기에 몰아 설정하거나

sendmail.mc 보조 설정파일에 써서 include할 수 있습니다.

 

local-host-names에 메일서버 DNS를 넣어주고

 

access에도 dns를 포함하여 허용/차단(relay/reject)할 주소들을 릴레이방식으로 넣어줍니다. 

makemap hash access.db < access
access.db는 데이터파일이므로 cat으로 확인이 불가합니다. access에 내용을 써서 연결해줍니다.
string access.db
안에 내용을 확인할 수 있습니다.

 

 

 

dovecot

사용자 메일 박스 관련 설정
경로지정해줍니다. /var/spool/mail 에 user1 user2

 

ssl, 암호화기능이 기본설정이지만 테스트를 위해 끕니다.

 

 

ps -ef | grep 패키지
netstat -ntpl | grep 패키지
한번씩 프로세스 작동, 리슨상태인지 확인합니다.
cat /etc/service | grep 서비스 
포트번호 확인

 

 

정식적으로 보내기전에 주고받는지 테스트를 할 수있도록 하는

메일 프로그램을 설치합니다.

mailx user1@wonder.com > 제목, 내용 보내기

su - user1

mailx > 1 > q 메일 확인

 

클라이언트1, 2에서

evolution을 설치해주고

 

서버 mail.wonder.com으로 계정을 만든 뒤

이메일 테스트를 진행합니다.

 

 

NMAP

포트 스캐닝으로 사용하는 프로그램입니다.

보통 열려있거나 sync를 허용했다면 open으로 탐지됩니다.

원래는 일일이 telnet 등등 되는지 않되는지 손수 확인했지만

더 빠르게 하기 위해 자동화 한 것입니다.

 

nmap -sS -sV 192.168.2.200
tcp 열려있는 포트를 검색하며 해당 포트의 버전까지 확인이 가능합니다.
nmap -sU -p 80,443
UDP는 너무 많아 검색이 느리므로 특정포트만 지정해서 확인합니다.

 

하지만 누구에게나 본인의 ip를 탐지할 수 있도록 열어준다는 것은 보안상 버전도 노출이 되고 열려있는 포트마다 취약한 곳을 노려 공격을 할 수 있습니다. 

정해진 특정사용자 주소 또는 특정서비스를 제외하고는 sync를 허용하지 않도록 차단해야합니다.

 

 

 

 iptables

그러기 위해서 만들어진 리눅스의 방화벽입니다.

centos 6버전을 기준으로 이하로는 iptables 를 많이 사용해왔고

centos 7버전 이상은 firewalld 방화벽을 사용합니다.

하지만 이전버전을 사용하는 서비스환경이 아직까지 많기 때문에 알아둬야합니다.

 

현재 방화벽을 끄고 진행하겠습니다.

 

원하지않는 설정이 기본설정이 되어있기 때문에

기본설정을 ssh 로 변경해주면 restart했을 때 설정이 유지됩니다. 

service iptables save

 

 

네트워크 명령어인 access-list와 비슷하게 리스트에 올려두면 순서대로 허용/차단하기 때문에

순서를 잘 맞춰서 등록하도록 합니다.

 

체인과 룰로 이루어집니다.

체인 유형

INPUT 서버에 들어오는 연결을 차단/허용
FORWARD 통과하는 연결을 차단/허용
OUTPUT 서버에서 만들어져 나가는 연결을 차단/허용

 

 

룰 유형

ACCEPT 패켓을 허용한다.
DROP 패켓을 드랍(차단)한다.
REJECT 거부 응답 메세지를 전송하며 패켓을 드랍(차단)한다.
LOG 매칭 시 로그를 발생한다.



일단 먼저 허용할 서비스의 포트를 생각해둡니다.

IP 192.168.2.201/24에 대해서 

TCP- http, https/ssl, telnet, ssh, SMTP, POP3(암호화안된) (22,23, 80 443 25,110)

UDP - dns

ICMP

를 허용하겠습니다.

나머지는 차단합니다.

 

[SERVER2]

iptables -A INPUT -p tcp -s 192.168.2.201/24 -m multiports --dports 22,23,25,80,110,443 -j ACCEPT
iptables -A INPUT -p udp -s 192.168.2.201/24 --dport 53 -j ACCEPT
iptables -A INPUT -p icmp -s 192.168.2.201/24 --icmp-type echo-request -j ACCEPT
request만 허용합니다.
iptables -A INPUT -i lo -j ACCEPT
인터페이스 루프백을 허용합니다.
iptables -m state --state ESTABLISHED,RELATED -p all -j ACCEPT
오는 패킷을 허용하지만 서버에서 요청하는 패킷 설정을 일일이 하기 어려우므로 주는 패킷은 모두 허용합니다.
iptables -P INPUT DROP
public을 모두 차단으로 설정합니다.

 

 

---

[if network]

access-list 110 permit tcp host 192.168.2.201 0.0.0.255 host 192.168.2.199 0.0.0.255 eq 22
access-list 110 permit tcp host 192.168.2.201 0.0.0.255 host 192.168.2.199 0.0.0.255 eq 23
...
access-list 110 permit tcp host 192.168.2.201 0.0.0.255 host 192.168.2.199 0.0.0.255 eq 443
access-list 110 permit icmp host 192.168.2.201 0.0.0.255 host 192.168.2.199
access-list 110 deny ip any any

 

 

인바운드 아웃바운드 설정까지 합니다.

---

iptables -D INPUT 1 또는
iptables -D INPUT -p tcp -s 192.168.2.201/24 --dport 22
리스트를 삭제합니다.
iptables -L INPUT -v --line-numbers
라인넘버가 뜨며 자세하게 확인이가능합니다.

 

설정이 끝나고 나서 nmap이 통하는지, 실제 주소접속도 해보고, ping telnet 등 서비스가 작동하는지 확인합니다.

 

 

Comments