LinuxForum.Fans
Тема

Настройка iptables по ssh

Автор: u__________12 31 сообщений 12533 просмотров
#275099
text
-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, а там уже не работает. :(

#275104

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

text
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

#275115

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

#276560
text
IPT="/sbin/iptables"

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

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

#276562
"Сергей В." написал:
Почему нельзя напрямую? без $IPT

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

#276567
"Сергей В." написал:
а можно пояснить смысл этой записи?

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

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

#276568
"Сергей В." написал:
Почему нельзя напрямую? без $IPT

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

#277321
"Сергей В." написал:
Почему нельзя напрямую? без $IPT

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

text
# find `echo $PATH | sed 's/:/ /g'` -name "iptables" | head -1
/usr/sbin/iptables
#277323
"drBatty" написал:
я так вообще пишу

...не?

text

which iptables
#277376
"Lupo Alberto" написал:
...не?

можно и так. Но иногда нужно например юзать системную iptables, если есть ещё и тестовая в /usr/local/. /usr/local оно раньше идёт в $PATH, потому which покажет не то, что нужно. Короче - удобное средство для быстрого костылестроения ;)

Войдите или зарегистрируйтесь, чтобы ответить.