Тема подобная здесь уже была, но мне не всё ясно. С iptables опыта не имел вообще, посему страшновато.

http://www.opennet.ru/docs/RUS/iptables/ читал и продолжаю.

Вот вывод nmap

Starting Nmap 5.00 ( http://nmap.org ) at 2012-08-16 17:18 MSK
Interesting ports on 192.168.1.15:
Not shown: 988 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
53/tcp   open  domain
80/tcp   open  http
110/tcp  open  pop3
111/tcp  open  rpcbind
139/tcp  open  netbios-ssn
143/tcp  open  imap
445/tcp  open  microsoft-ds
901/tcp  open  samba-swat
993/tcp  open  imaps
1723/tcp open  pptp
2049/tcp open  nfs

Хочу оставить открытими только несколько портов. Сделать надо по принципу "запрещено всё кроме явно указанного"

-A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
-A INPUT -i eth0 -p tcp --dport 901 -j ACCEPT
-A INPUT -i -j DROP

Вот так мне сказали должно работать, но я не пойму, если команды исполняются последовательно, то не получится ли, что я сначала открою 22 порт, а потом сразу закрою? Доступ по ssh и потерять его совсем не в тему ab

Спасибо, Вы очень любезны.

2 (16.08.2012 17:42:44 отредактировано marikk)

создавайте файл с правилами и делайте следующее

# iptables-restore < /путь к файлу 

или же записывайте все правила в скрипт, после чего выполнить его

Это знаю. Запись сама верна? Порты не закроются все и сразу?

Спасибо, Вы очень любезны.

4

Сергей В. пишет:

Хочу оставить открытими только несколько портов. Сделать надо по принципу "запрещено всё кроме явно указанного"

Сначала пиши политики, потом правила.
Вот простейший вариант, с одним открытым ssh портом.

# Чистим
iptables -F
iptables -F -t nat
iptables -F -t mangle
iptables -X
iptables -t nat -X
iptables -t mangle -X
# Политики по-умолчанию в DROP
iptables -P INPUT   DROP
iptables -P OUTPUT  DROP
iptables -P FORWARD DROP
# Estabilished, Related
iptables -A INPUT   -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
# Разрешения
iptables -A INPUT   -i eth0 -p tcp -m tcp --dport 22 -j ACCEPT
iptables -A OUTPUT  -o eth0 -p tcp -m tcp --sport 22 -j ACCEPT

ы. ssh лучше убирать с 22-го порта, и делать вход только по ключу.
ыы. Если это удаленный сервер, на время отладки добавь в крон, через хотя бы час:

# Чистим
iptables -F
iptables -F -t nat
iptables -F -t mangle
iptables -X
iptables -t nat -X
iptables -t mangle -X
# Политики по-умолчанию в ACCEPT
iptables -P INPUT   ACCEPT
iptables -P OUTPUT  ACCEPT
iptables -P FORWARD ACCEPT

Чтобы если вдруг сам себе все закроешь, по крону само все открылось. bx

История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

5 (17.08.2012 20:44:37 отредактировано Cruiser78)

newzenon пишет:

1 ssh лучше убирать с 22-го порта, и делать вход только по ключу.
2 Если это удаленный сервер, на время отладки добавь в крон, через хотя бы час:

Совет почти правльный. но. Не самый "безопасный". При потере секретного ключа как войти в систему? Или как войти в систему, если у тебя ключа нет, а войти надо? Поэтому лучше так:
1. Запретить вход ремутным рутом. Вход только бесправным юзером, потом su.
2. Достаточно длинное имя юзера и надежный пароль. надежный - это значит, что использовать оба регистра, спецсимволы и цифры в пароле. И пароль должен быть длиной не менее 6-8 символов. Но без излишнего фанатизьму. Больше 8 - смысла особого нет. Желательно, чтобы этот пароль был для тебя значимым (запомнить легче).
3. Таймаут после ввода имени и пароля. До следующей попытки ввода пароля.
4. Пароль пишем на бумажку, бумажку в конверт запечатываем и в "сейф".
5. Настаиваем беспарольный, по ключу, доступ. Но! Возможность входа по паролю не отключаем. Это запасной ход. Он может пригодиться в самый неожиданный момент.
6. Настаиваем fail2ban (или в iptables ставим счетчики) на ssh-доступ.
7. И вот только после этого можно и 22-й порт перенести. Это даст только один эффект. В логах не будет большого количества записей о попытках брутфорса. Больше от этой операции, от переноса, нет никакого проку.

И по  втрому пункту. Если не делать мой п.7, то можно вполне нормально настраивать ssh и iptables (правила которого начинаются с пропуска трафика в установленных соединениях) на живой системе и тестировать результаты из второго терминала. Главное - из первого не выходить, ssh-сессию установленную не прерывать. Ну и перенос 22-го порта лучше делать на уровне PREROUTING в iptables. И оставить себе, со своего IP, вход на 22-й стандартный порт, а со всех остальных адресов - только через новый, дополнительный, а 22-й режектить для них. Тогда и крона можно не задействовать.

6

ТС если это ремутный сервер, то будьте внимательни.

riso пишет:

настройка фаервола на удаленном сервере, к дальней дороге (с) ab

Просмотр загруженности интернет канала

Trouble  in WINDOWS reboot, trouble in UNIX be root.

Сервер в Германии  ag А местный саппорт не самый дружелюбный..

Спасибо, Вы очень любезны.

Вопрос 2.
Как сделать чтобы порты по факту оставались открытыми, но на сканере не были видны?
Здесь есть такая тема Как закрыть свой сервер от nmap? но не всё понятно. Хочется с комментарияими. Опеннет эту тему не раскрывает, просто рассказывает что ест такой модуль state.

Спасибо, Вы очень любезны.

9 (20.08.2012 10:28:38 отредактировано Сергей В.)

Вообщем надо чтоб nmap был как у гугла.

Starting Nmap 5.21 ( http://nmap.org ) at 2012-08-20 10:22 MSK
Nmap scan report for google.com (74.125.232.2)
Host is up (0.00098s latency).
Hostname google.com resolves to 11 IPs. Only scanned 74.125.232.2
Not shown: 997 filtered ports
PORT     STATE SERVICE
80/tcp   open  http
443/tcp  open  https
8080/tcp open  http-proxy

Но некоторые порты нужны, но не нужно чтобы их было видно сканером.

Это и есть основная задача.

Спасибо, Вы очень любезны.

Я отложил был это дело, подскажите пожалуйста, в каком формате надо писать в файл? У меня выскакивает ошибка.
Я ведь правильно всё понял? Пишу в файл, потом # iptables-restore < /путь к файлу  и должно работать?

Спасибо, Вы очень любезны.

11

посмотрите в каком формате выгружает iptables-save, дальше делаем по аналогии.

It is good day to die ...
MS Windows 10
Заметки о главном...
iptables -S
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT DROP
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --sport 80 -j ACCEPT

И интернет НЕ работает.

Спасибо, Вы очень любезны.

13

Сергей В. пишет:

И интернет НЕ работает.

Вы разрешили только подключения извне к своему компьютеру на 80 порт и наружу только с этого же порта.
...ну и соединения уже установленные и связанные с ними.

Был, был и весь вышел...
Lupo Alberto пишет:
Сергей В. пишет:

И интернет НЕ работает.

Вы разрешили только подключения извне к своему компьютеру на 80 порт и наружу только с этого же порта.
...ну и соединения уже установленные и связанные с ними.

Так для работы http не это ли нужно?

Спасибо, Вы очень любезны.

15

Сергей В. пишет:

Так для работы http не это ли нужно?

Сергей В. пишет:

И интернет НЕ работает.

Я вас не правильно понял.

Был, был и весь вышел...

16 (12.09.2012 12:15:31 отредактировано Сергей В.)

Но почему не работает????

Никак не получается.. хочу закрыть ВСЁ кроме. (пока с 80 на лок. машине тренируюсь, но надо будет на удалённом сервере потом) Но получается что закрываю, а разрешающие политики не работают...

Спасибо, Вы очень любезны.

17

читай и вникай: http://www.cyberciti.biz/tips/linux-ipt … rvice.html

It is good day to die ...
MS Windows 10
Заметки о главном...

Я что, НЕдоразрешил что-ли?

Спасибо, Вы очень любезны.

19

Вот тема в которой много мелких вопросов подробно обсуждено.

История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

Хочется наипростейшее решение.

Спасибо, Вы очень любезны.
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT

Вот наконец-то рабочий вариант. Но хочется чтобы  OUTPUT тоже была в DROP, а там уже не работает.  ac

Спасибо, Вы очень любезны.

22

Примерно должно быть так, FORWARD весь убран, у тебя же не шлюз.
скрипт

IPT="/sbin/iptables"
EXT="ppp0"             # - сетевой интерфейс подключен к интернету
SSHPORT=22
# Чистка всех правил
CHAINS=`cat /proc/net/ip_tables_names 2>/dev/null`
for i in $CHAINS
do
    $IPT -t $i -F;
done

for i in $CHAINS
do
    $IPT -t $i -X;
done

$IPT -P INPUT   DROP
$IPT -P OUTPUT  DROP
$IPT -A INPUT   -m state --state       INVALID -j DROP
$IPT -A INPUT   -m conntrack --ctstate INVALID -j DROP
$IPT -A INPUT   --fragment -p icmp -j DROP
$IPT -A OUTPUT  --fragment -p icmp -j DROP
# SYN наводнение (связывание сист. ресурсов)
$IPT -A INPUT   -p tcp ! --syn -m state --state NEW -j DROP
$IPT -A OUTPUT  -p tcp ! --syn -m state --state NEW -j DROP
# Если интерфейс не lo, то запрещаем входить в список его адресов.
$IPT -A INPUT -s 127.0.0.1/255.0.0.0 ! -i lo -j DROP
$IPT -A INPUT \! -i lo -s 127.0.0.0/8 -j DROP
$IPT -A INPUT   -m state --state ESTABLISHED,RELATED -j ACCEPT
$IPT -A OUTPUT  -m state --state ESTABLISHED,RELATED -j ACCEPT
# Разрешаем локальный траффик для loopback
$IPT -A INPUT   -i lo   -j ACCEPT
$IPT -A OUTPUT  -o lo   -j ACCEPT
# Разрешаем  ICMP соединение. Значительная часть ICMP используется для передачи сообщений о
# том, что происходит с тем или иным UDP или TCP соединением.
$IPT -A INPUT  -i $EXT -p icmp -m icmp --icmp-type source-quench -j ACCEPT
$IPT -A OUTPUT -o $EXT -p icmp -m icmp --icmp-type source-quench -j ACCEPT
# Разрешаем ping снаружи
$IPT -A INPUT  -i $EXT -p icmp -m icmp --icmp-type echo-request  -j ACCEPT
$IPT -A OUTPUT -o $EXT -p icmp -m icmp --icmp-type echo-reply    -j ACCEPT
# Разрешаем ping самому серверу
$IPT -A OUTPUT -o $EXT -p icmp -m icmp --icmp-type echo-request  -j ACCEPT
$IPT -A INPUT  -i $EXT -p icmp -m icmp --icmp-type parameter-problem -j ACCEPT
$IPT -A OUTPUT -o $EXT -p icmp -m icmp --icmp-type parameter-problem -j ACCEPT

# SSH наружу
$IPT -A INPUT   -i $EXT -p tcp -m tcp --dport $SSHPORT -j ACCEPT
$IPT -A OUTPUT  -o $EXT -p tcp -m tcp --sport $SSHPORT -j ACCEPT

# FTP наружу
$IPT -A INPUT   -i $EXT -p tcp -m tcp --dport 21 -j ACCEPT
$IPT -A OUTPUT  -o $EXT -p tcp -m tcp --sport 21 -j ACCEPT

# 443  наружу
$IPT -A INPUT   -i $EXT -p tcp -m tcp --dport  443 -j ACCEPT
$IPT -A OUTPUT  -o $EXT -p tcp -m tcp --sport  443 -j ACCEPT

# DNS
$IPT -A INPUT -m state --state NEW -p tcp -m tcp --dport 53 -j ACCEPT
$IPT -A INPUT -m state --state NEW -p udp -m udp --dport 53 -j ACCEPT
История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

Но в этом случае nmap покажет открытые 21 443 53 порты. Верно ведь?

Спасибо, Вы очень любезны.

24

Сергей В. пишет:

Верно ведь?

Верно. Посмотри тут.

История показывает, что во всем новом обычно кроется какой-то подвох.
Классическая ошибка, которую совершают проектировщики
абсолютно надежных систем, - недооценка изобретательности клинических идиотов.

25 (26.09.2012 15:33:07 отредактировано Сергей В.)

IPT="/sbin/iptables"

а можно пояснить смысл этой записи?

Почему нельзя напрямую? без $IPT

Спасибо, Вы очень любезны.

26

Сергей В. пишет:

Почему нельзя напрямую? без $IPT

так кошерней, и в некоторых случая проще использовать переменную, нежели целую запись.

It is good day to die ...
MS Windows 10
Заметки о главном...

27

Сергей В. пишет:

а можно пояснить смысл этой записи?

Почему нельзя напрямую? без $IPT

Чтобы можно было использовать готовый скрипт на системах, где путь к iptables может отличаться от исходной. Достаточно будет изменить переменную.

Был, был и весь вышел...

28

Сергей В. пишет:

Почему нельзя напрямую? без $IPT

Что бы было удобнее. В данном случаи короче писать. А вообще интерефейсы лучше загонять в переменные, как сделано и тут. Для чего? А вдруг вы пересели с ppp на eth? Для того что бы поменять все строчки нужно усилия, а так всего одно значение переменной.

MX 23.6 Libretto x86_64
Чем больше я работаю админом, тем больше понимаю, насколько волшебна фраза - "Нет технической возможности!"

29

Сергей В. пишет:

Почему нельзя напрямую? без $IPT

потому-что в разных ОС iptables может быть в разных местах.
я так вообще пишу

# find `echo $PATH | sed 's/:/ /g'` -name "iptables" | head -1
/usr/sbin/iptables
Карусель разнесло по цепочке за час
Всех известий — конец
Да, весна началась!
(всё к лицу подлецу, как родному отцу, не рассказывай, батя, и так всё пройдёт)

30

drBatty пишет:

я так вообще пишу

...не?

which iptables
Был, был и весь вышел...