LINUX.ORG.RU
ФорумAdmin

iptables для открыть порт для определенного IP


0

0

есть машина, которая ходит через NAT в инет. Не получается сделать так, чтобы она могла только пинговать IP в инете и получать данные только по http. Подскажите пожалуйста правило, а то совсем уже запутался. Ходит в инет так:
-A POSTROUTING -s 10.1.2.1 -d ! 222.222.222.221/255.255.255.240 -o eth0 -j SNAT --to-source 222.222.222.222

anonymous

Люди, ну читайте хоть что-нибудь!!!
iptables -A POSTROUTING -s 10.1.2.1 -d ! 222.222.222.221/255.255.255.240 -o eth0 -p tcp -m multiport --destination-port 80 -j SNAT --to-source 222.222.222.222
iptables -A POSTROUTING -s 10.1.2.1 -d ! 222.222.222.221/255.255.255.240 -o eth0 -p icmp -j SNAT --to-source 222.222.222.222

yumi ★★
()
Ответ на: комментарий от yumi

сорри, как всегда забыл цепочку указать :)
iptables -t nat -A POSTROUTING -s 10.1.2.1 -d ! 222.222.222.221/255.255.255.240 -o eth0 -p tcp -m multiport --destination-port 80 -j SNAT --to-source 222.222.222.222
iptables -t nat -A POSTROUTING -s 10.1.2.1 -d ! 222.222.222.221/255.255.255.240 -o eth0 -p icmp -j SNAT --to-source 222.222.222.222

yumi ★★
()

Сначала так:
### reset the default policies in the filter table.
$IPTABLES -t filter -P INPUT DROP
$IPTABLES -t filter -P FORWARD DROP
$IPTABLES -t filter -P OUTPUT DROP
Потом
$IPTABLES -A icmp_packets -p ICMP -s 0/0 -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LO_IFACE -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LAN_IFACE -s $LAN_IP_RANGE -j ACCEPT
$IPTABLES -A INPUT -p ALL -i $LAN_IFACE -d $LAN_BROADCAST_ADDRESS -j ACCEPT

$IPTABLES -A INPUT -p ALL -d $INET_IP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A INPUT -p TCP -i $INET_IFACE -j tcp_packets
$IPTABLES -A INPUT -p UDP -i $INET_IFACE -j udp_packets
$IPTABLES -A INPUT -p ICMP -i $INET_IFACE -j icmp_packets

В цепочках tcp_packets, udp_packets и icmp_packets прописываете правила для них, только смотрите, не разрешите им лишнего!
Можно дополнительно создать правила для DROP или REJECT всего явно недопустимого, например:
# smurf-атака
$IPTABLES -A INPUT -i $INET_IFACE -p icmp -d $BROADCAST_DEST -j DROP
$IPTABLES -A OUTPUT -o $INET_IFACE -p icmp -d $BROADCAST_DEST -j REJECT

Дальше разрешите форвард или НАТ:
$IPTABLES -A FORWARD -i $INET_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT

После, если есть необходимость, разрешите кому и куда можно обращаться извне (из паблика).

А теперь разрешаете пользователю делать то, что считаете необходимым:
$IPTABLES -A FORWARD -p tcp -s $LAN_IP --sport $UNPRIVPORTS -d $ANYWHERE --dport $TCP_PORT -j ACCEPT
$IPTABLES -A FORWARD -p udp -s $LAN_IP --sport $UNPRIVPORTS -d $ANYWHERE --dport $UDP_PORT -j ACCEPT

Это общая схема построения firewall.
Вместо параметров, имеющиеся в правилах, проставьте свои значения.

archont ★★★
()
Ответ на: комментарий от archont

Да, я тоже забыл об этом:
после
$IPTABLES -A FORWARD -i $INET_IFACE -m state --state ESTABLISHED,RELATED -j ACCEPT
добавьте
$IPTABLES -t nat -A POSTROUTING -o $INET_IFACE -j SNAT --to-source $INET_IP

archont ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.