Как правильно настроить iptables?

Доброе время суток.

Хочу на сервере (две сетевые карты: eth0 - интернет, eth1 - локальная сеть) настроить следующие правила:
1. Закрыть все входящие порты
2. Открыть порт 80 на eth0 для всех
3. Открыть порт 1500 на eth0 для определенного IP

4. Закрыть все входящие порты на eth1
5. Открыть порт 22 на eth1 для определенного IP

6. Открыть все исходящие порты для eth0 и eth1


На данный момент у меня вышло вот что:
# правила входящих соединений 
iptables -A INPUT -i lo -j ACCEPT 
iptables -A INPUT -i eth0 --match state --state ESTABLISHED,RELATED -j ACCEPT 
iptables -A INPUT -i eth0 -p tcp --dport 80 --match state --state NEW -j ACCEPT 
iptables -A INPUT -i eth0 --source 80.0.0.1 -p tcp --dport 1500 --match state --state NEW -j ACCEPT

iptables -A INPUT -i eth1 --match state --state ESTABLISHED,RELATED -j ACCEPT 
iptables -A INPUT -i eth0 --source 192.168.0.1 -p tcp --dport 22 --match state --state NEW -j ACCEPT


# правила исходящих соединений 
iptables -A OUTPUT -o lo -j ACCEPT 
iptables -A OUTPUT -o eth0 --match state --state NEW, ESTABLISHED, RELATED -j ACCEPT 
iptables -A OUTPUT -o eth1 --match state --state NEW, ESTABLISHED, RELATED -j ACCEPT
  • Вопрос задан
  • 4481 просмотр
Решения вопроса 1
merryjane
@merryjane
Системный администратор
Вы написали:
5. Открыть порт 22 на eth1 для определенного IP

А правило у вас для eth0:
A INPUT -i eth0 --source 192.168.0.1 -p tcp --dport 22 --match state --state NEW -j ACCEPT


Вот еще:
6. Открыть все исходящие порты для eth0 и eth1

так зачем вы добавляете какие-то дополнительные правила. Достаточно чтобы для данной цепочки не было DROP-правил и политики по умолчанию в ACCEPT:
iptables -P OUTPUT ACCEPT

Все правила разрешающие. А где правила который будут дропать трафик?
Тут два варианта: или применить политики по умолчанию для цепочек, например так:
iptables -P INPUT DROP
iptables -P FORWARD DROP

или в конец каждой цепочки добавить (именно в конец!!!):
iptables -A INPUT -j REJECT --reject-with icmp-host-prohibited
iptables -A FORWARD -j REJECT --reject-with icmp-host-prohibited


Если у вас доступ на сервер только по ssh, подготовьте скрипт, который останавливает iptables или сбрасывает их. И поставьте его в крон на каждые 10 минут например, чтобы если Вы вдруг что-то сделали не так и потеряете доступ, скрипт через ~10 минут его вам вернул.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
jidckii
@jidckii
system administrator
А из тех правил, что настроил, что не работает то ?
Ответ написан
@larrabee
#!/bin/bash
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
ip6tables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
ip6tables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT
ip6tables -P INPUT DROP
ip6tables -P FORWARD DROP
ip6tables -P OUTPUT ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -p icmp -j ACCEPT

iptables -A INPUT -i eth0 -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -i eth0 -s 8.8.8.8 -p tcp --dport 1500 -j ACCEPT
iptables -A INPUT -i eth1 -s 192.168.0.2 -p tcp --dport 80 -j ACCEPT


Нужно только выполнить этот скрипт и сохранить правила (см вики дистра)
Ответ написан
Комментировать
@baskoy
1. Собственно не совсем понятно почему ip6tables -P OUTPUT ACCEPT если приход в остальные цепочки дропается.
2. Не очень хорошо в правила закручивать параметры, нужно в начале скрипта определить переменные с __нормальными__ говорящими именами и потом уже их использовать.
3. А что у нас тут с ICMP? Тихонечко дропаем?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы