LINUX.ORG.RU
решено ФорумAdmin

iptables, вопрос новичка

 


2

2

Обновлено: подвожу итог. Выполнив команду sudo iptables, мы увидим названия наших сетевых интерфейсов (например wlan0 - локалка, ppp0 - интернет).

  1. Вы имеете IP-адрес по типу «192.168.x.x».
    Беспокоиться не о чем - вы за NAT-ом. Разве что прошивку роутера обновляйте иногда.
  2. Вы имеете «белый IP», а sudo iptables -L выдаёт это:
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
               
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination         
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination
    

    Чтобы ваш комп не поимели, выполните это:

    sudo iptables -A INPUT -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT
    sudo iptables -A INPUT -i ppp0 -j DROP
    
  3. То же самое, но необходимо открыть порты для SSH, сервера CS:GO, торрентов, DC++ и клиента Bitcoin.
    Показываю только на примере DC++:
    sudo iptables -A INPUT -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT
    sudo iptables -A INPUT -i ppp0 -p tcp --dport 2000 -j ACCEPT
    sudo iptables -A INPUT -i ppp0 -p udp --dport 2001 -j ACCEPT
    sudo iptables -A INPUT -i ppp0 -j DROP
    

    В случае с SSH, почитайте в интернете как сменить порт по умолчанию, использовать файл ключа вместо пароля, запретить удалённый root, а также задействовать knockd.

  4. Вы имеете «белый IP» и раздаёте интернет по Wi-Fi в режиме точки доступа.
    Команды выше необходимо продублировать для цепочки FORWARD. Итоговый вариант:
    poff dsl-provider
    ifconfig wlan0 down
    /etc/init.d/dnsmasq stop
    iptables -F
    iptables -t nat -F
    
    ifconfig wlan0 up
    ifconfig wlan0 192.168.150.1
    /etc/init.d/dnsmasq start
    sysctl net.ipv4.ip_forward=1
    iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE
    iptables -A INPUT -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A FORWARD -i ppp0 -m state --state ESTABLISHED,RELATED -j ACCEPT
    iptables -A INPUT -i ppp0 -p tcp --dport 2000 -j ACCEPT
    iptables -A INPUT -i ppp0 -p udp --dport 2001 -j ACCEPT
    iptables -A INPUT -i ppp0 -j DROP
    iptables -A FORWARD -i ppp0 -j DROP
    pon dsl-provider
    hostapd /etc/hostapd.conf
    

    Естественно, sudo перед каждой командой (если не root и не su). Спасибо anc за помощь!

  5. И ещё одна команда. На роутерах можно настроить NAT и пробросить порты на 192.168.1.2 для всё тех же торрентов и CS:GO. Можно ли пробросить в нашем случае?
    iptables -A INPUT -i ppp0 -p tcp --dport 17011 -j ACCEPT
    
    iptables -A PREROUTING -t nat -i ppp0 -p tcp --dport 17011 -j DNAT --to [IP ноутбука]:17011
    iptables -A INPUT -p tcp -m state --state NEW --dport 17011 -i ppp0 -j ACCEPT
    

    Как сделать uPNP даже не спрашивайте! За совет спасибо Prius!

    ==============================================================

    Всем привет! Меняю Opensuse на CentOS на домашнем сервачке, неожиданно выяснилось что правила iptables пустые! У меня комп голой задницей смотрит в интернет. :-(

    Конфиг: eth0 - нет айпи. dsl0 - PPPoE через eth0. Белый IP. wlan0 - раздача интернета, IP: 192.168.150.1.

    Раздачу делал по этому руководству:

    ifconfig wlan0 down
    ifconfig wlan0 up
    ifconfig wlan0 192.168.150.1
    /etc/init.d/dnsmasq start
    sysctl net.ipv4.ip_forward=1
    iptables -t nat -A POSTROUTING -o dsl0 -j MASQUERADE
    hostapd /etc/hostapd.conf
    

    Вопрос 1: как с помощью iptables, dsl0 - закрыть все порты (кроме парочки), на wlan0 - разрешить всё? Я понимаю что это прекрасно гуглится, но я всё равно не могу разобраться. Вот так правильно? iptables -i dsl0 -P INPUT DROP А как делать исключения, например открыть порт для DC++?

    Вопрос 2: SSH. Как сделать так, чтобы через него не поимели? Поделитесь советами! (SSH это одна из причин смены дистра: пока он поддерживался, на SSH периодически приходили обновления).

    Вопрос 3: никогда не работал с SElinux, какие могут быть подводные камни?

Центос какой версии? Руководство у вас через одно место, ifconfig устарел, нужно использовать ip. Но ip-адреса на интерфейсы нужно назначать через файлы конфигурации или network manager.

Правило iptables, которое задаёт политику не нуждается в указании интрефейса. Если у вас будет политика DROP, то тогда все правила с ACCEPT и будут исключениями. Какой порт открыть для DC++ я не знаю.

Если вам вобще не нужен ssh снаружи, дак просто закройте его. А так, повесить ssh на нестандартный порт, прикрыть его knockd.

Подводных камней с SeLinux много. Нужно помнить про контексты файлов, если, допустим вместо редактирования конфига мы его удалили (файл из rpm-пакета) и создали новый, то его контекст будет другим, и демон может не иметь прав читать этот конфиг. Ещё, если демону нужно будет работать на нестандартном порту, то ему нужно разрешить этот порт через semanage. Ну и всякие другие ситуации, когда мы пытаемся сконфигурировать что-то не так, как того хотели разработчики политики.

mky ★★★★★ ()

Какой версии CentOS? Насколько я помню в 6-м как раз по дефолту закрыто все кроме ssh

Belen ★★ ()

Из важного, прохождение цепочек. Вот тут и картинка есть http://www.opennet.ru/docs/RUS/iptables/#TRAVERSINGOFTABLES
По простому, для локальных это цепочка INPUT и OUTPUT, для транзитных FORWARD.
В цепочке правила проходят последовательно пока не будет найдено совпадение в условии и выполнено действие ACCEPT, REJECT и т.п.
Пример разрешить входящие ssh все остальное запретить.
iptables -A INPUT -i dsl0 -p tcp --dport 22 -j ACCEPT
iptables -A INPUT -i dsl0 -j DROP

-P INPUT

Про политики по умолчанию вам уже написали. Они не имеют никаких условий как правила, действие указанное в политике будет применено после прохождения всех правил в цепочке т.е. не было найдено правило с подходящим условием и действием. Для примера указанного выше если было указано iptables -P INPUT -j DROP то второе правило было бы не нужно. Есть подводный камень, в случае если политика по умолчанию запрещающая и вы очистили правила, то для случая удаленной настройки вы не сможете больше ничего сделать т.к. запретите доступ.

anc ★★★★★ ()
Последнее исправление: anc (всего исправлений: 1)
Ответ на: комментарий от te111011010

Это же известный местный дурачок. Ну чего ты, серьёзно что ли спрашиваешь? Тогда я серьёзно отвечу, что количество звёзд как правило обратно пропорционально адекватности и не говорит в пользу чего бы то ни было.

anonymous ()
Ответ на: комментарий от anc

Спасибо! Сделал iptables -A INPUT -i dsl0 -j DROP, теперь нет ощущения, что боты сканеры сетей поломают в любую секунду. Теперь нужно сваять конфиг SSH, как советует mky, это я уже сам :-)

