/etc/selinux/config 파일내에 옵션이 있으며
1. enforcing – SELINUX 보안정책
2. poermissive – 보안정책대신 경고프린트
3. disabled – 보안정책 미사용
서버 기동시 기본은 1번이다.
Linux 시스템 (이 연습에서는 CentOS 7.3을 사용)에서 SSH 포트를 변경하여 기본이 아닌 SSH 포트 (TCP 포트 22)를 수신하는 방법을 설명합니다. 이 변경 사항을 수용하기 위해 SELinux 수정을 포함 할 것입니다.
1. 처음으로 sshd 서비스 의 기본 구성 및 출력을 확인 합니다.
1.1 포트 구성을 위해 sshd_config 를 확인 합니다.
[root@system1 ~]# <strong>cat /etc/ssh/sshd_config | grep "Port 22"</strong> #Port 22
포트 22도 주석 처리되고 있으며 기본적으로 포트 22를 사용합니다.
1.2 시스템이 이제 포트 22에서 수신하는지 확인합니다.
[[root@server ~]# <strong>ss -tulpn | grep sshd</strong> tcp LISTEN 0 128 <strong>*:22</strong> *:* users:(("sshd",pid=5485,fd=3)) tcp LISTEN 0 128 <strong>:::22</strong> :::* users:(("sshd",pid=5485,fd=4))
1.3 SELinux는 강제 모드에 있어야 합니다. 그렇지 않으면 / etc / sysconfig / selinux 로 이동 하여 SELinux 모드를 변경하십시오.
혹시나 나중에 ssh 기동시에 안되는경우가 있다. setforce 0 으로 해서 permission 모드로 변경하면 정상적으로 올라간다. 상세내용은 아래참조
[root@system1 ~]# <strong>getenforce</strong> Enforcing
2. 기본 SSH 포트를 변경하고 서비스를 다시 시작합니다.
2.1 포트 20002를 기본 포트로 사용하도록 sshd_config 파일을 수정 합니다.
[root@system1 ~]# <strong>vim /etc/ssh/sshd_config</strong> ........... Port 20002 ...........
2.2 sshd 서비스를 다시 시작합니다.
[root@server ~]# <strong>systemctl restart -l sshd</strong> Job for sshd.service failed because a configured resource limit was exceeded. See "systemctl status sshd.service" and "journalctl -xe" for details.
[root@server ~]# <strong>systemctl status -l sshd</strong> ● sshd.service - OpenSSH server daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled) Active: activating (auto-restart) (Result: resources) since Sun 2017-02-26 23:43:51 WIB; 6s ago Docs: man:sshd(8) man:sshd_config(5) Process: 5534 ExecStart=/usr/sbin/sshd $OPTIONS (code=exited, status=0/SUCCESS) Main PID: 5485 (code=exited, status=0/SUCCESS) Feb 26 23:43:51 server.mylab.com systemd[1]: sshd.service never wrote its PID file. Failing. Feb 26 23:43:51 server.mylab.com systemd[1]: Failed to start OpenSSH server daemon. Feb 26 23:43:51 server.mylab.com systemd[1]: Unit sshd.service entered failed state. Feb 26 23:43:51 server.mylab.com systemd[1]: <strong>sshd.service failed</strong>.
서비스가 시작되지 않은 것을 볼 수 있습니다. 이 문제를 해결하는 가장 쉬운 방법은 SELinux (setenforce 0)를 비활성화하여 sshd 서비스를 차단하는 이유인지 파악하는 것입니다. 이 연습에서는 sealert 를 사용하여 더 많은 정보를 얻기 위해 식별 할 것입니다.
2.3 SELinux가 sshd가 포트 20002 / TCP에 바인딩하는 것을 차단하고 있는지 확인합니다.
[root@server ~]# <strong>sealert -a /var/log/audit/audit.log</strong> 100% done found 3 alerts in /var/log/audit/audit.log ... SELinux is preventing /usr/sbin/sshd from name_bind access on the tcp_socket port 20002. ***** Plugin bind_ports (92.2 confidence) suggests ************************ If you want to allow /usr/sbin/sshd to bind to network port 20002 Then you need to modify the port type. Do <strong># semanage port -a -t PORT_TYPE -p tcp 20002</strong> where PORT_TYPE is one of the following: ssh_port_t, vnc_port_t, xserver_port_t. ***** Plugin catchall_boolean (7.83 confidence) suggests ****************** If you want to allow nis to enabled Then you must tell SELinux about this by enabling the 'nis_enabled' boolean. Do setsebool -P nis_enabled 1 ***** Plugin catchall (1.41 confidence) suggests ************************** If you believe that sshd should be allowed name_bind access on the port 20002 tcp_socket by default. Then you should report this as a bug. You can generate a local policy module to allow this access. Do allow this access for now by executing: # ausearch -c 'sshd' --raw | audit2allow -M my-sshd # semodule -i my-sshd.pp Additional Information: <strong>Source Context system_u:system_r:sshd_t:s0-s0:c0.c1023</strong> <strong>Target Context system_u:object_r:unreserved_port_t:s0</strong> <strong>Target Objects port 20002 [ tcp_socket ]</strong> Source sshd Source Path /usr/sbin/sshd Port 20002 Host Source RPM Packages openssh-server-6.6.1p1-33.el7_3.x86_64 Target RPM Packages Policy RPM selinux-policy-3.13.1-102.el7_3.13.noarch Selinux Enabled True Policy Type targeted Enforcing Mode Enforcing Host Name server.mylab.com Platform Linux server.mylab.com 3.10.0-514.6.1.el7.x86_64 #1 SMP Wed Jan 18 13:06:36 UTC 2017 x86_64 x86_64 Alert Count 5 First Seen 2017-02-26 23:43:47 WIB Last Seen 2017-02-26 23:44:33 WIB Local ID b4e40db1-4036-4c63-b35e-6ea5f7bb01c8 ...
2.4 ssh 용 SELinux 포트를 확인하고 필요한 변경을 수행합니다.
[root@server ~]# <strong>semanage port -l | grep ssh</strong> ssh_port_t tcp 22
기본적으로 ssh 용 SELinux 포트는 포트 22에 바인드됩니다. 기본이 아닌 포트를 추가하십시오.
[root@server ~]# <strong>semanage port -a -t ssh_port_t -p tcp 20002</strong>
[root@server ~]# <strong>semanage port -l | grep ssh</strong> ssh_port_t tcp 20002, 22
2.5 sshd 서비스를 다시 시작합니다.
[root@server ~]# <strong>systemctl restart sshd</strong>
[root@server ~]# <strong>systemctl status sshd</strong> ● sshd.service - OpenSSH server daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled) Active: active (running) since Sun 2017-02-26 23:46:43 WIB; 5s ago Docs: man:sshd(8) man:sshd_config(5) Process: 5689 ExecStart=/usr/sbin/sshd $OPTIONS (code=exited, status=0/SUCCESS) Main PID: 5690 (sshd) CGroup: /system.slice/sshd.service └─5690 /usr/sbin/sshd Feb 26 23:46:43 server.mylab.com systemd[1]: Starting OpenSSH server daemon... Feb 26 23:46:43 server.mylab.com systemd[1]: PID file /var/run/sshd.pid not readable (yet?) after start. Feb 26 23:46:43 server.mylab.com sshd[5690]: <strong>Server listening on 0.0.0.0 port 20002.</strong> Feb 26 23:46:43 server.mylab.com sshd[5690]: Server listening on :: port 20002. Feb 26 23:46:43 server.mylab.com systemd[1]: <strong>Started OpenSSH server daemon</strong>.
4. 시스템이 이제 포트 20002에서 수신하는지 확인합니다.
[root@server ~]# <strong>ss -tulpn | grep sshd</strong> tcp LISTEN 0 128 <strong>*:20002</strong> *:* users:(("sshd",pid=5690,fd=3)) tcp LISTEN 0 128 :::20002 :::* users:(("sshd",pid=5690,fd=4))
5. 다른 시스템이 포트 20002 / TCP에서이 시스템에 액세스 할 수 있도록 방화벽 규칙을 추가합니다.
5.1 현재 방화벽 규칙을 확인합니다.
[root@server ~]# <strong>firewall-cmd --permanent --list-all</strong> public target: default icmp-block-inversion: no interfaces: sources: services: dhcpv6-client https samba <strong>ssh</strong> ports: 3260/tcp protocols: masquerade: no forward-ports: sourceports: icmp-blocks: rich rules:
ssh 서비스가 이미 허용 된 것을 볼 수 있지만 이것은 기본 TCP 포트 (포트 22)를 사용하는 ssh에 대한 것입니다. 따라서 포트 20002를 추가해야합니다.
5.2 방화벽에 포트 20002를 추가하고 확인합니다.
[root@server ~]# <strong>firewall-cmd --permanent --add-port=20002/tcp</strong> success
[root@server ~]# <strong>firewall-cmd --reload</strong> success
[root@server ~]# <strong>firewall-cmd --permanent --list-all</strong> public target: default icmp-block-inversion: no interfaces: sources: services: dhcpv6-client https samba ssh ports: <strong>20002/tcp</strong> 3260/tcp protocols: masquerade: no forward-ports: sourceports: icmp-blocks: rich rules: