CentOS 6.x IPTABLES 방화벽 설정



현재 리눅스 서버에서 필요한 포트만 열어두고 사용하지 않는 포트는 차단하여 봅시다.


먼저 서비스 중인 LISTEN 포트가 무엇이 있는지 체크가 필요합니다.


# netstat -ant | grep LISTEN

tcp        0      0 127.0.0.1:53                0.0.0.0:*                   LISTEN

tcp        0      0 0.0.0.0:21                  0.0.0.0:*                   LISTEN

tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN

tcp        0      0 127.0.0.1:953               0.0.0.0:*                   LISTEN

tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN

tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN

tcp        0      0 :::80                       :::*                        LISTEN

tcp        0      0 ::1:25                      :::*                        LISTEN

tcp        0      0 :::443                      :::*                        LISTEN


21 : FTP

22 : SSH

25 : SMTP

53, 953 : DNS

80 : HTTP

443 : HTTPS

3306 : MYSQL


이 정도로 서비스 중입니다. 서버 마다 상황이 다르겠지만 위 포트를 예로 들어 진행하겠습니다.


위의 포트만 열어주고 나머지는 차단해보도록 합시다.


# vi /etc/sysconfig/iptables 로 편집


-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

-A INPUT -i lo -j ACCEPT

-A INPUT -p icmp -j DROP

-A INPUT -p tcp -m tcp --dport 21 -j ACCEPT

-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT

-A INPUT -p tcp -m tcp --dport 53 -j ACCEPT

-A INPUT -p udp -m udp --dport 53 -j ACCEPT

-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT

-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT

-A INPUT -p tcp -m tcp -j DROP


localhost 인 127.0.0.1 아이피는 규칙에 넣지 않아도 됩니다. 넣어도 적용이 되지 않습니다.


제일 마지막 줄이 모든 포트를 차단하는 규칙입니다.


위 쪽에서 서비스 포트를 미리 정의 하여야 합니다.


깜빡하고 안 적어 준 다음 service iptables restart 를 하면 안되겠죠?


22번 포트가 열려 있다면 ssh 로 접속해서 수정이 가능하겠지만 22번 포트가 누락되었다면 콘솔로 접속하는 방법 밖에 없습니다.


이점 유의 하시기 바랍니다.



그리고 아래는 iptables 명령어로 규칙을 추가하는 방법입니다.


iptables -P INPUT DROP

iptables -P OUTPUT ACCEPT

iptables -P FORWARD ACCEPT

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

iptables -A INPUT -i lo -j ACCEPT

iptables -A INPUT -p icmp -j DROP

iptables -A INPUT -p tcp --dport 21 -j ACCEPT

iptables -A INPUT -p tcp --dport 22 -j ACCEPT

iptables -A INPUT -p tcp --dport 53 -j ACCEPT

iptables -A INPUT -p udp --dport 53 -j ACCEPT

iptables -A INPUT -p tcp --dport 80 -j ACCEPT

iptables -A INPUT -p tcp --dport 443 -j ACCEPT

iptables -A INPUT -p tcp --dport 0:65535 -j DROP

service iptables save


가급적 콘솔에서 작업하세요~



멀티포트로 설정하는 방법은 아래와 같습니다.


iptables -A INPUT -p tcp -m multiport --dports 80,443 -j ACCEPT

iptables -A INPUT -p tcp --dport 8000:8080 -j ACCEPT


위와 같이 추가할 수 있습니다.


블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

리눅스 ftp smtp 포트 특정IP 만 허용하기



iptables 로 특정아이피에서만 접근이 가능하게 하는 방법입니다.


ftp smtp mysql 포트를 127.0.0.1(localhost)과 192.168.1.1 만 허용하는 예제입니다.


iptables -I INPUT -p tcp --dport 21 -j DROP

iptables -I INPUT -s 127.0.0.1 -p tcp --dport 21 -j ACCEPT

iptables -I INPUT -s 192.168.1.1 -p tcp --dport 21 -j ACCEPT

iptables -I INPUT -p tcp --dport 25 -j DROP

iptables -I INPUT -s 127.0.0.1 -p tcp --dport 25 -j ACCEPT

iptables -I INPUT -s 192.168.1.1 -p tcp --dport 25 -j ACCEPT

iptables -I INPUT -p tcp --dport 3306 -j DROP

iptables -I INPUT -s 127.0.0.1 -p tcp --dport 3306 -j ACCEPT

iptables -I INPUT -s 192.168.1.1 -p tcp --dport 3306 -j ACCEPT

service iptables save


위와 같이 명령어를 실행하면 됩니다.


확인은 iptables -L 로 확인할 수 있습니다.


# iptables -L

Chain INPUT (policy ACCEPT)

target     prot opt source               destination

ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED

ACCEPT     all  --  anywhere             anywhere

DROP       icmp --  anywhere             anywhere

ACCEPT     tcp  --  192.168.1.1          anywhere            tcp dpt:ftp

ACCEPT     tcp  --  localhost.localdomain  anywhere            tcp dpt:ftp

DROP       tcp  --  anywhere             anywhere            tcp dpt:ftp

ACCEPT     tcp  --  192.168.1.1          anywhere            tcp dpt:smtp

ACCEPT     tcp  --  localhost.localdomain  anywhere            tcp dpt:smtp

DROP       tcp  --  anywhere             anywhere            tcp dpt:smtp

ACCEPT     tcp  --  192.168.1.1          anywhere            tcp dpt:mysql

