iptables를 설치
sudo yum install iptables
yum install iptables-services -y
sudo systemctl restart iptables
- 목적지 서버에서 포트 포워딩을 허용
- 목적지 서버에서는 해당 포트로 들어오는 요청을 받을 수 있도록 포트를 열어야한다. 이를 위해 방화벽 규칙을 추가해야한다. 예를 들어, 목적지 서버에서 8080 포트를 열고 허용하려면 다음 명령어를 실행한다.
- 이제 다른 서버에서 8080 포트로 요청을 보낼 때 목적지 서버가 해당 요청을 수신할 수 있다.
sudo iptables -I INPUT 1 -p tcp --dport 8080 -j ACCEPT
2. 송신지 서버에서 포트 포워딩 규칙 추가
- 송신지 서버에서는 iptables를 사용하여 외부에서 포트로 요청을 보내면 목적지 서버로 해당 요청을 전달하도록 포트 포워딩 규칙을 추가해야한다. 이를 위해 다음 명령어를 사용할 수 있다.
- [LOCAL_PORT]: 송신지 서버에서 포트 포워딩을 적용할 로컬 포트
- [DESTINATION_IP]: 목적지 서버의 IP 주소
- [DESTINATION_PORT]: 목적지 서버에서 수신 대기중인 포트 번호
sudo iptables -t nat -A PREROUTING -p tcp --dport [LOCAL_PORT] -j DNAT --to-destination [DESTINATION_IP]:[DESTINATION_PORT]
예를 들어, 송신지 서버의 80 포트로 들어오는 요청을 목적지 서버의 8080 포트로 전달하려면 다음 명령어를 실행한다.
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination [DESTINATION_IP]:8080
그냥 동일 서버에 포트만 다르게 바꾸는 경우, 외부에서 80 포트로 들어오는 요청을 내부에서 8080 포트로 전달
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
DNAT
외부에서 20.20.20.20으로 들어온 패킷을 10.10.10.10으로 도착지를 바꿔주었다.
-iptables서버가 도착지를 바꿔줬다.
-포트포워딩에 사용된다.
# iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to 10.10.10.10
iptables를 다시 시작하면 규칙이 적용
sudo systemctl restart iptables
systemctl enable iptables
또는
sudo service iptables restart
이후 위 명령어처럼 저장이 필요할 때 service iptables save를 입력 해주시면 됩니다.
service iptables save
iptables-save
iptables 완전 초기화 하기
[root@localhost ~]# iptables -Z
[root@localhost ~]# iptables -X
[root@localhost ~]# iptables -F
[root@localhost ~]# 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@localhost ~]# iptables -A INPUT -p tcp --dport 22 -j ACCEPT
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
위와 같이 입력할 경우 tcp 22번 포트만 허용할 수 있습니다.
반대로 차단을 원하시면 ACCEPT를 DROP으로 바꿔주시면 됩니다.
그와 비슷하게 다음과 같이 입력하면 UDP 53번 포트만 허용합니다.
iptables -A INPUT -p udp --dport 53 -j ACCEPT
그 외에도 여러 포트를 한번에 허용하고 싶은 경우 22 가 아닌 22:25 와 같이 22~25 까지 허용할 수 있습니다.
iptables -A INPUT -p tcp --dport 22:25 -j ACCEPT
의미 : TCP 포트 22번 부터 25번까지 모두 허용
그 외에도 앞에 -s 옵션을 통해 출발지 주소를 적어주면 "특정 IP 주소에서 올때" 라는 조건도 걸 수 있습니다.
[root@localhost ~]# iptables -A INPUT -s 192.168.0.100 -p tcp --dport 22 -j ACCEPT
[root@localhost ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- 192.168.0.100 0.0.0.0/0 tcp dpt:22
특정 IP 주소 및 대역대 허용하기
[root@localhost ~]# iptables -A INPUT -s 192.168.0.0/24 -j ACCEPT
[root@localhost ~]# iptables -nL
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT all -- 192.168.0.0/24 0.0.0.0/0
iptables 포트 포워딩 규칙을 보는 방법
PREROUTING 체인에서 DNAT 규칙이 사용되어 포트 포워딩이 구현되기 때문에 두가지 방법을 쓴다.
PREROUTING 체인을 확인
sudo iptables -t nat -L PREROUTING
DNAT 규칙을 확인
sudo iptables -t nat -L PREROUTING -n -v
iptables에서 모든 포트를 허용하려면 다음과 같은 규칙을 추가해야 합니다.
- INPUT, OUTPUT, FORWARD 체인에 대해 모든 트래픽을 허용하는 규칙을 추가합니다. 이를 위해 다음 명령어를 사용합니다.
sudo iptables -A INPUT -j ACCEPT
sudo iptables -A OUTPUT -j ACCEPT
sudo iptables -A FORWARD -j ACCEPT
모든 NAT 규칙을 허용하는 규칙을 추가합니다. 이를 위해 다음 명령어를 사용합니다
sudo iptables -t nat -A POSTROUTING -j ACCEPT
sudo iptables -t nat -A PREROUTING -j ACCEPT
=============================================================
Forward MySQL port to another IP with IPTABLES
iptables -t nat -A PREROUTING -p tcp --dport 3306 -j DNAT --to 192.168.0.100:3306
iptables -A FORWARD -p tcp -d 192.168.0.100 --dport 3306 -j ACCEPT
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables-save
'Linux' 카테고리의 다른 글
inotifywait / inotifywatch (0) | 2023.03.15 |
---|---|
Rsync와 inotifywait를 사용한 백업 ver AWS (0) | 2023.03.15 |
Firewalld Redirection (port forwarding) (0) | 2023.03.11 |
[트러블슈팅] WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! (0) | 2023.03.10 |
ss (natstat) (0) | 2023.01.09 |