이전글 :
알아야할 내용 :
Client가 외부서버 : main_srv, slave_srv 로는 통신가능하게, 외부서버가 client과는 통신이 안되게 설정할 것인데 이것을 NAT를 사용할 것 입니다. masqurade라는 기능을 사용할 것 입니다.
28번째줄이 net.pv4.ip_forward=1이 주석화 되있을텐데 이것을 #을 지워서 주석을 없애주고 :wq로 나와줍니다.
echo 1 > /proc/sys/net/ipv4/ip_forward
sysctl -w net.ip4.ip_forward = 1
위 2개의 명령어중에 되는걸로 해줍니다.
iptables -A FORWARD -o ens33 -j ACCEPT
iptables -A FORWARD -o ens37 -j ACCEPT
iptables -t nat -A POSTROUTING -o ens33 -j MASQUERADE
ens33(내부) ens37(외부)에서 접속이 가능하게 전부 ACCPET를 해줍니다. 그리고 위 3개의 명령어들을 차례대로 입력해 줍니다. 그러면 이제 Window Client에서 main_server로 핑이 보내집니다.
이제 window Client에서 ssh가 접속이 되게 설정할 것 입니다. main-server에서 진행합니다.
apt install openssh-server
sudo systemctl status ssh
install openssh-server로 ssh를 설치해 줍니다.
※ openssh가 설치가 되지 않는다면 ifconfig를 쳐보고 ens33이 꺼져있는지, ens37이 켜져있는지 확인해 봅시다. ens33은 가상네트워크라 패키지 다운받을 때는 꺼져있어야하고 패키지를 받기 위해서는 ens37이 켜져있어야 합니다.
설치 후 두번째 명령어를 입력해서 실행 중인지 확인해 봅시다.
실행 중인 것을 확인할 수 있습니다. 이제 이러면 window client에서 ssh로 접속이 될 것 입니다. main에서 만들었기 때문에 저 같은 경우는 main-server의 hostname이 main이기 때문에 ssh main@22.1.24.10 으로 접속이 가능합니다.
이제 root로 한번에 접속이 가능하게 할겁니다. 혹시 ssh root@22.1.24.10으로 될거라고 생각하시면 한번 해보세요. 아마도 안될 것 입니다. 그러면 root로 접속이 가능하게 설정해 봅시다.
※ 만약 Window Client에서 ssh로 접속이 안된다면, main-server에서 22번 포트가 안열려있을 경우가 있을 수 있습니다. 그럴경우 main-server에서 ufw allow ssh 또는 ufw allow 22를 입력해서 포트를 다시 열려 봅시다.
위의 경로에서 vim으로 들어가서 바꿔주면 됩니다.
Port 22
- ssh가 사용할 기본 포트 지정합니다.
Allowusers user1 root
- 로그인 허락할 계정을 기록합니다.
LoginGraceTime 600
- 유저의 로그인이 성공적으로 이루어지 않았을 때 이 시간 후에 서버가 연결을 끊는 시간입니다.
- 기본값은 600초입니다.
PermitRootLogin no
- root 로그인을 허용여부를 결정하는 것입니다. yes, no, without-password를 사용할 수 있습니다.
PasswordAuthentication yes
- 패스워드 인증을 허용한다. 이 옵션은 프로토콜 버전 1과 2 모두 적용됩니다.
인증할 때 암호기반 인증 방법의 사용 여부를 결정합니다.
강력한 보안을 위해 이옵션은 항상 no로 설정되있어야 합니다.
여기서 루트 로그인을 허용하기 위해서는 PermitRootLogin를 yes로 바꿔주면 ssh root@22.1.24.10으로 접속이 가능할 것 입니다. 포트번호도 바꾸고 싶다면 Port 22에서 22를 원하는 포트로 변경해 주면 됩니다. 그럴경우에는 ssh root@22.1.24.10 -p [포트] 로 접속하면 됩니다.
위의 예시에서는 22000 포트에서 열고 RootLogin를 허용해 주었습니다.
위와 같이 root로 잘 접속이 되는 것을 볼 수 있습니다. 이제 apache로 웹 서비스를 해볼 것 입니다.
apt install apache2
위의 명령어를 입력하면 apache2가 설치가 됩니다.
※ 이제부터는 ens33과 ens37 껏다 키고하는 것들은 스스로 하셔야합니다.
아파치가 성공적으로 설치가 되셨으면 window client로 가 인터넷 창을 켜 주시고, main-server의 아이피를 입력해봅시다. 그러면 apache2의 기본적인 사이트 화면이 뜰겁니다. 이제 우리는 기본 탬플릿을 지워주고 "Hello World"를 입력해 봅시다. 그러면 아래와 같은 화면이 나올거에요.
잘 나오는 것을 확인할 수 있습니다. 이제 slave-server에는 nginx를 설치해서 아파치에서 설정했던 거와 마찬가지로 설정해주겠습니다.
apt install nginx
vim /var/www/html/index.nginx-debian.html
이것도 설치가 완료가 되면 아파치와 마찬가지로 아이피로 접속이 가능해 집니다.
위와 같이 잘 바꿔 주셨으면 다시 window client로 이동해서 이번엔 slave-server의 IP를 인터넷창에 넣어주면 아파치에서 설정했던거와 동일하게 화면에 띄여지는 것을 확인할 수 있습니다.
Apache2와 Nginx 루트 디렉토리 변경
apache2
apache2는 총 2가지의 파일을 바꿔야합니다. 일단 /var/www/html/ 가 기본 디렉토리인데 이것을 /home/main/server/로 바꿔 봅시다.
vim /etc/apache2/apache2.conf
vim /etc/apache2/sites-available/000-default.conf
위 2파일에서 수정을 해줘야합니다.
164줄에 있는 /var/www/html/ 이라 적혀있는 곳을 /home/main/server/ 로 바꿔 줍니다.
DocumentRoot에 적혀있는 /var/www/html/ 파일을 /home/main/server/ 로 바꿔줍니다. 그 후 /home/main/server 디렉토리 안에 index.html를 작성하여 기본적인 html파일을 만들어 줍니다. 그 후 apache2를 재시작해 줍니다.
systemctl restart apache2
service apache2 restart
둘 중에 하나만 되면 됩니다.
적용 후 아주 잘 변경된 것을 볼 수 있습니다.
nginx
nginx는 매우 간단합니다. 단 하나의 파일만 바꿔주면 됩니다.
vim /etc/nginx/sites-enabled/default
server에서 root에 있는 /var/www/html/ 를 /home/slave-server/server/로 바꿔줍니다. 그 후 재시작하면 정상적으로 작동하는 것을 볼 수 있습니다.
IPTABLES 사용법
테이블(Table)
- filter, nat, mangle, raw
- 명시하지 않으면 기본적으로 filter입니다.
액션(Action)
- -A(--append) : 정책 추가, 다른 정책들이 있다면 맨 아래에 추가합니다.
- -I(--insert) : 청색 삽입, 다른 정책들이 있다면 맨 위에 추가합니다.
- -D(--delete) : 정책 삭제
- -R(--replace) : 정책 교체
- -F(--flush) : 모든 정책 삭제
- -P(--policy) : 기본 정책을 설정
- -L(--list) : 정책 나열
체인(Chain)
- INPUT
- OUTPUT
- FORWARD
- PREROUTING
- POSTROUING
매치(Match)
- -s(--source, --src) : 출발지 매칭, 도메인, IP 주소, 넷마스크 값을 이용하여 표기
- -d(--destination, --dst) : 목적지 매칭, 도메인, IP주소, 넷마스크값을 이용하여 표기
- -p : 프로토콜과 매칭, TCP, UDP, ICMP와 같은 이름을 사용하고 대소문자는 구분하지 않음
- -i(--in-interface) : 입력 인터페이스와 매칭
- -o(--out-interface) : 출력 인터페이스와 매칭
- -j(--jump) : 매치되는 패킷을 어떻게 처리할지 지정
타켓(target)
- ACCEPT : 패킷을 허용합니다.
- DROP : 패킷을 버립니다(패킷이 전송된 적이 없던 것처럼)
- REJECT : 패킷을 버리고 이와 동시에 적절한 응답 패킷을 전송한다(ICMP-PORT-UNREACHABLE)
- LOG : 패킷을 syslog에 기록한다.
- SNAT --to [주소] : 소스 IP를 변환(NAT)NAT]한다.
- DNAT --to [주소] : 목적지 IP를 변환(NAT)한다.
- RETURN : 호출 체인 내에서 패킷 처리를 계속한다.
위에 것들을 잘 활용한다면 대부분 모든 정책을 설정하실 수 있을꺼에요 간단하게 문제입니다. 라우터에서 main-server에서 오는 80port를 차단해봅시다. 차단에 성공하면 window client에서 22.1.24.10 아파치 서버로 열었던게 안들어 가지겠죠?
다 하셨나요... 정답을 공개합니다.
iptables -I FORWARD -d 22.1.24.10 -p tcp --dport 80 -j DROP
위 코드를 라우터에 입력해주신 다음 window client에서 22.1.24.10에 접속해 보시면
이제 다시 iptables -F를 입력하신 후에 다시 접속을 해봅시다.
다시 잘 연결되는 모습을 확인할 수 있습니다. 만약 라우터가 아닌 main-server자체에서 80포트를 막고 싶다면
iptables -I INPUT -p tcp --dport 80 -j DROP
과같이 적어주시면 똑같이 window client에서는 접속이 안 됩니다.
오늘은 여기까지입니다.
'기능반공부 > 서버' 카테고리의 다른 글
[Vim] 알면 좋은 Vim 지식 (0) | 2023.02.17 |
---|---|
[DOCKER] 도커에 대한 기본 사용 설명 (0) | 2022.11.01 |
쉘 스크립트 (0) | 2022.02.11 |
[기능반] 서버구축 4. (0) | 2022.02.03 |
[기능반] 서버구축 1. (0) | 2022.01.25 |