J'essaie de configurer iptables sur mon serveur Ubuntu 12.04 LTS pour transférer le port 443 à 8443.
Mais quand je lance cette commande:
Sudo iptables -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8443
Je reçois l'erreur suivante:
iptables: No chain/target/match by that name.
Ma configuration actuelle d'iptables:
$ Sudo iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
ACCEPT tcp -- anywhere anywhere tcp dpt:https
DROP tcp -- anywhere anywhere tcp dpt:http
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
Qu'est-ce qui me manque ou que je fais mal?
Étant donné que la chaîne PREROUTING
appartient à la table NAT
et non à la table FILTER
. Si vous ne mentionnez aucune table explicitement à l'aide de l'option -t
, alors FILTER
est utilisé.
Donc, vous devez mentionner le type de table avec -t nat
:
Sudo iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-ports 8443
Notez que les tables MANGLE
_ et RAW
ont également une chaîne PREROUTING
, mais comme vous redirigez uniquement les ports, vous recherchez probablement la table NAT
.
J'ai une erreur similaire quand j'exécute une commande docker
docker run -d -p 8084:8080 knockdata/zeppelin-highcharts
d9c5d34f500d621585470b0e70b915395fcb6b3437859e0f610dbb58d51faf25
docker: Error response from daemon: driver failed programming external connectivity on endpoint elegant_jang
(7ca0f5ad689f5443ce7533f66b4a86c34d2dbd9d076bac4812288dd3f6a76698):
iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8084 -j DNAT --to-destination 172.17.0.2:8080
! -i docker0: iptables: No chain/target/match by that name.
(exit status 1).
J'ai pu le réparer en réinstallant docker-engine
apt-get remove docker-engine
apt-get install docker-engine
Chaîne PREROUTING disponible uniquement pour les tables nat, mangle et raw.
iptables suppose une table de filtrage, vous devez donc spécifier l’une d’elles, par exemple. iptables -t nat ...
Vous pouvez installer ((Config Server Security & Firewall)) et utiliser les paramètres suivants.
nano /etc/csf/csf.conf
SYNFLOOD = "" => SYNFLOOD = "1"
CONNLIMIT = "" => CONNLIMIT = "80;75,443;75,21;50”
PORTFLOOD = "" => PORTFLOOD = "80;tcp;5;250"
SYSLOG = “0” => SYSLOG = "1"
DOCKER = “0” => DOCKER = "1"
nano /etc/csf/csfpost.sh
#!/bin/sh
echo "[DOCKER] Setting up FW rules."
iptables -N DOCKER
iptables -t nat -N DOCKER
iptables -t nat -A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
iptables -t nat -A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
# Masquerade outbound connections from containers
iptables -t nat -A POSTROUTING -s 172.17.0.0/16 ! -o docker0 -j MASQUERADE
# Accept established connections to the docker containers
iptables -t filter -N DOCKER
iptables -t filter -A FORWARD -o docker0 -j DOCKER
iptables -t filter -A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j
ACCEPT
# Allow docker containers to communicate with themselves & outside world
iptables -t filter -A FORWARD -i docker0 ! -o docker0 -j ACCEPT
iptables -t filter -A FORWARD -i docker0 -o docker0 -j ACCEPT
echo "[DOCKER] Done."
Remarque: Cette configuration vous empêche également des attaques DDOS de base.