ACCEPT     tcp  --  localhost.localdomain  anywhere            tcp dpt:mysql

DROP       tcp  --  anywhere             anywhere            tcp dpt:mysql

ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ftp

ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:domain

ACCEPT     udp  --  anywhere             anywhere            state NEW udp dpt:domain

ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:http

ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpts:irdmi:webcache

ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:warehouse


iptables 정책은 위쪽이 우선순위가 높습니다.


블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

리눅스 MySQL 3306 외부망 차단하기



iptables 로 3306 포트를 외부IP는 접속을 차단하고 로컬(127.0.0.1)IP는 허용을 하면 됩니다.


외부로 부터 공격시도가 많다면 한번 시도해보세요~


# iptables -I INPUT -p tcp --dport 3306 -j DROP

# iptables -I INPUT -s 127.0.0.1 -p tcp --dport 3306 -j ACCEPT

# service iptables save

순서가 바뀌면 안됩니다. drop 을 먼저 하고 accept 를 하여야 합니다.


룰이 잘 적용되었는지 한번 확인해 봅시다.


[root@vps log]# iptables -L | grep mysql

ACCEPT     tcp  --  localhost.localdomain  anywhere            tcp dpt:mysql

DROP       tcp  --  anywhere             anywhere            tcp dpt:mysql


잘 적용되었네요.



외부에서 접속을 한번 시도해 보겠습니다.


[root@conoha-jp ~]# mysql -hexample.com -uroot

ERROR 2003 (HY000): Can't connect to MySQL server on 'example.com' (110)


접근이 안되는 것을 확인되었습니다.


블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

IPTABLES 특정아이피 특정포트 허용 방법



리눅스에서 특정IP 만 특정포트를 허용해주고 싶을 때 아래 처럼 명령어를 주면 됩니다.


# iptables -I INPUT -p tcp -s 허용아이피 --dport 포트번호 -j ACCEPT


-I 대신에 -A 를 사용하여도 되지만 iptables 는 위쪽 조건이 우선이기 때문에 조건을 잘 고려해서 사용하시면 됩니다.


아이피대역으로 허용하려면 192.168.1.0/24, 192.168.0.0/16, 10.0.0.0/8 이렇게 설정할 수 있습니다.



특정 포트를 차단하는 방법은


# iptables -I INPUT -p tcp --dport 포트번호 -j DROP



방화벽 규칙이 잘 적용되었는지 확인하는 방법은


# iptables -L


적용한 규칙을 삭제하는 방법은


# iptables -D INPUT -p tcp -s 허용아이피 --dport 포트번호 -j ACCEPT


-I 대신에 -D 를 사용하면 됩니다.



[root@vps bin]# iptables -I INPUT -p tcp -s 192.168.1.100 --dport 3306 -j ACCEPT

[root@vps bin]# iptables -L | grep mysql

ACCEPT     tcp  --  192.168.1.100        anywhere            tcp dpt:mysql

[root@vps bin]# iptables -D INPUT -p tcp -s 192.168.1.100 --dport 3306 -j ACCEPT

[root@vps bin]# iptables -L | grep mysql


마지막으로 재부팅 되더라도 규칙을 적용하려면


service iptables save 를 해주어야 합니다.



블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,

CentOS 7.x firewalld 대신에 iptables 로 대체



아무리 봐도 firewalld 는 생소해서 도무지 적응이 안된다.


firewalld 를 내리고 iptables 를 설치해보자.



[root@conoha ~]# systemctl stop firewalld

[root@conoha ~]# systemctl disable firewalld

Removed symlink /etc/systemd/system/basic.target.wants/firewalld.service.

Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.

[root@conoha ~]# yum install iptables-services

Loaded plugins: fastestmirror

Loading mirror speeds from cached hostfile

 * base: ftp.iij.ad.jp

 * epel: ftp.riken.jp

 * extras: ftp.iij.ad.jp

 * updates: ftp.iij.ad.jp

Resolving Dependencies

--> Running transaction check

---> Package iptables-services.x86_64 0:1.4.21-16.el7 will be installed

--> Finished Dependency Resolution


Dependencies Resolved


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

 Package                  Arch          Version               Repository   Size

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

Installing:

 iptables-services        x86_64        1.4.21-16.el7         base         50 k


Transaction Summary

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

Install  1 Package


Total download size: 50 k

Installed size: 24 k

Is this ok [y/d/N]: y

Downloading packages:

iptables-services-1.4.21-16.el7.x86_64.rpm                 |  50 kB   00:00

Running transaction check

Running transaction test

Transaction test succeeded

Running transaction

  Installing : iptables-services-1.4.21-16.el7.x86_64                       1/1

  Verifying  : iptables-services-1.4.21-16.el7.x86_64                       1/1


Installed:

  iptables-services.x86_64 0:1.4.21-16.el7


Complete!

[root@conoha ~]# systemctl enable iptables

Created symlink from /etc/systemd/system/basic.target.wants/iptables.service to /usr/lib/systemd/system/iptables.service.

[root@conoha ~]# systemctl start iptables

[root@conoha ~]# iptables -L

Chain INPUT (policy ACCEPT)

target     prot opt source               destination

ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED

ACCEPT     icmp --  anywhere             anywhere

ACCEPT     all  --  anywhere             anywhere

ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh

REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited


Chain FORWARD (policy ACCEPT)

target     prot opt source               destination

REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited


Chain OUTPUT (policy ACCEPT)

target     prot opt source               destination

[root@conoha ~]#


폰트 굵은 부분만 보면 된다.



블로그 이미지

영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

,