Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС для молодых и начинающих системных администраторов.
1) Начал с того что создал файл demo по пути /usr/local/iptables-restore/
2) Дописал в файл /etc/rc.d/rc.local echo "1" > /proc/sys/net/ipv4/ip_forward
/sbin/iptables-restore /usr/local/iptables-restore/demo
3) После краткого курса прохождения обучения iptables создал для него конфиг (который demo)
eth0 - сетевушка смотрящая в интернет, eth1 - сетевушка смотрящая в локальную сеть, ppp0 - PPPoE подключение к интернету
# Generated by iptaues-save v1.3.3 on Wed May 24 19:07:19 2006
*mangle
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:outtos - [0:0]
:pretos - [0:0]
-A PREROUTING -j pretos
-A OUTPUT -j outtos
-A outtos -p tcp -m tcp --dport 22 -j TOS --set-tos 0x10
-A outtos -p tcp -m tcp --sport 22 -j TOS --set-tos 0x10
-A outtos -p tcp -m tcp --dport 21 -j TOS --set-tos 0x10
-A outtos -p tcp -m tcp --sport 21 -j TOS --set-tos 0x10
-A outtos -p tcp -m tcp --sport 20 -j TOS --set-tos 0x08
-A outtos -p tcp -m tcp --dport 20 -j TOS --set-tos 0x08
-A pretos -p tcp -m tcp --dport 22 -j TOS --set-tos 0x10
-A pretos -p tcp -m tcp --sport 22 -j TOS --set-tos 0x10
-A pretos -p tcp -m tcp --dport 21 -j TOS --set-tos 0x10
-A pretos -p tcp -m tcp --sport 21 -j TOS --set-tos 0x10
-A pretos -p tcp -m tcp --sport 20 -j TOS --set-tos 0x08
-A pretos -p tcp -m tcp --dport 20 -j TOS --set-tos 0x08
COMMIT
# Generated by iptables-save v1.2.7a on Sat Apr 26 13:03:17 2003
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -o ppp0 -j MASQUERADE
COMMIT
# Completed on Sat Apr 26 13:03:17 2003
# Generated by iptables-save v1.2.7a on Sat Apr 26 13:03:17 2003
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i ppp0 -p tcp -m multiport --dports 21,139,80,25,3389,4899,22 -j ACCEPT
-A INPUT -i ppp0 -p udp -m multiport --dports 27015,27016,27017,27018,27019 -j ACCEPT
-A INPUT -i ppp0 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j LOG --log-level 7 --log-tcp-options
-A INPUT -i ppp0 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -s 168.192.0.0/24 -i eth1 -j ACCEPT
-A FORWARD -d 168.192.0.0/24 -o eth1 -j ACCEPT
-A FORWARD -s 168.192.0.0/24 -p udp -m udp --dport 53 -i eth1 -j ACCEPT
-A FORWARD -d 168.192.0.0/24 -p udp -m udp --sport 53 -o eth1 -j ACCEPT
-A FORWARD -o ppp0 -p tcp -j DROP
-A FORWARD -o eth1 -p tcp -j DROP
COMMIT
# Completed on Sat Apr 26 13:03:17 2003
Хочу добиться!!! ->
1) Закрыть все порты UDP & TCP, оставить лишь те которые мне нужны (т.е настроить Firewall)
2) Подключить NAT на определенные IP адреса, а конкретно 192.168.0.222, 192.168.0.127, 192.168.0.3
3) Настроить перенаправление портов из внешки на локальные ip адреса
Кто может объясните что я в коде прописал неправильно и дайте команды на решение того чего я хочу добиться) Заранее спасибо
#!/bin/sh
IP_LAN="192.168.0.1" #адрес в локальной сети
IP_EXT="192.168.1.1" #адрес во внешней сети
IF_LAN="eth0" # интерфейс в локальной сети
IF_EXT="eth1" # интерфейс во внешней сети
IPT="/usr/sbin/iptables" # Путь к iptables
HTTP_SERV="192.168.0.10" # IP внутреннего HTTP сервера
# включаем маршрутизацию в ядре
echo "1" > /proc/sys/net/ipv4/ip_forward
#сбрасываем все правила и уничтожаем нестандартные таблицы
$IPT --flush
$IPT -t nat --flush
$IPT -t mangle --flush
$IPT -X
# Назначаем политики по умолчания
$IPT -P INPUT DROP
#$IPT -P OUTPUT DROP
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD DROP
# Разрешаем интерфейс обратной петли
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
#Открываем порты на сервер
$IPT -A INPUT -i $IF_LAN -p tcp --dport 22 -j ACCEPT # SSH-доступ с любой машины из LAN
#Включаем NAT для конкретных адресов (здесь конечно лучше вставить цикл, но для простоты оставим так)
$IPT -t nat -A POSTROUTING -s 192.168.0.222 -o $IF_EXT -j MASQUERADE
$IPT -t nat -A POSTROUTING -s 192.168.0.127 -o $IF_EXT -j MASQUERADE
$IPT -t nat -A POSTROUTING -s 192.168.0.3 -o $IF_EXT -j MASQUERADE
#Не забываем, что для проброса портов на локальный HTTP, ему тоже нужен NAT
$IPT -t nat -A POSTROUTING -s $HTTP_SERV -o $IF_EXT -j MASQUERADE
#Настраиваем перенаправление портов
$IPT -t nat -A PREROUTING -i $IF_EXT -p tcp --dport 80 -j DNAT --to-destination $HTTP_SERV
1) Начал с того что создал файл demo по пути /usr/local/iptables-restore/
2) Дописал в файл /etc/rc.d/rc.local echo "1" > /proc/sys/net/ipv4/ip_forward
/sbin/iptables-restore /usr/local/iptables-restore/demo
3) После краткого курса прохождения обучения iptables создал для него конфиг (который demo)
Рекомендую начать с азов, и выкинуть все, касательно TOS и mangle (он вам не нужен, насколько я понял по вашему вопросу).
В простейшем случае, получится наподобие:
Код:
# Generated by iptables-save v1.2.7a on Sat Apr 26 13:03:17 2003
*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A POSTROUTING -o ppp0 -j MASQUERADE
COMMIT
# Generated by iptables-save v1.2.7a on Sat Apr 26 13:03:17 2003
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp --icmp-type echo-reply -j ACCEPT
-A INPUT -p icmp --icmp-type destination-unreachable -j ACCEPT
-A INPUT -p icmp --icmp-type echo-request -j ACCEPT
-A INPUT -p icmp --icmp-type time-exceeded -j ACCEPT
-A INPUT -p tcp -m tcp --tcp-flags SYN,ACK SYN,ACK -j REJECT --reject-with icmp-port-unreachable
-A INPUT -p tcp ! --syn -m state --state NEW -j DROP
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# здесь открываем порты
# непонятно, зачем вам открывать порты 21,139 и т.д. на динамическом ppp0 интерфейсе
multiport --dports 21,139,80,25,3389,4899,22 -j ACCEPT
-A INPUT -i ppp0 -m state --state NEW -p udp -m multiport --dports 27015,27016,27017,27018,27019 -j ACCEPT
-A INPUT -i ppp0 -p tcp -m tcp --tcp-flags FIN,SYN,ACK SYN -j LOG --log-level 7 --log-tcp-options
-A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
-A FORWARD -s 168.192.0.0/24 -i eth1 -j ACCEPT
-A FORWARD -d 168.192.0.0/24 -o eth1 -j ACCEPT
COMMIT
# Completed on Sat Apr 26 13:03:17 2003
Если нужен проброс портов в локалку, смотрите DNAT и не забудьте добавить для него правило в форвард.
sdukshis выложил листинг bash-скрипта. Сохраните этот листинг в файл, дайте ему права на выполнение и запустите.
А если изменения внести, нужно снова файл изменять и запускать?
Вносите изменения в скрипт, какие нужно.
Потом в терминале пишете: iptables -F (это удалит все имеющиеся правила iptables).
Запускаете ваш измененный скрипт, с новыми правилами.
А вообще, если у вас CentOS, то проще будет воспользоваться фирменным средством RedHat-семейства: /etc/sysconfig/iptables (если такого файла нет, создайте). Внесите туда список правил, которые считаете нужным, например по образцу в моем посте [3].
После этого нужно будет включить iptables через chkconfig (чтобы эти правила загружались автоматически при загрузке системы).
Для изменения правил iptables просто редактируете этот файл и перегружаете iptables ( /etc/init.d/iptables restart в терминале ).
Вообще, IPTables Tutorial от Андреассона и документация с сайта RedHat - достаточный минимум (в первом теория, во втором - особенности реализации, если так можно выразиться).
sdukshis выложил листинг bash-скрипта. Сохраните этот листинг в файл, дайте ему права на выполнение и запустите.
А если изменения внести, нужно снова файл изменять и запускать?
Да, конечно нужно, причём этот скрипт нужно запускать каждый раз при загрузке системы.
Что-бы автоматизировать процесс сначала выполните iptables-save.
На выходе получите Листинг примерно как у Вас. Что с ним делать дальше вы кажется уже разобрались.
Только не забудьте разрешить маршрутизацию установив в /etc/sysctl.conf
sys.net.ipv4.ip_forward=1
Для вашей конфигурации сети измените
IF_LAN = eth1
IF_EXT=ppp0
#!/bin/sh
IP_LAN="192.168.0.188" #адрес в локальной сети
IP_EXT="192.168.1.188" #адрес во внешней сети
IF_LAN="eth1" # интерфейс в локальной сети
IF_EXT="ppp0" # интерфейс во внешней сети
IPT="iptables" # Путь к iptables
HTTP_SERV="192.168.0.222" # IP внутреннего HTTP сервера
# включаем маршрутизацию в ядре
echo "1" > /proc/sys/net/ipv4/ip_forward
#сбрасываем все правила и уничтожаем нестандартные таблицы
$IPT --flush
$IPT -t nat --flush
$IPT -t mangle --flush
$IPT -X
# Назначаем политики по умолчания
$IPT -P INPUT DROP
#$IPT -P OUTPUT DROP
$IPT -P OUTPUT ACCEPT
$IPT -P FORWARD DROP
# Разрешаем интерфейс обратной петли
$IPT -A INPUT -i lo -j ACCEPT
$IPT -A OUTPUT -o lo -j ACCEPT
#Открываем порты на сервер
$IPT -A INPUT -i $IF_EXT -p tcp -m multiport --dports 22,25,3389,4899 -j ACCEPT # Открываю порты разрешенные из внешки
$IPT -A INPUT -i $IP_LAN -p tcp -m multiport --dports 22,25,3389,4899 -j ACCEPT # Открываю порты разрешенные из Локалки
#Включаем NAT для конкретных адресов (здесь конечно лучше вставить цикл, но для простоты оставим так)
$IPT -t nat -A POSTROUTING -s 192.168.0.127 -o $IF_EXT -j MASQUERADE
$IPT -t nat -A POSTROUTING -s 192.168.0.3 -o $IF_EXT -j MASQUERADE
#Не забываем, что для проброса портов на локальный HTTP, ему тоже нужен NAT
$IPT -t nat -A POSTROUTING -s $HTTP_SERV -o $IF_EXT -j MASQUERADE
#Настраиваем перенаправление портов
$IPT -t nat -A PREROUTING -i $IF_EXT -p tcp -m multiport --dport 80,3389,4899 -j DNAT --to-destination $HTTP_SERV
iptables-save
Вроде должен работатЬ?
1) IPT="/usr/sbin/iptables" # Путь к iptables (Iptables нету по этому пути)
2)Разрешил маршрутизацию установив в /etc/sysctl.conf
sys.net.ipv4.ip_forward=1
3) А как собственно запускать подобного рода скрипт? через что? какой командой, я в линуксе 3 день)
[offtop]
Блин, как бы уже не первая такая тема, "Я в линуксе n-ый день (n < 15)"
Всё таки я выскажусь. Вы (это не только к Вам относится) хотя бы почитайте мануалы, пару дней чтобы понимать, что и как работает в данном случае и для того, чтобы сформулировать вопрос грамотно.
Вот если бы вы хотя бы осилили ссылку которую дал BigKAA, уже бы другие вопросы были.
Вы третий день в линуксе, уже лезетее настраивать iptables прочитав какое-то краткое руководство. Углубитесь в тему...
[offtop]
$IPTABLES -A allowed -p TCP --syn -j ACCEPT
$IPTABLES -A allowed -p TCP -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPTABLES -A allowed -p TCP -j DROP
1)Настолько здесь нужен DROP, если политика по умолчанию DROP
2) -m state --state NEW настолько обязательно, или --syn уже само по себе достаточно?
(В tutorial -m state --state NEW практически нет, зато в других примерах iptables во всех цепочках)