ZenitharChampion ★★★★★ ()

Ещё такой вопрос. Если я воткну вторую сетевую карту eth1, на неё тоже будет раздаваться интернет с dsl0? MASQUERADE, он для всех, или нужно явно указывать?

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

Вроде можно одно правило для всех, или по отдельности - как тебе нравится.

anonymous ()

Не получилось

После выполнения команды iptables -A INPUT -i dsl0 -j DROP, интернет перестаёт раздаваться. Сделал iptables -F и поменял порядок команды раздачи интернета (вот этой: iptables -t nat -A POSTROUTING -o dsl0 -j MASQUERADE) с командой закрытия портов. То же самое. Пока вернул как было.

ZenitharChampion ★★★★★ ()
Последнее исправление: ZenitharChampion (всего исправлений: 1)
Ответ на: комментарий от ZenitharChampion

Ну таким образов вы закрыли вообще все, т.е. инет работать у вас не будет. Рекомендую перед ним добавить правило -A INPUT -i dsl0 -m state --state ESTABLISHED,RELATED -j ACCEPT.
Да и т.к. я понял через него инет раздается, то все тоже самое с цепочкой FORWARD сделать

anc ★★★★★ ()

всё равно не могу разобраться

shorewall

anonymous ()
Ответ на: комментарий от anc
ifconfig wlan0 down
/etc/init.d/dnsmasq stop
iptables -F
ifconfig wlan0 up
ifconfig wlan0 192.168.150.1
/etc/init.d/dnsmasq start
sysctl net.ipv4.ip_forward=1
iptables -t nat -A POSTROUTING -o dsl0 -j MASQUERADE // раздача
iptables -A INPUT -i dsl0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i dsl0 -m state --state ESTABLISHED,RELATED -j ACCEPT // не знаю что
iptables -A INPUT -i dsl0 -p tcp --dport 2000 -j ACCEPT
iptables -A INPUT -i dsl0 -p udp --dport 2001 -j ACCEPT // открывание одного порта для DC++
iptables -A INPUT -i dsl0 -j DROP // закрывание остальных
hostapd /etc/hostapd.conf

Так?

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

И такой вопрос. Можно ли применять правила iptables к dsl0 до того, как соединение с интернетом будет установлено? Чисто для безопасности.

ZenitharChampion ★★★★★ ()

А я-то думал, что я — Неуловимый Джо! Вот что мне выдало после перезагрузки!

Последняя неудачная попытка войти в систему: Вс. февр 7 11:11:51 NOVT 2016c 212-129-16-72.rev.poneytelecom.euна ssh:notty
Число неудачных попыток со времени последнего входа: 10

SSH у меня был голой жопой в сеть - каких-то часа 2.

ZenitharChampion ★★★★★ ()
Последнее исправление: ZenitharChampion (всего исправлений: 1)
Ответ на: комментарий от ZenitharChampion

Да, почти все верно, но если через эту машину инет раздаешь то еще добавь вконце

iptables -A FORWARD -i dsl0 -j DROP

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

И такой вопрос. Можно ли применять правила iptables к dsl0 до того, как соединение с интернетом будет установлено? Чисто для безопасности.

Можно. Название интерфейса при добавлении правил никак не проверяется.

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

Надо было пароль ставить типа такого: 123. Интереснее было бы :)

anc ★★★★★ ()

Пункт 5. Какой-то бредовый. Чего в результате хотели достигнуть?

anc ★★★★★ ()

Выполнив команду sudo iptables, мы увидим названия наших сетевых интерфейсов

Круто, чо

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